1
- import type { Ref } from 'vue-demi' ;
1
+ import type { ComputedRef , Ref } from 'vue-demi' ;
2
2
import { computed , inject , ref , watch } from 'vue-demi' ;
3
3
4
4
import { getGlobalOptions , GLOBAL_OPTIONS_PROVIDE_KEY } from './core/config' ;
5
- import type { GlobalOptions , Options } from './core/types' ;
5
+ import type { GlobalOptions , Options , QueryResult } from './core/types' ;
6
6
import { get , isFunction , omit } from './core/utils' ;
7
7
import useRequest from './useRequest' ;
8
8
@@ -23,11 +23,28 @@ export type LoadMoreBaseOptions<R, P extends unknown[]> = Options<R, P> &
23
23
LoadMoreGenericExtendsOption < R > &
24
24
LoadMoreExtendsOption ;
25
25
26
+ interface LoadMoreQueryResult <
27
+ R ,
28
+ P extends unknown [ ] ,
29
+ LR extends unknown [ ] = any [ ] ,
30
+ > extends QueryResult < R , P > {
31
+ dataList : Ref < LR > ;
32
+ noMore : ComputedRef < number > ;
33
+ loadingMore : Ref < boolean > ;
34
+ refreshing : Ref < boolean > ;
35
+ reloading : Ref < boolean > ;
36
+ reload : ( ) => void ;
37
+ loadMore : ( ) => void ;
38
+ }
39
+
26
40
function useLoadMore <
27
41
R ,
28
42
P extends unknown [ ] = any ,
29
43
LR extends unknown [ ] = any [ ] ,
30
- > ( service : LoadMoreService < R , P , LR > , options ?: LoadMoreBaseOptions < R , P > ) {
44
+ > (
45
+ service : LoadMoreService < R , P , LR > ,
46
+ options ?: LoadMoreBaseOptions < R , P > ,
47
+ ) : LoadMoreQueryResult < R , P > {
31
48
const injectedGlobalOptions = inject < GlobalOptions > (
32
49
GLOBAL_OPTIONS_PROVIDE_KEY ,
33
50
{ } ,
@@ -54,25 +71,28 @@ function useLoadMore<
54
71
data,
55
72
params,
56
73
runAsync,
57
- refreshAsync,
58
74
run,
59
75
cancel : _cancel ,
60
76
...rest
61
77
// @ts -ignore
62
78
} = useRequest < R , P > ( service , {
63
79
...restOptions ,
64
80
onSuccess : ( ...p ) => {
81
+ if ( refreshing . value ) {
82
+ dataList . value = [ ] as any ;
83
+ }
65
84
loadingMore . value = false ;
85
+ refreshing . value = false ;
86
+ reloading . value = false ;
66
87
restOptions ?. onSuccess ?.( ...p ) ;
67
88
} ,
68
89
onError : ( ...p ) => {
69
90
loadingMore . value = false ;
91
+ refreshing . value = false ;
92
+ reloading . value = false ;
70
93
restOptions ?. onError ?.( ...p ) ;
71
94
} ,
72
95
onAfter : ( ...p ) => {
73
- if ( refreshing . value ) {
74
- dataList . value = [ ] as any ;
75
- }
76
96
restOptions ?. onAfter ?.( ...p ) ;
77
97
} ,
78
98
} ) ;
@@ -103,22 +123,27 @@ function useLoadMore<
103
123
run ( ...mergerParams ) ;
104
124
} ;
105
125
106
- const refresh = async ( ) => {
126
+ const refreshAsync = async ( ) => {
107
127
refreshing . value = true ;
108
128
const [ , ...restParams ] = params . value ;
109
129
const mergerParams = [ undefined , ...restParams ] as any ;
110
130
await runAsync ( ...mergerParams ) ;
111
- refreshing . value = false ;
112
131
} ;
113
132
114
- const reload = async ( ) => {
133
+ const refresh = ( ) => {
134
+ refreshing . value = true ;
135
+ const [ , ...restParams ] = params . value ;
136
+ const mergerParams = [ undefined , ...restParams ] as any ;
137
+ runAsync ( ...mergerParams ) ;
138
+ } ;
139
+
140
+ const reload = ( ) => {
115
141
reloading . value = true ;
116
142
cancel ( ) ;
117
143
dataList . value = [ ] as any ;
118
144
const [ , ...restParams ] = params . value ;
119
145
const mergerParams = [ undefined , ...restParams ] as any ;
120
- await runAsync ( ...mergerParams ) ;
121
- reloading . value = false ;
146
+ run ( ...mergerParams ) ;
122
147
} ;
123
148
124
149
const cancel = ( ) => {
@@ -140,7 +165,9 @@ function useLoadMore<
140
165
loadMore,
141
166
refresh,
142
167
cancel,
143
- ...omit ( rest , [ 'refresh' , 'mutate' ] ) ,
168
+ run,
169
+ refreshAsync,
170
+ ...omit ( rest , [ 'refresh' , 'refreshAsync' ] ) ,
144
171
} ;
145
172
}
146
173
0 commit comments