Skip to content

Commit

Permalink
feat: default-value supports Array for range (#395)
Browse files Browse the repository at this point in the history
  • Loading branch information
mengxiong10 committed Dec 16, 2019
1 parent c8f7122 commit b33c9b8
Show file tree
Hide file tree
Showing 9 changed files with 46 additions and 14 deletions.
13 changes: 13 additions & 0 deletions __test__/calendar-range.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
});
6 changes: 3 additions & 3 deletions __test__/datetime-range.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
},
Expand All @@ -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);
});
});
11 changes: 11 additions & 0 deletions __test__/time-range.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
});
});
3 changes: 0 additions & 3 deletions src/calendar/calendar-panel.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
8 changes: 7 additions & 1 deletion src/calendar/calendar-range.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ export default {
calendarMaxDiff() {
return Infinity;
},
defaultValues() {
return Array.isArray(this.defaultValue)
? this.defaultValue
: [this.defaultValue, this.defaultValue];
},
},
watch: {
value: {
Expand All @@ -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);
},
},
Expand Down Expand Up @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions src/date-picker.vue
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@

<script>
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 { getLocale, getLocaleFieldValue } from './locale';
import Popup from './popup';
Expand Down Expand Up @@ -306,7 +306,7 @@ export default {
if (isObject(this.format) && typeof this.format.parse === 'function') {
return this.format.parse(value, fmt);
}
const backupDate = getValidDate(this.defaultValue);
const backupDate = new Date();
return parse(value, fmt, { locale: this.locale.formatLocale, backupDate });
},
formatDate(date, fmt) {
Expand Down
7 changes: 5 additions & 2 deletions src/datetime/datetime-range.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,18 @@ export default {
if (type === 'date') {
this.openTimePanel();
}
const defaultValues = Array.isArray(this.defaultValue)
? this.defaultValue
: [this.defaultValue, this.defaultValue];
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);
});
if (datetimes[1].getTime() < datetimes[0].getTime()) {
datetimes = [datetimes[0], datetimes[0]];
}
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)) {
this.currentValue = datetimes;
return;
Expand Down
3 changes: 0 additions & 3 deletions src/time/time-panel.vue
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,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);
Expand Down
5 changes: 5 additions & 0 deletions src/time/time-range.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,17 @@ export default {
},
},
render() {
const defaultValues = Array.isArray(this.defaultValue)
? this.defaultValue
: [this.defaultValue, this.defaultValue];
return (
<div class="mx-range-wrapper">
<TimePanel
{...{
props: {
...this.$props,
value: this.startValue,
defaultValue: defaultValues[0],
disabledTime: this.disabledStartTime,
},
on: {
Expand All @@ -76,6 +80,7 @@ export default {
props: {
...this.$props,
value: this.endValue,
defaultValue: defaultValues[1],
disabledTime: this.disabledEndTime,
},
on: {
Expand Down

0 comments on commit b33c9b8

Please sign in to comment.