@@ -9,7 +9,7 @@ import type {
9
9
PaginatedResponse ,
10
10
} from 'models/operation'
11
11
12
- import { parseShortCode , shortCodeProtocol } from '../models/shortCode'
12
+ import { parseShortCode , shortCodeScheme } from '../models/shortCode'
13
13
14
14
export type OrderBy = 'views' | 'hot' | 'id'
15
15
@@ -19,6 +19,7 @@ export interface UseOperationsParams {
19
19
levelKeyword ?: string
20
20
operator ?: string
21
21
byMyself ?: boolean
22
+ suspense ?: boolean
22
23
}
23
24
24
25
export const useOperations = ( {
@@ -27,16 +28,17 @@ export const useOperations = ({
27
28
levelKeyword,
28
29
operator,
29
30
byMyself,
31
+ suspense,
30
32
} : UseOperationsParams ) => {
31
- const isIdQuery = document ?. startsWith ( shortCodeProtocol )
33
+ const isIdQuery = document ?. startsWith ( shortCodeScheme )
32
34
33
35
const {
34
36
data : listData ,
35
37
size,
36
38
setSize,
37
39
isValidating,
38
40
} = useSWRInfinite < Response < PaginatedResponse < OperationListItem > > > (
39
- ( _pageIndex , previousPageData ) => {
41
+ ( pageIndex , previousPageData ) => {
40
42
if ( isIdQuery ) {
41
43
return null
42
44
}
@@ -45,10 +47,7 @@ export const useOperations = ({
45
47
return null // reached the end
46
48
}
47
49
const searchParams = new URLSearchParams ( '?desc=true&limit=50' )
48
- searchParams . set (
49
- 'page' ,
50
- ( ( previousPageData ?. data ?. page || 0 ) + 1 ) . toString ( ) ,
51
- )
50
+ searchParams . set ( 'page' , ( pageIndex + 1 ) . toString ( ) )
52
51
searchParams . set ( 'order_by' , orderBy )
53
52
if ( document ) {
54
53
searchParams . set ( 'document' , document )
@@ -65,6 +64,10 @@ export const useOperations = ({
65
64
66
65
return `/copilot/query?${ searchParams . toString ( ) } `
67
66
} ,
67
+ {
68
+ suspense,
69
+ focusThrottleInterval : 1000 * 60 * 30 ,
70
+ } ,
68
71
)
69
72
70
73
const { data : singleData } = useSWR < Response < Operation > > (
@@ -80,11 +83,18 @@ export const useOperations = ({
80
83
81
84
useEffect ( ( ) => {
82
85
setSize ( 1 )
83
- } , [ orderBy , document , levelKeyword , operator ] )
86
+ } , [ orderBy , document , levelKeyword , operator , isIdQuery ] )
84
87
85
88
return { operations, size, setSize, isValidating, isReachingEnd }
86
89
}
87
90
88
- export const useOperation = ( id : string | undefined ) => {
89
- return useSWR < Response < Operation > > ( id ? `/copilot/get/${ id } ` : null )
91
+ export interface UseOperationParams {
92
+ id ?: Operation [ 'id' ]
93
+ suspense ?: boolean
94
+ }
95
+
96
+ export const useOperation = ( { id, suspense } : UseOperationParams ) => {
97
+ return useSWR < Response < Operation > > ( id ? `/copilot/get/${ id } ` : null , {
98
+ suspense,
99
+ } )
90
100
}
0 commit comments