Skip to content

Commit 628768d

Browse files
committed
refactor(datepicker): Rewrite prev/nextPage() as changePage()
1 parent 5da1a80 commit 628768d

File tree

12 files changed

+37
-84
lines changed

12 files changed

+37
-84
lines changed

src/components/Datepicker.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
:show-header="showHeader"
7474
:translation="translation"
7575
:use-utc="useUtc"
76+
:view="view || computedInitialView"
7677
:year-range="yearPickerRange"
7778
@page-change="handlePageChange"
7879
@select="handleSelect"

src/components/PickerDay.vue

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
:is-next-disabled="isNextDisabled"
88
:is-previous-disabled="isPreviousDisabled"
99
:is-rtl="isRtl"
10-
@next="nextPage"
11-
@previous="previousPage"
10+
@page-change="changePage($event)"
1211
>
1312
<slot slot="prevIntervalBtn" name="prevIntervalBtn" />
1413
<span
@@ -213,16 +212,6 @@ export default {
213212
},
214213
},
215214
methods: {
216-
/**
217-
* Changes the page up or down (overrides changePage in pickerMixin)
218-
* @param {Number} incrementBy
219-
*/
220-
changePage(incrementBy) {
221-
const date = this.pageDate
222-
this.utils.setMonth(date, this.utils.getMonth(date) + incrementBy)
223-
224-
this.$emit('page-change', date)
225-
},
226215
/**
227216
* Set the class for a specific day
228217
* @param {Object} day

src/components/PickerHeader.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<span
44
class="prev"
55
:class="{ disabled: isLeftNavDisabled }"
6-
@click="$emit(isRtl ? 'next' : 'previous')"
6+
@click="$emit('page-change', -1)"
77
>
88
<slot name="prevIntervalBtn">
99
<span class="default">&lt;</span>
@@ -13,7 +13,7 @@
1313
<span
1414
class="next"
1515
:class="{ disabled: isRightNavDisabled }"
16-
@click="$emit(isRtl ? 'previous' : 'next')"
16+
@click="$emit('page-change', 1)"
1717
>
1818
<slot name="nextIntervalBtn">
1919
<span class="default">&gt;</span>

src/components/PickerMonth.vue

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
:is-next-disabled="isNextDisabled"
88
:is-previous-disabled="isPreviousDisabled"
99
:is-rtl="isRtl"
10-
@next="nextPage"
11-
@previous="previousPage"
10+
@page-change="changePage($event)"
1211
>
1312
<slot slot="prevIntervalBtn" name="prevIntervalBtn" />
1413
<span

src/components/PickerYear.vue

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
:is-next-disabled="isNextDisabled"
88
:is-previous-disabled="isPreviousDisabled"
99
:is-rtl="isRtl"
10-
@next="nextPage"
11-
@previous="previousPage"
10+
@page-change="changePage($event)"
1211
>
1312
<slot slot="prevIntervalBtn" name="prevIntervalBtn" />
1413
<span>
@@ -145,22 +144,6 @@ export default {
145144
this.selectedDate && year === this.utils.getFullYear(this.selectedDate)
146145
)
147146
},
148-
/**
149-
* Increments the page (overrides nextPage in pickerMixin)
150-
*/
151-
nextPage() {
152-
if (!this.isNextDisabled) {
153-
this.changePage(this.yearRange)
154-
}
155-
},
156-
/**
157-
* Decrements the page (overrides previousPage in pickerMixin)
158-
*/
159-
previousPage() {
160-
if (!this.isPreviousDisabled) {
161-
this.changePage(-this.yearRange)
162-
}
163-
},
164147
},
165148
}
166149
</script>

