feat : header contextuel jours/mois/années (#date-year-picker)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
type="button"
|
type="button"
|
||||||
data-test="header-prev"
|
data-test="header-prev"
|
||||||
class="ml-2 flex self-start rounded"
|
class="ml-2 flex self-start rounded"
|
||||||
:aria-label="viewMode === 'days' ? 'Mois précédent' : 'Année précédente'"
|
:aria-label="prevLabel"
|
||||||
@click="emit('prev')"
|
@click="emit('prev')"
|
||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
@@ -18,10 +18,11 @@
|
|||||||
type="button"
|
type="button"
|
||||||
data-test="header-toggle"
|
data-test="header-toggle"
|
||||||
class="flex gap-1 rounded text-base font-medium"
|
class="flex gap-1 rounded text-base font-medium"
|
||||||
@click="emit('toggle-view')"
|
@click="viewMode !== 'years' && emit('toggle-view')"
|
||||||
>
|
>
|
||||||
<span class="mt-[2px]">{{ label }}</span>
|
<span class="mt-[2px]">{{ label }}</span>
|
||||||
<Icon
|
<Icon
|
||||||
|
v-if="viewMode !== 'years'"
|
||||||
icon="mdi:chevron-down"
|
icon="mdi:chevron-down"
|
||||||
:width="25"
|
:width="25"
|
||||||
:height="25"
|
:height="25"
|
||||||
@@ -32,7 +33,7 @@
|
|||||||
type="button"
|
type="button"
|
||||||
data-test="header-next"
|
data-test="header-next"
|
||||||
class="mr-2 flex self-start rounded"
|
class="mr-2 flex self-start rounded"
|
||||||
:aria-label="viewMode === 'days' ? 'Mois suivant' : 'Année suivante'"
|
:aria-label="nextLabel"
|
||||||
@click="emit('next')"
|
@click="emit('next')"
|
||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
@@ -51,9 +52,10 @@ import {Icon} from '@iconify/vue'
|
|||||||
defineOptions({name: 'MalioDateCalendarHeader'})
|
defineOptions({name: 'MalioDateCalendarHeader'})
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
viewMode: 'days' | 'months'
|
viewMode: 'days' | 'months' | 'years'
|
||||||
currentMonth: number
|
currentMonth: number
|
||||||
currentYear: number
|
currentYear: number
|
||||||
|
yearPageStart: number
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
@@ -64,7 +66,20 @@ const monthsLong = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
|
|||||||
'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre']
|
'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre']
|
||||||
|
|
||||||
const label = computed(() => {
|
const label = computed(() => {
|
||||||
|
if (props.viewMode === 'years') return `${props.yearPageStart} – ${props.yearPageStart + 11}`
|
||||||
|
if (props.viewMode === 'months') return `${props.currentYear}`
|
||||||
const name = monthsLong[props.currentMonth]
|
const name = monthsLong[props.currentMonth]
|
||||||
return `${name.charAt(0).toUpperCase()}${name.slice(1)} ${props.currentYear}`
|
return `${name.charAt(0).toUpperCase()}${name.slice(1)} ${props.currentYear}`
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const prevLabel = computed(() =>
|
||||||
|
props.viewMode === 'days' ? 'Mois précédent'
|
||||||
|
: props.viewMode === 'months' ? 'Année précédente'
|
||||||
|
: 'Période précédente',
|
||||||
|
)
|
||||||
|
const nextLabel = computed(() =>
|
||||||
|
props.viewMode === 'days' ? 'Mois suivant'
|
||||||
|
: props.viewMode === 'months' ? 'Année suivante'
|
||||||
|
: 'Période suivante',
|
||||||
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user