deepsea-components 5.16.0 → 5.16.2

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.
@@ -63,10 +63,10 @@ function getOrderMap({ prev, orders, keys }) {
63
63
  orderSet.delete(prevOrder);
64
64
  return false;
65
65
  }
66
+ return true;
66
67
  });
67
68
  orders = Array.from(orderSet);
68
69
  newKeys.forEach((key, index)=>orderMap.set(key, orders[index]));
69
- console.log(Object.fromEntries(orderMap.entries()));
70
70
  return orderMap;
71
71
  }
72
72
  function getPosition({ order, columns, gapX, gapY, itemWidth, itemHeight }) {
@@ -96,25 +96,14 @@ const DraggableGridItem = ({ onDragMoveStart, onDragMove, onDragMoveEnd, ...rest
96
96
  ...rest
97
97
  });
98
98
  };
99
- let DraggableGrid_cache;
100
- function log(value) {
101
- if ((0, external_deepsea_tools_namespaceObject.equal)(DraggableGrid_cache, value)) return;
102
- DraggableGrid_cache = value;
103
- console.log(value);
104
- }
105
- function DraggableGrid({ className, classNames, style, items = [], disabled, columns, rows, gap = 0, gapX = gap, gapY = gap, itemWidth, itemHeight, orderMap, onOrderMapChange, render, keyExtractor, isItemDisabled, isOrderDisabled, orderPriority, ...rest }) {
106
- const [itemToKey, keyToItem] = (0, external_react_namespaceObject.useMemo)(()=>{
107
- const itemToKey = new Map();
99
+ function DraggableGrid({ className, classNames, style, items = [], disabled, columns, rows, gap = 0, gapX = gap, gapY = gap, itemWidth, itemHeight, orderMap, onOrderMapChange, render, keyExtractor, isItemDisabled: _isItemDisabled, isOrderDisabled, orderPriority, ...rest }) {
100
+ const keyToItem = (0, external_react_namespaceObject.useMemo)(()=>{
108
101
  const keyToItem = new Map();
109
- items.forEach((item, index)=>{
102
+ items.forEach((item)=>{
110
103
  const key = keyExtractor ? keyExtractor(item) : item;
111
- itemToKey.set(item, key);
112
104
  keyToItem.set(key, item);
113
105
  });
114
- return [
115
- itemToKey,
116
- keyToItem
117
- ];
106
+ return keyToItem;
118
107
  }, [
119
108
  items,
120
109
  keyExtractor
@@ -147,11 +136,11 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
147
136
  keys: Array.from(keyToItem.keys())
148
137
  });
149
138
  (0, external_react_namespaceObject.useEffect)(()=>{
150
- if (!isTheSameArray(cache.orders, orders) || !isTheSameIterable(cache.keys, keyToItem.keys())) {
139
+ if (!isTheSameArray(dragging?.orders ?? cache.orders, orders) || !isTheSameIterable(dragging?.keyToOrder.keys() ?? cache.keys, keyToItem.keys())) {
151
140
  cache.orders = orders;
152
- cache.keys = Array.from(keyToItem.keys());
141
+ cache.keys = Array.from((dragging?.keyToOrder ?? keyToItem).keys());
153
142
  const newOrderMap = getOrderMap({
154
- prev: keyToOrder,
143
+ prev: dragging?.keyToOrder ?? keyToOrder,
155
144
  orders,
156
145
  keys: cache.keys
157
146
  });
@@ -162,6 +151,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
162
151
  }
163
152
  }, [
164
153
  dragging,
154
+ cache,
165
155
  orders,
166
156
  keyToItem,
167
157
  keyToOrder,
@@ -178,7 +168,14 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
178
168
  }
179
169
  }
180
170
  }, [
171
+ dragging,
181
172
  orders,
173
+ columns,
174
+ rows,
175
+ gapX,
176
+ gapY,
177
+ itemWidth,
178
+ itemHeight,
182
179
  keyToItem,
183
180
  keyToOrder,
184
181
  onOrderMapChange
@@ -206,8 +203,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
206
203
  key,
207
204
  startX: position.x,
208
205
  startY: position.y,
209
- deltaX: 0,
210
- deltaY: 0,
206
+ deltaX: event.deltaX,
207
+ deltaY: event.deltaY,
211
208
  orders,
212
209
  columns,
213
210
  rows,
@@ -222,7 +219,6 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
222
219
  if (!dragging) return;
223
220
  const { deltaX, deltaY } = event;
224
221
  const { key, orders, keyToOrder, startX, startY, columns, gapX, gapY, itemWidth, itemHeight } = dragging;
225
- log(key);
226
222
  setDragging((prev)=>({
227
223
  ...prev,
228
224
  deltaX,
@@ -289,6 +285,11 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
289
285
  if (!dragging) return;
290
286
  setDragging(void 0);
291
287
  }
288
+ function isItemDisabled(key) {
289
+ if (!_isItemDisabled) return false;
290
+ if (Array.isArray(_isItemDisabled)) return _isItemDisabled.includes(key);
291
+ return _isItemDisabled(keyToItem.get(key), key);
292
+ }
292
293
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
293
294
  className: (0, external_deepsea_tools_namespaceObject.clsx)(external_DraggableGrid_module_cjs_default().draggableGrid, "function" == typeof className ? className({
294
295
  isDragging: !!dragging
@@ -340,9 +341,9 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
340
341
  isDragging: isDragging
341
342
  }) : classNames?.item),
342
343
  style: style,
343
- onDragMoveStart: disabled ? void 0 : (event)=>onDragMoveStart(key, event),
344
- onDragMove: disabled ? void 0 : onDragMove,
345
- onDragMoveEnd: disabled ? void 0 : onDragMoveEnd,
344
+ onDragMoveStart: disabled || isItemDisabled(key) ? void 0 : (event)=>onDragMoveStart(key, event),
345
+ onDragMove: disabled || isItemDisabled(key) ? void 0 : onDragMove,
346
+ onDragMoveEnd: disabled || isItemDisabled(key) ? void 0 : onDragMoveEnd,
346
347
  children: children
347
348
  }, key);
348
349
  })
@@ -61,7 +61,7 @@ export type DraggableGridProps<T> = Omit<ComponentProps<"div">, "className" | "c
61
61
  /** 次序变化时回调 */
62
62
  onOrderMapChange?: (orderMap: DraggableGridKeyToOrder) => void;
63
63
  /** 禁用的元素 */
64
- isItemDisabled?: Key[] | ((item: T) => boolean);
64
+ isItemDisabled?: Key[] | ((item: T, key: Key) => boolean);
65
65
  /** 禁用的次序 */
66
66
  isOrderDisabled?: number[] | ((order: number) => boolean);
67
67
  /** 次序的优先级,可以通过此函数调整元素的优先放置的方向,左上,右上,左下,右下,中心,顺时针,逆时针等等 */
@@ -79,4 +79,4 @@ export type DraggableGridProps<T> = Omit<ComponentProps<"div">, "className" | "c
79
79
  /** 获取 key 的函数,当 T 为 Key 时,keyExtractor 为可选 */
80
80
  keyExtractor: (item: T) => Key;
81
81
  });
82
- export declare function DraggableGrid<T>({ className, classNames, style, items, disabled, columns, rows, gap, gapX, gapY, itemWidth, itemHeight, orderMap, onOrderMapChange, render, keyExtractor, isItemDisabled, isOrderDisabled, orderPriority, ...rest }: DraggableGridProps<T>): import("react/jsx-runtime").JSX.Element;
82
+ export declare function DraggableGrid<T>({ className, classNames, style, items, disabled, columns, rows, gap, gapX, gapY, itemWidth, itemHeight, orderMap, onOrderMapChange, render, keyExtractor, isItemDisabled: _isItemDisabled, isOrderDisabled, orderPriority, ...rest }: DraggableGridProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { useEffect, useMemo, useRef, useState } from "react";
3
- import { clsx, equal, getArray } from "deepsea-tools";
3
+ import { clsx, getArray } from "deepsea-tools";
4
4
  import { useDragMove } from "soda-hooks";
5
5
  import DraggableGrid_module from "./DraggableGrid.module.js";
6
6
  function isTheSameArray(a, b) {
@@ -25,10 +25,10 @@ function getOrderMap({ prev, orders, keys }) {
25
25
  orderSet.delete(prevOrder);
26
26
  return false;
27
27
  }
28
+ return true;
28
29
  });
29
30
  orders = Array.from(orderSet);
30
31
  newKeys.forEach((key, index)=>orderMap.set(key, orders[index]));
31
- console.log(Object.fromEntries(orderMap.entries()));
32
32
  return orderMap;
33
33
  }
34
34
  function getPosition({ order, columns, gapX, gapY, itemWidth, itemHeight }) {
@@ -58,25 +58,14 @@ const DraggableGridItem = ({ onDragMoveStart, onDragMove, onDragMoveEnd, ...rest
58
58
  ...rest
59
59
  });
60
60
  };
61
- let DraggableGrid_cache;
62
- function log(value) {
63
- if (equal(DraggableGrid_cache, value)) return;
64
- DraggableGrid_cache = value;
65
- console.log(value);
66
- }
67
- function DraggableGrid({ className, classNames, style, items = [], disabled, columns, rows, gap = 0, gapX = gap, gapY = gap, itemWidth, itemHeight, orderMap, onOrderMapChange, render, keyExtractor, isItemDisabled, isOrderDisabled, orderPriority, ...rest }) {
68
- const [itemToKey, keyToItem] = useMemo(()=>{
69
- const itemToKey = new Map();
61
+ function DraggableGrid({ className, classNames, style, items = [], disabled, columns, rows, gap = 0, gapX = gap, gapY = gap, itemWidth, itemHeight, orderMap, onOrderMapChange, render, keyExtractor, isItemDisabled: _isItemDisabled, isOrderDisabled, orderPriority, ...rest }) {
62
+ const keyToItem = useMemo(()=>{
70
63
  const keyToItem = new Map();
71
- items.forEach((item, index)=>{
64
+ items.forEach((item)=>{
72
65
  const key = keyExtractor ? keyExtractor(item) : item;
73
- itemToKey.set(item, key);
74
66
  keyToItem.set(key, item);
75
67
  });
76
- return [
77
- itemToKey,
78
- keyToItem
79
- ];
68
+ return keyToItem;
80
69
  }, [
81
70
  items,
82
71
  keyExtractor
@@ -109,11 +98,11 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
109
98
  keys: Array.from(keyToItem.keys())
110
99
  });
111
100
  useEffect(()=>{
112
- if (!isTheSameArray(cache.orders, orders) || !isTheSameIterable(cache.keys, keyToItem.keys())) {
101
+ if (!isTheSameArray(dragging?.orders ?? cache.orders, orders) || !isTheSameIterable(dragging?.keyToOrder.keys() ?? cache.keys, keyToItem.keys())) {
113
102
  cache.orders = orders;
114
- cache.keys = Array.from(keyToItem.keys());
103
+ cache.keys = Array.from((dragging?.keyToOrder ?? keyToItem).keys());
115
104
  const newOrderMap = getOrderMap({
116
- prev: keyToOrder,
105
+ prev: dragging?.keyToOrder ?? keyToOrder,
117
106
  orders,
118
107
  keys: cache.keys
119
108
  });
@@ -124,6 +113,7 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
124
113
  }
125
114
  }, [
126
115
  dragging,
116
+ cache,
127
117
  orders,
128
118
  keyToItem,
129
119
  keyToOrder,
@@ -140,7 +130,14 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
140
130
  }
141
131
  }
142
132
  }, [
133
+ dragging,
143
134
  orders,
135
+ columns,
136
+ rows,
137
+ gapX,
138
+ gapY,
139
+ itemWidth,
140
+ itemHeight,
144
141
  keyToItem,
145
142
  keyToOrder,
146
143
  onOrderMapChange
@@ -168,8 +165,8 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
168
165
  key,
169
166
  startX: position.x,
170
167
  startY: position.y,
171
- deltaX: 0,
172
- deltaY: 0,
168
+ deltaX: event.deltaX,
169
+ deltaY: event.deltaY,
173
170
  orders,
174
171
  columns,
175
172
  rows,
@@ -184,7 +181,6 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
184
181
  if (!dragging) return;
185
182
  const { deltaX, deltaY } = event;
186
183
  const { key, orders, keyToOrder, startX, startY, columns, gapX, gapY, itemWidth, itemHeight } = dragging;
187
- log(key);
188
184
  setDragging((prev)=>({
189
185
  ...prev,
190
186
  deltaX,
@@ -251,6 +247,11 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
251
247
  if (!dragging) return;
252
248
  setDragging(void 0);
253
249
  }
250
+ function isItemDisabled(key) {
251
+ if (!_isItemDisabled) return false;
252
+ if (Array.isArray(_isItemDisabled)) return _isItemDisabled.includes(key);
253
+ return _isItemDisabled(keyToItem.get(key), key);
254
+ }
254
255
  return /*#__PURE__*/ jsx("div", {
255
256
  className: clsx(DraggableGrid_module.draggableGrid, "function" == typeof className ? className({
256
257
  isDragging: !!dragging
@@ -302,9 +303,9 @@ function DraggableGrid({ className, classNames, style, items = [], disabled, col
302
303
  isDragging: isDragging
303
304
  }) : classNames?.item),
304
305
  style: style,
305
- onDragMoveStart: disabled ? void 0 : (event)=>onDragMoveStart(key, event),
306
- onDragMove: disabled ? void 0 : onDragMove,
307
- onDragMoveEnd: disabled ? void 0 : onDragMoveEnd,
306
+ onDragMoveStart: disabled || isItemDisabled(key) ? void 0 : (event)=>onDragMoveStart(key, event),
307
+ onDragMove: disabled || isItemDisabled(key) ? void 0 : onDragMove,
308
+ onDragMoveEnd: disabled || isItemDisabled(key) ? void 0 : onDragMoveEnd,
308
309
  children: children
309
310
  }, key);
310
311
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepsea-components",
3
- "version": "5.16.0",
3
+ "version": "5.16.2",
4
4
  "description": "格数科技自用组件库",
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties, ComponentProps, FC, Key, ReactNode, useEffect, useMemo, useRef, useState } from "react"
2
- import { clsx, equal, getArray } from "deepsea-tools"
2
+ import { clsx, getArray } from "deepsea-tools"
3
3
  import { DragMoveEvent, UseDragMoveParams, useDragMove } from "soda-hooks"
4
4
 
5
5
  import styles from "./DraggableGrid.module.css"
@@ -50,13 +50,13 @@ function isTheSameIterable<T>(a: Iterable<T>, b: Iterable<T>) {
50
50
  return aSet.difference(bSet).size === 0
51
51
  }
52
52
 
53
- interface GetOrderMapParams<T> {
53
+ interface GetOrderMapParams {
54
54
  prev?: DraggableGridKeyToOrder
55
55
  orders: number[]
56
56
  keys: Key[]
57
57
  }
58
58
 
59
- function getOrderMap<T>({ prev, orders, keys }: GetOrderMapParams<T>) {
59
+ function getOrderMap({ prev, orders, keys }: GetOrderMapParams) {
60
60
  const orderSet = new Set(orders)
61
61
  const orderMap = new Map<Key, number>()
62
62
  const newKeys = keys.filter(key => {
@@ -67,10 +67,10 @@ function getOrderMap<T>({ prev, orders, keys }: GetOrderMapParams<T>) {
67
67
  orderSet.delete(prevOrder)
68
68
  return false
69
69
  }
70
+ return true
70
71
  })
71
72
  orders = Array.from(orderSet)
72
73
  newKeys.forEach((key, index) => orderMap.set(key, orders[index]))
73
- console.log(Object.fromEntries(orderMap.entries()))
74
74
  return orderMap
75
75
  }
76
76
 
@@ -140,7 +140,7 @@ export type DraggableGridProps<T> = Omit<ComponentProps<"div">, "className" | "c
140
140
  /** 次序变化时回调 */
141
141
  onOrderMapChange?: (orderMap: DraggableGridKeyToOrder) => void
142
142
  /** 禁用的元素 */
143
- isItemDisabled?: Key[] | ((item: T) => boolean)
143
+ isItemDisabled?: Key[] | ((item: T, key: Key) => boolean)
144
144
  /** 禁用的次序 */
145
145
  isOrderDisabled?: number[] | ((order: number) => boolean)
146
146
  /** 次序的优先级,可以通过此函数调整元素的优先放置的方向,左上,右上,左下,右下,中心,顺时针,逆时针等等 */
@@ -195,13 +195,6 @@ interface DraggingItem {
195
195
  keyToOrder: DraggableGridKeyToOrder
196
196
  }
197
197
 
198
- let cache: any
199
- function log(value: any) {
200
- if (equal(cache, value)) return
201
- cache = value
202
- console.log(value)
203
- }
204
-
205
198
  export function DraggableGrid<T>({
206
199
  className,
207
200
  classNames,
@@ -219,20 +212,18 @@ export function DraggableGrid<T>({
219
212
  onOrderMapChange,
220
213
  render,
221
214
  keyExtractor,
222
- isItemDisabled,
215
+ isItemDisabled: _isItemDisabled,
223
216
  isOrderDisabled,
224
217
  orderPriority,
225
218
  ...rest
226
219
  }: DraggableGridProps<T>) {
227
- const [itemToKey, keyToItem] = useMemo(() => {
228
- const itemToKey = new Map<T, Key>()
220
+ const keyToItem = useMemo(() => {
229
221
  const keyToItem = new Map<Key, T>()
230
- items.forEach((item, index) => {
222
+ items.forEach(item => {
231
223
  const key = keyExtractor ? keyExtractor(item) : (item as Key)
232
- itemToKey.set(item, key)
233
224
  keyToItem.set(key, item)
234
225
  })
235
- return [itemToKey, keyToItem] as const
226
+ return keyToItem
236
227
  }, [items, keyExtractor])
237
228
 
238
229
  /** 检查 items 中是否有重复的 key */
@@ -266,16 +257,16 @@ export function DraggableGrid<T>({
266
257
  })
267
258
 
268
259
  useEffect(() => {
269
- if (!isTheSameArray(cache.orders, orders) || !isTheSameIterable(cache.keys, keyToItem.keys())) {
260
+ if (!isTheSameArray(dragging?.orders ?? cache.orders, orders) || !isTheSameIterable(dragging?.keyToOrder.keys() ?? cache.keys, keyToItem.keys())) {
270
261
  cache.orders = orders
271
- cache.keys = Array.from(keyToItem.keys())
272
- const newOrderMap = getOrderMap({ prev: keyToOrder, orders, keys: cache.keys })
262
+ cache.keys = Array.from((dragging?.keyToOrder ?? keyToItem).keys())
263
+ const newOrderMap = getOrderMap({ prev: dragging?.keyToOrder ?? keyToOrder, orders, keys: cache.keys })
273
264
  setKeyToOrder(newOrderMap)
274
265
  onOrderMapChange?.(newOrderMap)
275
266
  const newRenderKeys = new Set(newOrderMap.keys())
276
267
  setRenderKeys(prev => prev.intersection(newRenderKeys).union(newRenderKeys.difference(prev)))
277
268
  }
278
- }, [dragging, orders, keyToItem, keyToOrder, onOrderMapChange])
269
+ }, [dragging, cache, orders, keyToItem, keyToOrder, onOrderMapChange])
279
270
 
280
271
  /** 渲染的元素的 key,不会随着 keyToOrder 的变化而变化 */
281
272
  const [renderKeys, setRenderKeys] = useState(() => new Set(keyToOrder.keys()))
@@ -301,7 +292,7 @@ export function DraggableGrid<T>({
301
292
  onOrderMapChange?.(dragging.keyToOrder)
302
293
  }
303
294
  }
304
- }, [orders, keyToItem, keyToOrder, onOrderMapChange])
295
+ }, [dragging, orders, columns, rows, gapX, gapY, itemWidth, itemHeight, keyToItem, keyToOrder, onOrderMapChange])
305
296
 
306
297
  /** 受控 */
307
298
  useEffect(() => {
@@ -317,8 +308,8 @@ export function DraggableGrid<T>({
317
308
  key,
318
309
  startX: position.x,
319
310
  startY: position.y,
320
- deltaX: 0,
321
- deltaY: 0,
311
+ deltaX: event.deltaX,
312
+ deltaY: event.deltaY,
322
313
  orders,
323
314
  columns,
324
315
  rows,
@@ -335,7 +326,6 @@ export function DraggableGrid<T>({
335
326
 
336
327
  const { deltaX, deltaY } = event
337
328
  const { key, orders, keyToOrder, startX, startY, columns, gapX, gapY, itemWidth, itemHeight } = dragging!
338
- log(key)
339
329
  setDragging(prev => ({ ...prev!, deltaX, deltaY }))
340
330
  const x = startX + deltaX
341
331
  const y = startY + deltaY
@@ -410,6 +400,12 @@ export function DraggableGrid<T>({
410
400
  setDragging(undefined)
411
401
  }
412
402
 
403
+ function isItemDisabled(key: Key) {
404
+ if (!_isItemDisabled) return false
405
+ if (Array.isArray(_isItemDisabled)) return _isItemDisabled.includes(key)
406
+ return _isItemDisabled(keyToItem.get(key)!, key)
407
+ }
408
+
413
409
  return (
414
410
  <div
415
411
  className={clsx(
@@ -460,9 +456,9 @@ export function DraggableGrid<T>({
460
456
  typeof classNames?.item === "function" ? classNames.item({ order, isDragging: isDragging }) : classNames?.item,
461
457
  )}
462
458
  style={style}
463
- onDragMoveStart={!disabled ? event => onDragMoveStart(key, event) : undefined}
464
- onDragMove={!disabled ? onDragMove : undefined}
465
- onDragMoveEnd={!disabled ? onDragMoveEnd : undefined}
459
+ onDragMoveStart={!disabled && !isItemDisabled(key) ? event => onDragMoveStart(key, event) : undefined}
460
+ onDragMove={!disabled && !isItemDisabled(key) ? onDragMove : undefined}
461
+ onDragMoveEnd={!disabled && !isItemDisabled(key) ? onDragMoveEnd : undefined}
466
462
  children={children}
467
463
  />
468
464
  )