UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 9.01 kB
{"version":3,"file":"utils.mjs","names":[],"sources":["../../../../../../packages/components/date-picker-panel/src/utils.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport { isArray, isString } from '@element-plus/utils'\nimport { rangeArr } from '@element-plus/components/time-picker'\n\nimport type { ComputedRef } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type { DateCell } from './types'\nimport type { DisabledDateType } from './props/shared'\n\ntype DayRange = [Dayjs | undefined, Dayjs | undefined]\n\nexport const isValidRange = (range: DayRange): boolean => {\n if (!isArray(range)) return false\n\n const [left, right] = range\n\n return (\n dayjs.isDayjs(left) &&\n dayjs.isDayjs(right) &&\n dayjs(left).isValid() &&\n dayjs(right).isValid() &&\n left.isSameOrBefore(right)\n )\n}\n\ntype GetDefaultValueParams = {\n lang: string\n step?: number\n unit: 'month' | 'year'\n unlinkPanels: boolean\n}\n\nexport type DefaultValue = [Date, Date] | Date | undefined\n\nexport const getDefaultValue = (\n defaultValue: DefaultValue,\n { lang, step = 1, unit, unlinkPanels }: GetDefaultValueParams\n) => {\n let start: Dayjs\n\n if (isArray(defaultValue)) {\n let [left, right] = defaultValue.map((d) => dayjs(d).locale(lang))\n if (!unlinkPanels) {\n right = left.add(step, unit)\n }\n return [left, right]\n } else if (defaultValue) {\n start = dayjs(defaultValue)\n } else {\n start = dayjs()\n }\n start = start.locale(lang)\n return [start, start.add(step, unit)]\n}\n\ntype Dimension = {\n row: number\n column: number\n}\n\ntype BuildPickerTableMetadata = {\n startDate?: Dayjs | null\n unit: 'month' | 'day'\n columnIndexOffset: number\n now: Dayjs\n nextEndDate: Dayjs | null\n relativeDateGetter: (index: number) => Dayjs\n setCellMetadata?: (\n cell: DateCell,\n dimension: { rowIndex: number; columnIndex: number }\n ) => void\n setRowMetadata?: (row: DateCell[]) => void\n}\n\nexport const buildPickerTable = (\n dimension: Dimension,\n rows: DateCell[][],\n {\n columnIndexOffset,\n startDate,\n nextEndDate,\n now,\n unit,\n relativeDateGetter,\n setCellMetadata,\n setRowMetadata,\n }: BuildPickerTableMetadata\n) => {\n for (let rowIndex = 0; rowIndex < dimension.row; rowIndex++) {\n const row = rows[rowIndex]\n for (let columnIndex = 0; columnIndex < dimension.column; columnIndex++) {\n let cell = row[columnIndex + columnIndexOffset]\n if (!cell) {\n cell = {\n row: rowIndex,\n column: columnIndex,\n type: 'normal',\n inRange: false,\n start: false,\n end: false,\n }\n }\n const index = rowIndex * dimension.column + columnIndex\n const nextStartDate = relativeDateGetter(index)\n cell.dayjs = nextStartDate\n cell.date = nextStartDate.toDate()\n cell.timestamp = nextStartDate.valueOf()\n cell.type = 'normal'\n\n cell.inRange =\n !!(\n startDate &&\n nextStartDate.isSameOrAfter(startDate, unit) &&\n nextEndDate &&\n nextStartDate.isSameOrBefore(nextEndDate, unit)\n ) ||\n !!(\n startDate &&\n nextStartDate.isSameOrBefore(startDate, unit) &&\n nextEndDate &&\n nextStartDate.isSameOrAfter(nextEndDate, unit)\n )\n\n if (startDate?.isSameOrAfter(nextEndDate)) {\n cell.start = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit)\n cell.end = startDate && nextStartDate.isSame(startDate, unit)\n } else {\n cell.start = !!startDate && nextStartDate.isSame(startDate, unit)\n cell.end = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit)\n }\n\n const isToday = nextStartDate.isSame(now, unit)\n\n if (isToday) {\n cell.type = 'today'\n }\n setCellMetadata?.(cell, { rowIndex, columnIndex })\n row[columnIndex + columnIndexOffset] = cell\n }\n setRowMetadata?.(row)\n }\n}\n\nexport const datesInMonth = (\n date: Dayjs,\n year: number,\n month: number,\n lang: string\n) => {\n const firstDay = dayjs()\n .locale(lang)\n .startOf('month')\n .month(month)\n .year(year)\n .hour(date.hour())\n .minute(date.minute())\n .second(date.second())\n\n const numOfDays = firstDay.daysInMonth()\n return rangeArr(numOfDays).map((n) => firstDay.add(n, 'day').toDate())\n}\n\nexport const getValidDateOfMonth = (\n date: Dayjs,\n year: number,\n month: number,\n lang: string,\n disabledDate?: DisabledDateType\n) => {\n const _value = dayjs()\n .year(year)\n .month(month)\n .startOf('month')\n .hour(date.hour())\n .minute(date.minute())\n .second(date.second())\n const _date = datesInMonth(date, year, month, lang).find((date) => {\n return !disabledDate?.(date)\n })\n if (_date) {\n return dayjs(_date).locale(lang)\n }\n return _value.locale(lang)\n}\n\nexport const getValidDateOfYear = (\n value: Dayjs,\n lang: string,\n disabledDate?: DisabledDateType\n) => {\n const year = value.year()\n if (!disabledDate?.(value.toDate())) {\n return value.locale(lang)\n }\n const month = value.month()\n if (!datesInMonth(value, year, month, lang).every(disabledDate)) {\n return getValidDateOfMonth(value, year, month, lang, disabledDate)\n }\n for (let i = 0; i < 12; i++) {\n if (!datesInMonth(value, year, i, lang).every(disabledDate)) {\n return getValidDateOfMonth(value, year, i, lang, disabledDate)\n }\n }\n return value\n}\n\nexport const correctlyParseUserInput = (\n value: string | Dayjs | Dayjs[],\n format: string,\n lang: string,\n defaultFormat: ComputedRef<boolean> | undefined\n): Dayjs | Dayjs[] => {\n if (isArray(value)) {\n return value.map(\n (v) => correctlyParseUserInput(v, format, lang, defaultFormat) as Dayjs\n )\n }\n if (isString(value)) {\n const dayjsValue = defaultFormat?.value\n ? dayjs(value)\n : dayjs(value, format)\n if (!dayjsValue.isValid()) {\n // return directly if not valid\n return dayjsValue\n }\n }\n return dayjs(value, format).locale(lang)\n}\n"],"mappings":"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"}