2
0
mirror of https://github.com/tenrok/vue-select.git synced 2026-06-22 10:30:34 +03:00

fix: emit input event only if there is val to be deleted (#1038)

This commit is contained in:
andreas
2020-03-16 04:17:25 +02:00
committed by GitHub
parent 0bad820f91
commit eedda74d43
2 changed files with 27 additions and 17 deletions
+2 -2
View File
@@ -819,7 +819,7 @@
* @return {this.value} * @return {this.value}
*/ */
maybeDeleteValue() { maybeDeleteValue() {
if (!this.searchEl.value.length && this.selectedValue && this.clearable) { if (!this.searchEl.value.length && this.selectedValue && this.selectedValue.length && this.clearable) {
let value = null; let value = null;
if (this.multiple) { if (this.multiple) {
value = [...this.selectedValue.slice(0, this.selectedValue.length - 1)] value = [...this.selectedValue.slice(0, this.selectedValue.length - 1)]
@@ -939,7 +939,7 @@
}; };
const defaults = { const defaults = {
// delete // backspace
8: e => this.maybeDeleteValue(), 8: e => this.maybeDeleteValue(),
// tab // tab
9: e => this.onTab(), 9: e => this.onTab(),
+25 -15
View File
@@ -5,10 +5,10 @@ describe('Custom Keydown Handlers', () => {
it('can use the map-keydown prop to trigger custom behaviour', () => { it('can use the map-keydown prop to trigger custom behaviour', () => {
const onKeyDown = jest.fn(); const onKeyDown = jest.fn();
const Select = mountDefault({ const Select = mountDefault({
mapKeydown: (defaults, vm) => ({...defaults, 32: onKeyDown}), mapKeydown: (defaults, vm) => ({ ...defaults, 32: onKeyDown }),
}); });
Select.find({ref: 'search'}).trigger('keydown.space'); Select.find({ ref: 'search' }).trigger('keydown.space');
expect(onKeyDown.mock.calls.length).toBe(1); expect(onKeyDown.mock.calls.length).toBe(1);
}); });
@@ -20,7 +20,7 @@ describe('Custom Keydown Handlers', () => {
const spy = jest.spyOn(Select.vm, 'typeAheadSelect'); const spy = jest.spyOn(Select.vm, 'typeAheadSelect');
Select.find({ref: 'search'}).trigger('keydown.space'); Select.find({ ref: 'search' }).trigger('keydown.space');
expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledTimes(1);
}); });
@@ -28,16 +28,16 @@ describe('Custom Keydown Handlers', () => {
it('even works when combining selectOnKeyCodes with map-keydown', () => { it('even works when combining selectOnKeyCodes with map-keydown', () => {
const onKeyDown = jest.fn(); const onKeyDown = jest.fn();
const Select = mountDefault({ const Select = mountDefault({
mapKeydown: (defaults, vm) => ({...defaults, 32: onKeyDown}), mapKeydown: (defaults, vm) => ({ ...defaults, 32: onKeyDown }),
selectOnKeyCodes: [9], selectOnKeyCodes: [9],
}); });
const spy = jest.spyOn(Select.vm, 'typeAheadSelect'); const spy = jest.spyOn(Select.vm, 'typeAheadSelect');
Select.find({ref: 'search'}).trigger('keydown.space'); Select.find({ ref: 'search' }).trigger('keydown.space');
expect(onKeyDown.mock.calls.length).toBe(1); expect(onKeyDown.mock.calls.length).toBe(1);
Select.find({ref: 'search'}).trigger('keydown.tab'); Select.find({ ref: 'search' }).trigger('keydown.tab');
expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledTimes(1);
}); });
@@ -47,28 +47,38 @@ describe('Custom Keydown Handlers', () => {
const Select = mountDefault(); const Select = mountDefault();
const spy = jest.spyOn(Select.vm, 'typeAheadSelect'); const spy = jest.spyOn(Select.vm, 'typeAheadSelect');
Select.find({ref: 'search'}).trigger('compositionstart'); Select.find({ ref: 'search' }).trigger('compositionstart');
Select.find({ref: 'search'}).trigger('keydown.enter'); Select.find({ ref: 'search' }).trigger('keydown.enter');
expect(spy).toHaveBeenCalledTimes(0); expect(spy).toHaveBeenCalledTimes(0);
Select.find({ref: 'search'}).trigger('compositionend'); Select.find({ ref: 'search' }).trigger('compositionend');
Select.find({ref: 'search'}).trigger('keydown.enter'); Select.find({ ref: 'search' }).trigger('keydown.enter');
expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledTimes(1);
}); });
it('will not select a value with tab if the user is composing', () => { it('will not select a value with tab if the user is composing', () => {
const Select = mountDefault({selectOnTab: true}); const Select = mountDefault({ selectOnTab: true });
const spy = jest.spyOn(Select.vm, 'typeAheadSelect'); const spy = jest.spyOn(Select.vm, 'typeAheadSelect');
Select.find({ref: 'search'}).trigger('compositionstart'); Select.find({ ref: 'search' }).trigger('compositionstart');
Select.find({ref: 'search'}).trigger('keydown.tab'); Select.find({ ref: 'search' }).trigger('keydown.tab');
expect(spy).toHaveBeenCalledTimes(0); expect(spy).toHaveBeenCalledTimes(0);
Select.find({ref: 'search'}).trigger('compositionend'); Select.find({ ref: 'search' }).trigger('compositionend');
Select.find({ref: 'search'}).trigger('keydown.tab'); Select.find({ ref: 'search' }).trigger('keydown.tab');
expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledTimes(1);
}); });
it('will not emit input event if value has not changed with backspace', () => {
const Select = mountDefault();
Select.vm.$data._value = 'one';
Select.find({ ref: 'search' }).trigger('keydown.backspace');
expect(Select.emitted().input.length).toBe(1);
Select.find({ ref: 'search' }).trigger('keydown.backspace');
Select.find({ ref: 'search' }).trigger('keydown.backspace');
expect(Select.emitted().input.length).toBe(1);
});
}); });
}); });