UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 5.7 kB
{"version":3,"file":"use-date-table.mjs","names":[],"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 '@element-plus/hooks'\nimport { rangeArr } from '@element-plus/components/time-picker'\nimport { WEEK_DAYS } from '@element-plus/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"],"mappings":";;;;;;;;;AAiBA,MAAa,gBACX,OACA,SACG;AACH,OAAM,OAAO,WAAW;CAExB,MAAM,iBAAyB,MAAM,YAAY,CAAC,gBAAgB;CAElE,MAAM,EAAE,GAAG,SAAS,WAAW;CAC/B,MAAM,MAAM,OAAO,CAAC,OAAO,KAAK,MAAM;CAEtC,MAAM,YAAY,eAAe,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,MAAM,MAAM,OAAO;CAEvE,MAAM,OAAO,eAAe;EAC1B,IAAI,OAA2B,EAAE;AACjC,MAAI,UAAU,OAAO;GACnB,MAAM,CAAC,OAAO,OAAO,MAAM;GAC3B,MAAM,oBAAwC,SAC5C,IAAI,MAAM,GAAG,MAAM,MAAM,GAAG,EAC7B,CAAC,KAAK,WAAW;IAChB,MAAM,MAAM,MAAM,GAAG;IACrB,MAAM;IACP,EAAE;GAEH,IAAI,YAAY,kBAAkB,SAAS;AAC3C,eAAY,cAAc,IAAI,IAAI,IAAI;GACtC,MAAM,iBAAqC,SAAS,UAAU,CAAC,KAC5D,GAAG,WAAW;IACb,MAAM,QAAQ;IACd,MAAM;IACP,EACF;AACD,UAAO,kBAAkB,OAAO,eAAe;SAC1C;GACL,MAAM,WAAW,MAAM,KAAK,QAAQ,QAAQ,CAAC,KAAK;GAClD,MAAM,gBAAoC,qBACxC,MAAM,OACL,WAAW,iBAAiB,KAAK,EACnC,CAAC,KAAK,SAAS;IACd,MAAM;IACN,MAAM;IACP,EAAE;GACH,MAAM,mBAAuC,aAAa,MAAM,KAAK,CAAC,KACnE,SAAS;IACR,MAAM;IACN,MAAM;IACP,EACF;AACD,UAAO,CAAC,GAAG,eAAe,GAAG,iBAAiB;GAE9C,MAAM,gBAAoC,SADxB,KAAK,KAAK,SAAS,KAAK,GACmB,CAAC,KAC3D,GAAG,WAAW;IACb,MAAM,QAAQ;IACd,MAAM;IACP,EACF;AACD,UAAO,KAAK,OAAO,cAAc;;AAEnC,SAAO,YAAY,KAAK;GACxB;CAEF,MAAM,WAAW,eAAe;EAC9B,MAAM,QAAQ;AACd,MAAI,UAAU,EACZ,QAAO,UAAU,KAAK,MAAM,EAAE,uBAAuB,IAAI,CAAC;MAE1D,QAAO,UAAU,MAAM,MAAM,CAC1B,OAAO,UAAU,MAAM,GAAG,MAAM,CAAC,CACjC,KAAK,MAAM,EAAE,uBAAuB,IAAI,CAAC;GAE9C;CAEF,MAAM,oBAAoB,KAAa,SAAsC;AAC3E,UAAQ,MAAR;GACE,KAAK,OACH,QAAO,MAAM,KAAK,QAAQ,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,IAAI;GACnE,KAAK,OACH,QAAO,MAAM,KAAK,QAAQ,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,IAAI;GAC9D,KAAK,UACH,QAAO,MAAM,KAAK,KAAK,IAAI;;;CAIjC,MAAM,iBAAiB,EAAE,MAAM,WAA6B;AAE1D,OAAK,QADQ,iBAAiB,MAAM,KAAK,CACvB;;CAGpB,MAAM,eAAe,EAAE,MAAM,WAA6B;EACxD,MAAM,MAAM,iBAAiB,MAAM,KAAK;AACxC,SAAO;GACL,YAAY,IAAI,OAAO,MAAM,YAAY;GACzC,MAAM,GAAG,KAAK;GACd,KAAK,IAAI,OAAO,aAAa;GAC7B,MAAM,IAAI,QAAQ;GACnB;;AAGH,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}