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.10",
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
- "deepsea-tools": "5.41.1",
44
- "soda-hooks": "6.14.3"
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": "tsx scripts/export.ts",
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 (