element-plus
Version:
A Component Library for Vue 3
1 lines • 9.01 kB
Source Map (JSON)
{"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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"}