@flowlist/js-core 4.0.7-beta.0 → 4.0.9-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-6WOZNOYJ.mjs +79 -0
- package/dist/chunk-6WOZNOYJ.mjs.map +1 -0
- package/dist/chunk-BTOUHSDU.mjs +91 -0
- package/dist/chunk-BTOUHSDU.mjs.map +1 -0
- package/dist/chunk-C4BWSFWU.mjs +74 -0
- package/dist/chunk-C4BWSFWU.mjs.map +1 -0
- package/dist/chunk-KIQOUUEZ.mjs +3 -0
- package/dist/chunk-KIQOUUEZ.mjs.map +1 -0
- package/dist/chunk-LF6DOBID.mjs +248 -0
- package/dist/chunk-LF6DOBID.mjs.map +1 -0
- package/dist/chunk-OKKMFSGF.mjs +253 -0
- package/dist/chunk-OKKMFSGF.mjs.map +1 -0
- package/dist/chunk-PP7QTJDR.mjs +37 -0
- package/dist/chunk-PP7QTJDR.mjs.map +1 -0
- package/dist/constants.d.mts +33 -0
- package/dist/constants.d.ts +33 -0
- package/dist/constants.js +39 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.mjs +3 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/core.d.mts +19 -0
- package/dist/core.d.ts +19 -0
- package/dist/core.js +446 -0
- package/dist/core.js.map +1 -0
- package/dist/core.mjs +5 -0
- package/dist/core.mjs.map +1 -0
- package/dist/index.d.mts +6 -291
- package/dist/index.d.ts +6 -291
- package/dist/index.global.js +386 -478
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +386 -478
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -842
- package/dist/index.mjs.map +1 -1
- package/dist/mutations/core.d.mts +10 -0
- package/dist/mutations/core.d.ts +10 -0
- package/dist/mutations/core.js +130 -0
- package/dist/mutations/core.js.map +1 -0
- package/dist/mutations/core.mjs +5 -0
- package/dist/mutations/core.mjs.map +1 -0
- package/dist/mutations/extended.d.mts +10 -0
- package/dist/mutations/extended.d.ts +10 -0
- package/dist/mutations/extended.js +172 -0
- package/dist/mutations/extended.js.map +1 -0
- package/dist/mutations/extended.mjs +5 -0
- package/dist/mutations/extended.mjs.map +1 -0
- package/dist/mutations/index.d.mts +14 -0
- package/dist/mutations/index.d.ts +14 -0
- package/dist/mutations/index.js +379 -0
- package/dist/mutations/index.js.map +1 -0
- package/dist/mutations/index.mjs +8 -0
- package/dist/mutations/index.mjs.map +1 -0
- package/dist/types.d.mts +140 -0
- package/dist/types.d.ts +140 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +67 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { isKeyMapArray, combineArrayData, isKeyMap, toObjectKey, isArray, computeMatchedItemIndex, updateObjectDeepValue, searchValueByKey } from './chunk-OKKMFSGF.mjs';
|
|
2
|
+
import { constants_default } from './chunk-PP7QTJDR.mjs';
|
|
3
|
+
|
|
4
|
+
// src/mutations/extended.ts
|
|
5
|
+
var searchHandler = (ctx) => {
|
|
6
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
7
|
+
if (objectKeyId === void 0) return;
|
|
8
|
+
const searchResult = ctx.resultArray ? searchValueByKey(ctx.resultArray, objectKeyId, ctx._uniqueKey) : void 0;
|
|
9
|
+
return { resolved: searchResult };
|
|
10
|
+
};
|
|
11
|
+
var updateKVHandler = (ctx) => {
|
|
12
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
13
|
+
if (objectKeyId === void 0 || !ctx.resultArray) return;
|
|
14
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
15
|
+
objectKeyId,
|
|
16
|
+
ctx.resultArray,
|
|
17
|
+
ctx._uniqueKey
|
|
18
|
+
);
|
|
19
|
+
if (matchedIndex >= 0 && isKeyMap(ctx.resultArray[matchedIndex])) {
|
|
20
|
+
const newItem = { ...ctx.resultArray[matchedIndex] };
|
|
21
|
+
updateObjectDeepValue(newItem, ctx._changeKey, ctx.value);
|
|
22
|
+
ctx.resultArray[matchedIndex] = newItem;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
var insertBeforeHandler = (ctx) => {
|
|
26
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
27
|
+
if (!isArray(ctx.resultArray) || objectKeyId === void 0) return void 0;
|
|
28
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
29
|
+
objectKeyId,
|
|
30
|
+
ctx.resultArray,
|
|
31
|
+
ctx._uniqueKey
|
|
32
|
+
);
|
|
33
|
+
if (matchedIndex >= 0) {
|
|
34
|
+
const newArray = [...ctx.resultArray];
|
|
35
|
+
newArray.splice(matchedIndex, 0, ctx.value);
|
|
36
|
+
return { modifyValue: newArray };
|
|
37
|
+
}
|
|
38
|
+
return void 0;
|
|
39
|
+
};
|
|
40
|
+
var insertAfterHandler = (ctx) => {
|
|
41
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
42
|
+
if (!isArray(ctx.resultArray) || objectKeyId === void 0) return void 0;
|
|
43
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
44
|
+
objectKeyId,
|
|
45
|
+
ctx.resultArray,
|
|
46
|
+
ctx._uniqueKey
|
|
47
|
+
);
|
|
48
|
+
if (matchedIndex >= 0) {
|
|
49
|
+
const newArray = [...ctx.resultArray];
|
|
50
|
+
newArray.splice(matchedIndex + 1, 0, ctx.value);
|
|
51
|
+
return { modifyValue: newArray };
|
|
52
|
+
}
|
|
53
|
+
return void 0;
|
|
54
|
+
};
|
|
55
|
+
var patchHandler = (ctx) => {
|
|
56
|
+
if (!isKeyMapArray(ctx.resultArray)) return;
|
|
57
|
+
const newArray = [...ctx.resultArray];
|
|
58
|
+
if (isKeyMapArray(ctx.value)) {
|
|
59
|
+
combineArrayData(newArray, ctx.value, ctx._uniqueKey);
|
|
60
|
+
} else if (isKeyMap(ctx.value)) {
|
|
61
|
+
const valueAsRecord = {};
|
|
62
|
+
for (const [k, v] of Object.entries(ctx.value)) {
|
|
63
|
+
if (isKeyMap(v)) valueAsRecord[k] = v;
|
|
64
|
+
}
|
|
65
|
+
combineArrayData(newArray, valueAsRecord, ctx._uniqueKey);
|
|
66
|
+
}
|
|
67
|
+
return { modifyValue: newArray };
|
|
68
|
+
};
|
|
69
|
+
var extendedMutations = {
|
|
70
|
+
[constants_default.CHANGE_TYPE.SEARCH_FIELD]: searchHandler,
|
|
71
|
+
[constants_default.CHANGE_TYPE.RESULT_UPDATE_KV]: updateKVHandler,
|
|
72
|
+
[constants_default.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE]: insertBeforeHandler,
|
|
73
|
+
[constants_default.CHANGE_TYPE.RESULT_INSERT_TO_AFTER]: insertAfterHandler,
|
|
74
|
+
[constants_default.CHANGE_TYPE.RESULT_LIST_MERGE]: patchHandler
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export { extendedMutations, insertAfterHandler, insertBeforeHandler, patchHandler, searchHandler, updateKVHandler };
|
|
78
|
+
//# sourceMappingURL=chunk-6WOZNOYJ.mjs.map
|
|
79
|
+
//# sourceMappingURL=chunk-6WOZNOYJ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mutations/extended.ts"],"names":[],"mappings":"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","file":"chunk-6WOZNOYJ.mjs","sourcesContent":["// mutations/extended.ts — 5 种扩展 mutation handler\nimport {\n combineArrayData,\n computeMatchedItemIndex,\n isArray,\n isKeyMap,\n isKeyMapArray,\n searchValueByKey,\n toObjectKey,\n updateObjectDeepValue\n} from '../_internal/utils'\nimport ENUM from '../constants'\nimport type { KeyMap, MutationHandler, ObjectKey } from '../types'\n\n// --- search: 按 ID 查找 item ---\nexport const searchHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (objectKeyId === undefined) return\n const searchResult = ctx.resultArray\n ? searchValueByKey(ctx.resultArray, objectKeyId, ctx._uniqueKey)\n : undefined\n return { resolved: searchResult }\n}\n\n// --- update: 深层 KV 更新 ---\nexport const updateKVHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (objectKeyId === undefined || !ctx.resultArray) return\n\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n if (matchedIndex >= 0 && isKeyMap(ctx.resultArray[matchedIndex])) {\n const newItem = { ...ctx.resultArray[matchedIndex] }\n updateObjectDeepValue(newItem, ctx._changeKey, ctx.value)\n ctx.resultArray[matchedIndex] = newItem\n }\n}\n\n// --- insert-before: 在指定 ID 前插入 ---\nexport const insertBeforeHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (!isArray(ctx.resultArray) || objectKeyId === undefined) return undefined\n\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n if (matchedIndex >= 0) {\n const newArray = [...ctx.resultArray]\n newArray.splice(matchedIndex, 0, ctx.value)\n return { modifyValue: newArray }\n }\n return undefined\n}\n\n// --- insert-after: 在指定 ID 后插入 ---\nexport const insertAfterHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (!isArray(ctx.resultArray) || objectKeyId === undefined) return undefined\n\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n if (matchedIndex >= 0) {\n const newArray = [...ctx.resultArray]\n newArray.splice(matchedIndex + 1, 0, ctx.value)\n return { modifyValue: newArray }\n }\n return undefined\n}\n\n// --- patch: 批量合并 ---\nexport const patchHandler: MutationHandler = (ctx) => {\n if (!isKeyMapArray(ctx.resultArray)) return\n\n const newArray = [...ctx.resultArray]\n if (isKeyMapArray(ctx.value)) {\n combineArrayData(newArray, ctx.value, ctx._uniqueKey)\n } else if (isKeyMap(ctx.value)) {\n const valueAsRecord: Record<ObjectKey, KeyMap> = {}\n for (const [k, v] of Object.entries(ctx.value)) {\n if (isKeyMap(v)) valueAsRecord[k] = v\n }\n combineArrayData(newArray, valueAsRecord, ctx._uniqueKey)\n }\n return { modifyValue: newArray }\n}\n\n// --- 扩展 mutation 注册表 ---\nexport const extendedMutations: Record<string, MutationHandler> = {\n [ENUM.CHANGE_TYPE.SEARCH_FIELD]: searchHandler,\n [ENUM.CHANGE_TYPE.RESULT_UPDATE_KV]: updateKVHandler,\n [ENUM.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE]: insertBeforeHandler,\n [ENUM.CHANGE_TYPE.RESULT_INSERT_TO_AFTER]: insertAfterHandler,\n [ENUM.CHANGE_TYPE.RESULT_LIST_MERGE]: patchHandler\n}\n"]}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { generateFieldName } from './chunk-LF6DOBID.mjs';
|
|
2
|
+
import { coreMutations } from './chunk-C4BWSFWU.mjs';
|
|
3
|
+
import { extendedMutations } from './chunk-6WOZNOYJ.mjs';
|
|
4
|
+
import { computeResultLength, getResultAsArray, isKeyMapArray, isKeyMap } from './chunk-OKKMFSGF.mjs';
|
|
5
|
+
import { constants_default } from './chunk-PP7QTJDR.mjs';
|
|
6
|
+
|
|
7
|
+
// src/mutations/index.ts
|
|
8
|
+
var allMutations = {
|
|
9
|
+
...coreMutations,
|
|
10
|
+
...extendedMutations
|
|
11
|
+
};
|
|
12
|
+
var createUpdateState = (handlers = allMutations) => {
|
|
13
|
+
return ({
|
|
14
|
+
getter,
|
|
15
|
+
setter,
|
|
16
|
+
func,
|
|
17
|
+
query,
|
|
18
|
+
method,
|
|
19
|
+
id,
|
|
20
|
+
value,
|
|
21
|
+
changeKey
|
|
22
|
+
}) => {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const fieldName = generateFieldName({ func, query });
|
|
25
|
+
const fieldData = getter(fieldName);
|
|
26
|
+
if (!fieldData) {
|
|
27
|
+
reject(new Error(`Field ${fieldName} not found.`));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (fieldData.page === -1) {
|
|
31
|
+
resolve(null);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const _uniqueKey = func.uniqueKey || constants_default.DEFAULT_UNIQUE_KEY_NAME;
|
|
35
|
+
const _changeKey = changeKey || constants_default.FIELD_DATA.RESULT_KEY;
|
|
36
|
+
const beforeLength = computeResultLength(
|
|
37
|
+
fieldData[constants_default.FIELD_DATA.RESULT_KEY]
|
|
38
|
+
);
|
|
39
|
+
const newFieldData = { ...fieldData };
|
|
40
|
+
let resultArray = getResultAsArray(fieldData);
|
|
41
|
+
if (resultArray) {
|
|
42
|
+
resultArray = [...resultArray];
|
|
43
|
+
newFieldData.result = resultArray;
|
|
44
|
+
}
|
|
45
|
+
const handler = handlers[method];
|
|
46
|
+
if (!handler) {
|
|
47
|
+
resolve(null);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const ctx = {
|
|
51
|
+
resultArray,
|
|
52
|
+
newFieldData,
|
|
53
|
+
_id: id,
|
|
54
|
+
_uniqueKey,
|
|
55
|
+
_changeKey,
|
|
56
|
+
value
|
|
57
|
+
};
|
|
58
|
+
const handlerResult = handler(ctx);
|
|
59
|
+
if (handlerResult) {
|
|
60
|
+
if ("resolved" in handlerResult) {
|
|
61
|
+
resolve(handlerResult.resolved);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if ("modifyValue" in handlerResult && handlerResult.modifyValue !== void 0) {
|
|
65
|
+
const modifyValue = handlerResult.modifyValue;
|
|
66
|
+
if (_changeKey === constants_default.FIELD_DATA.RESULT_KEY && isKeyMapArray(modifyValue)) {
|
|
67
|
+
newFieldData.result = modifyValue;
|
|
68
|
+
} else if (_changeKey === constants_default.FIELD_DATA.EXTRA_KEY && isKeyMap(modifyValue)) {
|
|
69
|
+
newFieldData.extra = modifyValue;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const afterLength = computeResultLength(
|
|
74
|
+
newFieldData[constants_default.FIELD_DATA.RESULT_KEY]
|
|
75
|
+
);
|
|
76
|
+
newFieldData.total = newFieldData.total + afterLength - beforeLength;
|
|
77
|
+
newFieldData.nothing = afterLength === 0;
|
|
78
|
+
setter({
|
|
79
|
+
key: fieldName,
|
|
80
|
+
type: constants_default.SETTER_TYPE.RESET,
|
|
81
|
+
value: newFieldData,
|
|
82
|
+
callback: () => resolve(null)
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
var updateState = createUpdateState();
|
|
88
|
+
|
|
89
|
+
export { createUpdateState, updateState };
|
|
90
|
+
//# sourceMappingURL=chunk-BTOUHSDU.mjs.map
|
|
91
|
+
//# sourceMappingURL=chunk-BTOUHSDU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mutations/index.ts"],"names":[],"mappings":"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","file":"chunk-BTOUHSDU.mjs","sourcesContent":["// mutations/index.ts — 全量 updateState(core + extended mutations)\nimport {\n computeResultLength,\n getResultAsArray,\n isKeyMap,\n isKeyMapArray\n} from '../_internal/utils'\nimport ENUM from '../constants'\nimport { generateFieldName } from '../core'\n\nimport type {\n DefaultField,\n MutationContext,\n MutationHandler,\n RequestParams,\n UpdateStateType\n} from '../types'\n\nimport { coreMutations } from './core'\nimport { extendedMutations } from './extended'\n\n// 合并全部 mutation handlers\nconst allMutations: Record<string, MutationHandler> = {\n ...coreMutations,\n ...extendedMutations\n}\n\nexport { coreMutations } from './core'\nexport { extendedMutations } from './extended'\n\n/**\n * 创建 updateState 函数,可传入自定义 mutation handlers\n */\nexport const createUpdateState = (\n handlers: Record<string, MutationHandler> = allMutations\n) => {\n return <P extends RequestParams, R>({\n getter,\n setter,\n func,\n query,\n method,\n id,\n value,\n changeKey\n }: UpdateStateType<P, R>): Promise<unknown> => {\n return new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, query })\n const fieldData = getter(fieldName)\n if (!fieldData) {\n reject(new Error(`Field ${fieldName} not found.`))\n return\n }\n\n if (fieldData.page === -1) {\n resolve(null)\n return\n }\n\n const _uniqueKey = func.uniqueKey || ENUM.DEFAULT_UNIQUE_KEY_NAME\n const _changeKey = changeKey || ENUM.FIELD_DATA.RESULT_KEY\n const beforeLength = computeResultLength(\n fieldData[ENUM.FIELD_DATA.RESULT_KEY]\n )\n\n // 创建新 field 对象\n const newFieldData: DefaultField = { ...fieldData }\n let resultArray = getResultAsArray(fieldData)\n if (resultArray) {\n resultArray = [...resultArray]\n newFieldData.result = resultArray as any\n }\n\n // 查找 handler\n const handler = handlers[method]\n if (!handler) {\n resolve(null)\n return\n }\n\n const ctx: MutationContext = {\n resultArray,\n newFieldData,\n _id: id,\n _uniqueKey,\n _changeKey,\n value\n }\n\n const handlerResult = handler(ctx)\n\n // 处理 handler 返回值\n if (handlerResult) {\n // search 等操作直接返回结果\n if ('resolved' in handlerResult) {\n resolve(handlerResult.resolved)\n return\n }\n\n // modifyValue: handler 返回了处理后的数据,需要写回\n if (\n 'modifyValue' in handlerResult &&\n handlerResult.modifyValue !== undefined\n ) {\n const modifyValue = handlerResult.modifyValue\n if (\n _changeKey === ENUM.FIELD_DATA.RESULT_KEY &&\n isKeyMapArray(modifyValue)\n ) {\n newFieldData.result = modifyValue\n } else if (\n _changeKey === ENUM.FIELD_DATA.EXTRA_KEY &&\n isKeyMap(modifyValue)\n ) {\n newFieldData.extra = modifyValue\n }\n }\n }\n\n // 更新 total 和 nothing\n const afterLength = computeResultLength(\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY]\n )\n newFieldData.total = newFieldData.total + afterLength - beforeLength\n newFieldData.nothing = afterLength === 0\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: newFieldData,\n callback: () => resolve(null)\n })\n })\n }\n}\n\n/**\n * 默认 updateState(包含全部 10 种 mutation)\n */\nexport const updateState = createUpdateState()\n"]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { isKeyMapArray, isKeyMap, toObjectKey, computeMatchedItemIndex, updateArrayItem, isObjectKeyArray, getObjectDeepValue, isArray } from './chunk-OKKMFSGF.mjs';
|
|
2
|
+
import { constants_default } from './chunk-PP7QTJDR.mjs';
|
|
3
|
+
|
|
4
|
+
// src/mutations/core.ts
|
|
5
|
+
var pushHandler = (ctx) => {
|
|
6
|
+
if (!isArray(ctx.resultArray)) return;
|
|
7
|
+
return {
|
|
8
|
+
modifyValue: isArray(ctx.value) ? [...ctx.resultArray, ...ctx.value] : [...ctx.resultArray, ctx.value]
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
var unshiftHandler = (ctx) => {
|
|
12
|
+
if (!isArray(ctx.resultArray)) return;
|
|
13
|
+
return {
|
|
14
|
+
modifyValue: isArray(ctx.value) ? [...ctx.value, ...ctx.resultArray] : [ctx.value, ...ctx.resultArray]
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
var deleteHandler = (ctx) => {
|
|
18
|
+
if (!isKeyMapArray(ctx.resultArray)) return;
|
|
19
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
20
|
+
if (objectKeyId !== void 0) {
|
|
21
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
22
|
+
objectKeyId,
|
|
23
|
+
ctx.resultArray,
|
|
24
|
+
ctx._uniqueKey
|
|
25
|
+
);
|
|
26
|
+
if (matchedIndex >= 0) {
|
|
27
|
+
const newArray = [...ctx.resultArray];
|
|
28
|
+
newArray.splice(matchedIndex, 1);
|
|
29
|
+
return { modifyValue: newArray };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (isObjectKeyArray(ctx._id)) {
|
|
33
|
+
const idSet = new Set(ctx._id);
|
|
34
|
+
return {
|
|
35
|
+
modifyValue: ctx.resultArray.filter((item) => {
|
|
36
|
+
const itemKey = getObjectDeepValue(item, ctx._uniqueKey);
|
|
37
|
+
return typeof itemKey !== "string" && typeof itemKey !== "number" ? true : !idSet.has(itemKey);
|
|
38
|
+
})
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return void 0;
|
|
42
|
+
};
|
|
43
|
+
var mergeHandler = (ctx) => {
|
|
44
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
45
|
+
if (objectKeyId === void 0 || !ctx.resultArray || !isKeyMap(ctx.value))
|
|
46
|
+
return;
|
|
47
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
48
|
+
objectKeyId,
|
|
49
|
+
ctx.resultArray,
|
|
50
|
+
ctx._uniqueKey
|
|
51
|
+
);
|
|
52
|
+
updateArrayItem(ctx.resultArray, matchedIndex, (item) => ({
|
|
53
|
+
...item,
|
|
54
|
+
...ctx.value
|
|
55
|
+
}));
|
|
56
|
+
};
|
|
57
|
+
var resetHandler = (ctx) => {
|
|
58
|
+
if (ctx._changeKey === constants_default.FIELD_DATA.RESULT_KEY && isKeyMapArray(ctx.value)) {
|
|
59
|
+
ctx.newFieldData.result = ctx.value;
|
|
60
|
+
} else if (ctx._changeKey === constants_default.FIELD_DATA.EXTRA_KEY && isKeyMap(ctx.value)) {
|
|
61
|
+
ctx.newFieldData.extra = ctx.value;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
var coreMutations = {
|
|
65
|
+
[constants_default.CHANGE_TYPE.RESULT_ADD_AFTER]: pushHandler,
|
|
66
|
+
[constants_default.CHANGE_TYPE.RESULT_ADD_BEFORE]: unshiftHandler,
|
|
67
|
+
[constants_default.CHANGE_TYPE.RESULT_REMOVE_BY_ID]: deleteHandler,
|
|
68
|
+
[constants_default.CHANGE_TYPE.RESULT_ITEM_MERGE]: mergeHandler,
|
|
69
|
+
[constants_default.CHANGE_TYPE.RESET_FIELD]: resetHandler
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export { coreMutations, deleteHandler, mergeHandler, pushHandler, resetHandler, unshiftHandler };
|
|
73
|
+
//# sourceMappingURL=chunk-C4BWSFWU.mjs.map
|
|
74
|
+
//# sourceMappingURL=chunk-C4BWSFWU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mutations/core.ts"],"names":[],"mappings":"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","file":"chunk-C4BWSFWU.mjs","sourcesContent":["// mutations/core.ts — 5 种核心 mutation handler\nimport {\n computeMatchedItemIndex,\n getObjectDeepValue,\n isArray,\n isKeyMap,\n isKeyMapArray,\n isObjectKeyArray,\n toObjectKey,\n updateArrayItem\n} from '../_internal/utils'\nimport ENUM from '../constants'\nimport type { MutationHandler, ObjectKey } from '../types'\n\n// --- push: 末尾追加 ---\nexport const pushHandler: MutationHandler = (ctx) => {\n if (!isArray(ctx.resultArray)) return\n return {\n modifyValue: isArray(ctx.value)\n ? [...ctx.resultArray, ...ctx.value]\n : [...ctx.resultArray, ctx.value]\n }\n}\n\n// --- unshift: 头部插入 ---\nexport const unshiftHandler: MutationHandler = (ctx) => {\n if (!isArray(ctx.resultArray)) return\n return {\n modifyValue: isArray(ctx.value)\n ? [...ctx.value, ...ctx.resultArray]\n : [ctx.value, ...ctx.resultArray]\n }\n}\n\n// --- delete: 按 ID 删除 ---\nexport const deleteHandler: MutationHandler = (ctx) => {\n if (!isKeyMapArray(ctx.resultArray)) return\n\n const objectKeyId = toObjectKey(ctx._id)\n\n if (objectKeyId !== undefined) {\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n if (matchedIndex >= 0) {\n const newArray = [...ctx.resultArray]\n newArray.splice(matchedIndex, 1)\n return { modifyValue: newArray }\n }\n }\n\n // 批量删除:id 为数组\n if (isObjectKeyArray(ctx._id)) {\n const idSet = new Set<ObjectKey>(ctx._id)\n return {\n modifyValue: ctx.resultArray.filter((item) => {\n const itemKey = getObjectDeepValue(item, ctx._uniqueKey)\n return typeof itemKey !== 'string' && typeof itemKey !== 'number'\n ? true\n : !idSet.has(itemKey as ObjectKey)\n })\n }\n }\n\n return undefined\n}\n\n// --- merge: 按 ID 合并字段 ---\nexport const mergeHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (objectKeyId === undefined || !ctx.resultArray || !isKeyMap(ctx.value))\n return\n\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n updateArrayItem(ctx.resultArray, matchedIndex, (item) => ({\n ...item,\n ...ctx.value\n }))\n}\n\n// --- reset: 整体替换 result 或 extra ---\nexport const resetHandler: MutationHandler = (ctx) => {\n if (\n ctx._changeKey === ENUM.FIELD_DATA.RESULT_KEY &&\n isKeyMapArray(ctx.value)\n ) {\n ctx.newFieldData.result = ctx.value\n } else if (\n ctx._changeKey === ENUM.FIELD_DATA.EXTRA_KEY &&\n isKeyMap(ctx.value)\n ) {\n ctx.newFieldData.extra = ctx.value\n }\n}\n\n// --- 核心 mutation 注册表 ---\nexport const coreMutations: Record<string, MutationHandler> = {\n [ENUM.CHANGE_TYPE.RESULT_ADD_AFTER]: pushHandler,\n [ENUM.CHANGE_TYPE.RESULT_ADD_BEFORE]: unshiftHandler,\n [ENUM.CHANGE_TYPE.RESULT_REMOVE_BY_ID]: deleteHandler,\n [ENUM.CHANGE_TYPE.RESULT_ITEM_MERGE]: mergeHandler,\n [ENUM.CHANGE_TYPE.RESET_FIELD]: resetHandler\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-KIQOUUEZ.mjs"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { stableSerialize, generateDefaultField, generateRequestParams, computeResultLength, setReactivityField } from './chunk-OKKMFSGF.mjs';
|
|
2
|
+
import { constants_default } from './chunk-PP7QTJDR.mjs';
|
|
3
|
+
|
|
4
|
+
// src/_internal/setters.ts
|
|
5
|
+
var SET_DATA = ({
|
|
6
|
+
getter,
|
|
7
|
+
setter,
|
|
8
|
+
data,
|
|
9
|
+
fieldName,
|
|
10
|
+
type,
|
|
11
|
+
page,
|
|
12
|
+
insertBefore
|
|
13
|
+
}) => {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
const fieldData = getter(fieldName);
|
|
16
|
+
if (!fieldData) {
|
|
17
|
+
reject(new Error(`Field ${fieldName} not found.`));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const field = fieldData;
|
|
21
|
+
let result;
|
|
22
|
+
let extra;
|
|
23
|
+
const hasResult = Object.prototype.hasOwnProperty.call(data, "result");
|
|
24
|
+
if (!hasResult) {
|
|
25
|
+
result = data;
|
|
26
|
+
field.nothing = false;
|
|
27
|
+
field.fetched = true;
|
|
28
|
+
field.noMore = true;
|
|
29
|
+
field.page = -1;
|
|
30
|
+
} else {
|
|
31
|
+
const apiResponse = data;
|
|
32
|
+
result = apiResponse.result;
|
|
33
|
+
extra = apiResponse.extra;
|
|
34
|
+
const isEmpty = computeResultLength(result) === 0;
|
|
35
|
+
field.nothing = field.fetched ? false : isEmpty;
|
|
36
|
+
field.fetched = true;
|
|
37
|
+
field.total = apiResponse.total || 0;
|
|
38
|
+
if (type === constants_default.FETCH_TYPE.PAGINATION) {
|
|
39
|
+
field.noMore = false;
|
|
40
|
+
field.page = +page;
|
|
41
|
+
} else {
|
|
42
|
+
field.noMore = typeof apiResponse.no_more === "undefined" ? isEmpty : apiResponse.no_more || isEmpty;
|
|
43
|
+
field.page = field.page + 1;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
field.loading = false;
|
|
47
|
+
setReactivityField(
|
|
48
|
+
field,
|
|
49
|
+
constants_default.FIELD_DATA.RESULT_KEY,
|
|
50
|
+
result,
|
|
51
|
+
type,
|
|
52
|
+
insertBefore
|
|
53
|
+
);
|
|
54
|
+
if (extra !== void 0 && extra !== null) {
|
|
55
|
+
setReactivityField(
|
|
56
|
+
field,
|
|
57
|
+
constants_default.FIELD_DATA.EXTRA_KEY,
|
|
58
|
+
extra,
|
|
59
|
+
type,
|
|
60
|
+
insertBefore
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
setter({
|
|
64
|
+
key: fieldName,
|
|
65
|
+
type: constants_default.SETTER_TYPE.RESET,
|
|
66
|
+
value: field,
|
|
67
|
+
callback: () => resolve()
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
var SET_ERROR = ({ setter, fieldName, error }) => {
|
|
72
|
+
setter({
|
|
73
|
+
key: fieldName,
|
|
74
|
+
type: constants_default.SETTER_TYPE.MERGE,
|
|
75
|
+
value: { error, loading: false }
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// src/core.ts
|
|
80
|
+
var generateFieldName = ({
|
|
81
|
+
func,
|
|
82
|
+
query
|
|
83
|
+
}) => {
|
|
84
|
+
let result = func.id;
|
|
85
|
+
if (!query) return result;
|
|
86
|
+
const queryObj = query;
|
|
87
|
+
const filteredKeys = Object.keys(queryObj).filter((key) => !func.paramsIgnore.includes(key)).sort();
|
|
88
|
+
for (const key of filteredKeys) {
|
|
89
|
+
const value = queryObj[key];
|
|
90
|
+
const safeValue = typeof value === "object" && value !== null ? stableSerialize(value) : String(value);
|
|
91
|
+
result += `-${key}-${encodeURIComponent(safeValue)}`;
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
};
|
|
95
|
+
var createApi = (options) => {
|
|
96
|
+
const fn = ((params) => options.fetcher(params));
|
|
97
|
+
const metadata = {
|
|
98
|
+
id: options.id,
|
|
99
|
+
type: options.type || constants_default.FETCH_TYPE.SCROLL_LOAD_MORE,
|
|
100
|
+
uniqueKey: options.uniqueKey || constants_default.DEFAULT_UNIQUE_KEY_NAME,
|
|
101
|
+
is_up: options.is_up || false,
|
|
102
|
+
paramsIgnore: [
|
|
103
|
+
"page",
|
|
104
|
+
"since_id",
|
|
105
|
+
"seen_ids",
|
|
106
|
+
"__refresh__",
|
|
107
|
+
"__reload__",
|
|
108
|
+
...options.paramsIgnore || []
|
|
109
|
+
]
|
|
110
|
+
};
|
|
111
|
+
return Object.freeze(Object.assign(fn, metadata));
|
|
112
|
+
};
|
|
113
|
+
var initState = ({
|
|
114
|
+
getter,
|
|
115
|
+
setter,
|
|
116
|
+
func,
|
|
117
|
+
query,
|
|
118
|
+
opts
|
|
119
|
+
}) => {
|
|
120
|
+
return new Promise((resolve) => {
|
|
121
|
+
const fieldName = generateFieldName({ func, query });
|
|
122
|
+
if (getter(fieldName)) return resolve();
|
|
123
|
+
setter({
|
|
124
|
+
key: fieldName,
|
|
125
|
+
type: constants_default.SETTER_TYPE.RESET,
|
|
126
|
+
value: generateDefaultField(opts),
|
|
127
|
+
callback: () => resolve()
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
var initData = ({
|
|
132
|
+
getter,
|
|
133
|
+
setter,
|
|
134
|
+
func,
|
|
135
|
+
query,
|
|
136
|
+
callback
|
|
137
|
+
}) => new Promise((resolve, reject) => {
|
|
138
|
+
const fieldName = generateFieldName({ func, query });
|
|
139
|
+
const fieldData = getter(fieldName);
|
|
140
|
+
const doRefresh = !!query?.__refresh__;
|
|
141
|
+
const needReset = !!query?.__reload__;
|
|
142
|
+
const directlyLoadData = doRefresh && !needReset;
|
|
143
|
+
if (fieldData && fieldData.error && !doRefresh) return resolve();
|
|
144
|
+
if (fieldData && fieldData.loading) return resolve();
|
|
145
|
+
if (fieldData && fieldData.fetched && !doRefresh) return resolve();
|
|
146
|
+
const params = generateRequestParams({
|
|
147
|
+
field: generateDefaultField({ ...fieldData, fetched: false }),
|
|
148
|
+
uniqueKey: func.uniqueKey,
|
|
149
|
+
type: func.type,
|
|
150
|
+
is_up: func.is_up,
|
|
151
|
+
query
|
|
152
|
+
});
|
|
153
|
+
const executeFetch = () => {
|
|
154
|
+
func(params).then((data) => {
|
|
155
|
+
const commitData = () => {
|
|
156
|
+
SET_DATA({
|
|
157
|
+
getter,
|
|
158
|
+
setter,
|
|
159
|
+
data,
|
|
160
|
+
fieldName,
|
|
161
|
+
type: func.type,
|
|
162
|
+
page: params.page || 0,
|
|
163
|
+
insertBefore: false
|
|
164
|
+
}).then(() => {
|
|
165
|
+
callback?.({ params, data, refresh: doRefresh });
|
|
166
|
+
resolve();
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
if (directlyLoadData) {
|
|
170
|
+
setter({
|
|
171
|
+
key: fieldName,
|
|
172
|
+
type: constants_default.SETTER_TYPE.RESET,
|
|
173
|
+
value: generateDefaultField(),
|
|
174
|
+
callback: commitData
|
|
175
|
+
});
|
|
176
|
+
} else {
|
|
177
|
+
commitData();
|
|
178
|
+
}
|
|
179
|
+
}).catch((error) => {
|
|
180
|
+
SET_ERROR({ setter, fieldName, error });
|
|
181
|
+
reject(error);
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
if (directlyLoadData) {
|
|
185
|
+
executeFetch();
|
|
186
|
+
} else {
|
|
187
|
+
setter({
|
|
188
|
+
key: fieldName,
|
|
189
|
+
type: constants_default.SETTER_TYPE.RESET,
|
|
190
|
+
value: { ...generateDefaultField(), loading: true, error: null },
|
|
191
|
+
callback: executeFetch
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
var loadMore = ({
|
|
196
|
+
getter,
|
|
197
|
+
setter,
|
|
198
|
+
query,
|
|
199
|
+
func,
|
|
200
|
+
errorRetry,
|
|
201
|
+
callback
|
|
202
|
+
}) => new Promise((resolve, reject) => {
|
|
203
|
+
const fieldName = generateFieldName({ func, query });
|
|
204
|
+
const fieldData = getter(fieldName);
|
|
205
|
+
if (!fieldData || fieldData.loading || fieldData.nothing) return resolve();
|
|
206
|
+
if (fieldData.noMore && !errorRetry) return resolve();
|
|
207
|
+
const type = func.type;
|
|
208
|
+
if (type === constants_default.FETCH_TYPE.PAGINATION && query?.page != null && Number(query.page) === fieldData.page) {
|
|
209
|
+
return resolve();
|
|
210
|
+
}
|
|
211
|
+
const loadingState = type === constants_default.FETCH_TYPE.PAGINATION ? { loading: true, error: null, result: [], extra: null } : { loading: true, error: null };
|
|
212
|
+
const params = generateRequestParams({
|
|
213
|
+
field: fieldData,
|
|
214
|
+
uniqueKey: func.uniqueKey,
|
|
215
|
+
type,
|
|
216
|
+
is_up: func.is_up,
|
|
217
|
+
query
|
|
218
|
+
});
|
|
219
|
+
if (fieldData.extra) params.extra = fieldData.extra;
|
|
220
|
+
setter({
|
|
221
|
+
key: fieldName,
|
|
222
|
+
type: constants_default.SETTER_TYPE.MERGE,
|
|
223
|
+
value: loadingState,
|
|
224
|
+
callback: () => {
|
|
225
|
+
func(params).then((data) => {
|
|
226
|
+
SET_DATA({
|
|
227
|
+
getter,
|
|
228
|
+
setter,
|
|
229
|
+
data,
|
|
230
|
+
type,
|
|
231
|
+
fieldName,
|
|
232
|
+
page: params.page || 0,
|
|
233
|
+
insertBefore: func.is_up
|
|
234
|
+
}).then(() => {
|
|
235
|
+
callback?.({ params, data, refresh: false });
|
|
236
|
+
resolve();
|
|
237
|
+
});
|
|
238
|
+
}).catch((error) => {
|
|
239
|
+
SET_ERROR({ setter, fieldName, error });
|
|
240
|
+
reject(error);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
export { createApi, generateFieldName, initData, initState, loadMore };
|
|
247
|
+
//# sourceMappingURL=chunk-LF6DOBID.mjs.map
|
|
248
|
+
//# sourceMappingURL=chunk-LF6DOBID.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/_internal/setters.ts","../src/core.ts"],"names":[],"mappings":"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","file":"chunk-LF6DOBID.mjs","sourcesContent":["// _internal/setters.ts\nimport ENUM from '../constants'\nimport type { BaseApiResponse, SetDataType, SetErrorType } from '../types'\nimport { computeResultLength, setReactivityField } from './utils'\n\nexport const SET_DATA = ({\n getter,\n setter,\n data,\n fieldName,\n type,\n page,\n insertBefore\n}: SetDataType): Promise<void> => {\n return new Promise((resolve, reject) => {\n const fieldData = getter(fieldName)\n if (!fieldData) {\n reject(new Error(`Field ${fieldName} not found.`))\n return\n }\n\n const field = fieldData\n let result: any\n let extra: unknown\n\n // 标准 API 响应(有 result 属性)\n const hasResult = Object.prototype.hasOwnProperty.call(data, 'result')\n if (!hasResult) {\n // 非标准:整个 data 就是 result\n result = data\n field.nothing = false\n field.fetched = true\n field.noMore = true\n field.page = -1\n } else {\n const apiResponse = data as BaseApiResponse\n result = apiResponse.result\n extra = apiResponse.extra\n const isEmpty = computeResultLength(result) === 0\n field.nothing = field.fetched ? false : isEmpty\n field.fetched = true\n field.total = apiResponse.total || 0\n\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n field.noMore = false\n field.page = +page\n } else {\n field.noMore =\n typeof apiResponse.no_more === 'undefined'\n ? isEmpty\n : apiResponse.no_more || isEmpty\n field.page = field.page + 1\n }\n }\n\n field.loading = false\n\n setReactivityField(\n field,\n ENUM.FIELD_DATA.RESULT_KEY,\n result,\n type,\n insertBefore\n )\n\n if (extra !== undefined && extra !== null) {\n setReactivityField(\n field,\n ENUM.FIELD_DATA.EXTRA_KEY,\n extra,\n type,\n insertBefore\n )\n }\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: field,\n callback: () => resolve()\n })\n })\n}\n\nexport const SET_ERROR = ({ setter, fieldName, error }: SetErrorType): void => {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.MERGE,\n value: { error, loading: false }\n })\n}\n","// core.ts — createApi / initState / initData / loadMore / generateFieldName\nimport { SET_DATA, SET_ERROR } from './_internal/setters'\nimport {\n generateDefaultField,\n generateRequestParams,\n stableSerialize\n} from './_internal/utils'\nimport ENUM from './constants'\n\nimport type {\n ApiContract,\n BaseApiResponse,\n DefaultField,\n FetchType,\n InitDataType,\n InitStateType,\n KeyMap,\n LoadMoreType,\n RequestParams\n} from './types'\n\n// --- generateFieldName ---\nexport const generateFieldName = <P extends RequestParams, R>({\n func,\n query\n}: {\n func: ApiContract<P, R>\n query?: P\n}): string => {\n let result = func.id\n if (!query) return result\n\n const queryObj = query as Record<string, unknown>\n const filteredKeys = Object.keys(queryObj)\n .filter((key) => !func.paramsIgnore.includes(key))\n .sort()\n\n for (const key of filteredKeys) {\n const value = queryObj[key]\n const safeValue =\n typeof value === 'object' && value !== null\n ? stableSerialize(value)\n : String(value)\n result += `-${key}-${encodeURIComponent(safeValue)}`\n }\n return result\n}\n\n// --- createApi ---\nexport const createApi = <P extends RequestParams, R>(options: {\n id: string\n type?: FetchType\n uniqueKey?: string\n is_up?: boolean\n paramsIgnore?: string[]\n fetcher: (params: P) => Promise<BaseApiResponse<R>>\n}): ApiContract<P, R> => {\n const fn = ((params: P) => options.fetcher(params)) as ApiContract<P, R>\n\n const metadata: Partial<ApiContract<P, R>> = {\n id: options.id,\n type: options.type || (ENUM.FETCH_TYPE.SCROLL_LOAD_MORE as FetchType),\n uniqueKey: options.uniqueKey || ENUM.DEFAULT_UNIQUE_KEY_NAME,\n is_up: options.is_up || false,\n paramsIgnore: [\n 'page',\n 'since_id',\n 'seen_ids',\n '__refresh__',\n '__reload__',\n ...(options.paramsIgnore || [])\n ]\n }\n\n return Object.freeze(Object.assign(fn, metadata))\n}\n\n// --- initState ---\nexport const initState = <P extends RequestParams, R>({\n getter,\n setter,\n func,\n query,\n opts\n}: InitStateType<P, R>): Promise<void> => {\n return new Promise((resolve) => {\n const fieldName = generateFieldName({ func, query })\n if (getter(fieldName)) return resolve()\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: generateDefaultField(opts),\n callback: () => resolve()\n })\n })\n}\n\n// --- initData ---\nexport const initData = <P extends RequestParams, R>({\n getter,\n setter,\n func,\n query,\n callback\n}: InitDataType<P, R>): Promise<void> =>\n new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, query })\n const fieldData = getter(fieldName)\n\n const doRefresh = !!query?.__refresh__\n const needReset = !!query?.__reload__\n const directlyLoadData = doRefresh && !needReset\n\n if (fieldData && fieldData.error && !doRefresh) return resolve()\n if (fieldData && fieldData.loading) return resolve()\n if (fieldData && fieldData.fetched && !doRefresh) return resolve()\n\n const params = generateRequestParams({\n field: generateDefaultField({ ...fieldData, fetched: false }),\n uniqueKey: func.uniqueKey,\n type: func.type,\n is_up: func.is_up,\n query: query as KeyMap\n })\n\n const executeFetch = () => {\n func(params as P)\n .then((data) => {\n const commitData = () => {\n SET_DATA({\n getter,\n setter,\n data: data as BaseApiResponse,\n fieldName,\n type: func.type,\n page: params.page || 0,\n insertBefore: false\n }).then(() => {\n callback?.({ params: params as P, data, refresh: doRefresh })\n resolve()\n })\n }\n\n if (directlyLoadData) {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: generateDefaultField(),\n callback: commitData\n })\n } else {\n commitData()\n }\n })\n .catch((error: Error) => {\n SET_ERROR({ setter, fieldName, error })\n reject(error)\n })\n }\n\n if (directlyLoadData) {\n executeFetch()\n } else {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: { ...generateDefaultField(), loading: true, error: null },\n callback: executeFetch\n })\n }\n })\n\n// --- loadMore ---\nexport const loadMore = <P extends RequestParams, R>({\n getter,\n setter,\n query,\n func,\n errorRetry,\n callback\n}: LoadMoreType<P, R>): Promise<void> =>\n new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, query })\n const fieldData = getter(fieldName)\n if (!fieldData || fieldData.loading || fieldData.nothing) return resolve()\n if (fieldData.noMore && !errorRetry) return resolve()\n\n const type = func.type\n\n if (\n type === ENUM.FETCH_TYPE.PAGINATION &&\n query?.page != null &&\n Number(query.page) === fieldData.page\n ) {\n return resolve()\n }\n\n const loadingState: Partial<DefaultField> =\n type === ENUM.FETCH_TYPE.PAGINATION\n ? { loading: true, error: null, result: [], extra: null }\n : { loading: true, error: null }\n\n const params = generateRequestParams({\n field: fieldData,\n uniqueKey: func.uniqueKey,\n type,\n is_up: func.is_up,\n query: query as KeyMap\n })\n\n if (fieldData.extra) params.extra = fieldData.extra\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.MERGE,\n value: loadingState,\n callback: () => {\n func(params as P)\n .then((data) => {\n SET_DATA({\n getter,\n setter,\n data: data as BaseApiResponse,\n type,\n fieldName,\n page: params.page || 0,\n insertBefore: func.is_up\n }).then(() => {\n callback?.({ params: params as P, data, refresh: false })\n resolve()\n })\n })\n .catch((error: Error) => {\n SET_ERROR({ setter, fieldName, error })\n reject(error)\n })\n }\n })\n })\n"]}
|