Skip to content

Commit 362cbd5

Browse files
fix: preserve original objects
1 parent 32365f4 commit 362cbd5

File tree

1 file changed

+37
-18
lines changed

1 file changed

+37
-18
lines changed

src/react-sortable.tsx

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,14 @@ export class ReactSortable<T extends ItemInterface> extends Component<
4949
this.ref = createRef<HTMLElement>();
5050

5151
// make all state false because we can't change sortable unless a mouse gesture is made.
52-
const newList = props.list.map((item) => ({
53-
...item,
54-
chosen: false,
55-
selected: false,
56-
}));
52+
const newList = [...props.list];
53+
54+
newList.forEach((item: T) => {
55+
Object.assign(item, {
56+
chosen: false,
57+
selected: false,
58+
});
59+
})
5760

5861
props.setList(newList, this.sortable, store);
5962
invariant(
@@ -235,10 +238,14 @@ Please read the updated README.md at https://github.com/SortableJS/react-sortabl
235238
const otherList = [...store.dragging!.props.list];
236239
const customs = createCustoms(evt, otherList);
237240
removeNodes(customs);
238-
const newList = handleStateAdd(customs, list, evt, clone).map((item) => ({
239-
...item,
240-
selected: false,
241-
}));
241+
242+
const newList = handleStateAdd(customs, list, evt, clone)
243+
244+
newList.forEach((item) => {
245+
Object.assign(item, {
246+
selected: false,
247+
});
248+
});
242249
setList(newList, this.sortable, store);
243250
}
244251

@@ -289,7 +296,11 @@ Please read the updated README.md at https://github.com/SortableJS/react-sortabl
289296
}
290297

291298
// remove item.selected from list
292-
newList = newList.map((item) => ({ ...item, selected: false }));
299+
newList.forEach((item: T) => {
300+
Object.assign(item, {
301+
selected: false,
302+
});
303+
})
293304
setList(newList, this.sortable, store);
294305
}
295306

@@ -314,10 +325,9 @@ Please read the updated README.md at https://github.com/SortableJS/react-sortabl
314325
const { list, setList } = this.props;
315326
const newList = list.map((item, index) => {
316327
if (index === evt.oldIndex) {
317-
return {
318-
...item,
328+
Object.assign(item, {
319329
chosen: true,
320-
};
330+
});
321331
}
322332
return item;
323333
});
@@ -328,10 +338,9 @@ Please read the updated README.md at https://github.com/SortableJS/react-sortabl
328338
const { list, setList } = this.props;
329339
const newList = list.map((item, index) => {
330340
if (index === evt.oldIndex) {
331-
return {
332-
...item,
341+
Object.assign(item, {
333342
chosen: false,
334-
};
343+
});
335344
}
336345
return item;
337346
});
@@ -345,7 +354,12 @@ Please read the updated README.md at https://github.com/SortableJS/react-sortabl
345354

346355
onSelect(evt: MultiDragEvent): void {
347356
const { list, setList } = this.props;
348-
const newList = list.map((item) => ({ ...item, selected: false }));
357+
const newList = [...list];
358+
newList.forEach((item) => {
359+
Object.assign(item, {
360+
chosen: false,
361+
});
362+
});
349363
evt.newIndicies.forEach((curr) => {
350364
const index = curr.index;
351365
if (index === -1) {
@@ -362,7 +376,12 @@ Please read the updated README.md at https://github.com/SortableJS/react-sortabl
362376

363377
onDeselect(evt: MultiDragEvent): void {
364378
const { list, setList } = this.props;
365-
const newList = list.map((item) => ({ ...item, selected: false }));
379+
const newList = [...list];
380+
newList.forEach((item) => {
381+
Object.assign(item, {
382+
chosen: false,
383+
});
384+
});
366385
evt.newIndicies.forEach((curr) => {
367386
const index = curr.index;
368387
if (index === -1) return;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy