mirror of
https://github.com/tenrok/vue2-datepicker.git
synced 2026-06-23 11:30:35 +03:00
feat: default-value supports Array for range (#395)
This commit is contained in:
@@ -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);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
Reference in New Issue
Block a user