diff --git a/__test__/calendar-range.test.js b/__test__/calendar-range.test.js index f1f6ecfa..533b2971 100644 --- a/__test__/calendar-range.test.js +++ b/__test__/calendar-range.test.js @@ -76,4 +76,17 @@ describe('CalendarRange', () => { expect(startPanel.vm.partialUpdate).toBe(false); expect(endPanel.vm.partialUpdate).toBe(false); }); + + it('supports defaultValue is Array', () => { + wrapper = mount(CalendarRange, { + propsData: { + defaultValue: [new Date(2019, 9, 1), new Date(2019, 11, 1)], + }, + }); + const panels = wrapper.findAll(CalendarPanel); + const startPanel = panels.at(0); + const endPanel = panels.at(1); + expect(startPanel.vm.calendarMonth).toBe(9); + expect(endPanel.vm.calendarMonth).toBe(11); + }); }); diff --git a/__test__/datetime-range.test.js b/__test__/datetime-range.test.js index c287f1d3..93cb2689 100644 --- a/__test__/datetime-range.test.js +++ b/__test__/datetime-range.test.js @@ -47,7 +47,7 @@ describe('DatetimeRange', () => { wrapper = mount(DatetimeRange, { sync: false, propsData: { - defaultValue: new Date(2019, 9, 1), + defaultValue: [new Date(2019, 9, 1), new Date(2019, 9, 1, 12)], disabledDate, disabledTime, }, @@ -59,11 +59,11 @@ describe('DatetimeRange', () => { expect(wrapper.emitted().select).toBeUndefined(); const timeTitle = wrapper.find('.mx-time-header-title'); expect(timeTitle.text()).toBe('2019-10-02'); - const defaultValue = new Date(2019, 9, 2, 12); + const defaultValue = [new Date(2019, 9, 2, 12), new Date(2019, 9, 2, 12)]; wrapper.setProps({ defaultValue }); td.trigger('click'); td.trigger('click'); await flushPromises(); - expect(wrapper.emitted().select[0][0]).toEqual([defaultValue, defaultValue]); + expect(wrapper.emitted().select[0][0]).toEqual(defaultValue); }); }); diff --git a/__test__/time-range.test.js b/__test__/time-range.test.js index a0edba38..64e3cf97 100644 --- a/__test__/time-range.test.js +++ b/__test__/time-range.test.js @@ -33,4 +33,15 @@ describe('TimeRange', () => { new Date(2019, 9, 4, 19, 30, 0), ]); }); + + it('supports defaultValue is Array', () => { + wrapper = mount(TimeRange, { + propsData: { + defaultValue: [new Date(2019, 9, 1, 10), new Date(2019, 11, 1, 12)], + }, + }); + const actived = wrapper.findAll('.active'); + expect(actived.at(0).text()).toBe('10'); + expect(actived.at(3).text()).toBe('12'); + }); }); diff --git a/src/calendar/calendar-panel.vue b/src/calendar/calendar-panel.vue index b1d7267d..2bfac775 100644 --- a/src/calendar/calendar-panel.vue +++ b/src/calendar/calendar-panel.vue @@ -128,9 +128,6 @@ export default { props: { value: {}, defaultValue: { - validator(value) { - return !isNaN(new Date(value).getTime()); - }, default() { const date = new Date(); date.setHours(0, 0, 0, 0); diff --git a/src/calendar/calendar-range.js b/src/calendar/calendar-range.js index b6d33cbe..403f5c67 100644 --- a/src/calendar/calendar-range.js +++ b/src/calendar/calendar-range.js @@ -27,6 +27,11 @@ export default { calendarMaxDiff() { return Infinity; }, + defaultValues() { + return Array.isArray(this.defaultValue) + ? this.defaultValue + : [this.defaultValue, this.defaultValue]; + }, }, watch: { value: { @@ -35,7 +40,7 @@ export default { this.innerValue = isValidRangeDate(this.value) ? this.value : [new Date(NaN), new Date(NaN)]; - this.calendars = this.innerValue.map(v => getValidDate(v, this.defaultValue)); + this.calendars = this.innerValue.map((v, i) => getValidDate(v, this.defaultValues[i])); this.validateCalendars(1); }, }, @@ -108,6 +113,7 @@ export default { ...this.$props, calendar, value: this.innerValue, + defaultValue: this.defaultValues[index], getClasses: this.getRangeClasses, // don't update when range is true partialUpdate: false, diff --git a/src/date-picker.vue b/src/date-picker.vue index 3ac10801..bd0fd740 100644 --- a/src/date-picker.vue +++ b/src/date-picker.vue @@ -87,7 +87,7 @@