v-dict 2.0.4 → 2.0.6
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/react/index.cjs +44 -49
- package/dist/react/index.js +44 -49
- package/dist/types/dict.d.ts +11 -0
- package/package.json +1 -1
package/dist/react/index.cjs
CHANGED
|
@@ -177,7 +177,7 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
177
177
|
);
|
|
178
178
|
defineDictOptionsMap.set(code, cloneDeep(_defineDictOptions));
|
|
179
179
|
const { data, remote, fetch, extra, transformer, itemTransformer } = _defineDictOptions;
|
|
180
|
-
let globalLoadPromise =
|
|
180
|
+
let globalLoadPromise = createPromise();
|
|
181
181
|
let init = false;
|
|
182
182
|
async function loadDict(options, map = /* @__PURE__ */ new Map()) {
|
|
183
183
|
var _a;
|
|
@@ -224,10 +224,14 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
224
224
|
return [key, (_a = transformer == null ? void 0 : transformer(key)) != null ? _a : key];
|
|
225
225
|
})
|
|
226
226
|
);
|
|
227
|
+
const getItem = (value) => {
|
|
228
|
+
return value !== null && value !== void 0 ? newObj[value] : null;
|
|
229
|
+
};
|
|
227
230
|
return {
|
|
228
231
|
map: newObj,
|
|
229
232
|
list: newList,
|
|
230
|
-
E: newE
|
|
233
|
+
E: newE,
|
|
234
|
+
getItem
|
|
231
235
|
};
|
|
232
236
|
};
|
|
233
237
|
function useDict(useDictOptions = {}) {
|
|
@@ -238,86 +242,77 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
238
242
|
...useDictOptions
|
|
239
243
|
};
|
|
240
244
|
const { clone, immediate, refresh } = mergedOptions;
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
);
|
|
245
|
+
const stateRef = react.useRef(createStateFromMap());
|
|
246
|
+
const clonedLoadPromiseRef = react.useRef(null);
|
|
244
247
|
const globalMap = react.useSyncExternalStore(subscribeMap, getMapSnapshot);
|
|
245
248
|
const [clonedMap, setClonedMap] = react.useState(/* @__PURE__ */ new Map());
|
|
249
|
+
const loadPromise = !clone ? globalLoadPromise : clonedLoadPromiseRef.current;
|
|
246
250
|
const map = !clone ? globalMap : clonedMap;
|
|
247
|
-
const state = react.useMemo(
|
|
248
|
-
() => createStateFromMap(map),
|
|
249
|
-
[map]
|
|
250
|
-
);
|
|
251
|
+
const state = react.useMemo(() => createStateFromMap(map), [map]);
|
|
251
252
|
const load = react.useCallback((options) => {
|
|
252
|
-
const oldLoadPromise =
|
|
253
|
-
|
|
253
|
+
const oldLoadPromise = loadPromise;
|
|
254
|
+
if (!clone) {
|
|
255
|
+
globalLoadPromise = createPromise();
|
|
256
|
+
} else {
|
|
257
|
+
clonedLoadPromiseRef.current = createPromise();
|
|
258
|
+
}
|
|
254
259
|
loadDict({ ...mergedOptions, ...options }).then((map2) => {
|
|
260
|
+
var _a;
|
|
255
261
|
if (!clone) {
|
|
256
262
|
maps[code] = map2;
|
|
257
263
|
emitChange(code);
|
|
258
264
|
} else {
|
|
259
265
|
setClonedMap(map2);
|
|
260
266
|
}
|
|
267
|
+
stateRef.current = createStateFromMap(map2);
|
|
261
268
|
oldLoadPromise == null ? void 0 : oldLoadPromise.resolve(void 0);
|
|
262
|
-
|
|
269
|
+
if (!clone) {
|
|
270
|
+
globalLoadPromise.resolve(void 0);
|
|
271
|
+
} else {
|
|
272
|
+
(_a = clonedLoadPromiseRef.current) == null ? void 0 : _a.resolve(void 0);
|
|
273
|
+
}
|
|
263
274
|
});
|
|
264
|
-
return
|
|
275
|
+
return !clone ? globalLoadPromise : clonedLoadPromiseRef.current;
|
|
265
276
|
}, []);
|
|
266
|
-
const clear2 =
|
|
277
|
+
const clear2 = () => {
|
|
267
278
|
if (!clone) {
|
|
268
279
|
maps[code] = /* @__PURE__ */ new Map();
|
|
269
280
|
emitChange(code);
|
|
270
281
|
return;
|
|
271
282
|
}
|
|
272
283
|
setClonedMap(/* @__PURE__ */ new Map());
|
|
273
|
-
}
|
|
274
|
-
const getItem = react.useCallback((value) => {
|
|
275
|
-
return value !== null && value !== void 0 ? state.map[value] : null;
|
|
276
|
-
}, [state]);
|
|
284
|
+
};
|
|
277
285
|
react.useEffect(() => {
|
|
278
|
-
if (
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
globalLoadPromise = createPromise();
|
|
284
|
-
load();
|
|
285
|
-
} else {
|
|
286
|
-
globalLoadPromise.then(() => {
|
|
287
|
-
if (!init) {
|
|
288
|
-
init = true;
|
|
289
|
-
load();
|
|
290
|
-
} else if (refresh) {
|
|
291
|
-
load();
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
}
|
|
286
|
+
if (remote && !immediate) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
if (clone) {
|
|
290
|
+
load();
|
|
296
291
|
} else {
|
|
297
|
-
if (!
|
|
298
|
-
|
|
299
|
-
|
|
292
|
+
if (!init) {
|
|
293
|
+
init = true;
|
|
294
|
+
load();
|
|
295
|
+
} else if (refresh) {
|
|
296
|
+
load();
|
|
300
297
|
}
|
|
301
298
|
}
|
|
302
299
|
}, []);
|
|
303
300
|
const ctx = react.useMemo(() => {
|
|
304
|
-
const
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
E: state.E,
|
|
308
|
-
loadPromise: loadPromiseRef.current,
|
|
301
|
+
const value = {
|
|
302
|
+
...state,
|
|
303
|
+
loadPromise,
|
|
309
304
|
load,
|
|
310
|
-
getItem,
|
|
311
305
|
clear: clear2
|
|
312
306
|
};
|
|
313
307
|
return {
|
|
314
|
-
...
|
|
308
|
+
...value,
|
|
315
309
|
// @ts-ignore
|
|
316
|
-
...managerExtra == null ? void 0 : managerExtra(
|
|
310
|
+
...managerExtra == null ? void 0 : managerExtra(value),
|
|
317
311
|
// @ts-ignore
|
|
318
|
-
...extra == null ? void 0 : extra(
|
|
312
|
+
...extra == null ? void 0 : extra(value),
|
|
313
|
+
stateRef
|
|
319
314
|
};
|
|
320
|
-
}, [state,
|
|
315
|
+
}, [state, loadPromise]);
|
|
321
316
|
return ctx;
|
|
322
317
|
}
|
|
323
318
|
useDict.extend = (extendCode2, extendOptions) => {
|
package/dist/react/index.js
CHANGED
|
@@ -48,7 +48,7 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
48
48
|
);
|
|
49
49
|
defineDictOptionsMap.set(code, cloneDeep(_defineDictOptions));
|
|
50
50
|
const { data, remote, fetch, extra, transformer, itemTransformer } = _defineDictOptions;
|
|
51
|
-
let globalLoadPromise =
|
|
51
|
+
let globalLoadPromise = createPromise();
|
|
52
52
|
let init = false;
|
|
53
53
|
async function loadDict(options, map = /* @__PURE__ */ new Map()) {
|
|
54
54
|
var _a;
|
|
@@ -95,10 +95,14 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
95
95
|
return [key, (_a = transformer == null ? void 0 : transformer(key)) != null ? _a : key];
|
|
96
96
|
})
|
|
97
97
|
);
|
|
98
|
+
const getItem = (value) => {
|
|
99
|
+
return value !== null && value !== void 0 ? newObj[value] : null;
|
|
100
|
+
};
|
|
98
101
|
return {
|
|
99
102
|
map: newObj,
|
|
100
103
|
list: newList,
|
|
101
|
-
E: newE
|
|
104
|
+
E: newE,
|
|
105
|
+
getItem
|
|
102
106
|
};
|
|
103
107
|
};
|
|
104
108
|
function useDict(useDictOptions = {}) {
|
|
@@ -109,86 +113,77 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
109
113
|
...useDictOptions
|
|
110
114
|
};
|
|
111
115
|
const { clone, immediate, refresh } = mergedOptions;
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
);
|
|
116
|
+
const stateRef = useRef(createStateFromMap());
|
|
117
|
+
const clonedLoadPromiseRef = useRef(null);
|
|
115
118
|
const globalMap = useSyncExternalStore(subscribeMap, getMapSnapshot);
|
|
116
119
|
const [clonedMap, setClonedMap] = useState(/* @__PURE__ */ new Map());
|
|
120
|
+
const loadPromise = !clone ? globalLoadPromise : clonedLoadPromiseRef.current;
|
|
117
121
|
const map = !clone ? globalMap : clonedMap;
|
|
118
|
-
const state = useMemo(
|
|
119
|
-
() => createStateFromMap(map),
|
|
120
|
-
[map]
|
|
121
|
-
);
|
|
122
|
+
const state = useMemo(() => createStateFromMap(map), [map]);
|
|
122
123
|
const load = useCallback((options) => {
|
|
123
|
-
const oldLoadPromise =
|
|
124
|
-
|
|
124
|
+
const oldLoadPromise = loadPromise;
|
|
125
|
+
if (!clone) {
|
|
126
|
+
globalLoadPromise = createPromise();
|
|
127
|
+
} else {
|
|
128
|
+
clonedLoadPromiseRef.current = createPromise();
|
|
129
|
+
}
|
|
125
130
|
loadDict({ ...mergedOptions, ...options }).then((map2) => {
|
|
131
|
+
var _a;
|
|
126
132
|
if (!clone) {
|
|
127
133
|
maps[code] = map2;
|
|
128
134
|
emitChange(code);
|
|
129
135
|
} else {
|
|
130
136
|
setClonedMap(map2);
|
|
131
137
|
}
|
|
138
|
+
stateRef.current = createStateFromMap(map2);
|
|
132
139
|
oldLoadPromise == null ? void 0 : oldLoadPromise.resolve(void 0);
|
|
133
|
-
|
|
140
|
+
if (!clone) {
|
|
141
|
+
globalLoadPromise.resolve(void 0);
|
|
142
|
+
} else {
|
|
143
|
+
(_a = clonedLoadPromiseRef.current) == null ? void 0 : _a.resolve(void 0);
|
|
144
|
+
}
|
|
134
145
|
});
|
|
135
|
-
return
|
|
146
|
+
return !clone ? globalLoadPromise : clonedLoadPromiseRef.current;
|
|
136
147
|
}, []);
|
|
137
|
-
const clear2 =
|
|
148
|
+
const clear2 = () => {
|
|
138
149
|
if (!clone) {
|
|
139
150
|
maps[code] = /* @__PURE__ */ new Map();
|
|
140
151
|
emitChange(code);
|
|
141
152
|
return;
|
|
142
153
|
}
|
|
143
154
|
setClonedMap(/* @__PURE__ */ new Map());
|
|
144
|
-
}
|
|
145
|
-
const getItem = useCallback((value) => {
|
|
146
|
-
return value !== null && value !== void 0 ? state.map[value] : null;
|
|
147
|
-
}, [state]);
|
|
155
|
+
};
|
|
148
156
|
useEffect(() => {
|
|
149
|
-
if (
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
globalLoadPromise = createPromise();
|
|
155
|
-
load();
|
|
156
|
-
} else {
|
|
157
|
-
globalLoadPromise.then(() => {
|
|
158
|
-
if (!init) {
|
|
159
|
-
init = true;
|
|
160
|
-
load();
|
|
161
|
-
} else if (refresh) {
|
|
162
|
-
load();
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
157
|
+
if (remote && !immediate) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (clone) {
|
|
161
|
+
load();
|
|
167
162
|
} else {
|
|
168
|
-
if (!
|
|
169
|
-
|
|
170
|
-
|
|
163
|
+
if (!init) {
|
|
164
|
+
init = true;
|
|
165
|
+
load();
|
|
166
|
+
} else if (refresh) {
|
|
167
|
+
load();
|
|
171
168
|
}
|
|
172
169
|
}
|
|
173
170
|
}, []);
|
|
174
171
|
const ctx = useMemo(() => {
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
E: state.E,
|
|
179
|
-
loadPromise: loadPromiseRef.current,
|
|
172
|
+
const value = {
|
|
173
|
+
...state,
|
|
174
|
+
loadPromise,
|
|
180
175
|
load,
|
|
181
|
-
getItem,
|
|
182
176
|
clear: clear2
|
|
183
177
|
};
|
|
184
178
|
return {
|
|
185
|
-
...
|
|
179
|
+
...value,
|
|
186
180
|
// @ts-ignore
|
|
187
|
-
...managerExtra == null ? void 0 : managerExtra(
|
|
181
|
+
...managerExtra == null ? void 0 : managerExtra(value),
|
|
188
182
|
// @ts-ignore
|
|
189
|
-
...extra == null ? void 0 : extra(
|
|
183
|
+
...extra == null ? void 0 : extra(value),
|
|
184
|
+
stateRef
|
|
190
185
|
};
|
|
191
|
-
}, [state,
|
|
186
|
+
}, [state, loadPromise]);
|
|
192
187
|
return ctx;
|
|
193
188
|
}
|
|
194
189
|
useDict.extend = (extendCode2, extendOptions) => {
|
package/dist/types/dict.d.ts
CHANGED
|
@@ -21,6 +21,17 @@ export type Dict<K extends PropertyKey = PropertyKey, I extends Recordable = Dic
|
|
|
21
21
|
load: (options?: O) => LoadPromise;
|
|
22
22
|
clear: () => void;
|
|
23
23
|
getItem: (value?: I['value'] | Nil) => I | Nil;
|
|
24
|
+
stateRef?: {
|
|
25
|
+
current: {
|
|
26
|
+
list: I[];
|
|
27
|
+
E: {
|
|
28
|
+
[X in K]: X;
|
|
29
|
+
};
|
|
30
|
+
map: {
|
|
31
|
+
[X in K]: I;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
24
35
|
};
|
|
25
36
|
export type Fetch = (code: string, options: Recordable) => MaybePromise<DictItemRecord[]>;
|
|
26
37
|
type FetchOptions<F extends Fetch> = Parameters<F>[1] extends infer T ? T extends Nil ? {} : T : {};
|