v-dict 1.2.11 → 2.0.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-QAVWCRC2.js → chunk-SXX4ZFIR.js} +13 -13
- package/dist/index.cjs +44 -34
- package/dist/index.d.ts +1 -3
- package/dist/index.js +32 -22
- package/dist/react/index.cjs +72 -68
- package/dist/react/index.js +62 -58
- package/dist/util.d.ts +11 -4
- package/dist/vue/index.d.ts +3 -0
- package/dist/{dict-manager.d.ts → vue/vue-dict-manager.d.ts} +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// src/util.ts
|
|
2
|
+
var warn = (msg) => console.warn(`[v-dict]: ${msg}`);
|
|
2
3
|
function isFunction(fn) {
|
|
3
4
|
return typeof fn === "function";
|
|
4
5
|
}
|
|
@@ -7,7 +8,10 @@ function clearObj(obj) {
|
|
|
7
8
|
delete obj[key];
|
|
8
9
|
}
|
|
9
10
|
}
|
|
10
|
-
function mapToObj(map,
|
|
11
|
+
function mapToObj(map, {
|
|
12
|
+
obj = {},
|
|
13
|
+
itemTransformer
|
|
14
|
+
} = {}) {
|
|
11
15
|
var _a;
|
|
12
16
|
clearObj(obj);
|
|
13
17
|
for (const [key, value] of map) {
|
|
@@ -23,21 +27,17 @@ function checkObjItem(item, key, transformer) {
|
|
|
23
27
|
item.value = transformer(item.value);
|
|
24
28
|
}
|
|
25
29
|
}
|
|
26
|
-
function mapToList(map,
|
|
27
|
-
|
|
30
|
+
function mapToList(map, {
|
|
31
|
+
list = [],
|
|
32
|
+
itemTransformer
|
|
33
|
+
} = {}) {
|
|
34
|
+
const values = isFunction(itemTransformer) ? map.values().map(itemTransformer) : map.values();
|
|
28
35
|
list.splice(0, list.length, ...values);
|
|
29
36
|
return list;
|
|
30
37
|
}
|
|
31
|
-
function
|
|
32
|
-
return new Map(list.map((item) => [item.value, item]));
|
|
33
|
-
}
|
|
34
|
-
function toMap(data, options = {}) {
|
|
35
|
-
const { pickValues = [], omitValues = [], transformer } = options;
|
|
38
|
+
function toMap(data, { map = /* @__PURE__ */ new Map(), pickValues = [], omitValues = [], transformer } = {}) {
|
|
36
39
|
const filterFn = (value) => (pickValues.length === 0 || pickValues.includes(value)) && !omitValues.includes(value);
|
|
37
|
-
|
|
38
|
-
return listToMap(data.filter((item) => filterFn(item.value)));
|
|
39
|
-
}
|
|
40
|
-
const map = /* @__PURE__ */ new Map();
|
|
40
|
+
map.clear();
|
|
41
41
|
Object.entries(data).filter(([key, item]) => {
|
|
42
42
|
checkObjItem(item, key, transformer);
|
|
43
43
|
return filterFn(item.value);
|
|
@@ -125,4 +125,4 @@ function createPromise(executor) {
|
|
|
125
125
|
return promise;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
export {
|
|
128
|
+
export { cloneDeep, createPromise, defineDictData, isFunction, mapToList, mapToObj, merge, toMap, warn };
|
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var vue = require('vue');
|
|
4
4
|
|
|
5
|
-
// src/dict-manager.ts
|
|
5
|
+
// src/vue/vue-dict-manager.ts
|
|
6
6
|
|
|
7
7
|
// src/create-promise.ts
|
|
8
8
|
var noop = () => {
|
|
@@ -25,6 +25,7 @@ function createPromise(executor) {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
// src/util.ts
|
|
28
|
+
var warn = (msg) => console.warn(`[v-dict]: ${msg}`);
|
|
28
29
|
function isFunction(fn) {
|
|
29
30
|
return typeof fn === "function";
|
|
30
31
|
}
|
|
@@ -33,7 +34,10 @@ function clearObj(obj) {
|
|
|
33
34
|
delete obj[key];
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
|
-
function mapToObj(map,
|
|
37
|
+
function mapToObj(map, {
|
|
38
|
+
obj = {},
|
|
39
|
+
itemTransformer
|
|
40
|
+
} = {}) {
|
|
37
41
|
var _a;
|
|
38
42
|
clearObj(obj);
|
|
39
43
|
for (const [key, value] of map) {
|
|
@@ -49,21 +53,17 @@ function checkObjItem(item, key, transformer) {
|
|
|
49
53
|
item.value = transformer(item.value);
|
|
50
54
|
}
|
|
51
55
|
}
|
|
52
|
-
function mapToList(map,
|
|
53
|
-
|
|
56
|
+
function mapToList(map, {
|
|
57
|
+
list = [],
|
|
58
|
+
itemTransformer
|
|
59
|
+
} = {}) {
|
|
60
|
+
const values = isFunction(itemTransformer) ? map.values().map(itemTransformer) : map.values();
|
|
54
61
|
list.splice(0, list.length, ...values);
|
|
55
62
|
return list;
|
|
56
63
|
}
|
|
57
|
-
function
|
|
58
|
-
return new Map(list.map((item) => [item.value, item]));
|
|
59
|
-
}
|
|
60
|
-
function toMap(data, options = {}) {
|
|
61
|
-
const { pickValues = [], omitValues = [], transformer } = options;
|
|
64
|
+
function toMap(data, { map = /* @__PURE__ */ new Map(), pickValues = [], omitValues = [], transformer } = {}) {
|
|
62
65
|
const filterFn = (value) => (pickValues.length === 0 || pickValues.includes(value)) && !omitValues.includes(value);
|
|
63
|
-
|
|
64
|
-
return listToMap(data.filter((item) => filterFn(item.value)));
|
|
65
|
-
}
|
|
66
|
-
const map = /* @__PURE__ */ new Map();
|
|
66
|
+
map.clear();
|
|
67
67
|
Object.entries(data).filter(([key, item]) => {
|
|
68
68
|
checkObjItem(item, key, transformer);
|
|
69
69
|
return filterFn(item.value);
|
|
@@ -131,8 +131,7 @@ function cloneDeep(value) {
|
|
|
131
131
|
return value;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
// src/dict-manager.ts
|
|
135
|
-
var warn = (msg) => console.warn(`[v-dict]: ${msg}`);
|
|
134
|
+
// src/vue/vue-dict-manager.ts
|
|
136
135
|
function createDictManager(createDictManagerOptions = {}) {
|
|
137
136
|
const {
|
|
138
137
|
fetch: managerFetch,
|
|
@@ -148,12 +147,14 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
148
147
|
(_a = maps[code]) == null ? void 0 : _a.clear();
|
|
149
148
|
return;
|
|
150
149
|
}
|
|
151
|
-
|
|
150
|
+
Object.values(maps).forEach((map) => map.clear());
|
|
152
151
|
}
|
|
153
152
|
function _defineDict(defineDictInternalOptions, code, defineDictOptions) {
|
|
154
153
|
const { pickValues, omitValues, extendCode } = defineDictInternalOptions;
|
|
155
154
|
if (maps[code]) {
|
|
156
155
|
warn(`code "${code}" already exists`);
|
|
156
|
+
} else {
|
|
157
|
+
maps[code] = /* @__PURE__ */ new Map();
|
|
157
158
|
}
|
|
158
159
|
const _defineDictOptions = Object.assign(
|
|
159
160
|
{
|
|
@@ -167,9 +168,8 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
167
168
|
);
|
|
168
169
|
defineDictOptionsMap.set(code, cloneDeep(_defineDictOptions));
|
|
169
170
|
const { data, remote, fetch, extra, transformer, itemTransformer } = _defineDictOptions;
|
|
170
|
-
|
|
171
|
-
let
|
|
172
|
-
maps[code] = /* @__PURE__ */ new Map();
|
|
171
|
+
let globalLoadPromise = null;
|
|
172
|
+
let init = false;
|
|
173
173
|
async function loadDict(options, mapRef) {
|
|
174
174
|
var _a;
|
|
175
175
|
const dataMap = toMap(cloneDeep(data), { pickValues, omitValues, transformer });
|
|
@@ -191,21 +191,23 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
191
191
|
useDictOptions
|
|
192
192
|
);
|
|
193
193
|
const { clone, immediate, refresh } = useDictOptions;
|
|
194
|
-
const loadPromise =
|
|
195
|
-
|
|
194
|
+
const loadPromise = vue.shallowRef(
|
|
195
|
+
!clone ? globalLoadPromise : createPromise()
|
|
196
|
+
);
|
|
197
|
+
const mapRef = !clone ? vue.toRef(maps, code) : vue.ref(/* @__PURE__ */ new Map());
|
|
196
198
|
const objRef = vue.ref(/* @__PURE__ */ Object.create(null));
|
|
197
199
|
const listRef = vue.ref([]);
|
|
198
200
|
if (!remote || immediate) {
|
|
199
201
|
if (clone) {
|
|
200
202
|
load();
|
|
201
203
|
} else {
|
|
202
|
-
if (!globalLoadPromise
|
|
203
|
-
globalLoadPromise
|
|
204
|
+
if (!globalLoadPromise) {
|
|
205
|
+
globalLoadPromise = createPromise();
|
|
204
206
|
load();
|
|
205
207
|
} else {
|
|
206
|
-
globalLoadPromise.
|
|
207
|
-
if (!
|
|
208
|
-
|
|
208
|
+
globalLoadPromise.then(() => {
|
|
209
|
+
if (!init) {
|
|
210
|
+
init = true;
|
|
209
211
|
load();
|
|
210
212
|
} else if (refresh) {
|
|
211
213
|
load();
|
|
@@ -214,9 +216,9 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
214
216
|
}
|
|
215
217
|
}
|
|
216
218
|
} else {
|
|
217
|
-
if (!globalLoadPromise
|
|
218
|
-
globalLoadPromise
|
|
219
|
-
globalLoadPromise.
|
|
219
|
+
if (!globalLoadPromise) {
|
|
220
|
+
globalLoadPromise = createPromise();
|
|
221
|
+
globalLoadPromise.resolve();
|
|
220
222
|
}
|
|
221
223
|
}
|
|
222
224
|
function load(options) {
|
|
@@ -229,24 +231,30 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
229
231
|
return loadPromise.value;
|
|
230
232
|
}
|
|
231
233
|
function _clear() {
|
|
232
|
-
|
|
233
|
-
(_a = mapRef.value) == null ? void 0 : _a.clear();
|
|
234
|
+
mapRef.value.clear();
|
|
234
235
|
}
|
|
235
236
|
vue.watch(
|
|
236
237
|
mapRef,
|
|
237
238
|
(newValue) => {
|
|
238
239
|
newValue != null ? newValue : newValue = /* @__PURE__ */ new Map();
|
|
239
|
-
mapToObj(newValue,
|
|
240
|
-
|
|
240
|
+
mapToObj(newValue, {
|
|
241
|
+
obj: objRef.value,
|
|
242
|
+
itemTransformer
|
|
243
|
+
});
|
|
244
|
+
mapToList(newValue, {
|
|
245
|
+
list: listRef.value,
|
|
246
|
+
itemTransformer
|
|
247
|
+
});
|
|
241
248
|
},
|
|
242
249
|
{ deep: true, immediate: true }
|
|
243
250
|
);
|
|
244
251
|
const E = vue.computed(() => {
|
|
252
|
+
var _a;
|
|
245
253
|
const result = {};
|
|
246
254
|
if (!mapRef.value)
|
|
247
255
|
return result;
|
|
248
256
|
for (const key of mapRef.value.keys()) {
|
|
249
|
-
result[key] = key;
|
|
257
|
+
result[key] = (_a = transformer == null ? void 0 : transformer(key)) != null ? _a : key;
|
|
250
258
|
}
|
|
251
259
|
return result;
|
|
252
260
|
});
|
|
@@ -266,7 +274,9 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
266
274
|
const reactiveCtx = vue.reactive(ctx);
|
|
267
275
|
return vue.reactive({
|
|
268
276
|
...ctx,
|
|
277
|
+
// @ts-ignore
|
|
269
278
|
...managerExtra == null ? void 0 : managerExtra(reactiveCtx),
|
|
279
|
+
// @ts-ignore
|
|
270
280
|
...extra == null ? void 0 : extra(reactiveCtx)
|
|
271
281
|
});
|
|
272
282
|
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { defineDictData } from './chunk-
|
|
1
|
+
import { warn, isFunction, cloneDeep, createPromise, mapToObj, mapToList, toMap, merge } from './chunk-SXX4ZFIR.js';
|
|
2
|
+
export { defineDictData } from './chunk-SXX4ZFIR.js';
|
|
3
3
|
import { reactive, readonly, shallowRef, toRef, ref, watch, computed } from 'vue';
|
|
4
4
|
|
|
5
|
-
var warn = (msg) => console.warn(`[v-dict]: ${msg}`);
|
|
6
5
|
function createDictManager(createDictManagerOptions = {}) {
|
|
7
6
|
const {
|
|
8
7
|
fetch: managerFetch,
|
|
@@ -18,12 +17,14 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
18
17
|
(_a = maps[code]) == null ? void 0 : _a.clear();
|
|
19
18
|
return;
|
|
20
19
|
}
|
|
21
|
-
|
|
20
|
+
Object.values(maps).forEach((map) => map.clear());
|
|
22
21
|
}
|
|
23
22
|
function _defineDict(defineDictInternalOptions, code, defineDictOptions) {
|
|
24
23
|
const { pickValues, omitValues, extendCode } = defineDictInternalOptions;
|
|
25
24
|
if (maps[code]) {
|
|
26
25
|
warn(`code "${code}" already exists`);
|
|
26
|
+
} else {
|
|
27
|
+
maps[code] = /* @__PURE__ */ new Map();
|
|
27
28
|
}
|
|
28
29
|
const _defineDictOptions = Object.assign(
|
|
29
30
|
{
|
|
@@ -37,9 +38,8 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
37
38
|
);
|
|
38
39
|
defineDictOptionsMap.set(code, cloneDeep(_defineDictOptions));
|
|
39
40
|
const { data, remote, fetch, extra, transformer, itemTransformer } = _defineDictOptions;
|
|
40
|
-
|
|
41
|
-
let
|
|
42
|
-
maps[code] = /* @__PURE__ */ new Map();
|
|
41
|
+
let globalLoadPromise = null;
|
|
42
|
+
let init = false;
|
|
43
43
|
async function loadDict(options, mapRef) {
|
|
44
44
|
var _a;
|
|
45
45
|
const dataMap = toMap(cloneDeep(data), { pickValues, omitValues, transformer });
|
|
@@ -61,21 +61,23 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
61
61
|
useDictOptions
|
|
62
62
|
);
|
|
63
63
|
const { clone, immediate, refresh } = useDictOptions;
|
|
64
|
-
const loadPromise =
|
|
65
|
-
|
|
64
|
+
const loadPromise = shallowRef(
|
|
65
|
+
!clone ? globalLoadPromise : createPromise()
|
|
66
|
+
);
|
|
67
|
+
const mapRef = !clone ? toRef(maps, code) : ref(/* @__PURE__ */ new Map());
|
|
66
68
|
const objRef = ref(/* @__PURE__ */ Object.create(null));
|
|
67
69
|
const listRef = ref([]);
|
|
68
70
|
if (!remote || immediate) {
|
|
69
71
|
if (clone) {
|
|
70
72
|
load();
|
|
71
73
|
} else {
|
|
72
|
-
if (!globalLoadPromise
|
|
73
|
-
globalLoadPromise
|
|
74
|
+
if (!globalLoadPromise) {
|
|
75
|
+
globalLoadPromise = createPromise();
|
|
74
76
|
load();
|
|
75
77
|
} else {
|
|
76
|
-
globalLoadPromise.
|
|
77
|
-
if (!
|
|
78
|
-
|
|
78
|
+
globalLoadPromise.then(() => {
|
|
79
|
+
if (!init) {
|
|
80
|
+
init = true;
|
|
79
81
|
load();
|
|
80
82
|
} else if (refresh) {
|
|
81
83
|
load();
|
|
@@ -84,9 +86,9 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
88
|
} else {
|
|
87
|
-
if (!globalLoadPromise
|
|
88
|
-
globalLoadPromise
|
|
89
|
-
globalLoadPromise.
|
|
89
|
+
if (!globalLoadPromise) {
|
|
90
|
+
globalLoadPromise = createPromise();
|
|
91
|
+
globalLoadPromise.resolve();
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
94
|
function load(options) {
|
|
@@ -99,24 +101,30 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
99
101
|
return loadPromise.value;
|
|
100
102
|
}
|
|
101
103
|
function _clear() {
|
|
102
|
-
|
|
103
|
-
(_a = mapRef.value) == null ? void 0 : _a.clear();
|
|
104
|
+
mapRef.value.clear();
|
|
104
105
|
}
|
|
105
106
|
watch(
|
|
106
107
|
mapRef,
|
|
107
108
|
(newValue) => {
|
|
108
109
|
newValue != null ? newValue : newValue = /* @__PURE__ */ new Map();
|
|
109
|
-
mapToObj(newValue,
|
|
110
|
-
|
|
110
|
+
mapToObj(newValue, {
|
|
111
|
+
obj: objRef.value,
|
|
112
|
+
itemTransformer
|
|
113
|
+
});
|
|
114
|
+
mapToList(newValue, {
|
|
115
|
+
list: listRef.value,
|
|
116
|
+
itemTransformer
|
|
117
|
+
});
|
|
111
118
|
},
|
|
112
119
|
{ deep: true, immediate: true }
|
|
113
120
|
);
|
|
114
121
|
const E = computed(() => {
|
|
122
|
+
var _a;
|
|
115
123
|
const result = {};
|
|
116
124
|
if (!mapRef.value)
|
|
117
125
|
return result;
|
|
118
126
|
for (const key of mapRef.value.keys()) {
|
|
119
|
-
result[key] = key;
|
|
127
|
+
result[key] = (_a = transformer == null ? void 0 : transformer(key)) != null ? _a : key;
|
|
120
128
|
}
|
|
121
129
|
return result;
|
|
122
130
|
});
|
|
@@ -136,7 +144,9 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
136
144
|
const reactiveCtx = reactive(ctx);
|
|
137
145
|
return reactive({
|
|
138
146
|
...ctx,
|
|
147
|
+
// @ts-ignore
|
|
139
148
|
...managerExtra == null ? void 0 : managerExtra(reactiveCtx),
|
|
149
|
+
// @ts-ignore
|
|
140
150
|
...extra == null ? void 0 : extra(reactiveCtx)
|
|
141
151
|
});
|
|
142
152
|
}
|
package/dist/react/index.cjs
CHANGED
|
@@ -25,6 +25,7 @@ function createPromise(executor) {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
// src/util.ts
|
|
28
|
+
var warn = (msg) => console.warn(`[v-dict]: ${msg}`);
|
|
28
29
|
function isFunction(fn) {
|
|
29
30
|
return typeof fn === "function";
|
|
30
31
|
}
|
|
@@ -33,7 +34,10 @@ function clearObj(obj) {
|
|
|
33
34
|
delete obj[key];
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
|
-
function mapToObj(map,
|
|
37
|
+
function mapToObj(map, {
|
|
38
|
+
obj = {},
|
|
39
|
+
itemTransformer
|
|
40
|
+
} = {}) {
|
|
37
41
|
var _a;
|
|
38
42
|
clearObj(obj);
|
|
39
43
|
for (const [key, value] of map) {
|
|
@@ -49,21 +53,17 @@ function checkObjItem(item, key, transformer) {
|
|
|
49
53
|
item.value = transformer(item.value);
|
|
50
54
|
}
|
|
51
55
|
}
|
|
52
|
-
function mapToList(map,
|
|
53
|
-
|
|
56
|
+
function mapToList(map, {
|
|
57
|
+
list = [],
|
|
58
|
+
itemTransformer
|
|
59
|
+
} = {}) {
|
|
60
|
+
const values = isFunction(itemTransformer) ? map.values().map(itemTransformer) : map.values();
|
|
54
61
|
list.splice(0, list.length, ...values);
|
|
55
62
|
return list;
|
|
56
63
|
}
|
|
57
|
-
function
|
|
58
|
-
return new Map(list.map((item) => [item.value, item]));
|
|
59
|
-
}
|
|
60
|
-
function toMap(data, options = {}) {
|
|
61
|
-
const { pickValues = [], omitValues = [], transformer } = options;
|
|
64
|
+
function toMap(data, { map = /* @__PURE__ */ new Map(), pickValues = [], omitValues = [], transformer } = {}) {
|
|
62
65
|
const filterFn = (value) => (pickValues.length === 0 || pickValues.includes(value)) && !omitValues.includes(value);
|
|
63
|
-
|
|
64
|
-
return listToMap(data.filter((item) => filterFn(item.value)));
|
|
65
|
-
}
|
|
66
|
-
const map = /* @__PURE__ */ new Map();
|
|
66
|
+
map.clear();
|
|
67
67
|
Object.entries(data).filter(([key, item]) => {
|
|
68
68
|
checkObjItem(item, key, transformer);
|
|
69
69
|
return filterFn(item.value);
|
|
@@ -132,7 +132,6 @@ function cloneDeep(value) {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
// src/react/react-dict-manager.ts
|
|
135
|
-
var warn = (msg) => console.warn(`[v-dict/react]: ${msg}`);
|
|
136
135
|
function createDictManager(createDictManagerOptions = {}) {
|
|
137
136
|
const {
|
|
138
137
|
fetch: managerFetch,
|
|
@@ -140,20 +139,24 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
140
139
|
transformer: managerTransformer,
|
|
141
140
|
itemTransformer: managerItemTransformer
|
|
142
141
|
} = createDictManagerOptions;
|
|
143
|
-
const maps = /* @__PURE__ */ Object.create(null);
|
|
144
142
|
const defineDictOptionsMap = /* @__PURE__ */ new Map();
|
|
143
|
+
const maps = /* @__PURE__ */ Object.create(null);
|
|
144
|
+
const versionMap = /* @__PURE__ */ Object.create(null);
|
|
145
145
|
function clear(code) {
|
|
146
146
|
var _a;
|
|
147
147
|
if (code) {
|
|
148
148
|
(_a = maps[code]) == null ? void 0 : _a.clear();
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
151
|
-
|
|
151
|
+
Object.values(maps).forEach((map) => map.clear());
|
|
152
152
|
}
|
|
153
153
|
function _defineDict(defineDictInternalOptions, code, defineDictOptions) {
|
|
154
154
|
const { pickValues, omitValues, extendCode } = defineDictInternalOptions;
|
|
155
155
|
if (maps[code]) {
|
|
156
156
|
warn(`code "${code}" already exists`);
|
|
157
|
+
} else {
|
|
158
|
+
maps[code] = /* @__PURE__ */ new Map();
|
|
159
|
+
versionMap[code] = 0;
|
|
157
160
|
}
|
|
158
161
|
const _defineDictOptions = Object.assign(
|
|
159
162
|
{
|
|
@@ -168,82 +171,81 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
168
171
|
defineDictOptionsMap.set(code, cloneDeep(_defineDictOptions));
|
|
169
172
|
const { data, remote, fetch, extra, transformer, itemTransformer } = _defineDictOptions;
|
|
170
173
|
let globalLoadPromise = null;
|
|
171
|
-
let
|
|
172
|
-
maps[code] = /* @__PURE__ */ new Map();
|
|
174
|
+
let init = false;
|
|
173
175
|
async function loadDict(options, mapRef) {
|
|
174
176
|
var _a;
|
|
175
|
-
const dataMap = toMap(cloneDeep(data), { pickValues, omitValues, transformer });
|
|
176
177
|
if (remote) {
|
|
177
178
|
const res = (_a = await (fetch == null ? void 0 : fetch(extendCode != null ? extendCode : code, options))) != null ? _a : [];
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
179
|
+
toMap(res, { pickValues, omitValues, transformer, map: mapRef.current });
|
|
180
|
+
toMap(cloneDeep(data), { pickValues, omitValues, transformer }).forEach(
|
|
181
|
+
(value, key) => {
|
|
182
|
+
if (mapRef.current.has(key)) {
|
|
183
|
+
merge(mapRef.current.get(key), value);
|
|
184
|
+
}
|
|
182
185
|
}
|
|
183
|
-
|
|
186
|
+
);
|
|
184
187
|
} else {
|
|
185
|
-
mapRef.current
|
|
188
|
+
toMap(cloneDeep(data), { pickValues, omitValues, transformer, map: mapRef.current });
|
|
186
189
|
}
|
|
190
|
+
versionMap[code] += 1;
|
|
187
191
|
}
|
|
188
192
|
function useDict(useDictOptions = {}) {
|
|
189
|
-
const mergedOptions =
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
+
const mergedOptions = {
|
|
194
|
+
clone: false,
|
|
195
|
+
immediate: true,
|
|
196
|
+
refresh: false,
|
|
197
|
+
...useDictOptions
|
|
198
|
+
};
|
|
193
199
|
const { clone, immediate, refresh } = mergedOptions;
|
|
194
200
|
const loadPromiseRef = react.useRef(
|
|
195
|
-
!clone ? globalLoadPromise
|
|
201
|
+
!clone ? globalLoadPromise : createPromise()
|
|
196
202
|
);
|
|
197
203
|
const mapRef = react.useRef(!clone ? maps[code] : /* @__PURE__ */ new Map());
|
|
198
|
-
const
|
|
199
|
-
const
|
|
200
|
-
const synMapRef = () => {
|
|
204
|
+
const versionRef = react.useRef(0);
|
|
205
|
+
const getStateFromMapRef = () => {
|
|
201
206
|
const newObj = /* @__PURE__ */ Object.create(null);
|
|
202
207
|
const newList = [];
|
|
203
|
-
mapToObj(mapRef.current,
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
208
|
+
mapToObj(mapRef.current, {
|
|
209
|
+
obj: newObj,
|
|
210
|
+
itemTransformer
|
|
211
|
+
});
|
|
212
|
+
mapToList(mapRef.current, {
|
|
213
|
+
list: newList,
|
|
214
|
+
itemTransformer
|
|
215
|
+
});
|
|
216
|
+
const newE = Object.fromEntries(
|
|
217
|
+
Array.from(mapRef.current.keys()).map((key) => {
|
|
218
|
+
var _a;
|
|
219
|
+
return [key, (_a = transformer == null ? void 0 : transformer(key)) != null ? _a : key];
|
|
220
|
+
})
|
|
211
221
|
);
|
|
222
|
+
return {
|
|
223
|
+
map: newObj,
|
|
224
|
+
list: newList,
|
|
225
|
+
E: newE
|
|
226
|
+
};
|
|
212
227
|
};
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
});
|
|
228
|
+
const [state, setState] = react.useState(getStateFromMapRef());
|
|
229
|
+
if (versionRef.current !== versionMap[code]) {
|
|
230
|
+
versionRef.current = versionMap[code];
|
|
231
|
+
setState(getStateFromMapRef());
|
|
232
|
+
}
|
|
219
233
|
const load = react.useCallback((options) => {
|
|
220
234
|
const oldLoadPromise = loadPromiseRef.current;
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
synMapRef();
|
|
225
|
-
setState({
|
|
226
|
-
map: objRef.current,
|
|
227
|
-
list: listRef.current,
|
|
228
|
-
E: extractE()
|
|
229
|
-
});
|
|
235
|
+
loadPromiseRef.current = createPromise();
|
|
236
|
+
loadDict({ ...mergedOptions, ...options }, mapRef).then(() => {
|
|
237
|
+
setState(getStateFromMapRef());
|
|
230
238
|
oldLoadPromise == null ? void 0 : oldLoadPromise.resolve(void 0);
|
|
231
|
-
|
|
239
|
+
loadPromiseRef.current.resolve(void 0);
|
|
232
240
|
});
|
|
233
|
-
return
|
|
241
|
+
return loadPromiseRef.current;
|
|
234
242
|
}, []);
|
|
235
243
|
const clear2 = react.useCallback(() => {
|
|
236
|
-
|
|
237
|
-
(
|
|
238
|
-
setState({
|
|
239
|
-
map: /* @__PURE__ */ Object.create(null),
|
|
240
|
-
list: [],
|
|
241
|
-
E: {}
|
|
242
|
-
});
|
|
244
|
+
mapRef.current.clear();
|
|
245
|
+
setState(getStateFromMapRef());
|
|
243
246
|
}, []);
|
|
244
247
|
const getItem = react.useCallback((value) => {
|
|
245
|
-
|
|
246
|
-
return value !== null && value !== void 0 ? (_a = mapRef.current) == null ? void 0 : _a.get(value) : null;
|
|
248
|
+
return value !== null && value !== void 0 ? mapRef.current.get(value) : null;
|
|
247
249
|
}, []);
|
|
248
250
|
react.useEffect(() => {
|
|
249
251
|
if (!remote || immediate) {
|
|
@@ -255,8 +257,8 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
255
257
|
load();
|
|
256
258
|
} else {
|
|
257
259
|
globalLoadPromise.then(() => {
|
|
258
|
-
if (!
|
|
259
|
-
|
|
260
|
+
if (!init) {
|
|
261
|
+
init = true;
|
|
260
262
|
load();
|
|
261
263
|
} else if (refresh) {
|
|
262
264
|
load();
|
|
@@ -283,7 +285,9 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
283
285
|
};
|
|
284
286
|
return {
|
|
285
287
|
..._ctx,
|
|
288
|
+
// @ts-ignore
|
|
286
289
|
...managerExtra == null ? void 0 : managerExtra(_ctx),
|
|
290
|
+
// @ts-ignore
|
|
287
291
|
...extra == null ? void 0 : extra(_ctx)
|
|
288
292
|
};
|
|
289
293
|
}, [state]);
|
package/dist/react/index.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { defineDictData } from '../chunk-
|
|
1
|
+
import { warn, isFunction, cloneDeep, createPromise, toMap, merge, mapToObj, mapToList } from '../chunk-SXX4ZFIR.js';
|
|
2
|
+
export { defineDictData } from '../chunk-SXX4ZFIR.js';
|
|
3
3
|
import { useRef, useState, useCallback, useEffect, useMemo } from 'react';
|
|
4
4
|
|
|
5
|
-
var warn = (msg) => console.warn(`[v-dict/react]: ${msg}`);
|
|
6
5
|
function createDictManager(createDictManagerOptions = {}) {
|
|
7
6
|
const {
|
|
8
7
|
fetch: managerFetch,
|
|
@@ -10,20 +9,24 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
10
9
|
transformer: managerTransformer,
|
|
11
10
|
itemTransformer: managerItemTransformer
|
|
12
11
|
} = createDictManagerOptions;
|
|
13
|
-
const maps = /* @__PURE__ */ Object.create(null);
|
|
14
12
|
const defineDictOptionsMap = /* @__PURE__ */ new Map();
|
|
13
|
+
const maps = /* @__PURE__ */ Object.create(null);
|
|
14
|
+
const versionMap = /* @__PURE__ */ Object.create(null);
|
|
15
15
|
function clear(code) {
|
|
16
16
|
var _a;
|
|
17
17
|
if (code) {
|
|
18
18
|
(_a = maps[code]) == null ? void 0 : _a.clear();
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
Object.values(maps).forEach((map) => map.clear());
|
|
22
22
|
}
|
|
23
23
|
function _defineDict(defineDictInternalOptions, code, defineDictOptions) {
|
|
24
24
|
const { pickValues, omitValues, extendCode } = defineDictInternalOptions;
|
|
25
25
|
if (maps[code]) {
|
|
26
26
|
warn(`code "${code}" already exists`);
|
|
27
|
+
} else {
|
|
28
|
+
maps[code] = /* @__PURE__ */ new Map();
|
|
29
|
+
versionMap[code] = 0;
|
|
27
30
|
}
|
|
28
31
|
const _defineDictOptions = Object.assign(
|
|
29
32
|
{
|
|
@@ -38,82 +41,81 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
38
41
|
defineDictOptionsMap.set(code, cloneDeep(_defineDictOptions));
|
|
39
42
|
const { data, remote, fetch, extra, transformer, itemTransformer } = _defineDictOptions;
|
|
40
43
|
let globalLoadPromise = null;
|
|
41
|
-
let
|
|
42
|
-
maps[code] = /* @__PURE__ */ new Map();
|
|
44
|
+
let init = false;
|
|
43
45
|
async function loadDict(options, mapRef) {
|
|
44
46
|
var _a;
|
|
45
|
-
const dataMap = toMap(cloneDeep(data), { pickValues, omitValues, transformer });
|
|
46
47
|
if (remote) {
|
|
47
48
|
const res = (_a = await (fetch == null ? void 0 : fetch(extendCode != null ? extendCode : code, options))) != null ? _a : [];
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
toMap(res, { pickValues, omitValues, transformer, map: mapRef.current });
|
|
50
|
+
toMap(cloneDeep(data), { pickValues, omitValues, transformer }).forEach(
|
|
51
|
+
(value, key) => {
|
|
52
|
+
if (mapRef.current.has(key)) {
|
|
53
|
+
merge(mapRef.current.get(key), value);
|
|
54
|
+
}
|
|
52
55
|
}
|
|
53
|
-
|
|
56
|
+
);
|
|
54
57
|
} else {
|
|
55
|
-
mapRef.current
|
|
58
|
+
toMap(cloneDeep(data), { pickValues, omitValues, transformer, map: mapRef.current });
|
|
56
59
|
}
|
|
60
|
+
versionMap[code] += 1;
|
|
57
61
|
}
|
|
58
62
|
function useDict(useDictOptions = {}) {
|
|
59
|
-
const mergedOptions =
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
const mergedOptions = {
|
|
64
|
+
clone: false,
|
|
65
|
+
immediate: true,
|
|
66
|
+
refresh: false,
|
|
67
|
+
...useDictOptions
|
|
68
|
+
};
|
|
63
69
|
const { clone, immediate, refresh } = mergedOptions;
|
|
64
70
|
const loadPromiseRef = useRef(
|
|
65
|
-
!clone ? globalLoadPromise
|
|
71
|
+
!clone ? globalLoadPromise : createPromise()
|
|
66
72
|
);
|
|
67
73
|
const mapRef = useRef(!clone ? maps[code] : /* @__PURE__ */ new Map());
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
const synMapRef = () => {
|
|
74
|
+
const versionRef = useRef(0);
|
|
75
|
+
const getStateFromMapRef = () => {
|
|
71
76
|
const newObj = /* @__PURE__ */ Object.create(null);
|
|
72
77
|
const newList = [];
|
|
73
|
-
mapToObj(mapRef.current,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
mapToObj(mapRef.current, {
|
|
79
|
+
obj: newObj,
|
|
80
|
+
itemTransformer
|
|
81
|
+
});
|
|
82
|
+
mapToList(mapRef.current, {
|
|
83
|
+
list: newList,
|
|
84
|
+
itemTransformer
|
|
85
|
+
});
|
|
86
|
+
const newE = Object.fromEntries(
|
|
87
|
+
Array.from(mapRef.current.keys()).map((key) => {
|
|
88
|
+
var _a;
|
|
89
|
+
return [key, (_a = transformer == null ? void 0 : transformer(key)) != null ? _a : key];
|
|
90
|
+
})
|
|
81
91
|
);
|
|
92
|
+
return {
|
|
93
|
+
map: newObj,
|
|
94
|
+
list: newList,
|
|
95
|
+
E: newE
|
|
96
|
+
};
|
|
82
97
|
};
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
});
|
|
98
|
+
const [state, setState] = useState(getStateFromMapRef());
|
|
99
|
+
if (versionRef.current !== versionMap[code]) {
|
|
100
|
+
versionRef.current = versionMap[code];
|
|
101
|
+
setState(getStateFromMapRef());
|
|
102
|
+
}
|
|
89
103
|
const load = useCallback((options) => {
|
|
90
104
|
const oldLoadPromise = loadPromiseRef.current;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
synMapRef();
|
|
95
|
-
setState({
|
|
96
|
-
map: objRef.current,
|
|
97
|
-
list: listRef.current,
|
|
98
|
-
E: extractE()
|
|
99
|
-
});
|
|
105
|
+
loadPromiseRef.current = createPromise();
|
|
106
|
+
loadDict({ ...mergedOptions, ...options }, mapRef).then(() => {
|
|
107
|
+
setState(getStateFromMapRef());
|
|
100
108
|
oldLoadPromise == null ? void 0 : oldLoadPromise.resolve(void 0);
|
|
101
|
-
|
|
109
|
+
loadPromiseRef.current.resolve(void 0);
|
|
102
110
|
});
|
|
103
|
-
return
|
|
111
|
+
return loadPromiseRef.current;
|
|
104
112
|
}, []);
|
|
105
113
|
const clear2 = useCallback(() => {
|
|
106
|
-
|
|
107
|
-
(
|
|
108
|
-
setState({
|
|
109
|
-
map: /* @__PURE__ */ Object.create(null),
|
|
110
|
-
list: [],
|
|
111
|
-
E: {}
|
|
112
|
-
});
|
|
114
|
+
mapRef.current.clear();
|
|
115
|
+
setState(getStateFromMapRef());
|
|
113
116
|
}, []);
|
|
114
117
|
const getItem = useCallback((value) => {
|
|
115
|
-
|
|
116
|
-
return value !== null && value !== void 0 ? (_a = mapRef.current) == null ? void 0 : _a.get(value) : null;
|
|
118
|
+
return value !== null && value !== void 0 ? mapRef.current.get(value) : null;
|
|
117
119
|
}, []);
|
|
118
120
|
useEffect(() => {
|
|
119
121
|
if (!remote || immediate) {
|
|
@@ -125,8 +127,8 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
125
127
|
load();
|
|
126
128
|
} else {
|
|
127
129
|
globalLoadPromise.then(() => {
|
|
128
|
-
if (!
|
|
129
|
-
|
|
130
|
+
if (!init) {
|
|
131
|
+
init = true;
|
|
130
132
|
load();
|
|
131
133
|
} else if (refresh) {
|
|
132
134
|
load();
|
|
@@ -153,7 +155,9 @@ function createDictManager(createDictManagerOptions = {}) {
|
|
|
153
155
|
};
|
|
154
156
|
return {
|
|
155
157
|
..._ctx,
|
|
158
|
+
// @ts-ignore
|
|
156
159
|
...managerExtra == null ? void 0 : managerExtra(_ctx),
|
|
160
|
+
// @ts-ignore
|
|
157
161
|
...extra == null ? void 0 : extra(_ctx)
|
|
158
162
|
};
|
|
159
163
|
}, [state]);
|
package/dist/util.d.ts
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import type { AnyFn, DictItemRecord, DictMap, DictValue, Merge, PlainObject, Recordable } from './types';
|
|
2
|
+
export declare const warn: (msg: string) => void;
|
|
2
3
|
export declare function isFunction(fn: unknown): fn is AnyFn;
|
|
3
4
|
export declare function clearObj(obj: Recordable): void;
|
|
4
|
-
export declare function mapToObj(map: DictMap, obj
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
export declare function mapToObj(map: DictMap, { obj, itemTransformer }?: {
|
|
6
|
+
obj?: Recordable<DictItemRecord>;
|
|
7
|
+
itemTransformer?: (item: DictItemRecord) => any;
|
|
8
|
+
}): Recordable<DictItemRecord>;
|
|
9
|
+
export declare function mapToList(map: DictMap, { list, itemTransformer }?: {
|
|
10
|
+
list?: DictItemRecord[];
|
|
11
|
+
itemTransformer?: (item: DictItemRecord) => any;
|
|
12
|
+
}): DictItemRecord[];
|
|
7
13
|
type MapOptions = {
|
|
14
|
+
map?: DictMap;
|
|
8
15
|
pickValues?: DictValue[];
|
|
9
16
|
omitValues?: DictValue[];
|
|
10
17
|
transformer?: (value: DictValue) => DictValue;
|
|
11
18
|
};
|
|
12
|
-
export declare function toMap(data: Recordable<DictItemRecord> | DictItemRecord[],
|
|
19
|
+
export declare function toMap(data: Recordable<DictItemRecord> | DictItemRecord[], { map, pickValues, omitValues, transformer }?: MapOptions): DictMap;
|
|
13
20
|
export declare const defineDictData: <T>(data: T) => T;
|
|
14
21
|
export declare function isPlainObject(obj: any): obj is PlainObject;
|
|
15
22
|
export declare function merge<T extends PlainObject, S extends PlainObject[]>(target: T, ...sources: S): Merge<[T, ...S]>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CreateDictManagerOptions, DefineDict, DictValue, ExtraGetter, Fetch } from '
|
|
1
|
+
import type { CreateDictManagerOptions, DefineDict, DictValue, ExtraGetter, Fetch } from '../types';
|
|
2
2
|
export declare function createDictManager<E extends ExtraGetter, F extends Fetch>(createDictManagerOptions?: CreateDictManagerOptions<E, F>): {
|
|
3
3
|
defineDict: DefineDict<E, F>;
|
|
4
4
|
clear: (code?: string) => void;
|