{"version":3,"file":"utils.mjs","sources":["../../../../../../../packages/components/date-picker-panel/src/utils.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport { isArray, isString } from '@hd-front-end/utils'\nimport { rangeArr } from '@hd-front-end/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"],"names":["date"],"mappings":"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"}