Skip to content

Commit b33c9b8

Browse files
committed
feat: default-value supports Array for range (#395)
1 parent c8f7122 commit b33c9b8

File tree

9 files changed

+46
-14
lines changed

9 files changed

+46
-14
lines changed

__test__/calendar-range.test.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,17 @@ describe('CalendarRange', () => {
7676
expect(startPanel.vm.partialUpdate).toBe(false);
7777
expect(endPanel.vm.partialUpdate).toBe(false);
7878
});
79+
80+
it('supports defaultValue is Array', () => {
81+
wrapper = mount(CalendarRange, {
82+
propsData: {
83+
defaultValue: [new Date(2019, 9, 1), new Date(2019, 11, 1)],
84+
},
85+
});
86+
const panels = wrapper.findAll(CalendarPanel);
87+
const startPanel = panels.at(0);
88+
const endPanel = panels.at(1);
89+
expect(startPanel.vm.calendarMonth).toBe(9);
90+
expect(endPanel.vm.calendarMonth).toBe(11);
91+
});
7992
});

__test__/datetime-range.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ describe('DatetimeRange', () => {
4747
wrapper = mount(DatetimeRange, {
4848
sync: false,
4949
propsData: {
50-
defaultValue: new Date(2019, 9, 1),
50+
defaultValue: [new Date(2019, 9, 1), new Date(2019, 9, 1, 12)],
5151
disabledDate,
5252
disabledTime,
5353
},
@@ -59,11 +59,11 @@ describe('DatetimeRange', () => {
5959
expect(wrapper.emitted().select).toBeUndefined();
6060
const timeTitle = wrapper.find('.mx-time-header-title');
6161
expect(timeTitle.text()).toBe('2019-10-02');
62-
const defaultValue = new Date(2019, 9, 2, 12);
62+
const defaultValue = [new Date(2019, 9, 2, 12), new Date(2019, 9, 2, 12)];
6363
wrapper.setProps({ defaultValue });
6464
td.trigger('click');
6565
td.trigger('click');
6666
await flushPromises();
67-
expect(wrapper.emitted().select[0][0]).toEqual([defaultValue, defaultValue]);
67+
expect(wrapper.emitted().select[0][0]).toEqual(defaultValue);
6868
});
6969
});

__test__/time-range.test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,15 @@ describe('TimeRange', () => {
3333
new Date(2019, 9, 4, 19, 30, 0),
3434
]);
3535
});
36+
37+
it('supports defaultValue is Array', () => {
38+
wrapper = mount(TimeRange, {
39+
propsData: {
40+
defaultValue: [new Date(2019, 9, 1, 10), new Date(2019, 11, 1, 12)],
41+
},
42+
});
43+
const actived = wrapper.findAll('.active');
44+
expect(actived.at(0).text()).toBe('10');
45+
expect(actived.at(3).text()).toBe('12');
46+
});
3647
});

src/calendar/calendar-panel.vue

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,6 @@ export default {
128128
props: {
129129
value: {},
130130
defaultValue: {
131-
validator(value) {
132-
return !isNaN(new Date(value).getTime());
133-
},
134131
default() {
135132
const date = new Date();
136133
date.setHours(0, 0, 0, 0);

src/calendar/calendar-range.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ export default {
2727
calendarMaxDiff() {
2828
return Infinity;
2929
},
30+
defaultValues() {
31+
return Array.isArray(this.defaultValue)
32+
? this.defaultValue
33+
: [this.defaultValue, this.defaultValue];
34+
},
3035
},
3136
watch: {
3237
value: {
@@ -35,7 +40,7 @@ export default {
3540
this.innerValue = isValidRangeDate(this.value)
3641
? this.value
3742
: [new Date(NaN), new Date(NaN)];
38-
this.calendars = this.innerValue.map(v => getValidDate(v, this.defaultValue));
43+
this.calendars = this.innerValue.map((v, i) => getValidDate(v, this.defaultValues[i]));
3944
this.validateCalendars(1);
4045
},
4146
},
@@ -108,6 +113,7 @@ export default {
108113
...this.$props,
109114
calendar,
110115
value: this.innerValue,
116+
defaultValue: this.defaultValues[index],
111117
getClasses: this.getRangeClasses,
112118
// don't update when range is true
113119
partialUpdate: false,

src/date-picker.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787

8888
<script>
8989
import { parse, format, getWeek } from 'date-format-parse';
90-
import { isValidDate, isValidRangeDate, getValidDate } from './util/date';
90+
import { isValidDate, isValidRangeDate } from './util/date';
9191
import { pick, isObject, mergeDeep } from './util/base';
9292
import { getLocale, getLocaleFieldValue } from './locale';
9393
import Popup from './popup';
@@ -306,7 +306,7 @@ export default {
306306
if (isObject(this.format) && typeof this.format.parse === 'function') {
307307
return this.format.parse(value, fmt);
308308
}
309-
const backupDate = getValidDate(this.defaultValue);
309+
const backupDate = new Date();
310310
return parse(value, fmt, { locale: this.locale.formatLocale, backupDate });
311311
},
312312
formatDate(date, fmt) {

src/datetime/datetime-range.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,18 @@ export default {
4343
if (type === 'date') {
4444
this.openTimePanel();
4545
}
46+
const defaultValues = Array.isArray(this.defaultValue)
47+
? this.defaultValue
48+
: [this.defaultValue, this.defaultValue];
4649
let datetimes = dates.map((date, i) => {
47-
const time = isValidRangeDate(this.value) ? this.value[i] : this.defaultValue;
50+
const time = isValidRangeDate(this.value) ? this.value[i] : defaultValues[i];
4851
return assignTime(date, time);
4952
});
5053
if (datetimes[1].getTime() < datetimes[0].getTime()) {
5154
datetimes = [datetimes[0], datetimes[0]];
5255
}
5356
if (datetimes.some(this.disabledTime)) {
54-
datetimes = dates.map(date => assignTime(date, this.defaultValue));
57+
datetimes = dates.map((date, i) => assignTime(date, defaultValues[i]));
5558
if (datetimes.some(this.disabledTime)) {
5659
this.currentValue = datetimes;
5760
return;

src/time/time-panel.vue

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,6 @@ export default {
5353
props: {
5454
value: {},
5555
defaultValue: {
56-
validator(value) {
57-
return !isNaN(new Date(value).getTime());
58-
},
5956
default() {
6057
const date = new Date();
6158
date.setHours(0, 0, 0, 0);

src/time/time-range.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,17 @@ export default {
5656
},
5757
},
5858
render() {
59+
const defaultValues = Array.isArray(this.defaultValue)
60+
? this.defaultValue
61+
: [this.defaultValue, this.defaultValue];
5962
return (
6063
<div class="mx-range-wrapper">
6164
<TimePanel
6265
{...{
6366
props: {
6467
...this.$props,
6568
value: this.startValue,
69+
defaultValue: defaultValues[0],
6670
disabledTime: this.disabledStartTime,
6771
},
6872
on: {
@@ -76,6 +80,7 @@ export default {
7680
props: {
7781
...this.$props,
7882
value: this.endValue,
83+
defaultValue: defaultValues[1],
7984
disabledTime: this.disabledEndTime,
8085
},
8186
on: {

0 commit comments

Comments
 (0)