UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 4.51 kB
{"version":3,"file":"useDisableDate.mjs","sources":["../../../src/date-picker/hooks/useDisableDate.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport isArray from 'lodash/isArray';\nimport isFunction from 'lodash/isFunction';\nimport isObject from 'lodash/isObject';\n\nimport type { TdDatePickerProps, TdDateRangePickerProps } from '../type';\n\nexport interface disableDateProps {\n disableDate?: TdDatePickerProps['disableDate'] | TdDateRangePickerProps['disableDate'];\n format?: TdDatePickerProps['format'];\n mode?: TdDatePickerProps['mode'];\n start?: Date;\n end?: Date;\n}\n\nexport default function useDisableDate(props: disableDateProps) {\n return {\n disableDate: (value: Date) =>\n !isEnabled({ disableDate: props.disableDate, format: props.format, mode: props.mode, value }),\n minDate:\n isObject(props.disableDate) && 'before' in props.disableDate ? new Date(props.disableDate.before) : props.start,\n maxDate:\n isObject(props.disableDate) && 'after' in props.disableDate ? new Date(props.disableDate.after) : props.end,\n };\n}\n\nfunction isEnabled(props: any): boolean {\n if (!props.disableDate) return true;\n\n let isEnabled = true;\n // 值类型为 Function 则表示返回值为 true 的日期会被禁用\n if (isFunction(props.disableDate)) {\n return !props.disableDate(props.value);\n }\n\n // 禁用日期,示例:['A', 'B'] 表示日期 A 和日期 B 会被禁用。\n if (isArray(props.disableDate)) {\n let isIncludes = false;\n const formatedDisabledDate = props.disableDate.map((item: string) => dayjs(item, props.format));\n formatedDisabledDate.forEach((item: any) => {\n if (item.isSame(dayjs(props.value))) {\n isIncludes = true;\n }\n });\n return !isIncludes;\n }\n\n // { from: 'A', to: 'B' } 表示在 A 到 B 之间的日期会被禁用。\n if (props.disableDate.from && props.disableDate.to) {\n const compareMin = dayjs(new Date(props.disableDate.from));\n const compareMax = dayjs(new Date(props.disableDate.to));\n\n return !dayjs(props.value).isBetween(compareMin, compareMax, props.mode, '[]');\n }\n\n const min = props.disableDate.before ? new Date(props.disableDate.before) : null;\n const max = props.disableDate.after ? new Date(props.disableDate.after) : null;\n\n // { before: 'A', after: 'B' } 表示在 A 之前和在 B 之后的日期都会被禁用。\n if (max && min) {\n const compareMin = dayjs(new Date(min));\n const compareMax = dayjs(new Date(max));\n\n isEnabled = dayjs(props.value).isBetween(compareMin, compareMax, props.mode, '[]');\n } else if (min) {\n const compareMin = dayjs(new Date(min));\n isEnabled = !dayjs(props.value).isBefore(compareMin, props.mode);\n } else if (max) {\n const compareMax = dayjs(new Date(max));\n isEnabled = !dayjs(props.value).isAfter(compareMax, props.mode);\n }\n return isEnabled;\n}\n"],"names":["value","isFunction","isArray","formatedDisabledDate","isIncludes","isEnabled"],"mappings":";;;;;;;;;;;;;;AAeA,SAAA,cAAA,CAAA,KAAA,EAAA;;;;;;;AAG2FA,QAAAA,KAAAA,EAAAA,KAAAA;AAAM,OAAA,CAAA,CAAA;AAAC,KAAA;;;;AAMlG,CAAA;AAEA,SAAA,SAAA,CAAA,KAAA,EAAA;AACE,EAAA,IAAA,CAAA,KAAA,CAAA,WAAA,EAAA,OAAA,IAAA,CAAA;;AAII,EAAA,IAAAC,YAAA,CAAA,KAAA,CAAA,WAAA,CAAA,EAAA;;AAEJ,GAAA;AAGI,EAAA,IAAAC,SAAA,CAAA,KAAA,CAAA,WAAA,CAAA,EAAA;;;;;AAGmBC,IAAAA,oBAAAA,CAAAA,OAAAA,CAAAA,UAAAA,IAAAA,EAAAA;;AAEJC,QAAAA,UAAAA,GAAAA,IAAAA,CAAAA;AACf,OAAA;AACF,KAAA,CAAA,CAAA;AACA,IAAA,OAAA,CAAA,UAAA,CAAA;AACF,GAAA;;AAIE,IAAA,IAAA,UAAA,GAAA,KAAA,CAAA,IAAA,IAAA,CAAA,KAAA,CAAA,WAAA,CAAA,IAAA,CAAA,CAAA,CAAA;AACA,IAAA,IAAA,UAAA,GAAA,KAAA,CAAA,IAAA,IAAA,CAAA,KAAA,CAAA,WAAA,CAAA,EAAA,CAAA,CAAA,CAAA;AAEO,IAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,SAAA,CAAA,UAAA,EAAA,UAAA,EAAA,KAAA,CAAA,IAAA,EAAA,IAAA,CAAA,CAAA;AACT,GAAA;AAEM,EAAA,IAAA,GAAA,GAAA,KAAA,CAAA,WAAA,CAAA,MAAA,GAAA,IAAA,IAAA,CAAA,KAAA,CAAA,WAAA,CAAA,MAAA,CAAA,GAAA,IAAA,CAAA;AACA,EAAA,IAAA,GAAA,GAAA,KAAA,CAAA,WAAA,CAAA,KAAA,GAAA,IAAA,IAAA,CAAA,KAAA,CAAA,WAAA,CAAA,KAAA,CAAA,GAAA,IAAA,CAAA;;;;AAOJC,IAAAA,UAAAA,GAAAA,KAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,CAAAA,SAAAA,CAAAA,WAAAA,EAAAA,WAAAA,EAAAA,KAAAA,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA;;;AAGAA,IAAAA,UAAAA,GAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,CAAAA,QAAAA,CAAAA,YAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,CAAAA;;;AAGAA,IAAAA,UAAAA,GAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,KAAAA,CAAAA,CAAAA,OAAAA,CAAAA,YAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,CAAAA;AACF,GAAA;AACOA,EAAAA,OAAAA,UAAAA,CAAAA;AACT;;;;"}