Skip to content

Commit

Permalink
fix: fire change event redundantly when time also changed (#110)
Browse files Browse the repository at this point in the history
* test: add test about firing change event when calling setDate

* chore: update tui-time-picker

* fix: fire change event redundantly when time also changed

* test: change date to selectable date in added test

* feat: add silent option to setDate for preventing change event fired
  • Loading branch information
jajugoguma committed Nov 23, 2022
1 parent 02b16ea commit 4ea1b67
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 12 deletions.
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -57,6 +57,6 @@
"webpack-dev-server": "^3.8.0"
},
"dependencies": {
"tui-time-picker": "^2.1.3"
"tui-time-picker": "^2.1.5"
}
}
9 changes: 6 additions & 3 deletions src/js/datepicker/index.js
Expand Up @@ -1133,11 +1133,12 @@ var DatePicker = defineClass(
/**
* Select the date.
* @param {Date|number} date - Date instance or timestamp to set
* @param {boolean} [silent] - Prevents firing 'change' event if it is true.
* @example
* datepicker.setDate(new Date()); // Set today
*/
// eslint-disable-next-line complexity
setDate: function(date) {
setDate: function(date, silent) {
var isValidInput, newDate, shouldUpdate;

if (date === null) {
Expand All @@ -1155,7 +1156,7 @@ var DatePicker = defineClass(
this._date = newDate;
this._calendar.draw({ date: newDate });
if (this._timePicker) {
this._timePicker.setTime(newDate.getHours(), newDate.getMinutes());
this._timePicker.setTime(newDate.getHours(), newDate.getMinutes(), true);
}
this._syncToInput();

Expand All @@ -1174,7 +1175,9 @@ var DatePicker = defineClass(
* // unbind the 'change' event
* datepicker.off('change');
*/
this.fire('change');
if (!silent) {
this.fire('change');
}
}
},

Expand Down
32 changes: 27 additions & 5 deletions test/datepicker/datepicker.spec.js
@@ -1,3 +1,5 @@
/* eslint-disable max-nested-callbacks */

/**
* @fileoverview DatePicker spec
*/
Expand Down Expand Up @@ -131,14 +133,34 @@ describe('Date Picker', function() {
expect(datepicker.getCalendar()).toEqual(expect.any(Calendar));
});

it('setDate', function() {
datepicker.setDate(new Date(2017, 2, 12));
describe('setDate', function() {
it('default', function() {
datepicker.setDate(new Date(2017, 2, 12));

expect(datepicker.getDate()).toEqual(new Date(2017, 2, 12));

datepicker.setDate();

expect(datepicker.getDate()).toEqual(new Date(2017, 2, 12));
});

expect(datepicker.getDate()).toEqual(new Date(2017, 2, 12));
it('should firing change event only once', function() {
var spy = jest.fn();
datepicker.on('change', spy);

datepicker.setDate();
datepicker.setDate(new Date(2017, 10, 27, 23, 59));

expect(datepicker.getDate()).toEqual(new Date(2017, 2, 12));
expect(spy).toHaveBeenCalledTimes(1);
});

it('should not fire change event when silent is true', function() {
var spy = jest.fn();
datepicker.on('change', spy);

datepicker.setDate(new Date(2017, 10, 27, 23, 59), true);

expect(spy).toHaveBeenCalledTimes(0);
});
});

it('setType', function() {
Expand Down

0 comments on commit 4ea1b67

Please sign in to comment.