Skip to content

Commit f8eca0e

Browse files
author
Sam Tsai
committed
Issue 157: trigger onConfirm after set state
`onConfirm` is currently triggered before `setState` is called, to keep proper state with what is sent to `onConfirm`, `setState` should be called then `onConfirm`.
1 parent ed387bf commit f8eca0e

File tree

6 files changed

+17
-16
lines changed

6 files changed

+17
-16
lines changed

dist/lib/accessible-autocomplete.preact.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/lib/accessible-autocomplete.preact.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/lib/accessible-autocomplete.react.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/lib/accessible-autocomplete.react.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/autocomplete.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ export default class Autocomplete extends Component {
156156
let newQuery
157157
if (this.props.confirmOnBlur) {
158158
newQuery = newState.query || query
159-
this.props.onConfirm(options[selected])
160159
} else {
161160
newQuery = query
162161
}
@@ -165,7 +164,7 @@ export default class Autocomplete extends Component {
165164
menuOpen: newState.menuOpen || false,
166165
query: newQuery,
167166
selected: null
168-
})
167+
}, this.props.confirmOnBlur ? this.props.onConfirm(newQuery) : null)
169168
}
170169

171170
handleOptionBlur (evt, idx) {
@@ -257,13 +256,13 @@ export default class Autocomplete extends Component {
257256
handleOptionClick (evt, idx) {
258257
const selectedOption = this.state.options[idx]
259258
const newQuery = this.templateInputValue(selectedOption)
260-
this.props.onConfirm(selectedOption)
259+
261260
this.setState({
262261
focused: -1,
263262
menuOpen: false,
264263
query: newQuery,
265264
selected: -1
266-
})
265+
}, this.props.onConfirm(selectedOption))
267266
}
268267

269268
handleOptionMouseDown (evt) {

test/functional/index.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ describe('Autocomplete', () => {
7272
})
7373

7474
describe('behaviour', () => {
75-
let autocomplete, autoselectAutocomplete, onConfirmAutocomplete, onConfirmTriggered,
75+
let autocomplete, autoselectAutocomplete, onConfirmAutocomplete, onConfirmQuery,
7676
autoselectOnSelectAutocomplete, confirmOnBlurAutocomplete
7777

7878
beforeEach(() => {
@@ -89,26 +89,27 @@ describe('Autocomplete', () => {
8989
source: suggest
9090
})
9191

92-
onConfirmTriggered = false
92+
onConfirmQuery = null
93+
9394
onConfirmAutocomplete = new Autocomplete({
9495
...Autocomplete.defaultProps,
9596
id: 'test3',
96-
onConfirm: () => { onConfirmTriggered = true },
97+
onConfirm: query => { onConfirmQuery = query },
9798
source: suggest
9899
})
99100

100101
autoselectOnSelectAutocomplete = new Autocomplete({
101102
...Autocomplete.defaultProps,
102103
autoselect: true,
103104
id: 'test4',
104-
onConfirm: () => { onConfirmTriggered = true },
105+
onConfirm: query => { onConfirmQuery = query },
105106
source: suggest
106107
})
107108

108109
confirmOnBlurAutocomplete = new Autocomplete({
109110
...Autocomplete.defaultProps,
110111
id: 'test5',
111-
onConfirm: () => { onConfirmTriggered = true },
112+
onConfirm: query => { onConfirmQuery = query },
112113
confirmOnBlur: false,
113114
source: suggest
114115
})
@@ -223,7 +224,7 @@ describe('Autocomplete', () => {
223224
expect(autoselectOnSelectAutocomplete.state.focused).to.equal(null)
224225
expect(autoselectOnSelectAutocomplete.state.menuOpen).to.equal(false)
225226
expect(autoselectOnSelectAutocomplete.state.query).to.equal('France')
226-
expect(onConfirmTriggered).to.equal(true)
227+
expect(onConfirmQuery).to.equal(autoselectOnSelectAutocomplete.state.query)
227228
})
228229
})
229230

@@ -234,7 +235,8 @@ describe('Autocomplete', () => {
234235
expect(confirmOnBlurAutocomplete.state.focused).to.equal(null)
235236
expect(confirmOnBlurAutocomplete.state.menuOpen).to.equal(false)
236237
expect(confirmOnBlurAutocomplete.state.query).to.equal('fr')
237-
expect(onConfirmTriggered).to.equal(false)
238+
expect(onConfirmQuery).to.not.equal(confirmOnBlurAutocomplete.state.query)
239+
expect(onConfirmQuery).to.be.a('null')
238240
})
239241
})
240242
})
@@ -386,7 +388,7 @@ describe('Autocomplete', () => {
386388
expect(onConfirmAutocomplete.state.focused).to.equal(-1)
387389
expect(onConfirmAutocomplete.state.selected).to.equal(-1)
388390
expect(preventedDefault).to.equal(true)
389-
expect(onConfirmTriggered).to.equal(true)
391+
expect(onConfirmQuery).to.equal(onConfirmAutocomplete.state.query)
390392
})
391393
})
392394

0 commit comments

Comments
 (0)