2
0
mirror of https://github.com/tenrok/vue2-datepicker.git synced 2026-06-23 09:20:35 +03:00

feat: default-value supports Array for range (#395)

This commit is contained in:
xiemx
2019-12-16 18:13:08 +08:00
parent c8f7122b63
commit b33c9b8f19
9 changed files with 46 additions and 14 deletions
+13
View File
@@ -76,4 +76,17 @@ describe('CalendarRange', () => {
expect(startPanel.vm.partialUpdate).toBe(false); expect(startPanel.vm.partialUpdate).toBe(false);
expect(endPanel.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);
});
}); });
+3 -3
View File
@@ -47,7 +47,7 @@ describe('DatetimeRange', () => {
wrapper = mount(DatetimeRange, { wrapper = mount(DatetimeRange, {
sync: false, sync: false,
propsData: { propsData: {
defaultValue: new Date(2019, 9, 1), defaultValue: [new Date(2019, 9, 1), new Date(2019, 9, 1, 12)],
disabledDate, disabledDate,
disabledTime, disabledTime,
}, },
@@ -59,11 +59,11 @@ describe('DatetimeRange', () => {
expect(wrapper.emitted().select).toBeUndefined(); expect(wrapper.emitted().select).toBeUndefined();
const timeTitle = wrapper.find('.mx-time-header-title'); const timeTitle = wrapper.find('.mx-time-header-title');
expect(timeTitle.text()).toBe('2019-10-02'); 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 }); wrapper.setProps({ defaultValue });
td.trigger('click'); td.trigger('click');
td.trigger('click'); td.trigger('click');
await flushPromises(); await flushPromises();
expect(wrapper.emitted().select[0][0]).toEqual([defaultValue, defaultValue]); expect(wrapper.emitted().select[0][0]).toEqual(defaultValue);
}); });
}); });
+11
View File
@@ -33,4 +33,15 @@ describe('TimeRange', () => {
new Date(2019, 9, 4, 19, 30, 0), 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');
});
}); });
-3
View File
@@ -128,9 +128,6 @@ export default {
props: { props: {
value: {}, value: {},
defaultValue: { defaultValue: {
validator(value) {
return !isNaN(new Date(value).getTime());
},
default() { default() {
const date = new Date(); const date = new Date();
date.setHours(0, 0, 0, 0); date.setHours(0, 0, 0, 0);
+7 -1
View File
@@ -27,6 +27,11 @@ export default {
calendarMaxDiff() { calendarMaxDiff() {
return Infinity; return Infinity;
}, },
defaultValues() {
return Array.isArray(this.defaultValue)
? this.defaultValue
: [this.defaultValue, this.defaultValue];
},
}, },
watch: { watch: {
value: { value: {
@@ -35,7 +40,7 @@ export default {
this.innerValue = isValidRangeDate(this.value) this.innerValue = isValidRangeDate(this.value)
? this.value ? this.value
: [new Date(NaN), new Date(NaN)]; : [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); this.validateCalendars(1);
}, },
}, },
@@ -108,6 +113,7 @@ export default {
...this.$props, ...this.$props,
calendar, calendar,
value: this.innerValue, value: this.innerValue,
defaultValue: this.defaultValues[index],
getClasses: this.getRangeClasses, getClasses: this.getRangeClasses,
// don't update when range is true // don't update when range is true
partialUpdate: false, partialUpdate: false,
+2 -2
View File
@@ -87,7 +87,7 @@
<script> <script>
import { parse, format, getWeek } from 'date-format-parse'; import { parse, format, getWeek } from 'date-format-parse';
import { isValidDate, isValidRangeDate, getValidDate } from './util/date'; import { isValidDate, isValidRangeDate } from './util/date';
import { pick, isObject, mergeDeep } from './util/base'; import { pick, isObject, mergeDeep } from './util/base';
import { getLocale, getLocaleFieldValue } from './locale'; import { getLocale, getLocaleFieldValue } from './locale';
import Popup from './popup'; import Popup from './popup';
@@ -306,7 +306,7 @@ export default {
if (isObject(this.format) && typeof this.format.parse === 'function') { if (isObject(this.format) && typeof this.format.parse === 'function') {
return this.format.parse(value, fmt); return this.format.parse(value, fmt);
} }
const backupDate = getValidDate(this.defaultValue); const backupDate = new Date();
return parse(value, fmt, { locale: this.locale.formatLocale, backupDate }); return parse(value, fmt, { locale: this.locale.formatLocale, backupDate });
}, },
formatDate(date, fmt) { formatDate(date, fmt) {
+5 -2
View File
@@ -43,15 +43,18 @@ export default {
if (type === 'date') { if (type === 'date') {
this.openTimePanel(); this.openTimePanel();
} }
const defaultValues = Array.isArray(this.defaultValue)
? this.defaultValue
: [this.defaultValue, this.defaultValue];
let datetimes = dates.map((date, i) => { let datetimes = dates.map((date, i) => {
const time = isValidRangeDate(this.value) ? this.value[i] : this.defaultValue; const time = isValidRangeDate(this.value) ? this.value[i] : defaultValues[i];
return assignTime(date, time); return assignTime(date, time);
}); });
if (datetimes[1].getTime() < datetimes[0].getTime()) { if (datetimes[1].getTime() < datetimes[0].getTime()) {
datetimes = [datetimes[0], datetimes[0]]; datetimes = [datetimes[0], datetimes[0]];
} }
if (datetimes.some(this.disabledTime)) { if (datetimes.some(this.disabledTime)) {
datetimes = dates.map(date => assignTime(date, this.defaultValue)); datetimes = dates.map((date, i) => assignTime(date, defaultValues[i]));
if (datetimes.some(this.disabledTime)) { if (datetimes.some(this.disabledTime)) {
this.currentValue = datetimes; this.currentValue = datetimes;
return; return;
-3
View File
@@ -53,9 +53,6 @@ export default {
props: { props: {
value: {}, value: {},
defaultValue: { defaultValue: {
validator(value) {
return !isNaN(new Date(value).getTime());
},
default() { default() {
const date = new Date(); const date = new Date();
date.setHours(0, 0, 0, 0); date.setHours(0, 0, 0, 0);
+5
View File
@@ -56,6 +56,9 @@ export default {
}, },
}, },
render() { render() {
const defaultValues = Array.isArray(this.defaultValue)
? this.defaultValue
: [this.defaultValue, this.defaultValue];
return ( return (
<div class="mx-range-wrapper"> <div class="mx-range-wrapper">
<TimePanel <TimePanel
@@ -63,6 +66,7 @@ export default {
props: { props: {
...this.$props, ...this.$props,
value: this.startValue, value: this.startValue,
defaultValue: defaultValues[0],
disabledTime: this.disabledStartTime, disabledTime: this.disabledStartTime,
}, },
on: { on: {
@@ -76,6 +80,7 @@ export default {
props: { props: {
...this.$props, ...this.$props,
value: this.endValue, value: this.endValue,
defaultValue: defaultValues[1],
disabledTime: this.disabledEndTime, disabledTime: this.disabledEndTime,
}, },
on: { on: {