element-plus
Version:
A Component Library for Vue 3
1 lines • 7.31 kB
Source Map (JSON)
{"version":3,"file":"use-date-table.mjs","sources":["../../../../../../packages/components/calendar/src/use-date-table.ts"],"sourcesContent":["import { computed } from 'vue'\nimport dayjs from 'dayjs'\nimport localeData from 'dayjs/plugin/localeData.js'\nimport { useLocale } from '@element-plus/hooks'\nimport { rangeArr } from '@element-plus/components/time-picker'\nimport { WEEK_DAYS } from '@element-plus/constants'\nimport { getMonthDays, getPrevMonthLastDays, toNestedArr } from './date-table'\n\nimport type { SetupContext } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type {\n CalendarDateCell,\n CalendarDateCellType,\n DateTableEmits,\n DateTableProps,\n} from './date-table'\n\nexport const useDateTable = (\n props: DateTableProps,\n emit: SetupContext<DateTableEmits>['emit']\n) => {\n dayjs.extend(localeData)\n // https://day.js.org/docs/en/i18n/locale-data\n const firstDayOfWeek: number = dayjs.localeData().firstDayOfWeek()\n\n const { t, lang } = useLocale()\n const now = dayjs().locale(lang.value)\n\n const isInRange = computed(() => !!props.range && !!props.range.length)\n\n const rows = computed(() => {\n let days: CalendarDateCell[] = []\n if (isInRange.value) {\n const [start, end] = props.range!\n const currentMonthRange: CalendarDateCell[] = rangeArr(\n end.date() - start.date() + 1\n ).map((index) => ({\n text: start.date() + index,\n type: 'current',\n }))\n\n let remaining = currentMonthRange.length % 7\n remaining = remaining === 0 ? 0 : 7 - remaining\n const nextMonthRange: CalendarDateCell[] = rangeArr(remaining).map(\n (_, index) => ({\n text: index + 1,\n type: 'next',\n })\n )\n days = currentMonthRange.concat(nextMonthRange)\n } else {\n const firstDay = props.date.startOf('month').day()\n const prevMonthDays: CalendarDateCell[] = getPrevMonthLastDays(\n props.date,\n (firstDay - firstDayOfWeek + 7) % 7\n ).map((day) => ({\n text: day,\n type: 'prev',\n }))\n const currentMonthDays: CalendarDateCell[] = getMonthDays(props.date).map(\n (day) => ({\n text: day,\n type: 'current',\n })\n )\n days = [...prevMonthDays, ...currentMonthDays]\n const remaining = 7 - (days.length % 7 || 7)\n const nextMonthDays: CalendarDateCell[] = rangeArr(remaining).map(\n (_, index) => ({\n text: index + 1,\n type: 'next',\n })\n )\n days = days.concat(nextMonthDays)\n }\n return toNestedArr(days)\n })\n\n const weekDays = computed(() => {\n const start = firstDayOfWeek\n if (start === 0) {\n return WEEK_DAYS.map((_) => t(`el.datepicker.weeks.${_}`))\n } else {\n return WEEK_DAYS.slice(start)\n .concat(WEEK_DAYS.slice(0, start))\n .map((_) => t(`el.datepicker.weeks.${_}`))\n }\n })\n\n const getFormattedDate = (day: number, type: CalendarDateCellType): Dayjs => {\n switch (type) {\n case 'prev':\n return props.date.startOf('month').subtract(1, 'month').date(day)\n case 'next':\n return props.date.startOf('month').add(1, 'month').date(day)\n case 'current':\n return props.date.date(day)\n }\n }\n\n const handlePickDay = ({ text, type }: CalendarDateCell) => {\n const date = getFormattedDate(text, type)\n emit('pick', date)\n }\n\n const getSlotData = ({ text, type }: CalendarDateCell) => {\n const day = getFormattedDate(text, type)\n return {\n isSelected: day.isSame(props.selectedDay),\n type: `${type}-month`,\n day: day.format('YYYY-MM-DD'),\n date: day.toDate(),\n }\n }\n\n return {\n now,\n isInRange,\n rows,\n weekDays,\n getFormattedDate,\n handlePickDay,\n getSlotData,\n }\n}\n"],"names":[],"mappings":"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"}