Skip to content

Commit 8402e03

Browse files
committed
feat(useLoadMore): add refreshAsync
1 parent 8b7753b commit 8402e03

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

src/useLoadMore.ts

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import type { Ref } from 'vue-demi';
1+
import type { ComputedRef, Ref } from 'vue-demi';
22
import { computed, inject, ref, watch } from 'vue-demi';
33

44
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';
66
import { get, isFunction, omit } from './core/utils';
77
import useRequest from './useRequest';
88

@@ -23,11 +23,28 @@ export type LoadMoreBaseOptions<R, P extends unknown[]> = Options<R, P> &
2323
LoadMoreGenericExtendsOption<R> &
2424
LoadMoreExtendsOption;
2525

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+
2640
function useLoadMore<
2741
R,
2842
P extends unknown[] = any,
2943
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> {
3148
const injectedGlobalOptions = inject<GlobalOptions>(
3249
GLOBAL_OPTIONS_PROVIDE_KEY,
3350
{},
@@ -54,25 +71,28 @@ function useLoadMore<
5471
data,
5572
params,
5673
runAsync,
57-
refreshAsync,
5874
run,
5975
cancel: _cancel,
6076
...rest
6177
// @ts-ignore
6278
} = useRequest<R, P>(service, {
6379
...restOptions,
6480
onSuccess: (...p) => {
81+
if (refreshing.value) {
82+
dataList.value = [] as any;
83+
}
6584
loadingMore.value = false;
85+
refreshing.value = false;
86+
reloading.value = false;
6687
restOptions?.onSuccess?.(...p);
6788
},
6889
onError: (...p) => {
6990
loadingMore.value = false;
91+
refreshing.value = false;
92+
reloading.value = false;
7093
restOptions?.onError?.(...p);
7194
},
7295
onAfter: (...p) => {
73-
if (refreshing.value) {
74-
dataList.value = [] as any;
75-
}
7696
restOptions?.onAfter?.(...p);
7797
},
7898
});
@@ -103,22 +123,27 @@ function useLoadMore<
103123
run(...mergerParams);
104124
};
105125

106-
const refresh = async () => {
126+
const refreshAsync = async () => {
107127
refreshing.value = true;
108128
const [, ...restParams] = params.value;
109129
const mergerParams = [undefined, ...restParams] as any;
110130
await runAsync(...mergerParams);
111-
refreshing.value = false;
112131
};
113132

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 = () => {
115141
reloading.value = true;
116142
cancel();
117143
dataList.value = [] as any;
118144
const [, ...restParams] = params.value;
119145
const mergerParams = [undefined, ...restParams] as any;
120-
await runAsync(...mergerParams);
121-
reloading.value = false;
146+
run(...mergerParams);
122147
};
123148

124149
const cancel = () => {
@@ -140,7 +165,9 @@ function useLoadMore<
140165
loadMore,
141166
refresh,
142167
cancel,
143-
...omit(rest, ['refresh', 'mutate']),
168+
run,
169+
refreshAsync,
170+
...omit(rest, ['refresh', 'refreshAsync']),
144171
};
145172
}
146173

0 commit comments

Comments
 (0)