element-plus
Version:
A Component Library for Vue 3
1 lines • 11.9 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","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"],"names":["date"],"mappings":";;;;AAWa,MAAA,YAAA,GAAe,CAAC,KAA6B,KAAA;AACxD,EAAI,IAAA,CAAC,QAAQ,KAAK,CAAA;AAAG,IAAO,OAAA,KAAA,CAAA;AAE5B,EAAM,MAAA,CAAC,IAAM,EAAA,KAAK,CAAI,GAAA,KAAA,CAAA;AAEtB,EACE,OAAA,KAAA,CAAM,QAAQ,IAAI,CAAA,IAClB,MAAM,OAAQ,CAAA,KAAK,KACnB,KAAM,CAAA,IAAI,EAAE,OAAQ,EAAA,IACpB,MAAM,KAAK,CAAA,CAAE,SACb,IAAA,IAAA,CAAK,eAAe,KAAK,CAAA,CAAA;AAE7B,EAAA;AAWa,MAAA,eAAA,GAAkB,CAC7B,YACA,EAAA,EAAE,MAAM,IAAO,GAAA,CAAA,EAAG,IAAM,EAAA,YAAA,EACrB,KAAA;AACH,EAAI,IAAA,KAAA,CAAA;AAEJ,EAAI,IAAA,OAAA,CAAQ,YAAY,CAAG,EAAA;AACzB,IAAA,IAAI,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,YAAa,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,KAAM,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AACjE,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAQ,KAAA,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,KAC7B;AACA,IAAO,OAAA,CAAC,MAAM,KAAK,CAAA,CAAA;AAAA,aACV,YAAc,EAAA;AACvB,IAAA,KAAA,GAAQ,MAAM,YAAY,CAAA,CAAA;AAAA,GACrB,MAAA;AACL,IAAA,KAAA,GAAQ,KAAM,EAAA,CAAA;AAAA,GAChB;AACA,EAAQ,KAAA,GAAA,KAAA,CAAM,OAAO,IAAI,CAAA,CAAA;AACzB,EAAA,OAAO,CAAC,KAAO,EAAA,KAAA,CAAM,GAAI,CAAA,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA;AACtC,EAAA;AAqBa,MAAA,gBAAA,GAAmB,CAC9B,SAAA,EACA,IACA,EAAA;AAAA,EACE,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AACF,CACG,KAAA;AACH,EAAA,KAAA,IAAS,QAAW,GAAA,CAAA,EAAG,QAAW,GAAA,SAAA,CAAU,KAAK,QAAY,EAAA,EAAA;AAC3D,IAAA,MAAM,MAAM,IAAK,CAAA,QAAA,CAAA,CAAA;AACjB,IAAA,KAAA,IAAS,WAAc,GAAA,CAAA,EAAG,WAAc,GAAA,SAAA,CAAU,QAAQ,WAAe,EAAA,EAAA;AACvE,MAAI,IAAA,IAAA,GAAO,IAAI,WAAc,GAAA,iBAAA,CAAA,CAAA;AAC7B,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAO,IAAA,GAAA;AAAA,UACL,GAAK,EAAA,QAAA;AAAA,UACL,MAAQ,EAAA,WAAA;AAAA,UACR,IAAM,EAAA,QAAA;AAAA,UACN,OAAS,EAAA,KAAA;AAAA,UACT,KAAO,EAAA,KAAA;AAAA,UACP,GAAK,EAAA,KAAA;AAAA,SACP,CAAA;AAAA,OACF;AACA,MAAM,MAAA,KAAA,GAAQ,QAAW,GAAA,SAAA,CAAU,MAAS,GAAA,WAAA,CAAA;AAC5C,MAAM,MAAA,aAAA,GAAgB,mBAAmB,KAAK,CAAA,CAAA;AAC9C,MAAA,IAAA,CAAK,KAAQ,GAAA,aAAA,CAAA;AACb,MAAK,IAAA,CAAA,IAAA,GAAO,cAAc,MAAO,EAAA,CAAA;AACjC,MAAK,IAAA,CAAA,SAAA,GAAY,cAAc,OAAQ,EAAA,CAAA;AACvC,MAAA,IAAA,CAAK,IAAO,GAAA,QAAA,CAAA;AAEZ,MAAK,IAAA,CAAA,OAAA,GACH,CAAC,EACC,SACA,IAAA,aAAA,CAAc,aAAc,CAAA,SAAA,EAAW,IAAI,CAAA,IAC3C,WACA,IAAA,aAAA,CAAc,cAAe,CAAA,WAAA,EAAa,IAAI,CAAA,CAAA,IAEhD,CAAC,EACC,SACA,IAAA,aAAA,CAAc,cAAe,CAAA,SAAA,EAAW,IAAI,CAAA,IAC5C,WACA,IAAA,aAAA,CAAc,aAAc,CAAA,WAAA,EAAa,IAAI,CAAA,CAAA,CAAA;AAGjD,MAAI,IAAA,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,cAAc,WAAc,CAAA,EAAA;AACzC,QAAA,IAAA,CAAK,QAAQ,CAAC,CAAC,eAAe,aAAc,CAAA,MAAA,CAAO,aAAa,IAAI,CAAA,CAAA;AACpE,QAAA,IAAA,CAAK,GAAM,GAAA,SAAA,IAAa,aAAc,CAAA,MAAA,CAAO,WAAW,IAAI,CAAA,CAAA;AAAA,OACvD,MAAA;AACL,QAAA,IAAA,CAAK,QAAQ,CAAC,CAAC,aAAa,aAAc,CAAA,MAAA,CAAO,WAAW,IAAI,CAAA,CAAA;AAChE,QAAA,IAAA,CAAK,MAAM,CAAC,CAAC,eAAe,aAAc,CAAA,MAAA,CAAO,aAAa,IAAI,CAAA,CAAA;AAAA,OACpE;AAEA,MAAA,MAAM,OAAU,GAAA,aAAA,CAAc,MAAO,CAAA,GAAA,EAAK,IAAI,CAAA,CAAA;AAE9C,MAAA,IAAI,OAAS,EAAA;AACX,QAAA,IAAA,CAAK,IAAO,GAAA,OAAA,CAAA;AAAA,OACd;AACA,MAAkB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,IAAA,EAAM,EAAE,QAAA,EAAU,WAAY,EAAA,CAAA,CAAA;AAChD,MAAA,GAAA,CAAI,cAAc,iBAAqB,CAAA,GAAA,IAAA,CAAA;AAAA,KACzC;AACA,IAAiB,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,GAAA,CAAA,CAAA;AAAA,GACnB;AACF,EAAA;AAEO,MAAM,YAAe,GAAA,CAC1B,IACA,EAAA,IAAA,EACA,OACA,IACG,KAAA;AACH,EAAA,MAAM,QAAW,GAAA,KAAA,EACd,CAAA,MAAA,CAAO,IAAI,CAAA,CACX,OAAQ,CAAA,OAAO,CACf,CAAA,KAAA,CAAM,KAAK,CAAA,CACX,IAAK,CAAA,IAAI,CACT,CAAA,IAAA,CAAK,IAAK,CAAA,IAAA,EAAM,CAAA,CAChB,MAAO,CAAA,IAAA,CAAK,MAAO,EAAC,CACpB,CAAA,MAAA,CAAO,IAAK,CAAA,MAAA,EAAQ,CAAA,CAAA;AAEvB,EAAM,MAAA,SAAA,GAAY,SAAS,WAAY,EAAA,CAAA;AACvC,EAAA,OAAO,QAAS,CAAA,SAAS,CAAE,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,QAAS,CAAA,GAAA,CAAI,CAAG,EAAA,KAAK,CAAE,CAAA,MAAA,EAAQ,CAAA,CAAA;AACvE,EAAA;AAEO,MAAM,sBAAsB,CACjC,IAAA,EACA,IACA,EAAA,KAAA,EACA,MACA,YACG,KAAA;AACH,EAAM,MAAA,MAAA,GAAS,KAAM,EAAA,CAClB,IAAK,CAAA,IAAI,EACT,KAAM,CAAA,KAAK,CACX,CAAA,OAAA,CAAQ,OAAO,CAAA,CACf,KAAK,IAAK,CAAA,IAAA,EAAM,CAAA,CAChB,MAAO,CAAA,IAAA,CAAK,MAAO,EAAC,CACpB,CAAA,MAAA,CAAO,IAAK,CAAA,MAAA,EAAQ,CAAA,CAAA;AACvB,EAAM,MAAA,KAAA,GAAQ,aAAa,IAAM,EAAA,IAAA,EAAM,OAAO,IAAI,CAAA,CAAE,IAAK,CAAA,CAACA,KAAS,KAAA;AACjE,IAAA,OAAO,EAAC,YAAeA,IAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,YAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA;AAAA,GACxB,CAAA,CAAA;AACD,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,OAAO,KAAM,CAAA,KAAK,CAAE,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,GACjC;AACA,EAAO,OAAA,MAAA,CAAO,OAAO,IAAI,CAAA,CAAA;AAC3B,EAAA;AAEO,MAAM,kBAAqB,GAAA,CAChC,KACA,EAAA,IAAA,EACA,YACG,KAAA;AACH,EAAM,MAAA,IAAA,GAAO,MAAM,IAAK,EAAA,CAAA;AACxB,EAAA,IAAI,EAAC,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAe,KAAM,CAAA,MAAA,EAAW,CAAA,CAAA,EAAA;AACnC,IAAO,OAAA,KAAA,CAAM,OAAO,IAAI,CAAA,CAAA;AAAA,GAC1B;AACA,EAAM,MAAA,KAAA,GAAQ,MAAM,KAAM,EAAA,CAAA;AAC1B,EAAI,IAAA,CAAC,aAAa,KAAO,EAAA,IAAA,EAAM,OAAO,IAAI,CAAA,CAAE,KAAM,CAAA,YAAY,CAAG,EAAA;AAC/D,IAAA,OAAO,mBAAoB,CAAA,KAAA,EAAO,IAAM,EAAA,KAAA,EAAO,MAAM,YAAY,CAAA,CAAA;AAAA,GACnE;AACA,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,EAAA,EAAI,CAAK,EAAA,EAAA;AAC3B,IAAI,IAAA,CAAC,aAAa,KAAO,EAAA,IAAA,EAAM,GAAG,IAAI,CAAA,CAAE,KAAM,CAAA,YAAY,CAAG,EAAA;AAC3D,MAAA,OAAO,mBAAoB,CAAA,KAAA,EAAO,IAAM,EAAA,CAAA,EAAG,MAAM,YAAY,CAAA,CAAA;AAAA,KAC/D;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,EAAA;AAEO,MAAM,uBAA0B,GAAA,CACrC,KACA,EAAA,MAAA,EACA,MACA,aACoB,KAAA;AACpB,EAAI,IAAA,OAAA,CAAQ,KAAK,CAAG,EAAA;AAClB,IAAA,OAAO,KAAM,CAAA,GAAA;AAAA,MACX,CAAC,CAAM,KAAA,uBAAA,CAAwB,CAAG,EAAA,MAAA,EAAQ,MAAM,aAAa,CAAA;AAAA,KAC/D,CAAA;AAAA,GACF;AACA,EAAI,IAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACnB,IAAM,MAAA,UAAA,GAAA,CAAa,+CAAe,KAC9B,IAAA,KAAA,CAAM,KAAK,CACX,GAAA,KAAA,CAAM,OAAO,MAAM,CAAA,CAAA;AACvB,IAAI,IAAA,CAAC,UAAW,CAAA,OAAA,EAAW,EAAA;AAEzB,MAAO,OAAA,UAAA,CAAA;AAAA,KACT;AAAA,GACF;AACA,EAAA,OAAO,KAAM,CAAA,KAAA,EAAO,MAAM,CAAA,CAAE,OAAO,IAAI,CAAA,CAAA;AACzC;;;;"}