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"
|
:view-mode="viewMode"
|
||||||
:current-month="currentMonth"
|
:current-month="currentMonth"
|
||||||
:current-year="currentYear"
|
:current-year="currentYear"
|
||||||
|
:year-page-start="yearPageStart"
|
||||||
@prev="goToPrev"
|
@prev="goToPrev"
|
||||||
@next="goToNext"
|
@next="goToNext"
|
||||||
@toggle-view="toggleView"
|
@toggle-view="goToHigherView"
|
||||||
/>
|
/>
|
||||||
<slot
|
<slot
|
||||||
v-if="viewMode === 'days'"
|
v-if="viewMode === 'days'"
|
||||||
@@ -97,10 +98,21 @@
|
|||||||
:close="closePopover"
|
:close="closePopover"
|
||||||
/>
|
/>
|
||||||
<MonthPicker
|
<MonthPicker
|
||||||
v-else
|
v-else-if="viewMode === 'months'"
|
||||||
:selected-month="currentMonth"
|
:selected-month="currentMonth"
|
||||||
|
:current-year="currentYear"
|
||||||
|
:min="min"
|
||||||
|
:max="max"
|
||||||
@select="onSelectMonth"
|
@select="onSelectMonth"
|
||||||
/>
|
/>
|
||||||
|
<YearPicker
|
||||||
|
v-else
|
||||||
|
:page-start="yearPageStart"
|
||||||
|
:selected-year="currentYear"
|
||||||
|
:min="min"
|
||||||
|
:max="max"
|
||||||
|
@select="onSelectYear"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -127,6 +139,7 @@ import type {MaskInputOptions} from 'maska'
|
|||||||
import MalioRequiredMark from '../../shared/RequiredMark.vue'
|
import MalioRequiredMark from '../../shared/RequiredMark.vue'
|
||||||
import CalendarHeader from './CalendarHeader.vue'
|
import CalendarHeader from './CalendarHeader.vue'
|
||||||
import MonthPicker from './MonthPicker.vue'
|
import MonthPicker from './MonthPicker.vue'
|
||||||
|
import YearPicker from './YearPicker.vue'
|
||||||
import {useCalendarPopover} from '../composables/useCalendarPopover'
|
import {useCalendarPopover} from '../composables/useCalendarPopover'
|
||||||
import {useCalendarView} from '../composables/useCalendarView'
|
import {useCalendarView} from '../composables/useCalendarView'
|
||||||
import {buildBoundedMask} from '../composables/maskTemplate'
|
import {buildBoundedMask} from '../composables/maskTemplate'
|
||||||
@@ -157,6 +170,8 @@ const props = withDefaults(
|
|||||||
labelClass?: string
|
labelClass?: string
|
||||||
groupClass?: string
|
groupClass?: string
|
||||||
reserveMessageSpace?: boolean
|
reserveMessageSpace?: boolean
|
||||||
|
min?: string
|
||||||
|
max?: string
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
id: '',
|
id: '',
|
||||||
@@ -176,6 +191,8 @@ const props = withDefaults(
|
|||||||
labelClass: '',
|
labelClass: '',
|
||||||
groupClass: '',
|
groupClass: '',
|
||||||
reserveMessageSpace: true,
|
reserveMessageSpace: true,
|
||||||
|
min: undefined,
|
||||||
|
max: undefined,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -215,8 +232,8 @@ watch(() => props.displayValue, (value) => {
|
|||||||
draft.value = value
|
draft.value = value
|
||||||
})
|
})
|
||||||
|
|
||||||
const {isOpen, viewMode, open, close: closePopover, toggleView} = useCalendarPopover(root)
|
const {isOpen, viewMode, open, close: closePopover, goToHigherView} = useCalendarPopover(root)
|
||||||
const {currentMonth, currentYear, goToPrev, goToNext, selectMonth, syncToIso} = useCalendarView(viewMode)
|
const {currentMonth, currentYear, yearPageStart, goToPrev, goToNext, selectMonth, selectYear, syncToIso} = useCalendarView(viewMode)
|
||||||
|
|
||||||
const inputId = computed(() => props.id?.toString() || `malio-date-${generatedId}`)
|
const inputId = computed(() => props.id?.toString() || `malio-date-${generatedId}`)
|
||||||
const hasError = computed(() => !!props.error)
|
const hasError = computed(() => !!props.error)
|
||||||
@@ -323,7 +340,12 @@ watch(() => props.syncTo, (value) => {
|
|||||||
|
|
||||||
const onSelectMonth = (m: number) => {
|
const onSelectMonth = (m: number) => {
|
||||||
selectMonth(m)
|
selectMonth(m)
|
||||||
toggleView()
|
viewMode.value = 'days'
|
||||||
|
}
|
||||||
|
|
||||||
|
const onSelectYear = (y: number) => {
|
||||||
|
selectYear(y)
|
||||||
|
viewMode.value = 'months'
|
||||||
}
|
}
|
||||||
|
|
||||||
const mergedGroupClass = computed(() =>
|
const mergedGroupClass = computed(() =>
|
||||||
|
|||||||
Reference in New Issue
Block a user