Merge pull request #3029 from SergioCrisostomo/fix-datepicker-output
Pass correct arguments to `on-change` callback
This commit is contained in:
commit
7600961f69
4 changed files with 94 additions and 5 deletions
|
@ -183,7 +183,9 @@
|
||||||
return this.internalValue.slice();
|
return this.internalValue.slice();
|
||||||
} else {
|
} else {
|
||||||
const isRange = this.type.includes('range');
|
const isRange = this.type.includes('range');
|
||||||
const val = this.internalValue.map(date => date instanceof Date ? new Date(date) : (date || ''));
|
let val = this.internalValue.map(date => date instanceof Date ? new Date(date) : (date || ''));
|
||||||
|
|
||||||
|
if (this.type.match(/^time/)) val = val.map(this.formatDate);
|
||||||
return (isRange || this.multiple) ? val : val[0];
|
return (isRange || this.multiple) ? val : val[0];
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -293,8 +295,8 @@
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
emitChange () {
|
emitChange () {
|
||||||
this.$emit('on-change', this.visualValue, this.publicValue);
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
|
this.$emit('on-change', this.publicValue);
|
||||||
this.dispatch('FormItem', 'on-form-change', this.publicValue);
|
this.dispatch('FormItem', 'on-form-change', this.publicValue);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -163,6 +163,8 @@ const RANGE_FORMATTER = function(value, format) {
|
||||||
if (start && end) {
|
if (start && end) {
|
||||||
return formatDate(start, format) + RANGE_SEPARATOR + formatDate(end, format);
|
return formatDate(start, format) + RANGE_SEPARATOR + formatDate(end, format);
|
||||||
}
|
}
|
||||||
|
} else if (!Array.isArray(value) && value instanceof Date){
|
||||||
|
return formatDate(value, format);
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { createVue, destroyVM, stringToDate, dateToString, promissedTick } from '../util';
|
import { createVue, destroyVM, stringToDate, dateToString, dateToTimeString, promissedTick } from '../util';
|
||||||
|
|
||||||
describe('DatePicker.vue', () => {
|
describe('DatePicker.vue', () => {
|
||||||
let vm;
|
let vm;
|
||||||
|
@ -26,6 +26,79 @@ describe('DatePicker.vue', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should pass correct arguments to on-change event', done => {
|
||||||
|
const now = new Date();
|
||||||
|
const nowDate = dateToString(now);
|
||||||
|
const nowTime = dateToTimeString(now);
|
||||||
|
const nextHour = dateToTimeString(now.getTime() + 36e5);
|
||||||
|
const nextWeek = new Date(now.getTime() + 6048e5);
|
||||||
|
|
||||||
|
let dateValue, dateRangeValue, timeValue, timeRangeValue;
|
||||||
|
vm = createVue({
|
||||||
|
template: `
|
||||||
|
<div>
|
||||||
|
<date-picker type="date" @on-change="onChangeDate"></date-picker>
|
||||||
|
<date-picker type="daterange" @on-change="onChangeDateRange"></date-picker>
|
||||||
|
<time-picker type="time" @on-change="onChangeTime"></time-picker>
|
||||||
|
<time-picker type="timerange" @on-change="onChangeTimeRange"></time-picker>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
methods: {
|
||||||
|
onChangeDate(val) {
|
||||||
|
dateValue = val;
|
||||||
|
},
|
||||||
|
onChangeDateRange(val) {
|
||||||
|
dateRangeValue = val;
|
||||||
|
},
|
||||||
|
onChangeTime(val) {
|
||||||
|
timeValue = val;
|
||||||
|
},
|
||||||
|
onChangeTimeRange(val) {
|
||||||
|
timeRangeValue = val;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
|
||||||
|
vm.$nextTick(() => {
|
||||||
|
const [datePicker, dateRangePicker, timePicker, timeRangePicker] = vm.$children;
|
||||||
|
|
||||||
|
datePicker.handleInputChange({target: {value: nowDate}});
|
||||||
|
dateRangePicker.handleInputChange({target: {value: [
|
||||||
|
nowDate,
|
||||||
|
dateToString(nextWeek)
|
||||||
|
].join(' - ')
|
||||||
|
}});
|
||||||
|
|
||||||
|
timePicker.handleInputChange({target: {value: nowTime}});
|
||||||
|
const timeRangeString = [
|
||||||
|
nowTime,
|
||||||
|
nextHour
|
||||||
|
].join(' - ');
|
||||||
|
timeRangePicker.handleInputChange({target: {
|
||||||
|
value: timeRangeString
|
||||||
|
}});
|
||||||
|
|
||||||
|
vm.$nextTick(() => {
|
||||||
|
// DATE
|
||||||
|
expect(dateValue instanceof Date).to.equal(true);
|
||||||
|
expect(dateToString(dateValue)).to.equal(nowDate);
|
||||||
|
// DATERANGE
|
||||||
|
expect(Array.isArray(dateRangeValue)).to.equal(true);
|
||||||
|
expect(dateToString(dateRangeValue[0])).to.equal(nowDate);
|
||||||
|
expect(dateToString(dateRangeValue[1])).to.equal(dateToString(nextWeek));
|
||||||
|
// TIME
|
||||||
|
expect(typeof timeValue).to.equal('string');
|
||||||
|
expect(timeValue).to.equal(nowTime);
|
||||||
|
// TIMERANGE
|
||||||
|
expect(Array.isArray(timeRangeValue)).to.equal(true);
|
||||||
|
expect(timeRangeValue[0]).to.equal(nowTime);
|
||||||
|
expect(timeRangeValue[1]).to.equal(nextHour);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should create a DatePicker component of type="datetimerange"', done => {
|
it('should create a DatePicker component of type="datetimerange"', done => {
|
||||||
vm = createVue(`
|
vm = createVue(`
|
||||||
<Date-Picker type="datetimerange"></Date-Picker>
|
<Date-Picker type="datetimerange"></Date-Picker>
|
||||||
|
@ -134,7 +207,7 @@ describe('DatePicker.vue', () => {
|
||||||
|
|
||||||
it('should fire `on-change` when reseting value', done => {
|
it('should fire `on-change` when reseting value', done => {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const nowDate = [now.getFullYear(), now.getMonth() + 1, now.getDate()].map(nr => (nr > 9 ? nr : '0' + nr)).join('-');
|
const nowDate = dateToString(now);
|
||||||
let onChangeCalled = false;
|
let onChangeCalled = false;
|
||||||
vm = createVue({
|
vm = createVue({
|
||||||
template: '<date-picker :value="date" type="date" @on-change="onChange"></date-picker>',
|
template: '<date-picker :value="date" type="date" @on-change="onChange"></date-picker>',
|
||||||
|
|
|
@ -14,6 +14,8 @@ const createElm = function() {
|
||||||
return elm;
|
return elm;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const pad = (nr) => nr < 10 ? '0' + nr : nr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 回收 vm
|
* 回收 vm
|
||||||
* @param {Object} vm
|
* @param {Object} vm
|
||||||
|
@ -72,9 +74,19 @@ exports.stringToDate = function(str) {
|
||||||
* @param {Date}
|
* @param {Date}
|
||||||
*/
|
*/
|
||||||
exports.dateToString = function(d) {
|
exports.dateToString = function(d) {
|
||||||
return [d.getFullYear(), d.getMonth() + 1, d.getDate()].map(nr => nr > 9 ? nr : '0' + nr).join('-');
|
return [d.getFullYear(), d.getMonth() + 1, d.getDate()].map(pad).join('-');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transform Date to HH:MM:SS string
|
||||||
|
* @param {Date}
|
||||||
|
*/
|
||||||
|
exports.dateToTimeString = function(d){
|
||||||
|
const date = new Date(d);
|
||||||
|
return [date.getHours(), date.getMinutes(), date.getSeconds()].map(pad).join(':');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 触发一个事件
|
* 触发一个事件
|
||||||
* mouseenter, mouseleave, mouseover, keyup, change, click 等
|
* mouseenter, mouseleave, mouseover, keyup, change, click 等
|
||||||
|
|
Loading…
Add table
Reference in a new issue