Skip to content

Commit a1db8c0

Browse files
authored
Merge pull request #196 from jason89521/refactor/compositeSetStale
2 parents ea46e7a + c0cd974 commit a1db8c0

1 file changed

Lines changed: 27 additions & 34 deletions

File tree

packages/daxus/src/model/Model.ts

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -108,16 +108,32 @@ export function createModel<S extends object>(
108108
const staleTimeoutIdRecord = {} as Record<string, number>;
109109
const isStaleRecord = {} as Record<string, boolean>;
110110

111+
/**
112+
* instead of recording the whole data, we only record the pages number to save the memory usage
113+
*/
114+
const infiniteAccessorPageNumRecord = {} as Record<string, number | undefined>;
115+
111116
function assertDuplicateName(name: string) {
112117
if (objectKeys(creatorRecord).includes(name)) {
113118
throw new Error(`The creator name: ${name} has already existed!`);
114119
}
115120
}
116121

117-
/**
118-
* instead of recording the whole data, we only record the pages number to save the memory usage
119-
*/
120-
const infiniteAccessorPageNumRecord = {} as Record<string, number | undefined>;
122+
function compositeSetStale(key: string) {
123+
return function setStale(staleTime: number) {
124+
const timeoutId = staleTimeoutIdRecord[key];
125+
clearTimeout(timeoutId);
126+
// reset the stale state
127+
isStaleRecord[key] = false;
128+
if (staleTime === 0) {
129+
isStaleRecord[key] = true;
130+
} else if (staleTime > 0) {
131+
staleTimeoutIdRecord[key] = window.setTimeout(() => {
132+
isStaleRecord[key] = true;
133+
}, staleTime);
134+
}
135+
};
136+
}
121137

122138
const updateState: UpdateModelState<S> = (fn, { serverStateKey, ...ctx }) => {
123139
if (isServer()) {
@@ -203,19 +219,7 @@ export function createModel<S extends object>(
203219
onMount,
204220
onUnmount,
205221
isAuto: action.isAuto ?? false,
206-
setStaleTime(staleTime) {
207-
const timeoutId = staleTimeoutIdRecord[key];
208-
clearTimeout(timeoutId);
209-
// reset the stale state
210-
isStaleRecord[key] = false;
211-
if (staleTime === 0) {
212-
isStaleRecord[key] = true;
213-
} else if (staleTime > 0) {
214-
staleTimeoutIdRecord[key] = window.setTimeout(() => {
215-
isStaleRecord[key] = true;
216-
}, staleTime);
217-
}
218-
},
222+
setStaleTime: compositeSetStale(key),
219223
getIsStale() {
220224
return isStaleRecord[key] ?? false;
221225
},
@@ -265,6 +269,10 @@ export function createModel<S extends object>(
265269
let timeoutId: number | undefined;
266270
const main = (arg: Arg) => {
267271
const key = getKey(name, arg);
272+
const accessor = accessorRecord[key];
273+
if (accessor) {
274+
return accessor as InfiniteAccessor<S, Arg, Data, E>;
275+
}
268276

269277
const clearAccessorCache = () => {
270278
const accessor = accessorRecord[key] as InfiniteAccessor<S>;
@@ -294,19 +302,7 @@ export function createModel<S extends object>(
294302
onUnmount,
295303
initialPageNum: infiniteAccessorPageNumRecord[key] ?? 1,
296304
isAuto: action.isAuto ?? false,
297-
setStaleTime(staleTime) {
298-
const timeoutId = staleTimeoutIdRecord[key];
299-
clearTimeout(timeoutId);
300-
// reset the stale state
301-
isStaleRecord[key] = false;
302-
if (staleTime === 0) {
303-
isStaleRecord[key] = true;
304-
} else if (staleTime > 0) {
305-
staleTimeoutIdRecord[key] = window.setTimeout(() => {
306-
isStaleRecord[key] = true;
307-
}, staleTime);
308-
}
309-
},
305+
setStaleTime: compositeSetStale(key),
310306
getIsStale() {
311307
return isStaleRecord[key] ?? false;
312308
},
@@ -320,10 +316,7 @@ export function createModel<S extends object>(
320316
// Remove the clear cache timeout since the accessor is being used.
321317
window.clearTimeout(timeoutId);
322318
timeoutId = window.setTimeout(clearAccessorCache, CLEAR_ACCESSOR_CACHE_TIME);
323-
const accessor = accessorRecord[key];
324-
if (accessor) {
325-
return accessor as InfiniteAccessor<S, Arg, Data, E>;
326-
}
319+
327320
const newAccessor = new InfiniteAccessor(constructorArgs);
328321
accessorRecord[key] = newAccessor;
329322
return newAccessor;

0 commit comments

Comments
 (0)