Skip to content

Commit fb87527

Browse files
SonTT19KaelWD
andauthored
fix(VDatePicker): clamp displayed month to min/max (#20999)
fixes #20287 Co-authored-by: Kael <[email protected]>
1 parent 6df851f commit fb87527

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

packages/vuetify/src/components/VDatePicker/VDatePicker.tsx

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,30 @@ export const VDatePicker = genericComponent<new <
110110

111111
const viewMode = useProxiedModel(props, 'viewMode')
112112
// const inputMode = useProxiedModel(props, 'inputMode')
113+
114+
const minDate = computed(() => {
115+
const date = adapter.date(props.min)
116+
117+
return props.min && adapter.isValid(date) ? date : null
118+
})
119+
const maxDate = computed(() => {
120+
const date = adapter.date(props.max)
121+
122+
return props.max && adapter.isValid(date) ? date : null
123+
})
124+
113125
const internal = computed(() => {
114-
const value = adapter.date(model.value?.[0])
126+
const today = adapter.date()
127+
let value = today
128+
if (model.value?.[0]) {
129+
value = adapter.date(model.value[0])
130+
} else if (minDate.value && adapter.isBefore(today, minDate.value)) {
131+
value = minDate.value
132+
} else if (maxDate.value && adapter.isAfter(today, maxDate.value)) {
133+
value = maxDate.value
134+
}
115135

116-
return value && adapter.isValid(value) ? value : adapter.date()
136+
return value && adapter.isValid(value) ? value : today
117137
})
118138

119139
const month = ref(Number(props.month ?? adapter.getMonth(adapter.startOfMonth(internal.value))))
@@ -140,16 +160,7 @@ export const VDatePicker = genericComponent<new <
140160
})
141161
// const headerIcon = computed(() => props.inputMode === 'calendar' ? props.keyboardIcon : props.calendarIcon)
142162
const headerTransition = computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`)
143-
const minDate = computed(() => {
144-
const date = adapter.date(props.min)
145163

146-
return props.min && adapter.isValid(date) ? date : null
147-
})
148-
const maxDate = computed(() => {
149-
const date = adapter.date(props.max)
150-
151-
return props.max && adapter.isValid(date) ? date : null
152-
})
153164
const disabled = computed(() => {
154165
if (props.disabled) return true
155166

0 commit comments

Comments
 (0)