deepsea-components 5.16.9 → 5.16.11

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)) {
@@ -154,6 +173,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
154
173
  const key = keyExtractor ? keyExtractor(item) : item;
155
174
  keyToItem.set(key, item);
156
175
  });
176
+ console.log(keyToItem);
157
177
  return keyToItem;
158
178
  }, [
159
179
  items,
@@ -176,7 +196,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
176
196
  const newOrderMap = getOrderMap({
177
197
  prev: void 0,
178
198
  orders: orders_0,
179
- keys: Array.from(keyToItem_0.keys())
199
+ keys: Array.from(keyToItem_0.keys()),
200
+ orderPriority
180
201
  });
181
202
  null == onOrderMapChange || onOrderMapChange(newOrderMap);
182
203
  return newOrderMap;
@@ -193,7 +214,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
193
214
  const newOrderMap_0 = getOrderMap({
194
215
  prev: (null == dragging ? void 0 : dragging.keyToOrder) ?? keyToOrder,
195
216
  orders: orders_0,
196
- keys: cache.keys
217
+ keys: cache.keys,
218
+ orderPriority
197
219
  });
198
220
  setKeyToOrder(newOrderMap_0);
199
221
  null == onOrderMapChange || onOrderMapChange(newOrderMap_0);
@@ -206,6 +228,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
206
228
  orders_0,
207
229
  keyToItem_0,
208
230
  keyToOrder,
231
+ orderPriority,
209
232
  onOrderMapChange
210
233
  ]);
211
234
  const [renderKeys, setRenderKeys] = (0, external_react_namespaceObject.useState)(()=>new Set(keyToOrder.keys()));
@@ -359,6 +382,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
359
382
  },
360
383
  ...rest,
361
384
  children: Array.from(renderKeys).map((key_3)=>{
385
+ if (!keyToItem_0.has(key_3)) return;
362
386
  const item_0 = keyToItem_0.get(key_3);
363
387
  const order_2 = keyToOrder.get(key_3);
364
388
  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)) {
@@ -116,6 +135,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
116
135
  const key = keyExtractor ? keyExtractor(item) : item;
117
136
  keyToItem.set(key, item);
118
137
  });
138
+ console.log(keyToItem);
119
139
  return keyToItem;
120
140
  }, [
121
141
  items,
@@ -138,7 +158,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
138
158
  const newOrderMap = getOrderMap({
139
159
  prev: void 0,
140
160
  orders: orders_0,
141
- keys: Array.from(keyToItem_0.keys())
161
+ keys: Array.from(keyToItem_0.keys()),
162
+ orderPriority
142
163
  });
143
164
  null == onOrderMapChange || onOrderMapChange(newOrderMap);
144
165
  return newOrderMap;
@@ -155,7 +176,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
155
176
  const newOrderMap_0 = getOrderMap({
156
177
  prev: (null == dragging ? void 0 : dragging.keyToOrder) ?? keyToOrder,
157
178
  orders: orders_0,
158
- keys: cache.keys
179
+ keys: cache.keys,
180
+ orderPriority
159
181
  });
160
182
  setKeyToOrder(newOrderMap_0);
161
183
  null == onOrderMapChange || onOrderMapChange(newOrderMap_0);
@@ -168,6 +190,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
168
190
  orders_0,
169
191
  keyToItem_0,
170
192
  keyToOrder,
193
+ orderPriority,
171
194
  onOrderMapChange
172
195
  ]);
173
196
  const [renderKeys, setRenderKeys] = useState(()=>new Set(keyToOrder.keys()));
@@ -321,6 +344,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
321
344
  },
322
345
  ...rest,
323
346
  children: Array.from(renderKeys).map((key_3)=>{
347
+ if (!keyToItem_0.has(key_3)) return;
324
348
  const item_0 = keyToItem_0.get(key_3);
325
349
  const order_2 = keyToOrder.get(key_3);
326
350
  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.9",
3
+ "version": "5.16.11",
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.2"
43
+ "deepsea-tools": "5.42.0",
44
+ "soda-hooks": "6.14.4"
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)) {
@@ -259,6 +280,7 @@ export function DraggableGrid<T, K extends Key = T extends Key ? T : never>({
259
280
  const key = keyExtractor ? keyExtractor(item) : (item as unknown as K)
260
281
  keyToItem.set(key, item)
261
282
  })
283
+ console.log(keyToItem)
262
284
  return keyToItem
263
285
  }, [items, keyExtractor])
264
286
 
@@ -279,7 +301,7 @@ export function DraggableGrid<T, K extends Key = T extends Key ? T : never>({
279
301
  /** 元素的 key 到次序的映射 */
280
302
  const [keyToOrder, setKeyToOrder] = useState(() => {
281
303
  if (orderMap) return orderMap
282
- const newOrderMap = getOrderMap({ prev: undefined, orders, keys: Array.from(keyToItem.keys()) })
304
+ const newOrderMap = getOrderMap({ prev: undefined, orders, keys: Array.from(keyToItem.keys()), orderPriority })
283
305
  onOrderMapChange?.(newOrderMap)
284
306
  return newOrderMap
285
307
  })
@@ -296,13 +318,13 @@ export function DraggableGrid<T, K extends Key = T extends Key ? T : never>({
296
318
  if (!isTheSameArray(dragging?.orders ?? cache.orders, orders) || !isTheSameIterable(dragging?.keyToOrder.keys() ?? cache.keys, keyToItem.keys())) {
297
319
  cache.orders = orders
298
320
  cache.keys = Array.from((dragging?.keyToOrder ?? keyToItem).keys())
299
- const newOrderMap = getOrderMap({ prev: dragging?.keyToOrder ?? keyToOrder, orders, keys: cache.keys })
321
+ const newOrderMap = getOrderMap({ prev: dragging?.keyToOrder ?? keyToOrder, orders, keys: cache.keys, orderPriority })
300
322
  setKeyToOrder(newOrderMap)
301
323
  onOrderMapChange?.(newOrderMap)
302
324
  const newRenderKeys = new Set(newOrderMap.keys())
303
325
  setRenderKeys(prev => prev.intersection(newRenderKeys).union(newRenderKeys.difference(prev)))
304
326
  }
305
- }, [dragging, cache, orders, keyToItem, keyToOrder, onOrderMapChange])
327
+ }, [dragging, cache, orders, keyToItem, keyToOrder, orderPriority, onOrderMapChange])
306
328
 
307
329
  /** 渲染的元素的 key,不会随着 keyToOrder 的变化而变化 */
308
330
  const [renderKeys, setRenderKeys] = useState(() => new Set(keyToOrder.keys()))
@@ -462,6 +484,7 @@ export function DraggableGrid<T, K extends Key = T extends Key ? T : never>({
462
484
  {...rest}
463
485
  >
464
486
  {Array.from(renderKeys).map(key => {
487
+ if (!keyToItem.has(key)) return undefined
465
488
  const item = keyToItem.get(key)!
466
489
  const order = keyToOrder.get(key)!
467
490
  const isDragging = dragging?.key === key
@@ -485,6 +508,7 @@ export function DraggableGrid<T, K extends Key = T extends Key ? T : never>({
485
508
  "--z-index": recent.current === key ? 999999 : keyToOrder.get(key),
486
509
  }
487
510
  ) as CSSProperties
511
+
488
512
  const children = render ? render(item, { order, isDragging: isDragging }) : (item as ReactNode)
489
513
 
490
514
  return (