Refactor on Calendar
parent
594484c97b
commit
ee8a4d7a12
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<span :class="containerClass">
|
<span :class="containerClass">
|
||||||
<CalendarInputText ref="input" v-if="!inline" type="text" v-bind="$attrs" v-on="listeners" :value="inputFieldValue" :readonly="!manualInput" />
|
<CalendarInputText ref="input" v-if="!inline" type="text" v-bind="$attrs" v-on="listeners" v-model="inputFieldValue" :readonly="!manualInput" />
|
||||||
<CalendarButton v-if="showIcon" :icon="icon" tabindex="-1" class="p-datepicker-trigger p-calendar-button" :disabled="$attrs.disabled" @click="onButtonClick" />
|
<CalendarButton v-if="showIcon" :icon="icon" tabindex="-1" class="p-datepicker-trigger p-calendar-button" :disabled="$attrs.disabled" @click="onButtonClick" />
|
||||||
<transition name="p-input-overlay" @enter="onOverlayEnter" @after-enter="onOverlayEnterComplete" @leave="onOverlayLeave">
|
<transition name="p-input-overlay" @enter="onOverlayEnter" @after-enter="onOverlayEnterComplete" @leave="onOverlayLeave">
|
||||||
<div ref="overlay" :class="panelStyleClass" v-if="inline ? true : overlayVisible">
|
<div ref="overlay" :class="panelStyleClass" v-if="inline ? true : overlayVisible">
|
||||||
|
@ -308,6 +308,7 @@ export default {
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.updateCurrentMetaData();
|
this.updateCurrentMetaData();
|
||||||
|
this.updateInputFieldValue(this.value);
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
if (this.timePickerTimer) {
|
if (this.timePickerTimer) {
|
||||||
|
@ -330,7 +331,8 @@ export default {
|
||||||
currentSecond: null,
|
currentSecond: null,
|
||||||
pm: null,
|
pm: null,
|
||||||
focused: false,
|
focused: false,
|
||||||
overlayVisible: false
|
overlayVisible: false,
|
||||||
|
inputFieldValue: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
outsideClickListener: null,
|
outsideClickListener: null,
|
||||||
|
@ -713,11 +715,13 @@ export default {
|
||||||
this.currentSecond = date.getSeconds();
|
this.currentSecond = date.getSeconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let modelVal = null;
|
||||||
|
|
||||||
if (this.isSingleSelection()) {
|
if (this.isSingleSelection()) {
|
||||||
this.updateModel(date);
|
modelVal = date;
|
||||||
}
|
}
|
||||||
else if (this.isMultipleSelection()) {
|
else if (this.isMultipleSelection()) {
|
||||||
this.updateModel(this.value ? [...this.value, date] : [date]);
|
modelVal = this.value ? [...this.value, date] : [date];
|
||||||
}
|
}
|
||||||
else if (this.isRangeSelection()) {
|
else if (this.isRangeSelection()) {
|
||||||
if (this.value && this.value.length) {
|
if (this.value && this.value.length) {
|
||||||
|
@ -731,19 +735,58 @@ export default {
|
||||||
startDate = date;
|
startDate = date;
|
||||||
endDate = null;
|
endDate = null;
|
||||||
}
|
}
|
||||||
|
modelVal = [startDate, endDate];
|
||||||
this.updateModel([startDate, endDate]);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.updateModel([date, null]);
|
modelVal = [date, null];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (modelVal !== null) {
|
||||||
|
this.updateModel(modelVal);
|
||||||
|
this.updateInputFieldValue(modelVal);
|
||||||
|
}
|
||||||
this.$emit('select', date);
|
this.$emit('select', date);
|
||||||
},
|
},
|
||||||
updateModel(value) {
|
updateModel(value) {
|
||||||
this.$emit('input', value);
|
this.$emit('input', value);
|
||||||
},
|
},
|
||||||
|
updateInputFieldValue(date) {
|
||||||
|
let formattedValue = '';
|
||||||
|
|
||||||
|
if (date) {
|
||||||
|
try {
|
||||||
|
if (this.isSingleSelection()) {
|
||||||
|
formattedValue = this.formatDateTime(date);
|
||||||
|
}
|
||||||
|
else if (this.isMultipleSelection()) {
|
||||||
|
for(let i = 0; i < date.length; i++) {
|
||||||
|
let dateAsString = this.formatDateTime(date[i]);
|
||||||
|
formattedValue += dateAsString;
|
||||||
|
if(i !== (date.length - 1)) {
|
||||||
|
formattedValue += ', ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (this.isRangeSelection()) {
|
||||||
|
if (date && date.length) {
|
||||||
|
let startDate = date[0];
|
||||||
|
let endDate = date[1];
|
||||||
|
|
||||||
|
formattedValue = this.formatDateTime(startDate);
|
||||||
|
if (endDate) {
|
||||||
|
formattedValue += ' - ' + this.formatDateTime(endDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
formattedValue = date;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.inputFieldValue = formattedValue;
|
||||||
|
},
|
||||||
shouldSelectDate() {
|
shouldSelectDate() {
|
||||||
if (this.isMultipleSelection())
|
if (this.isMultipleSelection())
|
||||||
return this.maxDateCount != null ? this.maxDateCount > (this.value ? this.value.length : 0) : true;
|
return this.maxDateCount != null ? this.maxDateCount > (this.value ? this.value.length : 0) : true;
|
||||||
|
@ -1465,7 +1508,7 @@ export default {
|
||||||
}
|
}
|
||||||
catch(err) {
|
catch(err) {
|
||||||
//invalid date
|
//invalid date
|
||||||
$vm.updateModel(val);
|
$vm.updateModel(null);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
focus: event => {
|
focus: event => {
|
||||||
|
@ -1477,7 +1520,17 @@ export default {
|
||||||
$vm.$emit('focus', event)
|
$vm.$emit('focus', event)
|
||||||
},
|
},
|
||||||
blur: event => {
|
blur: event => {
|
||||||
$vm.focused = false;
|
try {
|
||||||
|
let value = $vm.parseValueFromString(event.target.value);
|
||||||
|
if ($vm.isValidSelection(value)) {
|
||||||
|
$vm.updateInputFieldValue(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
//invalid date
|
||||||
|
$vm.inputFieldValue = null;
|
||||||
|
}
|
||||||
|
$vm.focused = false;
|
||||||
$vm.$emit('blur', event);
|
$vm.$emit('blur', event);
|
||||||
},
|
},
|
||||||
keydown: event => {
|
keydown: event => {
|
||||||
|
@ -1526,42 +1579,6 @@ export default {
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
inputFieldValue() {
|
|
||||||
let formattedValue = '';
|
|
||||||
|
|
||||||
if (this.value) {
|
|
||||||
try {
|
|
||||||
if (this.isSingleSelection()) {
|
|
||||||
formattedValue = this.formatDateTime(this.value);
|
|
||||||
}
|
|
||||||
else if (this.isMultipleSelection()) {
|
|
||||||
for(let i = 0; i < this.value.length; i++) {
|
|
||||||
let dateAsString = this.formatDateTime(this.value[i]);
|
|
||||||
formattedValue += dateAsString;
|
|
||||||
if(i !== (this.value.length - 1)) {
|
|
||||||
formattedValue += ', ';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (this.isRangeSelection()) {
|
|
||||||
if (this.value && this.value.length) {
|
|
||||||
let startDate = this.value[0];
|
|
||||||
let endDate = this.value[1];
|
|
||||||
|
|
||||||
formattedValue = this.formatDateTime(startDate);
|
|
||||||
if (endDate) {
|
|
||||||
formattedValue += ' - ' + this.formatDateTime(endDate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
formattedValue = this.value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return formattedValue;
|
|
||||||
},
|
|
||||||
months() {
|
months() {
|
||||||
let months = [];
|
let months = [];
|
||||||
for (let i = 0 ; i < this.numberOfMonths; i++) {
|
for (let i = 0 ; i < this.numberOfMonths; i++) {
|
||||||
|
|
Loading…
Reference in New Issue