element-plus
Version:
A Component Library for Vue 3
1 lines • 26.9 kB
Source Map (JSON)
{"version":3,"file":"basic-date-table.mjs","sources":["../../../../../../../packages/components/date-picker/src/date-picker-com/basic-date-table.vue"],"sourcesContent":["<template>\n <table\n cellspacing=\"0\"\n cellpadding=\"0\"\n class=\"el-date-table\"\n :class=\"{ 'is-week-mode': selectionMode === 'week' }\"\n @click=\"handleClick\"\n @mousemove=\"handleMouseMove\"\n >\n <tbody>\n <tr>\n <th v-if=\"showWeekNumber\">{{ t('el.datepicker.week') }}</th>\n <th v-for=\"(week, key) in WEEKS\" :key=\"key\">\n {{ t('el.datepicker.weeks.' + week) }}\n </th>\n </tr>\n <tr\n v-for=\"(row, key) in rows\"\n :key=\"key\"\n class=\"el-date-table__row\"\n :class=\"{ current: isWeekActive(row[1]) }\"\n >\n <td\n v-for=\"(cell, key_) in row\"\n :key=\"key_\"\n :class=\"getCellClasses(cell)\"\n >\n <el-date-picker-cell :cell=\"cell\" />\n </td>\n </tr>\n </tbody>\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue'\nimport dayjs from 'dayjs'\nimport { useLocale } from '@element-plus/hooks'\nimport { castArray } from '@element-plus/utils'\nimport ElDatePickerCell from './basic-cell-render'\nimport type { PropType } from 'vue'\n\nimport type { Dayjs } from 'dayjs'\nimport type { DateCell } from '../date-picker.type'\n\nexport default defineComponent({\n components: {\n ElDatePickerCell,\n },\n props: {\n date: {\n type: Object as PropType<Dayjs>,\n },\n minDate: {\n type: Object as PropType<Dayjs>,\n },\n maxDate: {\n type: Object as PropType<Dayjs>,\n },\n parsedValue: {\n type: [Object, Array] as PropType<Dayjs | Dayjs[]>,\n },\n selectionMode: {\n type: String,\n default: 'day',\n },\n showWeekNumber: {\n type: Boolean,\n default: false,\n },\n disabledDate: {\n type: Function,\n },\n cellClassName: {\n type: Function,\n },\n rangeState: {\n type: Object,\n default: () => ({\n endDate: null,\n selecting: false,\n }),\n },\n },\n emits: ['changerange', 'pick', 'select'],\n\n setup(props, ctx) {\n const { t, lang } = useLocale()\n // data\n const lastRow = ref(null)\n const lastColumn = ref(null)\n const tableRows = ref<DateCell[][]>([[], [], [], [], [], []])\n\n // todo better way to get Day.js locale object\n const firstDayOfWeek = (props.date as any).$locale().weekStart || 7\n const WEEKS_CONSTANT = props.date\n .locale('en')\n .localeData()\n .weekdaysShort()\n .map((_) => _.toLowerCase())\n\n const offsetDay = computed(() => {\n // Sunday 7(0), cal the left and right offset days, 3217654, such as Monday is -1, the is to adjust the position of the first two rows of dates\n return firstDayOfWeek > 3 ? 7 - firstDayOfWeek : -firstDayOfWeek\n })\n\n const startDate = computed(() => {\n const startDayOfMonth = props.date.startOf('month')\n return startDayOfMonth.subtract(startDayOfMonth.day() || 7, 'day')\n })\n\n const WEEKS = computed(() => {\n return WEEKS_CONSTANT.concat(WEEKS_CONSTANT).slice(\n firstDayOfWeek,\n firstDayOfWeek + 7\n )\n })\n\n const rows = computed(() => {\n // TODO: refactory rows / getCellClasses\n const startOfMonth = props.date.startOf('month')\n const startOfMonthDay = startOfMonth.day() || 7 // day of first day\n const dateCountOfMonth = startOfMonth.daysInMonth()\n const dateCountOfLastMonth = startOfMonth\n .subtract(1, 'month')\n .daysInMonth()\n\n const offset = offsetDay.value\n const rows_ = tableRows.value\n let count = 1\n\n const selectedDate: Dayjs[] =\n props.selectionMode === 'dates' ? castArray(props.parsedValue) : []\n\n const calNow = dayjs().locale(lang.value).startOf('day')\n\n for (let i = 0; i < 6; i++) {\n const row = rows_[i]\n\n if (props.showWeekNumber) {\n if (!row[0]) {\n row[0] = {\n type: 'week',\n text: startDate.value.add(i * 7 + 1, 'day').week(),\n }\n }\n }\n\n for (let j = 0; j < 7; j++) {\n let cell = row[props.showWeekNumber ? j + 1 : j]\n if (!cell) {\n cell = {\n row: i,\n column: j,\n type: 'normal',\n inRange: false,\n start: false,\n end: false,\n }\n }\n const index = i * 7 + j\n const calTime = startDate.value.add(index - offset, 'day')\n cell.dayjs = calTime\n cell.date = calTime.toDate()\n cell.timestamp = calTime.valueOf()\n cell.type = 'normal'\n\n const calEndDate =\n props.rangeState.endDate ||\n props.maxDate ||\n (props.rangeState.selecting && props.minDate)\n\n cell.inRange =\n (props.minDate &&\n calTime.isSameOrAfter(props.minDate, 'day') &&\n calEndDate &&\n calTime.isSameOrBefore(calEndDate, 'day')) ||\n (props.minDate &&\n calTime.isSameOrBefore(props.minDate, 'day') &&\n calEndDate &&\n calTime.isSameOrAfter(calEndDate, 'day'))\n\n if (props.minDate?.isSameOrAfter(calEndDate)) {\n cell.start = calEndDate && calTime.isSame(calEndDate, 'day')\n cell.end = props.minDate && calTime.isSame(props.minDate, 'day')\n } else {\n cell.start = props.minDate && calTime.isSame(props.minDate, 'day')\n cell.end = calEndDate && calTime.isSame(calEndDate, 'day')\n }\n\n const isToday = calTime.isSame(calNow, 'day')\n\n if (isToday) {\n cell.type = 'today'\n }\n\n if (i >= 0 && i <= 1) {\n const numberOfDaysFromPreviousMonth =\n startOfMonthDay + offset < 0\n ? 7 + startOfMonthDay + offset\n : startOfMonthDay + offset\n\n if (j + i * 7 >= numberOfDaysFromPreviousMonth) {\n cell.text = count++\n } else {\n cell.text =\n dateCountOfLastMonth -\n (numberOfDaysFromPreviousMonth - (j % 7)) +\n 1 +\n i * 7\n cell.type = 'prev-month'\n }\n } else {\n if (count <= dateCountOfMonth) {\n cell.text = count++\n } else {\n cell.text = count++ - dateCountOfMonth\n cell.type = 'next-month'\n }\n }\n\n const cellDate = calTime.toDate()\n cell.selected = selectedDate.find(\n (_) => _.valueOf() === calTime.valueOf()\n )\n cell.isSelected = !!cell.selected\n cell.isCurrent = isCurrent(cell)\n cell.disabled = props.disabledDate && props.disabledDate(cellDate)\n cell.customClass =\n props.cellClassName && props.cellClassName(cellDate)\n row[props.showWeekNumber ? j + 1 : j] = cell\n }\n\n if (props.selectionMode === 'week') {\n const start = props.showWeekNumber ? 1 : 0\n const end = props.showWeekNumber ? 7 : 6\n const isActive = isWeekActive(row[start + 1])\n row[start].inRange = isActive\n row[start].start = isActive\n row[end].inRange = isActive\n row[end].end = isActive\n }\n }\n return rows_\n })\n\n const isCurrent = (cell): boolean => {\n return (\n props.selectionMode === 'day' &&\n (cell.type === 'normal' || cell.type === 'today') &&\n cellMatchesDate(cell, props.parsedValue)\n )\n }\n\n const cellMatchesDate = (cell, date) => {\n if (!date) return false\n return dayjs(date)\n .locale(lang.value)\n .isSame(props.date.date(Number(cell.text)), 'day')\n }\n\n const getCellClasses = (cell) => {\n const classes: string[] = []\n if ((cell.type === 'normal' || cell.type === 'today') && !cell.disabled) {\n classes.push('available')\n if (cell.type === 'today') {\n classes.push('today')\n }\n } else {\n classes.push(cell.type)\n }\n\n if (isCurrent(cell)) {\n classes.push('current')\n }\n\n if (\n cell.inRange &&\n (cell.type === 'normal' ||\n cell.type === 'today' ||\n props.selectionMode === 'week')\n ) {\n classes.push('in-range')\n\n if (cell.start) {\n classes.push('start-date')\n }\n\n if (cell.end) {\n classes.push('end-date')\n }\n }\n\n if (cell.disabled) {\n classes.push('disabled')\n }\n\n if (cell.selected) {\n classes.push('selected')\n }\n\n if (cell.customClass) {\n classes.push(cell.customClass)\n }\n\n return classes.join(' ')\n }\n\n const getDateOfCell = (row, column) => {\n const offsetFromStart =\n row * 7 + (column - (props.showWeekNumber ? 1 : 0)) - offsetDay.value\n return startDate.value.add(offsetFromStart, 'day')\n }\n\n const handleMouseMove = (event) => {\n if (!props.rangeState.selecting) return\n\n let target = event.target\n if (target.tagName === 'SPAN') {\n target = target.parentNode.parentNode\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode\n }\n if (target.tagName !== 'TD') return\n\n const row = target.parentNode.rowIndex - 1\n const column = target.cellIndex\n\n // can not select disabled date\n if (rows.value[row][column].disabled) return\n\n // only update rangeState when mouse moves to a new cell\n // this avoids frequent Date object creation and improves performance\n if (row !== lastRow.value || column !== lastColumn.value) {\n lastRow.value = row\n lastColumn.value = column\n ctx.emit('changerange', {\n selecting: true,\n endDate: getDateOfCell(row, column),\n })\n }\n }\n\n const handleClick = (event) => {\n let target = event.target\n\n while (target) {\n if (target.tagName === 'TD') {\n break\n }\n target = target.parentNode\n }\n\n if (!target || target.tagName !== 'TD') return\n\n const row = target.parentNode.rowIndex - 1\n const column = target.cellIndex\n const cell = rows.value[row][column]\n\n if (cell.disabled || cell.type === 'week') return\n\n const newDate = getDateOfCell(row, column)\n\n if (props.selectionMode === 'range') {\n if (!props.rangeState.selecting) {\n ctx.emit('pick', { minDate: newDate, maxDate: null })\n ctx.emit('select', true)\n } else {\n if (newDate >= props.minDate) {\n ctx.emit('pick', { minDate: props.minDate, maxDate: newDate })\n } else {\n ctx.emit('pick', { minDate: newDate, maxDate: props.minDate })\n }\n ctx.emit('select', false)\n }\n } else if (props.selectionMode === 'day') {\n ctx.emit('pick', newDate)\n } else if (props.selectionMode === 'week') {\n const weekNumber = newDate.week()\n const value = `${newDate.year()}w${weekNumber}`\n ctx.emit('pick', {\n year: newDate.year(),\n week: weekNumber,\n value,\n date: newDate.startOf('week'),\n })\n } else if (props.selectionMode === 'dates') {\n const newValue = cell.selected\n ? castArray(props.parsedValue).filter(\n (_) => _.valueOf() !== newDate.valueOf()\n )\n : castArray(props.parsedValue).concat([newDate])\n ctx.emit('pick', newValue)\n }\n }\n\n const isWeekActive = (cell) => {\n if (props.selectionMode !== 'week') return false\n let newDate = props.date.startOf('day')\n\n if (cell.type === 'prev-month') {\n newDate = newDate.subtract(1, 'month')\n }\n\n if (cell.type === 'next-month') {\n newDate = newDate.add(1, 'month')\n }\n\n newDate = newDate.date(Number.parseInt(cell.text, 10))\n\n if (props.parsedValue && !Array.isArray(props.parsedValue)) {\n const dayOffset =\n ((props.parsedValue.day() - firstDayOfWeek + 7) % 7) - 1\n const weekDate = props.parsedValue.subtract(dayOffset, 'day')\n return weekDate.isSame(newDate, 'day')\n }\n return false\n }\n\n return {\n handleMouseMove,\n t,\n rows,\n isWeekActive,\n getCellClasses,\n WEEKS,\n handleClick,\n }\n },\n})\n</script>\n"],"names":["_resolveComponent","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_normalizeClass","_createVNode"],"mappings":"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"}