v-dict 2.0.5 → 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 +41 -55
- package/dist/react/index.js +41 -55
- 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,95 +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
251
|
const state = react.useMemo(() => createStateFromMap(map), [map]);
|
|
248
252
|
const load = react.useCallback((options) => {
|
|
249
|
-
const oldLoadPromise =
|
|
250
|
-
loadPromiseRef.current = createPromise();
|
|
253
|
+
const oldLoadPromise = loadPromise;
|
|
251
254
|
if (!clone) {
|
|
252
|
-
globalLoadPromise =
|
|
255
|
+
globalLoadPromise = createPromise();
|
|
256
|
+
} else {
|
|
257
|
+
clonedLoadPromiseRef.current = createPromise();
|
|
253
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(
|
|
275
|
-
(value) => {
|
|
276
|
-
return value !== null && value !== void 0 ? state.map[value] : null;
|
|
277
|
-
},
|
|
278
|
-
[state]
|
|
279
|
-
);
|
|
284
|
+
};
|
|
280
285
|
react.useEffect(() => {
|
|
281
|
-
if (
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
globalLoadPromise = createPromise();
|
|
287
|
-
if (!clone) {
|
|
288
|
-
loadPromiseRef.current = globalLoadPromise;
|
|
289
|
-
}
|
|
290
|
-
load();
|
|
291
|
-
} else {
|
|
292
|
-
globalLoadPromise.then(() => {
|
|
293
|
-
if (!init) {
|
|
294
|
-
init = true;
|
|
295
|
-
load();
|
|
296
|
-
} else if (refresh) {
|
|
297
|
-
load();
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
}
|
|
286
|
+
if (remote && !immediate) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
if (clone) {
|
|
290
|
+
load();
|
|
302
291
|
} else {
|
|
303
|
-
if (!
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
globalLoadPromise.resolve(void 0);
|
|
292
|
+
if (!init) {
|
|
293
|
+
init = true;
|
|
294
|
+
load();
|
|
295
|
+
} else if (refresh) {
|
|
296
|
+
load();
|
|
309
297
|
}
|
|
310
298
|
}
|
|
311
299
|
}, []);
|
|
312
300
|
const ctx = react.useMemo(() => {
|
|
313
|
-
const
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
E: state.E,
|
|
317
|
-
loadPromise: loadPromiseRef.current,
|
|
301
|
+
const value = {
|
|
302
|
+
...state,
|
|
303
|
+
loadPromise,
|
|
318
304
|
load,
|
|
319
|
-
getItem,
|
|
320
305
|
clear: clear2
|
|
321
306
|
};
|
|
322
307
|
return {
|
|
323
|
-
...
|
|
308
|
+
...value,
|
|
324
309
|
// @ts-ignore
|
|
325
|
-
...managerExtra == null ? void 0 : managerExtra(
|
|
310
|
+
...managerExtra == null ? void 0 : managerExtra(value),
|
|
326
311
|
// @ts-ignore
|
|
327
|
-
...extra == null ? void 0 : extra(
|
|
312
|
+
...extra == null ? void 0 : extra(value),
|
|
313
|
+
stateRef
|
|
328
314
|
};
|
|
329
|
-
}, [state,
|
|
315
|
+
}, [state, loadPromise]);
|
|
330
316
|
return ctx;
|
|
331
317
|
}
|
|
332
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,95 +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
122
|
const state = useMemo(() => createStateFromMap(map), [map]);
|
|
119
123
|
const load = useCallback((options) => {
|
|
120
|
-
const oldLoadPromise =
|
|
121
|
-
loadPromiseRef.current = createPromise();
|
|
124
|
+
const oldLoadPromise = loadPromise;
|
|
122
125
|
if (!clone) {
|
|
123
|
-
globalLoadPromise =
|
|
126
|
+
globalLoadPromise = createPromise();
|
|
127
|
+
} else {
|
|
128
|
+
clonedLoadPromiseRef.current = createPromise();
|
|
124
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(
|
|
146
|
-
(value) => {
|
|
147
|
-
return value !== null && value !== void 0 ? state.map[value] : null;
|
|
148
|
-
},
|
|
149
|
-
[state]
|
|
150
|
-
);
|
|
155
|
+
};
|
|
151
156
|
useEffect(() => {
|
|
152
|
-
if (
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
globalLoadPromise = createPromise();
|
|
158
|
-
if (!clone) {
|
|
159
|
-
loadPromiseRef.current = globalLoadPromise;
|
|
160
|
-
}
|
|
161
|
-
load();
|
|
162
|
-
} else {
|
|
163
|
-
globalLoadPromise.then(() => {
|
|
164
|
-
if (!init) {
|
|
165
|
-
init = true;
|
|
166
|
-
load();
|
|
167
|
-
} else if (refresh) {
|
|
168
|
-
load();
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}
|
|
157
|
+
if (remote && !immediate) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (clone) {
|
|
161
|
+
load();
|
|
173
162
|
} else {
|
|
174
|
-
if (!
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
globalLoadPromise.resolve(void 0);
|
|
163
|
+
if (!init) {
|
|
164
|
+
init = true;
|
|
165
|
+
load();
|
|
166
|
+
} else if (refresh) {
|
|
167
|
+
load();
|
|
180
168
|
}
|
|
181
169
|
}
|
|
182
170
|
}, []);
|
|
183
171
|
const ctx = useMemo(() => {
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
E: state.E,
|
|
188
|
-
loadPromise: loadPromiseRef.current,
|
|
172
|
+
const value = {
|
|
173
|
+
...state,
|
|
174
|
+
loadPromise,
|
|
189
175
|
load,
|
|
190
|
-
getItem,
|
|
191
176
|
clear: clear2
|
|
192
177
|
};
|
|
193
178
|
return {
|
|
194
|
-
...
|
|
179
|
+
...value,
|
|
195
180
|
// @ts-ignore
|
|
196
|
-
...managerExtra == null ? void 0 : managerExtra(
|
|
181
|
+
...managerExtra == null ? void 0 : managerExtra(value),
|
|
197
182
|
// @ts-ignore
|
|
198
|
-
...extra == null ? void 0 : extra(
|
|
183
|
+
...extra == null ? void 0 : extra(value),
|
|
184
|
+
stateRef
|
|
199
185
|
};
|
|
200
|
-
}, [state,
|
|
186
|
+
}, [state, loadPromise]);
|
|
201
187
|
return ctx;
|
|
202
188
|
}
|
|
203
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 : {};
|