UNPKG

@dialpad/dialtone

Version:

Dialpad's Dialtone design system monorepo

1 lines 6.21 kB
{"version":3,"file":"useMonthYearPicker.cjs","sources":["../../../../components/datepicker/composables/useMonthYearPicker.js"],"sourcesContent":["import { computed, ref, watch } from 'vue';\nimport { addMonths, getDate, getMonth, getYear, set, subMonths } from 'date-fns';\nimport { formatMonth, getCalendarDays } from '@/components/datepicker/utils.js';\nimport { returnFirstEl } from '@/common/utils';\n\nexport function useMonthYearPicker (props, emits) {\n const selectMonth = ref(getMonth(props.selectedDate));\n const selectYear = ref(getYear(props.selectedDate));\n const highlightedDay = ref(null);\n const focusPicker = ref(0);\n const focusRefs = ref([]);\n\n const calendarDays = computed(() => {\n return getCalendarDays(selectMonth.value, selectYear.value, highlightedDay.value);\n });\n\n const formattedMonth = computed(() => {\n return (month, format, locale) => formatMonth(month, format, locale);\n });\n\n watch(selectMonth, () => {\n highlightDay();\n emits('calendar-days', calendarDays.value);\n }, { immediate: true });\n\n watch(selectYear, () => {\n highlightDay();\n emits('calendar-days', calendarDays.value);\n }, { immediate: true });\n\n function setDayRef (el) {\n if (!focusRefs.value.includes(el)) {\n focusRefs.value.push(el);\n }\n }\n\n function focusMonthYearPicker () {\n returnFirstEl(focusRefs.value[0].$el).focus();\n }\n\n function handleKeyDown (event) {\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n if (focusPicker.value === 0) {\n focusPicker.value = 3;\n returnFirstEl(focusRefs.value[focusPicker.value].$el).focus();\n } else {\n focusPicker.value--;\n returnFirstEl(focusRefs.value[focusPicker.value].$el).focus();\n }\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n if (focusPicker.value === 3) {\n focusPicker.value = 0;\n returnFirstEl(focusRefs.value[focusPicker.value].$el).focus();\n } else {\n focusPicker.value++;\n returnFirstEl(focusRefs.value[focusPicker.value].$el).focus();\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n emits('focus-first-day');\n break;\n\n case 'Tab':\n event.preventDefault();\n emits('focus-first-day');\n break;\n\n case 'Escape':\n emits('close-datepicker');\n break;\n }\n }\n\n function highlightDay () {\n const year = getYear(props.selectedDate);\n const month = getMonth(props.selectedDate);\n\n if (year !== selectYear.value || month !== selectMonth.value) {\n highlightedDay.value = null;\n } else {\n highlightedDay.value = getDate(props.selectedDate);\n }\n }\n\n function changeMonth (value) {\n // Adjust year when changing from January to December or vice versa\n if ((selectMonth.value === 0 && value === -1) || (selectMonth.value === 11 && value === 1)) {\n selectYear.value += value;\n }\n\n // Calculate the new date by adding or subtracting months\n const initialDate = set(props.selectedDate, { month: selectMonth.value, year: selectYear.value });\n const newDate = value === 1 ? addMonths(initialDate, 1) : subMonths(initialDate, 1);\n\n // Update the selected month\n selectMonth.value = getMonth(newDate);\n }\n\n function changeYear (value) {\n selectYear.value = selectYear.value + value;\n }\n\n function goToNextMonth () {\n changeMonth(1);\n }\n\n function goToPrevMonth () {\n changeMonth(-1);\n }\n\n return {\n selectMonth,\n selectYear,\n formattedMonth,\n setDayRef,\n focusMonthYearPicker,\n handleKeyDown,\n changeMonth,\n changeYear,\n goToNextMonth,\n goToPrevMonth,\n };\n}\n"],"names":["ref","getMonth","getYear","computed","getCalendarDays","formatMonth","watch","returnFirstEl","getDate","set","addMonths","subMonths"],"mappings":"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"}