{"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;;;;"}