deepsea-components 5.16.10 → 5.16.12
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.
|
@@ -53,9 +53,28 @@ function isTheSameIterable(a, b) {
|
|
|
53
53
|
if (aSet.size !== bSet.size) return false;
|
|
54
54
|
return 0 === aSet.difference(bSet).size;
|
|
55
55
|
}
|
|
56
|
-
function getOrderMap({ prev, orders, keys }) {
|
|
56
|
+
function getOrderMap({ prev, orders, keys, orderPriority }) {
|
|
57
57
|
const orderSet = new Set(orders);
|
|
58
58
|
const orderMap = new Map();
|
|
59
|
+
if (!!prev) {
|
|
60
|
+
const entries = Array.from(prev.entries()).toSorted((a, b)=>orderPriority ? orderPriority(b[1], a[1]) : b[1] - a[1]);
|
|
61
|
+
const newPrev = new Map();
|
|
62
|
+
const newOrders = [
|
|
63
|
+
...orders
|
|
64
|
+
];
|
|
65
|
+
for (const [key, order] of entries){
|
|
66
|
+
if (!keys.includes(key)) continue;
|
|
67
|
+
const index = newOrders.indexOf(order);
|
|
68
|
+
if (index >= 0) {
|
|
69
|
+
newPrev.set(key, order);
|
|
70
|
+
newOrders.length = index;
|
|
71
|
+
} else {
|
|
72
|
+
const newOrder = newOrders.pop();
|
|
73
|
+
newPrev.set(key, newOrder);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
prev = newPrev;
|
|
77
|
+
}
|
|
59
78
|
const newKeys = keys.filter((key)=>{
|
|
60
79
|
if (!prev) return true;
|
|
61
80
|
if (prev.has(key)) {
|
|
@@ -176,7 +195,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
|
|
|
176
195
|
const newOrderMap = getOrderMap({
|
|
177
196
|
prev: void 0,
|
|
178
197
|
orders: orders_0,
|
|
179
|
-
keys: Array.from(keyToItem_0.keys())
|
|
198
|
+
keys: Array.from(keyToItem_0.keys()),
|
|
199
|
+
orderPriority
|
|
180
200
|
});
|
|
181
201
|
null == onOrderMapChange || onOrderMapChange(newOrderMap);
|
|
182
202
|
return newOrderMap;
|
|
@@ -193,7 +213,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
|
|
|
193
213
|
const newOrderMap_0 = getOrderMap({
|
|
194
214
|
prev: (null == dragging ? void 0 : dragging.keyToOrder) ?? keyToOrder,
|
|
195
215
|
orders: orders_0,
|
|
196
|
-
keys: cache.keys
|
|
216
|
+
keys: cache.keys,
|
|
217
|
+
orderPriority
|
|
197
218
|
});
|
|
198
219
|
setKeyToOrder(newOrderMap_0);
|
|
199
220
|
null == onOrderMapChange || onOrderMapChange(newOrderMap_0);
|
|
@@ -206,6 +227,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
|
|
|
206
227
|
orders_0,
|
|
207
228
|
keyToItem_0,
|
|
208
229
|
keyToOrder,
|
|
230
|
+
orderPriority,
|
|
209
231
|
onOrderMapChange
|
|
210
232
|
]);
|
|
211
233
|
const [renderKeys, setRenderKeys] = (0, external_react_namespaceObject.useState)(()=>new Set(keyToOrder.keys()));
|
|
@@ -359,6 +381,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
|
|
|
359
381
|
},
|
|
360
382
|
...rest,
|
|
361
383
|
children: Array.from(renderKeys).map((key_3)=>{
|
|
384
|
+
if (!keyToItem_0.has(key_3)) return;
|
|
362
385
|
const item_0 = keyToItem_0.get(key_3);
|
|
363
386
|
const order_2 = keyToOrder.get(key_3);
|
|
364
387
|
const isDragging = (null == dragging ? void 0 : dragging.key) === key_3;
|
|
@@ -15,9 +15,28 @@ function isTheSameIterable(a, b) {
|
|
|
15
15
|
if (aSet.size !== bSet.size) return false;
|
|
16
16
|
return 0 === aSet.difference(bSet).size;
|
|
17
17
|
}
|
|
18
|
-
function getOrderMap({ prev, orders, keys }) {
|
|
18
|
+
function getOrderMap({ prev, orders, keys, orderPriority }) {
|
|
19
19
|
const orderSet = new Set(orders);
|
|
20
20
|
const orderMap = new Map();
|
|
21
|
+
if (!!prev) {
|
|
22
|
+
const entries = Array.from(prev.entries()).toSorted((a, b)=>orderPriority ? orderPriority(b[1], a[1]) : b[1] - a[1]);
|
|
23
|
+
const newPrev = new Map();
|
|
24
|
+
const newOrders = [
|
|
25
|
+
...orders
|
|
26
|
+
];
|
|
27
|
+
for (const [key, order] of entries){
|
|
28
|
+
if (!keys.includes(key)) continue;
|
|
29
|
+
const index = newOrders.indexOf(order);
|
|
30
|
+
if (index >= 0) {
|
|
31
|
+
newPrev.set(key, order);
|
|
32
|
+
newOrders.length = index;
|
|
33
|
+
} else {
|
|
34
|
+
const newOrder = newOrders.pop();
|
|
35
|
+
newPrev.set(key, newOrder);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
prev = newPrev;
|
|
39
|
+
}
|
|
21
40
|
const newKeys = keys.filter((key)=>{
|
|
22
41
|
if (!prev) return true;
|
|
23
42
|
if (prev.has(key)) {
|
|
@@ -138,7 +157,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
|
|
|
138
157
|
const newOrderMap = getOrderMap({
|
|
139
158
|
prev: void 0,
|
|
140
159
|
orders: orders_0,
|
|
141
|
-
keys: Array.from(keyToItem_0.keys())
|
|
160
|
+
keys: Array.from(keyToItem_0.keys()),
|
|
161
|
+
orderPriority
|
|
142
162
|
});
|
|
143
163
|
null == onOrderMapChange || onOrderMapChange(newOrderMap);
|
|
144
164
|
return newOrderMap;
|
|
@@ -155,7 +175,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
|
|
|
155
175
|
const newOrderMap_0 = getOrderMap({
|
|
156
176
|
prev: (null == dragging ? void 0 : dragging.keyToOrder) ?? keyToOrder,
|
|
157
177
|
orders: orders_0,
|
|
158
|
-
keys: cache.keys
|
|
178
|
+
keys: cache.keys,
|
|
179
|
+
orderPriority
|
|
159
180
|
});
|
|
160
181
|
setKeyToOrder(newOrderMap_0);
|
|
161
182
|
null == onOrderMapChange || onOrderMapChange(newOrderMap_0);
|
|
@@ -168,6 +189,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
|
|
|
168
189
|
orders_0,
|
|
169
190
|
keyToItem_0,
|
|
170
191
|
keyToOrder,
|
|
192
|
+
orderPriority,
|
|
171
193
|
onOrderMapChange
|
|
172
194
|
]);
|
|
173
195
|
const [renderKeys, setRenderKeys] = useState(()=>new Set(keyToOrder.keys()));
|
|
@@ -321,6 +343,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
|
|
|
321
343
|
},
|
|
322
344
|
...rest,
|
|
323
345
|
children: Array.from(renderKeys).map((key_3)=>{
|
|
346
|
+
if (!keyToItem_0.has(key_3)) return;
|
|
324
347
|
const item_0 = keyToItem_0.get(key_3);
|
|
325
348
|
const order_2 = keyToOrder.get(key_3);
|
|
326
349
|
const isDragging = (null == dragging ? void 0 : dragging.key) === key_3;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deepsea-components",
|
|
3
|
-
"version": "5.16.
|
|
3
|
+
"version": "5.16.12",
|
|
4
4
|
"description": "格数科技自用组件库",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"echarts": "^5.6.0",
|
|
41
41
|
"hls.js": "^1.6.9",
|
|
42
42
|
"smooth-scrollbar": "^8.8.4",
|
|
43
|
-
"
|
|
44
|
-
"
|
|
43
|
+
"soda-hooks": "6.14.4",
|
|
44
|
+
"deepsea-tools": "5.42.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"typescript": "^5.9.2"
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"scripts": {
|
|
57
57
|
"dev": "rslib build --watch",
|
|
58
58
|
"build": "rslib build",
|
|
59
|
-
"prebuild": "
|
|
59
|
+
"prebuild": "bun scripts/export.ts",
|
|
60
60
|
"lint": "prettier --write ."
|
|
61
61
|
}
|
|
62
62
|
}
|
|
@@ -58,11 +58,32 @@ interface GetOrderMapParams<K extends Key> {
|
|
|
58
58
|
prev?: DraggableGridKeyToOrder<K>
|
|
59
59
|
orders: number[]
|
|
60
60
|
keys: K[]
|
|
61
|
+
orderPriority: ((a: number, b: number) => number) | undefined
|
|
61
62
|
}
|
|
62
63
|
|
|
63
|
-
function getOrderMap<K extends Key>({ prev, orders, keys }: GetOrderMapParams<K>) {
|
|
64
|
+
function getOrderMap<K extends Key>({ prev, orders, keys, orderPriority }: GetOrderMapParams<K>) {
|
|
64
65
|
const orderSet = new Set(orders)
|
|
65
66
|
const orderMap = new Map<K, number>()
|
|
67
|
+
|
|
68
|
+
// 如果 prev 存在,并且继承的 key 中存在溢出的 key
|
|
69
|
+
if (!!prev) {
|
|
70
|
+
const entries = Array.from(prev.entries()).toSorted((a, b) => (orderPriority ? orderPriority(b[1], a[1]) : b[1] - a[1]))
|
|
71
|
+
const newPrev = new Map<K, number>()
|
|
72
|
+
const newOrders = [...orders]
|
|
73
|
+
for (const [key, order] of entries) {
|
|
74
|
+
if (!keys.includes(key)) continue
|
|
75
|
+
const index = newOrders.indexOf(order)
|
|
76
|
+
if (index >= 0) {
|
|
77
|
+
newPrev.set(key, order)
|
|
78
|
+
newOrders.length = index
|
|
79
|
+
} else {
|
|
80
|
+
const newOrder = newOrders.pop()!
|
|
81
|
+
newPrev.set(key, newOrder)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
prev = newPrev
|
|
85
|
+
}
|
|
86
|
+
|
|
66
87
|
const newKeys = keys.filter(key => {
|
|
67
88
|
if (!prev) return true
|
|
68
89
|
if (prev.has(key)) {
|
|
@@ -279,7 +300,7 @@ export function DraggableGrid<T, K extends Key = T extends Key ? T : never>({
|
|
|
279
300
|
/** 元素的 key 到次序的映射 */
|
|
280
301
|
const [keyToOrder, setKeyToOrder] = useState(() => {
|
|
281
302
|
if (orderMap) return orderMap
|
|
282
|
-
const newOrderMap = getOrderMap({ prev: undefined, orders, keys: Array.from(keyToItem.keys()) })
|
|
303
|
+
const newOrderMap = getOrderMap({ prev: undefined, orders, keys: Array.from(keyToItem.keys()), orderPriority })
|
|
283
304
|
onOrderMapChange?.(newOrderMap)
|
|
284
305
|
return newOrderMap
|
|
285
306
|
})
|
|
@@ -296,13 +317,13 @@ export function DraggableGrid<T, K extends Key = T extends Key ? T : never>({
|
|
|
296
317
|
if (!isTheSameArray(dragging?.orders ?? cache.orders, orders) || !isTheSameIterable(dragging?.keyToOrder.keys() ?? cache.keys, keyToItem.keys())) {
|
|
297
318
|
cache.orders = orders
|
|
298
319
|
cache.keys = Array.from((dragging?.keyToOrder ?? keyToItem).keys())
|
|
299
|
-
const newOrderMap = getOrderMap({ prev: dragging?.keyToOrder ?? keyToOrder, orders, keys: cache.keys })
|
|
320
|
+
const newOrderMap = getOrderMap({ prev: dragging?.keyToOrder ?? keyToOrder, orders, keys: cache.keys, orderPriority })
|
|
300
321
|
setKeyToOrder(newOrderMap)
|
|
301
322
|
onOrderMapChange?.(newOrderMap)
|
|
302
323
|
const newRenderKeys = new Set(newOrderMap.keys())
|
|
303
324
|
setRenderKeys(prev => prev.intersection(newRenderKeys).union(newRenderKeys.difference(prev)))
|
|
304
325
|
}
|
|
305
|
-
}, [dragging, cache, orders, keyToItem, keyToOrder, onOrderMapChange])
|
|
326
|
+
}, [dragging, cache, orders, keyToItem, keyToOrder, orderPriority, onOrderMapChange])
|
|
306
327
|
|
|
307
328
|
/** 渲染的元素的 key,不会随着 keyToOrder 的变化而变化 */
|
|
308
329
|
const [renderKeys, setRenderKeys] = useState(() => new Set(keyToOrder.keys()))
|
|
@@ -462,6 +483,7 @@ export function DraggableGrid<T, K extends Key = T extends Key ? T : never>({
|
|
|
462
483
|
{...rest}
|
|
463
484
|
>
|
|
464
485
|
{Array.from(renderKeys).map(key => {
|
|
486
|
+
if (!keyToItem.has(key)) return undefined
|
|
465
487
|
const item = keyToItem.get(key)!
|
|
466
488
|
const order = keyToOrder.get(key)!
|
|
467
489
|
const isDragging = dragging?.key === key
|
|
@@ -485,6 +507,7 @@ export function DraggableGrid<T, K extends Key = T extends Key ? T : never>({
|
|
|
485
507
|
"--z-index": recent.current === key ? 999999 : keyToOrder.get(key),
|
|
486
508
|
}
|
|
487
509
|
) as CSSProperties
|
|
510
|
+
|
|
488
511
|
const children = render ? render(item, { order, isDragging: isDragging }) : (item as ReactNode)
|
|
489
512
|
|
|
490
513
|
return (
|