UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 12.7 kB
{"version":3,"file":"date-table2.mjs","sources":["../../../../../../packages/components/calendar/src/date-table.vue"],"sourcesContent":["<template>\n <table\n :class=\"[nsTable.b(), nsTable.is('range', isInRange)]\"\n cellspacing=\"0\"\n cellpadding=\"0\"\n >\n <thead v-if=\"!hideHeader\">\n <th v-for=\"day in weekDays\" :key=\"day\">{{ day }}</th>\n </thead>\n\n <tbody>\n <tr\n v-for=\"(row, index) in rows\"\n :key=\"index\"\n :class=\"{\n [nsTable.e('row')]: true,\n [nsTable.em('row', 'hide-border')]: index === 0 && hideHeader,\n }\"\n >\n <td\n v-for=\"(cell, key) in row\"\n :key=\"key\"\n :class=\"getCellClass(cell)\"\n @click=\"handlePickDay(cell)\"\n >\n <div :class=\"nsDay.b()\">\n <slot name=\"dateCell\" :data=\"getSlotData(cell)\">\n <span>{{ cell.text }}</span>\n </slot>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue'\nimport dayjs from 'dayjs'\nimport localeData from 'dayjs/plugin/localeData.js'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport { rangeArr } from '@element-plus/components/time-picker'\nimport { dateTableEmits, dateTableProps } from './date-table'\nimport type { Dayjs } from 'dayjs'\ndayjs.extend(localeData)\n\ntype CellType = 'next' | 'prev' | 'current'\ninterface Cell {\n text: number\n type: CellType\n}\n\nconst WEEK_DAYS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'] as const\n\nexport const getPrevMonthLastDays = (date: Dayjs, count: number) => {\n const lastDay = date.subtract(1, 'month').endOf('month').date()\n return rangeArr(count).map((_, index) => lastDay - (count - index - 1))\n}\n\nexport const getMonthDays = (date: Dayjs) => {\n const days = date.daysInMonth()\n return rangeArr(days).map((_, index) => index + 1)\n}\n\nconst toNestedArr = (days: Cell[]) =>\n rangeArr(days.length / 7).map((index) => {\n const start = index * 7\n return days.slice(start, start + 7)\n })\n\nexport default defineComponent({\n props: dateTableProps,\n emits: dateTableEmits,\n\n setup(props, { emit }) {\n const { t, lang } = useLocale()\n const nsTable = useNamespace('calendar-table')\n const nsDay = useNamespace('calendar-day')\n\n const now = dayjs().locale(lang.value)\n // todo better way to get Day.js locale object\n const firstDayOfWeek: number = (now as any).$locale().weekStart || 0\n\n const isInRange = computed(() => !!props.range && !!props.range.length)\n\n const rows = computed(() => {\n let days: Cell[] = []\n if (isInRange.value) {\n const [start, end] = props.range!\n const currentMonthRange: Cell[] = 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: Cell[] = rangeArr(remaining).map((_, index) => ({\n text: index + 1,\n type: 'next',\n }))\n days = currentMonthRange.concat(nextMonthRange)\n } else {\n const firstDay = props.date.startOf('month').day() || 7\n const prevMonthDays: Cell[] = getPrevMonthLastDays(\n props.date,\n firstDay - firstDayOfWeek\n ).map((day) => ({\n text: day,\n type: 'prev',\n }))\n const currentMonthDays: Cell[] = getMonthDays(props.date).map(\n (day) => ({\n text: day,\n type: 'current',\n })\n )\n days = [...prevMonthDays, ...currentMonthDays]\n const nextMonthDays: Cell[] = rangeArr(42 - days.length).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: CellType): 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 getCellClass = ({ text, type }: Cell) => {\n const classes: string[] = [type]\n if (type === 'current') {\n const date = getFormattedDate(text, type)\n if (date.isSame(props.selectedDay, 'day')) {\n classes.push(nsDay.is('selected'))\n }\n if (date.isSame(now, 'day')) {\n classes.push(nsDay.is('today'))\n }\n }\n return classes\n }\n\n const handlePickDay = ({ text, type }: Cell) => {\n const date = getFormattedDate(text, type)\n emit('pick', date)\n }\n\n const getSlotData = ({ text, type }: Cell) => {\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 isInRange,\n weekDays,\n rows,\n getCellClass,\n handlePickDay,\n getSlotData,\n\n nsTable,\n nsDay,\n }\n },\n})\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_openBlock","_Fragment","_renderList","_toDisplayString","_createElementVNode","_renderSlot"],"mappings":"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"}