Skip to content

Commit 7c34430

Browse files
authored
fix: Allow same option to be reselected right after it's deselected (#129) 🐛
Closes #128
1 parent c801e60 commit 7c34430

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

docs/bundle.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/tree-manager/index.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,18 @@ class TreeManager {
9898

9999
togglePreviousChecked(id) {
100100
const prevChecked = this.currentChecked
101-
if (prevChecked) this.getNodeById(prevChecked).checked = false
101+
102+
// if id is same as previously selected node, then do nothing (since it's state is already set correctly by setNodeCheckedState)
103+
// but if they ar not same, then toggle the previous one
104+
if (prevChecked && prevChecked !== id) this.getNodeById(prevChecked).checked = false
105+
102106
this.currentChecked = id
107+
108+
console.table({ id, prevChecked, currentChecked: this.currentChecked })
103109
}
104110

105111
setNodeCheckedState(id, checked) {
112+
console.table({ id, checked })
106113
const node = this.getNodeById(id)
107114
node.checked = checked
108115

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import test from 'ava'
2+
import TreeManager from '..'
3+
4+
test('should select the same node if it is selected and then deselected right again', t => {
5+
const tree = [{ id: 'nodeA' }, { id: 'nodeB' }, { id: 'nodeC' }]
6+
7+
const manager = new TreeManager(tree, true)
8+
9+
// first select a node
10+
manager.setNodeCheckedState('nodeA', true)
11+
12+
// then deselect the same node
13+
manager.setNodeCheckedState('nodeA', false)
14+
15+
// then reselect the same node right away
16+
manager.setNodeCheckedState('nodeA', true)
17+
18+
t.true(manager.getNodeById('nodeA').checked)
19+
})

0 commit comments

Comments
 (0)