element-plus
Version:
A Component Library for Vue 3
1 lines • 26.8 kB
Source Map (JSON)
{"version":3,"file":"use-basic-date-table.mjs","sources":["../../../../../../../packages/components/date-picker-panel/src/composables/use-basic-date-table.ts"],"sourcesContent":["import { computed, nextTick, ref, unref, watch } from 'vue'\nimport dayjs from 'dayjs'\nimport { flatten } from 'lodash-unified'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport { castArray, isArray } from '@element-plus/utils'\nimport { buildPickerTable } from '../utils'\n\nimport type { SetupContext } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type { DateCell } from '../types'\nimport type {\n BasicDateTableEmits,\n BasicDateTableProps,\n} from '../props/basic-date-table'\n\nconst isNormalDay = (type = '') => {\n return ['normal', 'today'].includes(type)\n}\n\nexport const useBasicDateTable = (\n props: BasicDateTableProps,\n emit: SetupContext<BasicDateTableEmits>['emit']\n) => {\n const { lang } = useLocale()\n const tbodyRef = ref<HTMLElement>()\n const currentCellRef = ref<HTMLElement>()\n // data\n const lastRow = ref<number>()\n const lastColumn = ref<number>()\n const tableRows = ref<DateCell[][]>([[], [], [], [], [], []])\n\n let focusWithClick = false\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 hasCurrent = computed<boolean>(() => {\n return flatten(unref(rows)).some((row) => {\n return row.isCurrent\n })\n })\n\n const days = computed(() => {\n const startOfMonth = props.date.startOf('month')\n const startOfMonthDay = startOfMonth.day() || 7 // day of first day\n const dateCountOfMonth = startOfMonth.daysInMonth()\n\n const dateCountOfLastMonth = startOfMonth.subtract(1, 'month').daysInMonth()\n\n return {\n startOfMonthDay,\n dateCountOfMonth,\n dateCountOfLastMonth,\n }\n })\n\n const selectedDate = computed<Dayjs[]>(() => {\n return props.selectionMode === 'dates' ? castArray(props.parsedValue!) : []\n })\n\n // Return value indicates should the counter be incremented\n type CellCoordinate = { columnIndex: number; rowIndex: number }\n type CellMeta = CellCoordinate & {\n count: number\n }\n const setDateText = (\n cell: DateCell,\n { count, rowIndex, columnIndex }: CellMeta\n ): boolean => {\n const { startOfMonthDay, dateCountOfMonth, dateCountOfLastMonth } =\n unref(days)\n const offset = unref(offsetDay)\n if (rowIndex >= 0 && rowIndex <= 1) {\n const numberOfDaysFromPreviousMonth =\n startOfMonthDay + offset < 0\n ? 7 + startOfMonthDay + offset\n : startOfMonthDay + offset\n\n if (columnIndex + rowIndex * 7 >= numberOfDaysFromPreviousMonth) {\n cell.text = count\n return true\n } else {\n cell.text =\n dateCountOfLastMonth -\n (numberOfDaysFromPreviousMonth - (columnIndex % 7)) +\n 1 +\n rowIndex * 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 return true\n }\n return false\n }\n\n const setCellMetadata = (\n cell: DateCell,\n { columnIndex, rowIndex }: CellCoordinate,\n count: number\n ) => {\n const { disabledDate, cellClassName } = props\n const _selectedDate = unref(selectedDate)\n const shouldIncrement = setDateText(cell, { count, rowIndex, columnIndex })\n\n const cellDate = cell.dayjs!.toDate()\n cell.selected = _selectedDate.find((d) => d.isSame(cell.dayjs, 'day'))\n cell.isSelected = !!cell.selected\n cell.isCurrent = isCurrent(cell)\n cell.disabled = disabledDate?.(cellDate)\n cell.customClass = cellClassName?.(cellDate)\n return shouldIncrement\n }\n\n const setRowMetadata = (row: DateCell[]) => {\n if (props.selectionMode === 'week') {\n const [start, end] = props.showWeekNumber ? [1, 7] : [0, 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\n const rows = computed(() => {\n const { minDate, maxDate, rangeState, showWeekNumber } = props\n\n const offset = unref(offsetDay)\n const rows_ = unref(tableRows)\n const dateUnit = 'day'\n let count = 1\n\n buildPickerTable({ row: 6, column: 7 }, rows_, {\n startDate: minDate,\n columnIndexOffset: showWeekNumber ? 1 : 0,\n nextEndDate:\n rangeState.endDate ||\n maxDate ||\n (rangeState.selecting && minDate) ||\n null,\n now: dayjs().locale(unref(lang)).startOf(dateUnit),\n unit: dateUnit,\n relativeDateGetter: (idx: number) =>\n unref(startDate).add(idx - offset, dateUnit),\n setCellMetadata: (...args) => {\n if (setCellMetadata(...args, count)) {\n count += 1\n }\n },\n\n setRowMetadata,\n })\n\n if (showWeekNumber) {\n for (let rowIndex = 0; rowIndex < 6; rowIndex++) {\n if (rows_[rowIndex][1].dayjs) {\n rows_[rowIndex][0] = {\n type: 'week',\n text: rows_[rowIndex][1].dayjs!.week(),\n }\n }\n }\n }\n\n return rows_\n })\n\n watch(\n () => props.date,\n async () => {\n if (unref(tbodyRef)?.contains(document.activeElement)) {\n await nextTick()\n await focus()\n // currentCellRef.value?.focus()\n }\n }\n )\n\n const focus = async () => unref(currentCellRef)?.focus()\n\n const isCurrent = (cell: DateCell): boolean => {\n return (\n props.selectionMode === 'date' &&\n isNormalDay(cell.type) &&\n cellMatchesDate(cell, props.parsedValue as Dayjs)\n )\n }\n\n const cellMatchesDate = (cell: DateCell, date: Dayjs) => {\n if (!date) return false\n return dayjs(date)\n .locale(unref(lang))\n .isSame(props.date.date(Number(cell.text)), 'day')\n }\n\n const getDateOfCell = (row: number, column: number) => {\n //NOTE: because relying of startDate is not reliable in every weekStart (especially 2, 3); we re-create it\n const startOfMonthDay = unref(days).startOfMonthDay\n const offset = unref(offsetDay)\n const numberOfDaysFromPreviousMonth =\n startOfMonthDay + offset < 0\n ? 7 + startOfMonthDay + offset\n : startOfMonthDay + offset\n const offsetFromStart = row * 7 + (column - (props.showWeekNumber ? 1 : 0))\n return props.date\n .startOf('month')\n .subtract(numberOfDaysFromPreviousMonth, 'day')\n .add(offsetFromStart, 'day')\n }\n\n const handleMouseMove = (event: MouseEvent) => {\n if (!props.rangeState.selecting) return\n\n let target = event.target as HTMLElement\n if (target.tagName === 'SPAN') {\n target = target.parentNode?.parentNode as HTMLElement\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode as HTMLElement\n }\n if (target.tagName !== 'TD') return\n\n const row = (target.parentNode as HTMLTableRowElement).rowIndex - 1\n const column = (target as HTMLTableCellElement).cellIndex\n\n // can not select disabled date\n if (unref(rows)[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 !== unref(lastRow) || column !== unref(lastColumn)) {\n lastRow.value = row\n lastColumn.value = column\n emit('changerange', {\n selecting: true,\n endDate: getDateOfCell(row, column),\n })\n }\n }\n\n const isSelectedCell = (cell: DateCell) => {\n return (\n (!unref(hasCurrent) && cell?.text === 1 && isNormalDay(cell.type)) ||\n cell.isCurrent\n )\n }\n\n const handleFocus = (event: FocusEvent) => {\n if (focusWithClick || unref(hasCurrent) || props.selectionMode !== 'date')\n return\n handlePickDate(event, true)\n }\n\n const handleMouseDown = (event: MouseEvent) => {\n const target = (event.target as HTMLElement).closest('td')\n if (!target) return\n focusWithClick = true\n }\n\n const handleMouseUp = (event: MouseEvent) => {\n const target = (event.target as HTMLElement).closest('td')\n if (!target) return\n focusWithClick = false\n }\n\n const handleRangePick = (newDate: Dayjs) => {\n if (!props.rangeState.selecting || !props.minDate) {\n emit('pick', { minDate: newDate, maxDate: null })\n emit('select', true)\n } else {\n if (newDate >= props.minDate) {\n emit('pick', { minDate: props.minDate, maxDate: newDate })\n } else {\n emit('pick', { minDate: newDate, maxDate: props.minDate })\n }\n emit('select', false)\n }\n }\n\n const handleWeekPick = (newDate: Dayjs) => {\n const weekNumber = newDate.week()\n const value = `${newDate.year()}w${weekNumber}`\n emit('pick', {\n year: newDate.year(),\n week: weekNumber,\n value,\n date: newDate.startOf('week'),\n })\n }\n\n const handleDatesPick = (newDate: Dayjs, selected: boolean) => {\n const newValue = selected\n ? castArray(props.parsedValue).filter(\n (d) => d?.valueOf() !== newDate.valueOf()\n )\n : castArray(props.parsedValue).concat([newDate])\n emit('pick', newValue)\n }\n\n const handlePickDate = (\n event: FocusEvent | MouseEvent,\n isKeyboardMovement = false\n ) => {\n if (props.disabled) return\n const target = (event.target as HTMLElement).closest('td')\n\n if (!target) return\n\n const row = (target.parentNode as HTMLTableRowElement).rowIndex - 1\n const column = (target as HTMLTableCellElement).cellIndex\n const cell = unref(rows)[row][column]\n\n if (cell.disabled || cell.type === 'week') return\n\n const newDate = getDateOfCell(row, column)\n\n switch (props.selectionMode) {\n case 'range': {\n handleRangePick(newDate)\n break\n }\n case 'date': {\n emit('pick', newDate, isKeyboardMovement)\n break\n }\n case 'week': {\n handleWeekPick(newDate)\n break\n }\n case 'dates': {\n handleDatesPick(newDate, !!cell.selected)\n break\n }\n default: {\n break\n }\n }\n }\n\n const isWeekActive = (cell: DateCell) => {\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 as any, 10))\n\n if (props.parsedValue && !isArray(props.parsedValue)) {\n const dayOffset = ((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 WEEKS,\n rows,\n tbodyRef,\n currentCellRef,\n\n // cellMatchesDate,\n // getDateOfCell,\n focus,\n isCurrent,\n isWeekActive,\n isSelectedCell,\n\n handlePickDate,\n handleMouseUp,\n handleMouseDown,\n handleMouseMove,\n handleFocus,\n }\n}\n\nexport const useBasicDateTableDOM = (\n props: BasicDateTableProps,\n {\n isCurrent,\n isWeekActive,\n }: Pick<ReturnType<typeof useBasicDateTable>, 'isCurrent' | 'isWeekActive'>\n) => {\n const ns = useNamespace('date-table')\n const { t } = useLocale()\n\n const tableKls = computed(() => [\n ns.b(),\n ns.is('week-mode', props.selectionMode === 'week' && !props.disabled),\n ])\n\n const tableLabel = computed(() => t('el.datepicker.dateTablePrompt'))\n\n const getCellClasses = (cell: DateCell) => {\n const classes: string[] = []\n if (isNormalDay(cell.type) && !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 (isNormalDay(cell.type) || 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 || props.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 getRowKls = (cell: DateCell) => [\n ns.e('row'),\n { current: isWeekActive(cell) },\n ]\n\n return {\n tableKls,\n tableLabel,\n weekHeaderClass: ns.e('week-header'),\n\n getCellClasses,\n getRowKls,\n t,\n }\n}\n"],"names":[],"mappings":"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"}