UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 11.6 kB
{"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":";;;;AAWO,MAAM,YAAA,GAAe,CAAC,KAAA,KAA6B;AACxD,EAAA,IAAI,CAAC,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AAE5B,EAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA;AAEtB,EAAA,OACE,KAAA,CAAM,QAAQ,IAAI,CAAA,IAClB,MAAM,OAAA,CAAQ,KAAK,KACnB,KAAA,CAAM,IAAI,EAAE,OAAA,EAAQ,IACpB,MAAM,KAAK,CAAA,CAAE,SAAQ,IACrB,IAAA,CAAK,eAAe,KAAK,CAAA;AAE7B;AAWO,MAAM,eAAA,GAAkB,CAC7B,YAAA,EACA,EAAE,MAAM,IAAA,GAAO,CAAA,EAAG,IAAA,EAAM,YAAA,EAAa,KAClC;AACH,EAAA,IAAI,KAAA;AAEJ,EAAA,IAAI,OAAA,CAAQ,YAAY,CAAA,EAAG;AACzB,IAAA,IAAI,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,IAAI,CAAC,CAAA;AACjE,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAAA,IAC7B;AACA,IAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAAA,EACrB,WAAW,YAAA,EAAc;AACvB,IAAA,KAAA,GAAQ,MAAM,YAAY,CAAA;AAAA,EAC5B,CAAA,MAAO;AACL,IAAA,KAAA,GAAQ,KAAA,EAAM;AAAA,EAChB;AACA,EAAA,KAAA,GAAQ,KAAA,CAAM,OAAO,IAAI,CAAA;AACzB,EAAA,OAAO,CAAC,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,IAAI,CAAC,CAAA;AACtC;AAqBO,MAAM,gBAAA,GAAmB,CAC9B,SAAA,EACA,IAAA,EACA;AAAA,EACE,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KACG;AACH,EAAA,KAAA,IAAS,QAAA,GAAW,CAAA,EAAG,QAAA,GAAW,SAAA,CAAU,KAAK,QAAA,EAAA,EAAY;AAC3D,IAAA,MAAM,GAAA,GAAM,KAAK,QAAQ,CAAA;AACzB,IAAA,KAAA,IAAS,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,SAAA,CAAU,QAAQ,WAAA,EAAA,EAAe;AACvE,MAAA,IAAI,IAAA,GAAO,GAAA,CAAI,WAAA,GAAc,iBAAiB,CAAA;AAC9C,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,GAAO;AAAA,UACL,GAAA,EAAK,QAAA;AAAA,UACL,MAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO,KAAA;AAAA,UACP,GAAA,EAAK;AAAA,SACP;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,QAAA,GAAW,SAAA,CAAU,MAAA,GAAS,WAAA;AAC5C,MAAA,MAAM,aAAA,GAAgB,mBAAmB,KAAK,CAAA;AAC9C,MAAA,IAAA,CAAK,KAAA,GAAQ,aAAA;AACb,MAAA,IAAA,CAAK,IAAA,GAAO,cAAc,MAAA,EAAO;AACjC,MAAA,IAAA,CAAK,SAAA,GAAY,cAAc,OAAA,EAAQ;AACvC,MAAA,IAAA,CAAK,IAAA,GAAO,QAAA;AAEZ,MAAA,IAAA,CAAK,OAAA,GACH,CAAC,EACC,SAAA,IACA,aAAA,CAAc,aAAA,CAAc,SAAA,EAAW,IAAI,CAAA,IAC3C,WAAA,IACA,aAAA,CAAc,cAAA,CAAe,WAAA,EAAa,IAAI,CAAA,CAAA,IAEhD,CAAC,EACC,SAAA,IACA,aAAA,CAAc,cAAA,CAAe,SAAA,EAAW,IAAI,CAAA,IAC5C,WAAA,IACA,aAAA,CAAc,aAAA,CAAc,WAAA,EAAa,IAAI,CAAA,CAAA;AAGjD,MAAA,IAAI,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,cAAc,WAAA,CAAA,EAAc;AACzC,QAAA,IAAA,CAAK,QAAQ,CAAC,CAAC,eAAe,aAAA,CAAc,MAAA,CAAO,aAAa,IAAI,CAAA;AACpE,QAAA,IAAA,CAAK,GAAA,GAAM,SAAA,IAAa,aAAA,CAAc,MAAA,CAAO,WAAW,IAAI,CAAA;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,QAAQ,CAAC,CAAC,aAAa,aAAA,CAAc,MAAA,CAAO,WAAW,IAAI,CAAA;AAChE,QAAA,IAAA,CAAK,MAAM,CAAC,CAAC,eAAe,aAAA,CAAc,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,MACpE;AAEA,MAAA,MAAM,OAAA,GAAU,aAAA,CAAc,MAAA,CAAO,GAAA,EAAK,IAAI,CAAA;AAE9C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,IAAA,CAAK,IAAA,GAAO,OAAA;AAAA,MACd;AACA,MAAA,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAkB,IAAA,EAAM,EAAE,QAAA,EAAU,WAAA,EAAY,CAAA;AAChD,MAAA,GAAA,CAAI,WAAA,GAAc,iBAAiB,CAAA,GAAI,IAAA;AAAA,IACzC;AACA,IAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAiB,GAAA,CAAA;AAAA,EACnB;AACF;AAEO,MAAM,YAAA,GAAe,CAC1B,IAAA,EACA,IAAA,EACA,OACA,IAAA,KACG;AACH,EAAA,MAAM,QAAA,GAAW,KAAA,EAAM,CACpB,MAAA,CAAO,IAAI,CAAA,CACX,OAAA,CAAQ,OAAO,CAAA,CACf,KAAA,CAAM,KAAK,CAAA,CACX,IAAA,CAAK,IAAI,CAAA,CACT,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,CAAA,CAChB,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,CAAA,CACpB,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,CAAA;AAEvB,EAAA,MAAM,SAAA,GAAY,SAAS,WAAA,EAAY;AACvC,EAAA,OAAO,QAAA,CAAS,SAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA,CAAS,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,CAAE,MAAA,EAAQ,CAAA;AACvE;AAEO,MAAM,sBAAsB,CACjC,IAAA,EACA,IAAA,EACA,KAAA,EACA,MACA,YAAA,KACG;AACH,EAAA,MAAM,MAAA,GAAS,KAAA,EAAM,CAClB,IAAA,CAAK,IAAI,EACT,KAAA,CAAM,KAAK,CAAA,CACX,OAAA,CAAQ,OAAO,CAAA,CACf,KAAK,IAAA,CAAK,IAAA,EAAM,CAAA,CAChB,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,CAAA,CACpB,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,CAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,aAAa,IAAA,EAAM,IAAA,EAAM,OAAO,IAAI,CAAA,CAAE,IAAA,CAAK,CAACA,KAAAA,KAAS;AACjE,IAAA,OAAO,EAAC,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAeA,KAAAA,CAAAA,CAAAA;AAAA,EACzB,CAAC,CAAA;AACD,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA,CAAO,OAAO,IAAI,CAAA;AAC3B;AAEO,MAAM,kBAAA,GAAqB,CAChC,KAAA,EACA,IAAA,EACA,YAAA,KACG;AACH,EAAA,MAAM,IAAA,GAAO,MAAM,IAAA,EAAK;AACxB,EAAA,IAAI,EAAC,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,KAAA,CAAM,MAAA,EAAO,CAAA,CAAA,EAAI;AACnC,IAAA,OAAO,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA,EAC1B;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,EAAM;AAC1B,EAAA,IAAI,CAAC,aAAa,KAAA,EAAO,IAAA,EAAM,OAAO,IAAI,CAAA,CAAE,KAAA,CAAM,YAAY,CAAA,EAAG;AAC/D,IAAA,OAAO,mBAAA,CAAoB,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAM,YAAY,CAAA;AAAA,EACnE;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,aAAa,KAAA,EAAO,IAAA,EAAM,GAAG,IAAI,CAAA,CAAE,KAAA,CAAM,YAAY,CAAA,EAAG;AAC3D,MAAA,OAAO,mBAAA,CAAoB,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG,MAAM,YAAY,CAAA;AAAA,IAC/D;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEO,MAAM,uBAAA,GAA0B,CACrC,KAAA,EACA,MAAA,EACA,MACA,aAAA,KACoB;AACpB,EAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG;AAClB,IAAA,OAAO,KAAA,CAAM,GAAA;AAAA,MACX,CAAC,CAAA,KAAM,uBAAA,CAAwB,CAAA,EAAG,MAAA,EAAQ,MAAM,aAAa;AAAA,KAC/D;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,IAAA,MAAM,UAAA,GAAA,CAAa,+CAAe,KAAA,IAC9B,KAAA,CAAM,KAAK,CAAA,GACX,KAAA,CAAM,OAAO,MAAM,CAAA;AACvB,IAAA,IAAI,CAAC,UAAA,CAAW,OAAA,EAAQ,EAAG;AAEzB,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA,CAAE,OAAO,IAAI,CAAA;AACzC;;;;"}