Skip to content

Commit 39f917d

Browse files
committed
- format date in dropdown the same as on the filter bar
- remove max-date limitation since it doesn't update without a full page refresh, and also server time may not be the same as client time
1 parent b7c7bb6 commit 39f917d

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

src/Frontend/src/components/audit/DatePickerRange.vue

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,50 @@
22
import VueDatePicker from "@vuepic/vue-datepicker";
33
import { ref, useTemplateRef, watch } from "vue";
44
5+
type DateRange = [Date, Date];
6+
57
const model = defineModel<Date[]>({ required: true });
68
const internalModel = ref<Date[]>([]);
79
const displayDataRange = ref<string>("No dates");
810
const datePicker = useTemplateRef<typeof VueDatePicker>("datePicker");
911
1012
watch(internalModel, () => {
11-
model.value = internalModel.value;
12-
if (internalModel.value.length === 2) {
13-
const from = internalModel.value[0];
14-
const to = internalModel.value[1];
15-
displayDataRange.value = `${from.toLocaleDateString()} ${from.toLocaleTimeString()} - ${to.toLocaleDateString()} ${to.toLocaleTimeString()}`;
16-
} else {
17-
displayDataRange.value = "No dates";
18-
}
13+
if (isValidRange(internalModel.value as DateRange)) {
14+
model.value = internalModel.value;
15+
displayDataRange.value = formatDate(internalModel.value as DateRange);
16+
} else internalModel.value = model.value;
1917
});
2018
2119
watch(model, () => {
2220
internalModel.value = model.value;
2321
});
2422
23+
function isValidRange([fromDate, toDate]: DateRange) {
24+
return (!fromDate && !toDate) || (toDate && toDate <= new Date());
25+
}
26+
2527
function clearCurrentDate() {
2628
internalModel.value = [];
2729
datePicker.value?.closeMenu();
2830
}
31+
32+
function formatDate([fromDate, toDate]: DateRange) {
33+
if (toDate && toDate > new Date()) return "Date cannot be in the future";
34+
if (fromDate && toDate) return `${fromDate.toLocaleString()} - ${toDate.toLocaleString()}`;
35+
if (fromDate) return fromDate.toLocaleString();
36+
return "No dates";
37+
}
2938
</script>
3039

3140
<template>
32-
<VueDatePicker ref="datePicker" v-model="internalModel" :range="{ partialRange: false }" :enable-seconds="true" :max-date="new Date()" :action-row="{ showNow: false, showCancel: false, showSelect: true }">
41+
<VueDatePicker ref="datePicker" v-model="internalModel" :format="formatDate" :range="{ partialRange: false }" :enable-seconds="true" :action-row="{ showNow: false, showCancel: false, showSelect: true }">
3342
<template #trigger>
3443
<button type="button" class="btn btn-dropdown dropdown-toggle">
3544
{{ displayDataRange }}
3645
</button>
3746
</template>
3847
<template #action-extra>
39-
<button v-if="internalModel.length === 2" class="dp__action_button dp__action_cancel" @click="clearCurrentDate()">Clear range</button>
48+
<button v-if="internalModel.length === 2" class="dp__action_button dp__action_cancel" @click="clearCurrentDate()">Clear Range</button>
4049
</template>
4150
</VueDatePicker>
4251
</template>

0 commit comments

Comments
 (0)