@etsoo/materialui 1.1.10 → 1.1.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.
- package/lib/DnDList.d.ts +6 -2
- package/lib/DnDList.js +11 -1
- package/package.json +1 -1
- package/src/DnDList.tsx +18 -3
package/lib/DnDList.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare const DnDItemStyle: (index: number, isDragging: boolean, theme: T
|
|
|
17
17
|
/**
|
|
18
18
|
* DnD list forward ref
|
|
19
19
|
*/
|
|
20
|
-
export interface DnDListRef<D extends object
|
|
20
|
+
export interface DnDListRef<D extends object, K extends DataTypes.Keys<D>> {
|
|
21
21
|
/**
|
|
22
22
|
* Add item
|
|
23
23
|
* @param item New item
|
|
@@ -39,6 +39,10 @@ export interface DnDListRef<D extends object> {
|
|
|
39
39
|
* @param index Index
|
|
40
40
|
*/
|
|
41
41
|
editItem(newItem: D, index: number): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Get deleted ids
|
|
44
|
+
*/
|
|
45
|
+
getDeletedIds(): D[K][];
|
|
42
46
|
/**
|
|
43
47
|
* Get all items
|
|
44
48
|
*/
|
|
@@ -71,7 +75,7 @@ export interface DnDListPros<D extends object, K extends DataTypes.Keys<D>> {
|
|
|
71
75
|
/**
|
|
72
76
|
* Methods ref
|
|
73
77
|
*/
|
|
74
|
-
mRef?: React.Ref<DnDListRef<D>>;
|
|
78
|
+
mRef?: React.Ref<DnDListRef<D, K>>;
|
|
75
79
|
/**
|
|
76
80
|
* Data change handler
|
|
77
81
|
*/
|
package/lib/DnDList.js
CHANGED
|
@@ -57,6 +57,7 @@ export function DnDList(props) {
|
|
|
57
57
|
// States
|
|
58
58
|
const [items, setItems] = React.useState([]);
|
|
59
59
|
const [activeId, setActiveId] = React.useState();
|
|
60
|
+
const deletedIds = React.useRef([]);
|
|
60
61
|
const doFormChange = (newItems) => {
|
|
61
62
|
if (onFormChange)
|
|
62
63
|
onFormChange(newItems !== null && newItems !== void 0 ? newItems : items);
|
|
@@ -141,10 +142,18 @@ export function DnDList(props) {
|
|
|
141
142
|
// Clone
|
|
142
143
|
const newItems = [...items];
|
|
143
144
|
// Remove the item
|
|
144
|
-
newItems.splice(index, 1);
|
|
145
|
+
const deleted = newItems.splice(index, 1);
|
|
146
|
+
deleted.forEach((d) => {
|
|
147
|
+
const id = d[keyField];
|
|
148
|
+
if (!deletedIds.current.includes(id))
|
|
149
|
+
deletedIds.current.push(id);
|
|
150
|
+
});
|
|
145
151
|
// Update the state
|
|
146
152
|
changeItems(newItems);
|
|
147
153
|
},
|
|
154
|
+
getDeletedIds() {
|
|
155
|
+
return deletedIds.current;
|
|
156
|
+
},
|
|
148
157
|
getItems() {
|
|
149
158
|
return items;
|
|
150
159
|
}
|
|
@@ -166,6 +175,7 @@ export function DnDList(props) {
|
|
|
166
175
|
};
|
|
167
176
|
React.useEffect(() => {
|
|
168
177
|
setItems(props.items);
|
|
178
|
+
deletedIds.current = [];
|
|
169
179
|
}, [props.items]);
|
|
170
180
|
const children = (React.createElement(DndContext, { onDragStart: handleDragStart, onDragEnd: handleDragEnd },
|
|
171
181
|
React.createElement(SortableContext, { items: items, strategy: verticalListSortingStrategy }, items.map((item, index) => {
|
package/package.json
CHANGED
package/src/DnDList.tsx
CHANGED
|
@@ -79,7 +79,7 @@ export const DnDItemStyle = (
|
|
|
79
79
|
/**
|
|
80
80
|
* DnD list forward ref
|
|
81
81
|
*/
|
|
82
|
-
export interface DnDListRef<D extends object
|
|
82
|
+
export interface DnDListRef<D extends object, K extends DataTypes.Keys<D>> {
|
|
83
83
|
/**
|
|
84
84
|
* Add item
|
|
85
85
|
* @param item New item
|
|
@@ -105,6 +105,11 @@ export interface DnDListRef<D extends object> {
|
|
|
105
105
|
*/
|
|
106
106
|
editItem(newItem: D, index: number): boolean;
|
|
107
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Get deleted ids
|
|
110
|
+
*/
|
|
111
|
+
getDeletedIds(): D[K][];
|
|
112
|
+
|
|
108
113
|
/**
|
|
109
114
|
* Get all items
|
|
110
115
|
*/
|
|
@@ -148,7 +153,7 @@ export interface DnDListPros<D extends object, K extends DataTypes.Keys<D>> {
|
|
|
148
153
|
/**
|
|
149
154
|
* Methods ref
|
|
150
155
|
*/
|
|
151
|
-
mRef?: React.Ref<DnDListRef<D>>;
|
|
156
|
+
mRef?: React.Ref<DnDListRef<D, K>>;
|
|
152
157
|
|
|
153
158
|
/**
|
|
154
159
|
* Data change handler
|
|
@@ -200,6 +205,7 @@ export function DnDList<
|
|
|
200
205
|
// States
|
|
201
206
|
const [items, setItems] = React.useState<D[]>([]);
|
|
202
207
|
const [activeId, setActiveId] = React.useState<UniqueIdentifier>();
|
|
208
|
+
const deletedIds = React.useRef<D[K][]>([]);
|
|
203
209
|
|
|
204
210
|
const doFormChange = (newItems?: D[]) => {
|
|
205
211
|
if (onFormChange) onFormChange(newItems ?? items);
|
|
@@ -316,12 +322,20 @@ export function DnDList<
|
|
|
316
322
|
const newItems = [...items];
|
|
317
323
|
|
|
318
324
|
// Remove the item
|
|
319
|
-
newItems.splice(index, 1);
|
|
325
|
+
const deleted = newItems.splice(index, 1);
|
|
326
|
+
deleted.forEach((d) => {
|
|
327
|
+
const id = d[keyField];
|
|
328
|
+
if (!deletedIds.current.includes(id)) deletedIds.current.push(id);
|
|
329
|
+
});
|
|
320
330
|
|
|
321
331
|
// Update the state
|
|
322
332
|
changeItems(newItems);
|
|
323
333
|
},
|
|
324
334
|
|
|
335
|
+
getDeletedIds() {
|
|
336
|
+
return deletedIds.current;
|
|
337
|
+
},
|
|
338
|
+
|
|
325
339
|
getItems() {
|
|
326
340
|
return items;
|
|
327
341
|
}
|
|
@@ -355,6 +369,7 @@ export function DnDList<
|
|
|
355
369
|
|
|
356
370
|
React.useEffect(() => {
|
|
357
371
|
setItems(props.items);
|
|
372
|
+
deletedIds.current = [];
|
|
358
373
|
}, [props.items]);
|
|
359
374
|
|
|
360
375
|
const children = (
|