5
5
:label =" label"
6
6
type =" date"
7
7
:min =" minDate?.toISODate()"
8
+ :max =" maxDate?.toISODate()"
8
9
:fix-message-line =" true"
9
10
:error-message =" errorMessage"
10
11
:clear-button-enabled =" isClearable"
@@ -25,7 +26,8 @@ export default defineComponent({
25
26
label: { type: String , required: true },
26
27
isClearable: { type: Boolean , default: true },
27
28
currentDate: { type: Object as PropType <DateTime >, required: false , default: null },
28
- minDate: { type: Object as PropType <DateTime >, required: false , default: null }
29
+ minDate: { type: Object as PropType <DateTime >, required: false , default: null },
30
+ maxDate: { type: Object as PropType <DateTime >, required: false , default: null }
29
31
},
30
32
emits: [' dateChanged' ],
31
33
setup(props , { emit }) {
@@ -44,6 +46,13 @@ export default defineComponent({
44
46
return unref (date ) < props .minDate
45
47
})
46
48
49
+ const isMaxDateExceeded = computed (() => {
50
+ if (! props .maxDate || ! unref (date )) {
51
+ return false
52
+ }
53
+ return unref (date ) > props .maxDate
54
+ })
55
+
47
56
const errorMessage = computed (() => {
48
57
if (unref (isMinDateUndercut )) {
49
58
return $gettext (' The date must be after %{date}' , {
@@ -53,6 +62,14 @@ export default defineComponent({
53
62
.toLocaleString (DateTime .DATE_SHORT )
54
63
})
55
64
}
65
+ if (unref (isMaxDateExceeded )) {
66
+ return $gettext (' The date must be before %{date}' , {
67
+ date: props .maxDate
68
+ .plus ({ day: 1 })
69
+ .setLocale (current )
70
+ .toLocaleString (DateTime .DATE_SHORT )
71
+ })
72
+ }
56
73
return ' '
57
74
})
58
75
@@ -73,6 +90,7 @@ export default defineComponent({
73
90
date ,
74
91
() => {
75
92
emit (' dateChanged' , { date: unref (date ), error: unref (isMinDateUndercut ) })
93
+ emit (' dateChanged' , { date: unref (date ), error: unref (isMaxDateExceeded ) })
76
94
},
77
95
{
78
96
deep: true
@@ -97,7 +115,7 @@ export default defineComponent({
97
115
```js
98
116
<template>
99
117
<div>
100
- <oc-datepicker :current-date="currentDate" :min-date="minDate" label="Enter or pick a date"
118
+ <oc-datepicker :current-date="currentDate" :min-date="minDate" :max-date="maxDate" label="Enter or pick a date"
101
119
@date-changed="onDateChanged"/>
102
120
<p v-if="selectedDate" v-text="selectedDate"/>
103
121
</div>
@@ -107,7 +125,7 @@ export default defineComponent({
107
125
108
126
export default {
109
127
data: () => ({
110
- minDate: DateTime.now(), currentDate: DateTime.now(), selectedDate: ''
128
+ minDate: DateTime.now(), currentDate: DateTime.now(), selectedDate: '', maxDate: null
111
129
}),
112
130
methods: {
113
131
onDateChanged({date}) {
0 commit comments