Skip to content

Commit

Permalink
fix(useMultipleSelect): removeSelectedItem adding duplicate items to …
Browse files Browse the repository at this point in the history
…selected items (#1353)

* fix removeSelectedItem adding duplicate items to selected items

fixes #1316

* fix: remove unnecessary spread
  • Loading branch information
drewbrend authored Aug 11, 2022
1 parent efba7f2 commit bf709b9
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 11 deletions.
28 changes: 28 additions & 0 deletions src/hooks/useMultipleSelection/__tests__/returnProps.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,34 @@ describe('returnProps', () => {
expect(result.current.activeIndex).toEqual(0)
})

test('removeSelectedItem handles undefined item without modifying the selected array or the active index', () => {
const {result} = renderUseMultipleSelection({
initialSelectedItems: ['test', 'more test'],
initialActiveIndex: 1,
})

act(() => {
result.current.removeSelectedItem(undefined)
})

expect(result.current.selectedItems).toStrictEqual(['test', 'more test'])
expect(result.current.activeIndex).toEqual(1)
})

test('removeSelectedItem handles null item without modifying the selected array or the active index', () => {
const {result} = renderUseMultipleSelection({
initialSelectedItems: ['test', 'more test'],
initialActiveIndex: 1,
})

act(() => {
result.current.removeSelectedItem(null)
})

expect(result.current.selectedItems).toStrictEqual(['test', 'more test'])
expect(result.current.activeIndex).toEqual(1)
})

test('setActiveIndex sets activeIndex', () => {
const {result} = renderUseMultipleSelection()

Expand Down
24 changes: 13 additions & 11 deletions src/hooks/useMultipleSelection/reducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,18 +71,20 @@ export default function downshiftMultipleSelectionReducer(state, action) {
let newActiveIndex = activeIndex
const selectedItemIndex = selectedItems.indexOf(selectedItem)

if (selectedItems.length === 1) {
newActiveIndex = -1
} else if (selectedItemIndex === selectedItems.length - 1) {
newActiveIndex = selectedItems.length - 2
}
if (selectedItemIndex >= 0) {
if (selectedItems.length === 1) {
newActiveIndex = -1
} else if (selectedItemIndex === selectedItems.length - 1) {
newActiveIndex = selectedItems.length - 2
}

changes = {
selectedItems: [
...selectedItems.slice(0, selectedItemIndex),
...selectedItems.slice(selectedItemIndex + 1),
],
...{activeIndex: newActiveIndex},
changes = {
selectedItems: [
...selectedItems.slice(0, selectedItemIndex),
...selectedItems.slice(selectedItemIndex + 1),
],
activeIndex: newActiveIndex,
}
}
break
}
Expand Down

0 comments on commit bf709b9

Please sign in to comment.