Skip to content

Commit 3d521a7

Browse files
authored
Merge pull request #220 from harrel56/fix/multidrag-nullable-event-field
fix: null check for newIndicies
2 parents 0fdce82 + 4b09ee1 commit 3d521a7

2 files changed

Lines changed: 10 additions & 8 deletions

File tree

src/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ export interface ExtendedOptions<T> extends Omit<Options, methods> {
7676

7777
export interface SortableEventExtended<T> extends SortableEvent {
7878
stateItem: T
79-
swapStateItem: T // only if swap, otherwise undefined
80-
stateItems: T[] // only if multidrag, otherwise empty
79+
swapStateItem?: T // only if swap, otherwise undefined
80+
stateItems?: T[] // only if multidrag, otherwise undefined
8181
}
8282

8383
export interface MoveEventExtended<T> extends MoveEvent {
8484
stateItem: T
85-
stateItems: T[] // only if multidrag, otherwise empty
85+
stateItems?: T[] // only if multidrag, otherwise undefined
8686
}

src/useSortable.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import {SortableContext} from './SortableProvider'
1313
import {BiDiMap, insert, moveItem, moveItems, remove, removeAll, replace, shallowClone, swap} from './utils'
1414

1515
const isClone = (e: SortableEvent): boolean => e.pullMode === 'clone'
16-
const isSwap = (e: SortableEvent): boolean => !!e.swapItem
17-
const isMultiDrag = (e: SortableEvent): boolean => e.newIndicies.length > 0
16+
const isSwap = (e: SortableEvent): boolean => Boolean(e.swapItem)
17+
const isMultiDrag = (e: SortableEvent): boolean => Boolean(e.newIndicies?.length)
1818

1919
const simpleEvents: (keyof ExtendedOptions<any>)[] = ['onStart', 'onClone', 'onChoose', 'onUnchoose', 'onSort', 'onFilter', 'onChange']
2020
const allEvents: Set<string> = new Set([...simpleEvents, 'onAdd', 'onRemove', 'onUpdate', 'onMove', 'onEnd'] as (keyof ExtendedOptions<any>)[])
@@ -70,7 +70,9 @@ export const useSortable = <T>({
7070
const extendSortableEvent = (e: SortableEvent) => {
7171
const extended = e as SortableEventExtended<T>
7272
extended.stateItem = findItem(e.from, e.item)
73-
extended.stateItems = e.newIndicies.map(el => findItem(e.from, el.multiDragElement))
73+
if (isMultiDrag(e)) {
74+
extended.stateItems = e.newIndicies.map(el => findItem(e.from, el.multiDragElement))
75+
}
7476
if (isSwap(e)) {
7577
extended.swapStateItem = findItem(e.to, e.swapItem!)
7678
}
@@ -109,7 +111,7 @@ export const useSortable = <T>({
109111
} else if (isMultiDrag(extended)) {
110112
extended.newIndicies.forEach(el => el.multiDragElement.remove())
111113
const minIdx = Math.min(...extended.newIndicies.map(el => el.index))
112-
setItems(state => insert(state, minIdx, ...extended.stateItems))
114+
setItems(state => insert(state, minIdx, ...extended.stateItems!))
113115
} else {
114116
extended.item.remove()
115117
setItems(state => insert(state, extended.newDraggableIndex!, extended.stateItem))
@@ -143,7 +145,7 @@ export const useSortable = <T>({
143145
swapping = true
144146
setTimeout(() => {
145147
newSortable.el.insertBefore(extended.item, null)
146-
setItems(state => replace(state, extended.oldDraggableIndex!, extended.swapStateItem))
148+
setItems(state => replace(state, extended.oldDraggableIndex!, extended.swapStateItem!))
147149
swapping = false
148150
}, delay)
149151
} else if (isMultiDrag(extended)) {

0 commit comments

Comments
 (0)