Skip to content

Commit 1b27d6f

Browse files
committed
fix: Ignore full date min/max date validation in year-picker mode (fixes #879)
1 parent cb5f399 commit 1b27d6f

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

src/VueDatePicker/components/YearPicker/year-picker.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { computed, nextTick, onMounted, ref } from 'vue';
2-
import { getYear, setYear } from 'date-fns';
2+
import { getYear, setYear, startOfYear } from 'date-fns';
33

44
import { useDefaults, useModel } from '@/composables';
55
import { checkMinMaxValue, getYears, groupListAndMap } from '@/utils/util';
@@ -63,14 +63,14 @@ export const useYearPicker = (props: PickerBasePropsType, emit: VueEmit) => {
6363
});
6464

6565
const yearToDate = (year: number): Date => {
66-
return setYear(resetDate(new Date()), year);
66+
return setYear(resetDate(startOfYear(new Date())), year);
6767
};
6868

6969
const selectYear = (year: number) => {
7070
emit('update-month-year', { instance: 0, year });
7171
if (defaultedMultiDates.value.enabled) {
7272
if (!modelValue.value) {
73-
modelValue.value = [setYear(resetDateTime(getDate()), year)];
73+
modelValue.value = [setYear(resetDateTime(startOfYear(getDate())), year)];
7474
} else if (Array.isArray(modelValue.value)) {
7575
const years = modelValue.value?.map((date) => getYear(date));
7676
if (years.includes(year)) {

src/VueDatePicker/composables/validation.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,21 @@ export const useValidation = (props: PickerBasePropsType | AllPropsType) => {
2727
return !!getMapDate(date, propDates.value.disabledDates);
2828
};
2929

30+
const validateAboveMax = (date: Date) => {
31+
if (!propDates.value.maxDate) return false;
32+
if (props.yearPicker) return getYear(date) > getYear(propDates.value.maxDate);
33+
return isDateAfter(date, propDates.value.maxDate);
34+
};
35+
36+
const validateBellowMin = (date: Date) => {
37+
if (!propDates.value.minDate) return false;
38+
if (props.yearPicker) return getYear(date) < getYear(propDates.value.minDate);
39+
return isDateBefore(date, propDates.value.minDate);
40+
};
41+
3042
const validateDate = (date: Date) => {
31-
const aboveMax = propDates.value.maxDate ? isDateAfter(date, propDates.value.maxDate) : false;
32-
const bellowMin = propDates.value.minDate ? isDateBefore(date, propDates.value.minDate) : false;
43+
const aboveMax = validateAboveMax(date);
44+
const bellowMin = validateBellowMin(date);
3345
const isDisabled = isDateDisabled(date);
3446

3547
const disabledMonths = defaultedFilters.value.months.map((month) => +month);

0 commit comments

Comments
 (0)