feat : intégration du sélecteur d'année dans CalendarField (#date-year-picker)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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"
|
||||
/>
|
||||
<slot
|
||||
v-if="viewMode === 'days'"
|
||||
@@ -97,10 +98,21 @@
|
||||
:close="closePopover"
|
||||
/>
|
||||
<MonthPicker
|
||||
v-else
|
||||
v-else-if="viewMode === 'months'"
|
||||
:selected-month="currentMonth"
|
||||
:current-year="currentYear"
|
||||
:min="min"
|
||||
:max="max"
|
||||
@select="onSelectMonth"
|
||||
/>
|
||||
<YearPicker
|
||||
v-else
|
||||
:page-start="yearPageStart"
|
||||
:selected-year="currentYear"
|
||||
:min="min"
|
||||
:max="max"
|
||||
@select="onSelectYear"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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(() =>
|
||||
|
||||
Reference in New Issue
Block a user