{"version":3,"file":"use-date-table.mjs","sources":["../../../../../../../packages/components/calendar/src/use-date-table.ts"],"sourcesContent":["import { computed } from 'vue'\nimport dayjs from 'dayjs'\nimport localeData from 'dayjs/plugin/localeData.js'\nimport { useLocale } from '@hd-front-end/hooks'\nimport { rangeArr } from '@hd-front-end/components/time-picker'\nimport { WEEK_DAYS } from '@hd-front-end/constants'\nimport { getMonthDays, getPrevMonthLastDays, toNestedArr } from './date-table'\n\nimport type { SetupContext } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type {\n  CalendarDateCell,\n  CalendarDateCellType,\n  DateTableEmits,\n  DateTableProps,\n} from './date-table'\n\nexport const useDateTable = (\n  props: DateTableProps,\n  emit: SetupContext<DateTableEmits>['emit']\n) => {\n  dayjs.extend(localeData)\n  // https://day.js.org/docs/en/i18n/locale-data\n  const firstDayOfWeek: number = dayjs.localeData().firstDayOfWeek()\n\n  const { t, lang } = useLocale()\n  const now = dayjs().locale(lang.value)\n\n  const isInRange = computed(() => !!props.range && !!props.range.length)\n\n  const rows = computed(() => {\n    let days: CalendarDateCell[] = []\n    if (isInRange.value) {\n      const [start, end] = props.range!\n      const currentMonthRange: CalendarDateCell[] = rangeArr(\n        end.date() - start.date() + 1\n      ).map((index) => ({\n        text: start.date() + index,\n        type: 'current',\n      }))\n\n      let remaining = currentMonthRange.length % 7\n      remaining = remaining === 0 ? 0 : 7 - remaining\n      const nextMonthRange: CalendarDateCell[] = rangeArr(remaining).map(\n        (_, index) => ({\n          text: index + 1,\n          type: 'next',\n        })\n      )\n      days = currentMonthRange.concat(nextMonthRange)\n    } else {\n      const firstDay = props.date.startOf('month').day()\n      const prevMonthDays: CalendarDateCell[] = getPrevMonthLastDays(\n        props.date,\n        (firstDay - firstDayOfWeek + 7) % 7\n      ).map((day) => ({\n        text: day,\n        type: 'prev',\n      }))\n      const currentMonthDays: CalendarDateCell[] = getMonthDays(props.date).map(\n        (day) => ({\n          text: day,\n          type: 'current',\n        })\n      )\n      days = [...prevMonthDays, ...currentMonthDays]\n      const remaining = 7 - (days.length % 7 || 7)\n      const nextMonthDays: CalendarDateCell[] = rangeArr(remaining).map(\n        (_, index) => ({\n          text: index + 1,\n          type: 'next',\n        })\n      )\n      days = days.concat(nextMonthDays)\n    }\n    return toNestedArr(days)\n  })\n\n  const weekDays = computed(() => {\n    const start = firstDayOfWeek\n    if (start === 0) {\n      return WEEK_DAYS.map((_) => t(`el.datepicker.weeks.${_}`))\n    } else {\n      return WEEK_DAYS.slice(start)\n        .concat(WEEK_DAYS.slice(0, start))\n        .map((_) => t(`el.datepicker.weeks.${_}`))\n    }\n  })\n\n  const getFormattedDate = (day: number, type: CalendarDateCellType): Dayjs => {\n    switch (type) {\n      case 'prev':\n        return props.date.startOf('month').subtract(1, 'month').date(day)\n      case 'next':\n        return props.date.startOf('month').add(1, 'month').date(day)\n      case 'current':\n        return props.date.date(day)\n    }\n  }\n\n  const handlePickDay = ({ text, type }: CalendarDateCell) => {\n    const date = getFormattedDate(text, type)\n    emit('pick', date)\n  }\n\n  const getSlotData = ({ text, type }: CalendarDateCell) => {\n    const day = getFormattedDate(text, type)\n    return {\n      isSelected: day.isSame(props.selectedDay),\n      type: `${type}-month`,\n      day: day.format('YYYY-MM-DD'),\n      date: day.toDate(),\n    }\n  }\n\n  return {\n    now,\n    isInRange,\n    rows,\n    weekDays,\n    getFormattedDate,\n    handlePickDay,\n    getSlotData,\n  }\n}\n"],"names":[],"mappings":"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"}