diff --git a/app/components/malio/date/internal/CalendarField.vue b/app/components/malio/date/internal/CalendarField.vue index 4d8af60..1837c42 100644 --- a/app/components/malio/date/internal/CalendarField.vue +++ b/app/components/malio/date/internal/CalendarField.vue @@ -86,9 +86,10 @@ :view-mode="viewMode" :current-month="currentMonth" :current-year="currentYear" + :year-page-start="yearPageStart" @prev="goToPrev" @next="goToNext" - @toggle-view="toggleView" + @toggle-view="goToHigherView" /> + @@ -127,6 +139,7 @@ import type {MaskInputOptions} from 'maska' import MalioRequiredMark from '../../shared/RequiredMark.vue' import CalendarHeader from './CalendarHeader.vue' import MonthPicker from './MonthPicker.vue' +import YearPicker from './YearPicker.vue' import {useCalendarPopover} from '../composables/useCalendarPopover' import {useCalendarView} from '../composables/useCalendarView' import {buildBoundedMask} from '../composables/maskTemplate' @@ -157,6 +170,8 @@ const props = withDefaults( labelClass?: string groupClass?: string reserveMessageSpace?: boolean + min?: string + max?: string }>(), { id: '', @@ -176,6 +191,8 @@ const props = withDefaults( labelClass: '', groupClass: '', reserveMessageSpace: true, + min: undefined, + max: undefined, }, ) @@ -215,8 +232,8 @@ watch(() => props.displayValue, (value) => { draft.value = value }) -const {isOpen, viewMode, open, close: closePopover, toggleView} = useCalendarPopover(root) -const {currentMonth, currentYear, goToPrev, goToNext, selectMonth, syncToIso} = useCalendarView(viewMode) +const {isOpen, viewMode, open, close: closePopover, goToHigherView} = useCalendarPopover(root) +const {currentMonth, currentYear, yearPageStart, goToPrev, goToNext, selectMonth, selectYear, syncToIso} = useCalendarView(viewMode) const inputId = computed(() => props.id?.toString() || `malio-date-${generatedId}`) const hasError = computed(() => !!props.error) @@ -323,7 +340,12 @@ watch(() => props.syncTo, (value) => { const onSelectMonth = (m: number) => { selectMonth(m) - toggleView() + viewMode.value = 'days' +} + +const onSelectYear = (y: number) => { + selectYear(y) + viewMode.value = 'months' } const mergedGroupClass = computed(() =>