Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/CoreHome/vue/src/DateRangePicker')
-rw-r--r--plugins/CoreHome/vue/src/DateRangePicker/DateRangePicker.vue146
1 files changed, 82 insertions, 64 deletions
diff --git a/plugins/CoreHome/vue/src/DateRangePicker/DateRangePicker.vue b/plugins/CoreHome/vue/src/DateRangePicker/DateRangePicker.vue
index c2af7ecb1c..a3f68387b0 100644
--- a/plugins/CoreHome/vue/src/DateRangePicker/DateRangePicker.vue
+++ b/plugins/CoreHome/vue/src/DateRangePicker/DateRangePicker.vue
@@ -5,57 +5,59 @@
-->
<template>
- <div id="calendarRangeFrom">
- <h6>
- {{ translate('General_DateRangeFrom') }}
- <input
- type="text"
- id="inputCalendarFrom"
- name="inputCalendarFrom"
- class="browser-default"
- v-model="startDateText"
- v-on:change="onRangeInputChanged('from', $event)"
- v-on:keyup="handleEnterPress($event)"
- />
- </h6>
- <DatePicker
- id="calendarFrom"
- :view-date="startDate"
- :selected-date-start="fromPickerSelectedDates[0]"
- :selected-date-end="fromPickerSelectedDates[1]"
- :highlighted-date-start="fromPickerHighlightedDates[0]"
- :highlighted-date-end="fromPickerHighlightedDates[1]"
- @date-select="setStartRangeDate($event.date)"
- @cell-hover="fromPickerHighlightedDates = getNewHighlightedDates($event.date, $event.$cell)"
- @cell-hover-leave="fromPickerHighlightedDates = [null, null]"
- >
- </DatePicker>
- </div>
- <div id="calendarRangeTo">
- <h6>
- {{ translate('General_DateRangeTo') }}
- <input
- type="text"
- id="inputCalendarTo"
- name="inputCalendarTo"
- class="browser-default"
- v-model="endDateText"
- v-on:change="onRangeInputChanged('to', $event)"
- v-on:keyup="handleEnterPress($event)"
- />
- </h6>
- <DatePicker
- id="calendarTo"
- :view-date="endDate"
- :selected-date-start="toPickerSelectedDates[0]"
- :selected-date-end="toPickerSelectedDates[1]"
- :highlighted-date-start="toPickerHighlightedDates[0]"
- :highlighted-date-end="toPickerHighlightedDates[1]"
- @date-select="setEndRangeDate($event.date)"
- @cell-hover="toPickerHighlightedDates = getNewHighlightedDates($event.date, $event.$cell)"
- @cell-hover-leave="toPickerHighlightedDates = [null, null]"
- >
- </DatePicker>
+ <div>
+ <div id="calendarRangeFrom">
+ <h6>
+ {{ translate('General_DateRangeFrom') }}
+ <input
+ type="text"
+ id="inputCalendarFrom"
+ name="inputCalendarFrom"
+ class="browser-default"
+ v-model="startDateText"
+ @keydown="onRangeInputChanged('from', $event)"
+ @keyup="handleEnterPress($event)"
+ />
+ </h6>
+ <DatePicker
+ id="calendarFrom"
+ :view-date="startDate"
+ :selected-date-start="fromPickerSelectedDates[0]"
+ :selected-date-end="fromPickerSelectedDates[1]"
+ :highlighted-date-start="fromPickerHighlightedDates[0]"
+ :highlighted-date-end="fromPickerHighlightedDates[1]"
+ @date-select="setStartRangeDate($event.date)"
+ @cell-hover="fromPickerHighlightedDates = getNewHighlightedDates($event.date, $event.$cell)"
+ @cell-hover-leave="fromPickerHighlightedDates = [null, null]"
+ >
+ </DatePicker>
+ </div>
+ <div id="calendarRangeTo">
+ <h6>
+ {{ translate('General_DateRangeTo') }}
+ <input
+ type="text"
+ id="inputCalendarTo"
+ name="inputCalendarTo"
+ class="browser-default"
+ v-model="endDateText"
+ @keydown="onRangeInputChanged('to', $event)"
+ @keyup="handleEnterPress($event)"
+ />
+ </h6>
+ <DatePicker
+ id="calendarTo"
+ :view-date="endDate"
+ :selected-date-start="toPickerSelectedDates[0]"
+ :selected-date-end="toPickerSelectedDates[1]"
+ :highlighted-date-start="toPickerHighlightedDates[0]"
+ :highlighted-date-end="toPickerHighlightedDates[1]"
+ @date-select="setEndRangeDate($event.date)"
+ @cell-hover="toPickerHighlightedDates = getNewHighlightedDates($event.date, $event.$cell)"
+ @cell-hover-leave="toPickerHighlightedDates = [null, null]"
+ >
+ </DatePicker>
+ </div>
</div>
</template>
@@ -66,6 +68,8 @@ import DatePicker from '../DatePicker/DatePicker.vue';
import { parseDate, format } from '../Periods/utilities';
import ChangeEvent = JQuery.ChangeEvent;
+const DATE_FORMAT = 'YYYY-MM-DD';
+
export default defineComponent({
props: {
startDate: String,
@@ -96,6 +100,8 @@ export default defineComponent({
toPickerHighlightedDates: [null, null],
startDateText: this.startDate,
endDateText: this.endDate,
+ startDateInvalid: false,
+ endDateInvalid: false,
};
},
emits: ['rangeChange', 'submit'],
@@ -124,11 +130,13 @@ export default defineComponent({
this.rangeChanged();
},
onRangeInputChanged(source: string, event: ChangeEvent) {
- if (source === 'from') {
- this.setStartRangeDateFromStr(event.target.value);
- } else {
- this.setEndRangeDateFromStr(event.target.value);
- }
+ setTimeout(() => {
+ if (source === 'from') {
+ this.setStartRangeDateFromStr(event.target.value);
+ } else {
+ this.setEndRangeDateFromStr(event.target.value);
+ }
+ });
},
getNewHighlightedDates(date: Date, $cell: JQuery) {
if ($cell.hasClass('ui-datepicker-unselectable')) {
@@ -148,32 +156,42 @@ export default defineComponent({
});
},
setStartRangeDateFromStr(dateStr: string) {
+ this.startDateInvalid = true;
+
let startDateParsed: Date;
try {
- startDateParsed = parseDate(dateStr);
+ if (dateStr.length === DATE_FORMAT.length) {
+ startDateParsed = parseDate(dateStr);
+ }
} catch (e) {
- this.startDateText = this.startDate;
+ // ignore
}
if (startDateParsed) {
this.fromPickerSelectedDates = [startDateParsed, startDateParsed];
- }
+ this.startDateInvalid = false;
- this.rangeChanged();
+ this.rangeChanged();
+ }
},
setEndRangeDateFromStr(dateStr: string) {
+ this.endDateInvalid = true;
+
let endDateParsed: Date;
try {
- endDateParsed = parseDate(dateStr);
+ if (dateStr.length === DATE_FORMAT.length) {
+ endDateParsed = parseDate(dateStr);
+ }
} catch (e) {
- this.endDateText = this.endDate;
+ // ignore
}
if (endDateParsed) {
this.toPickerSelectedDates = [endDateParsed, endDateParsed];
- }
+ this.endDateInvalid = false;
- this.rangeChanged();
+ this.rangeChanged();
+ }
},
rangeChanged() {
this.$emit('rangeChange', {