src/mixins/pickerMixin.vue

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ export default {
4343
type: Boolean,
4444
default: false,
4545
},
46+
view: {
47+
type: String,
48+
default: 'day',
49+
},
4650
},
4751
data() {
4852
return {
@@ -71,10 +75,17 @@ export default {
7175
* @param {Number} incrementBy
7276
*/
7377
changePage(incrementBy) {
74-
const date = this.pageDate
75-
this.utils.setFullYear(date, this.utils.getFullYear(date) + incrementBy)
78+
const { pageDate, utils } = this
79+
const units =
80+
this.view === 'year' ? incrementBy * this.yearRange : incrementBy
81+
82+
if (this.view === 'day') {
83+
utils.setMonth(pageDate, utils.getMonth(pageDate) + units)
84+
} else {
85+
utils.setFullYear(pageDate, utils.getFullYear(pageDate) + units)
86+
}
7687
77-
this.$emit('page-change', date)
88+
this.$emit('page-change', pageDate)
7889
},
7990
/**
8091
* Emits a 'select' or 'select-disabled' event
@@ -87,22 +98,6 @@ export default {
8798
this.$emit('select', cell)
8899
}
89100
},
90-
/**
91-
* Increment the current page
92-
*/
93-
nextPage() {
94-
if (!this.isNextDisabled) {
95-
this.changePage(+1)
96-
}
97-
},
98-
/**
99-
* Decrement the page
100-
*/
101-
previousPage() {
102-
if (!this.isPreviousDisabled) {
103-
this.changePage(-1)
104-
}
105-
},
106101
},
107102
}
108103
</script>

test/unit/specs/PickerDay/disabledDates.spec.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ describe('PickerDay: disabled', () => {
1414
from: new Date(2016, 9, 26),
1515
},
1616
pageDate: new Date(2016, 9, 1),
17+
view: 'day',
1718
},
1819
})
1920
})
@@ -32,11 +33,9 @@ describe('PickerDay: disabled', () => {
3233
expect(wrapper.emitted('select')).toBeFalsy()
3334
})
3435

35-
it('cannot change to a disabled month', () => {
36-
wrapper.vm.previousPage()
37-
expect(wrapper.vm.pageDate.getMonth()).toEqual(9)
38-
wrapper.vm.nextPage()
39-
expect(wrapper.vm.pageDate.getMonth()).toEqual(9)
36+
it('sets `isNextDisabled` and `isPreviousDisabled` correctly', () => {
37+
expect(wrapper.vm.isNextDisabled).toBeTruthy()
38+
expect(wrapper.vm.isPreviousDisabled).toBeTruthy()
4039
})
4140

4241
it('can change month despite having a disabled month', () => {

test/unit/specs/PickerDay/pickerDay.spec.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ describe('PickerDay: DOM', () => {
1010
propsData: {
1111
translation: en,
1212
pageDate: new Date(2018, 1, 1),
13+
view: 'day',
1314
},
1415
})
1516
})
@@ -28,12 +29,12 @@ describe('PickerDay: DOM', () => {
2829
})
2930

3031
it('can set the next month', () => {
31-
wrapper.vm.nextPage()
32+
wrapper.vm.changePage(1)
3233
expect(wrapper.emitted('page-change')[0][0].getMonth()).toEqual(2)
3334
})
3435

3536
it('can set the previous month', () => {
36-
wrapper.vm.previousPage()
37+
wrapper.vm.changePage(-1)
3738
expect(wrapper.emitted('page-change')[0][0].getMonth()).toEqual(0)
3839
})
3940

test/unit/specs/PickerMonth/disabledMonths.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ describe('PickerMonth', () => {
1515
to: new Date(2018, 2, 14),
1616
from: new Date(2018, 4, 15),
1717
},
18+
view: 'month',
1819
},
1920
})
2021
})

test/unit/specs/PickerMonth/pickerMonth.spec.js

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ describe('PickerMonth', () => {
1010
propsData: {
1111
translation: en,
1212
pageDate: new Date(2018, 1, 1),
13+
view: 'month',
1314
},
1415
})
1516
})
@@ -38,30 +39,12 @@ describe('PickerMonth', () => {
3839
})
3940

4041
it('can set the next year', async () => {
41-
wrapper.vm.nextPage()
42-
expect(wrapper.emitted('page-change')[0][0].getFullYear()).toEqual(2019)
43-
44-
await wrapper.setProps({
45-
disabledDates: {
46-
from: new Date(2018, 1, 1),
47-
},
48-
})
49-
50-
wrapper.vm.nextPage()
42+
wrapper.vm.changePage(1)
5143
expect(wrapper.emitted('page-change')[0][0].getFullYear()).toEqual(2019)
5244
})
5345

5446
it('can set the previous year', async () => {
55-
wrapper.vm.previousPage()
56-
expect(wrapper.emitted('page-change')[0][0].getFullYear()).toEqual(2017)
57-
58-
await wrapper.setProps({
59-
disabledDates: {
60-
to: new Date(2018, 1, 1),
61-
},
62-
})
63-
64-
wrapper.vm.previousPage()
47+
wrapper.vm.changePage(-1)
6548
expect(wrapper.emitted('page-change')[0][0].getFullYear()).toEqual(2017)
6649
})
6750

0 commit comments

Comments
 (0)