Skip to content

Commit 92c9a18

Browse files
author
Nathan Reyes
committed
Fix bug with duplicate events fired. Closes #15.
2 parents 389ecf5 + 770981f commit 92c9a18

File tree

6 files changed

+41
-37
lines changed

6 files changed

+41
-37
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
## 0.3.1
2+
* Fix bug with duplicate events being fired. Closes #15.
23
* Fix application of styling for date pickers when not inline. Closes #17.
34

45
## 0.3.0

src/components/Calendar.vue

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,4 @@ export default {
225225
border: 1px inset
226226
border-color: #e3e3e3
227227
228-
.c-footer-container
229-
// width: 100%
230-
231-
.c-footer
232-
display: flex
233-
justify-content: center
234-
padding: 5px 0
235-
236228
</style>

src/components/DatePicker.vue

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
@drag='dragValue = $event'
1414
@input='updateValue'
1515
v-bind='$attrs'
16-
v-on='$listeners'
16+
v-on='filteredListeners()'
1717
v-if='isInline'>
1818
</component>
1919
<popover
@@ -50,9 +50,8 @@
5050
:attributes='attributes_'
5151
:date-validator='dateValidator'
5252
@drag='dragValue = $event'
53-
@input='popoverInput'
5453
v-bind='$attrs'
55-
v-on='$listeners'>
54+
v-on='filteredListeners()'>
5655
</component>
5756
</popover>
5857

@@ -65,7 +64,12 @@ import MultipleDatePicker from './MultipleDatePicker';
6564
import DateRangePicker from './DateRangePicker';
6665
import DateInfo from '../utils/dateInfo';
6766
import defaults from '../utils/defaults';
68-
import { getDateComps, getNextPage, getMaxPage, blendColors } from '../utils/helpers';
67+
import {
68+
getDateComps,
69+
getNextPage,
70+
getMaxPage,
71+
getLastArrayItem,
72+
blendColors } from '../utils/helpers';
6973
7074
export default {
7175
components: {
@@ -257,43 +261,58 @@ export default {
257261
toPage_(val) {
258262
this.$emit('update:toPage', val);
259263
},
260-
dragValue(val) {
261-
// Forward drag event
262-
this.$emit('drag', val);
263-
},
264264
mode() {
265265
// Clear value on select mode change
266266
this.$emit('input', null);
267267
},
268268
suggestedInputText(val) {
269269
this.valueText = val;
270270
},
271+
value() {
272+
if (!this.popoverKeepVisibleOnInput) this.popoverForceHidden = true;
273+
},
271274
},
272275
created() {
273276
this.assignPageRange();
274277
this.valueText = this.suggestedInputText;
275278
},
276279
methods: {
280+
filteredListeners() {
281+
// Remove parent listeners that we want to intercept and re-broadcast
282+
const listeners = { ...this.$listeners };
283+
delete listeners['update:fromPage'];
284+
delete listeners['update:toPage'];
285+
return listeners;
286+
},
277287
popoverDidDisappear() {
278288
this.assignPageRange();
279289
},
280290
assignPageRange() {
281-
if (this.value) {
282-
this.fromPage_ = this.value.start ? getDateComps(this.value.start) : getDateComps(this.value);
283-
if (this.value.end) this.toPage_ = getMaxPage(getDateComps(this.value.end), getNextPage(this.fromPage_));
291+
if (!this.value) return;
292+
switch (this.mode) {
293+
case 'single':
294+
this.fromPage_ = getDateComps(this.value);
295+
this.toPage_ = getNextPage(this.fromPage_);
296+
break;
297+
case 'multiple':
298+
if (!this.value.length) return;
299+
this.fromPage_ = getDateComps(this.value[0]);
300+
this.toPage_ = getMaxPage(getDateComps(getLastArrayItem(this.value)), getNextPage(this.fromPage_));
301+
break;
302+
case 'range':
303+
if (!this.value.start || !this.value.end) return;
304+
this.fromPage_ = getDateComps(this.value.start);
305+
this.toPage_ = getMaxPage(getDateComps(this.value.end), getNextPage(this.fromPage_));
306+
break;
307+
default:
284308
}
285309
},
286-
popoverInput(e) {
287-
this.updateValue(e);
288-
// if (!this.popoverKeepVisibleOnInput) this.popoverForceHidden = true;
289-
},
290310
updateValue(value = this.valueText) {
291311
if (typeof value === 'string') {
292312
this.$emit('input', this.parseValue(value));
293313
} else {
294314
this.$emit('input', value);
295315
}
296-
if (!this.popoverKeepVisibleOnInput) this.popoverForceHidden = true;
297316
},
298317
parseValue(valueText) {
299318
let value = null;

src/components/DateRangePicker.vue

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
<calendar
33
:dayContentHoverStyle='dayContentHoverStyle_'
44
:attributes='attributes_'
5-
v-bind='$attrs'
6-
v-on='$listeners'
75
@daySelect='selectDay'
8-
@dayMouseEnter='enterDay'>
6+
@dayMouseEnter='enterDay'
7+
v-bind='$attrs'
8+
v-on='$listeners'>
99
</calendar>
1010
</template>
1111

@@ -99,8 +99,6 @@ export default {
9999
this.$emit('input', newValue.toRange());
100100
}
101101
}
102-
// Forward the event
103-
this.$emit('daySelect', day);
104102
},
105103
enterDay(day) {
106104
// Make sure drag has been initialized
@@ -121,8 +119,6 @@ export default {
121119
this.dayContentHoverStyle_ = this.disabledAttribute.contentHoverStyle;
122120
}
123121
}
124-
// Forward the event
125-
this.$emit('dayMouseEnter', day);
126122
},
127123
// Ranges can privately have end date earlier than start date
128124
// This function will correct the order before exposing it to to other components

src/components/MultipleDatePicker.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<template>
22
<calendar
33
:attributes='attributes_'
4+
@daySelect='selectDay'
45
v-bind='$attrs'
5-
v-on='$listeners'
6-
@daySelect='selectDay'>
6+
v-on='$listeners'>
77
</calendar>
88
</template>
99

@@ -51,8 +51,6 @@ export default {
5151
this.$emit('input', [...this.value, day.date].sort((a, b) => a.getTime() - b.getTime()));
5252
}
5353
}
54-
// Forward the event
55-
this.$emit('daySelect', day);
5654
},
5755
},
5856
};

src/components/SingleDatePicker.vue

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ export default {
4141
if (this.dateValidator(day.date, 'selectDisabled')) {
4242
this.$emit('input', (day.date === this.value) ? null : day.date);
4343
}
44-
// Forward the event
45-
this.$emit('daySelect', day);
4644
},
4745
},
4846
};

0 commit comments

Comments
 (0)