{"version":3,"file":"useRange.mjs","sources":["../../../src/date-picker/hooks/useRange.tsx"],"sourcesContent":["import { ref, computed, watch } from 'vue';\n\nimport { useTNodeJSX } from '../../hooks/tnode';\nimport { usePrefixClass, useConfig } from '../../hooks/useConfig';\n\nimport { TdDateRangePickerProps, DateValue } from '../type';\nimport { isValidDate, formatDate, getDefaultFormat, parseToDayjs } from '../../_common/js/date-picker/format';\nimport useRangeValue from './useRangeValue';\n\nexport const PARTIAL_MAP = { first: 'start', second: 'end' };\n\nexport default function useRange(props: TdDateRangePickerProps) {\n  const COMPONENT_NAME = usePrefixClass('date-range-picker');\n  const { globalConfig } = useConfig('datePicker');\n  const renderTNodeJSX = useTNodeJSX();\n\n  const isMountedRef = ref(false);\n  const inputRef = ref();\n\n  const { value, onChange, time, month, year, cacheValue, isFirstValueSelected } = useRangeValue(props);\n\n  const formatRef = computed(() =>\n    getDefaultFormat({\n      mode: props.mode,\n      format: props.format,\n      valueType: props.valueType,\n      enableTimePicker: props.enableTimePicker,\n    }),\n  );\n\n  const popupVisible = ref(false);\n  const isHoverCell = ref(false);\n  const activeIndex = ref(0); // 确定当前选中的输入框序号\n  const inputValue = ref(formatDate(props.value, { format: formatRef.value.format })); // 未真正选中前可能不断变更输入框的内容\n\n  // input 设置\n  const rangeInputProps = computed(() => ({\n    ...props.rangeInputProps,\n    size: props.size,\n    ref: inputRef,\n    clearable: props.clearable,\n    prefixIcon: () => renderTNodeJSX('prefixIcon'),\n    readonly: !props.allowInput,\n    separator: props.separator || globalConfig.value.rangeSeparator,\n    placeholder: props.placeholder || globalConfig.value.placeholder[props.mode],\n    activeIndex: popupVisible.value ? activeIndex.value : undefined,\n    suffixIcon: () => {\n      return renderTNodeJSX('suffixIcon') || <icon-ri-calendar-line />;\n    },\n    class: {\n      [`${COMPONENT_NAME.value}__input--placeholder`]: isHoverCell.value,\n    },\n    onClick: ({ position }: any) => {\n      activeIndex.value = position === 'first' ? 0 : 1;\n    },\n    onClear: ({ e }: { e: MouseEvent }) => {\n      e.stopPropagation();\n      popupVisible.value = false;\n      onChange?.([], { dayjsValue: [], trigger: 'clear' });\n    },\n    onBlur: (newVal: string[], { e, position }: any) => {\n      props.onBlur?.({ value: newVal, partial: PARTIAL_MAP[position], e });\n    },\n    onFocus: (newVal: string[], { e, position }: any) => {\n      props.onFocus?.({ value: newVal, partial: PARTIAL_MAP[position], e });\n      activeIndex.value = position === 'first' ? 0 : 1;\n    },\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    onChange: (newVal: string[], { e, position }: any) => {\n      inputValue.value = newVal;\n\n      // 跳过不符合格式化的输入框内容\n      if (!isValidDate(newVal, formatRef.value.format)) return;\n      cacheValue.value = newVal;\n      const newYear: Array<number> = [];\n      const newMonth: Array<number> = [];\n      const newTime: Array<string> = [];\n      newVal.forEach((v) => {\n        newYear.push(parseToDayjs(v, formatRef.value.format).year());\n        newMonth.push(parseToDayjs(v, formatRef.value.format).month());\n        newTime.push(parseToDayjs(v, formatRef.value.format).format(formatRef.value.timeFormat));\n      });\n      year.value = newYear;\n      month.value = newMonth;\n      time.value = newTime;\n    },\n    onEnter: (newVal: string[]) => {\n      if (!isValidDate(newVal, formatRef.value.format) && !isValidDate(value.value, formatRef.value.format)) return;\n\n      popupVisible.value = false;\n      if (isValidDate(newVal, formatRef.value.format)) {\n        onChange?.(\n          formatDate(newVal, {\n            format: formatRef.value.format,\n            targetFormat: formatRef.value.valueType,\n            autoSwap: true,\n          }) as DateValue[],\n          {\n            dayjsValue: newVal.map((v) => parseToDayjs(v, formatRef.value.format)),\n            trigger: 'enter',\n          },\n        );\n      } else if (isValidDate(value.value, formatRef.value.format)) {\n        inputValue.value = formatDate(value.value, {\n          format: formatRef.value.format,\n        });\n      } else {\n        inputValue.value = [];\n      }\n    },\n  }));\n\n  // popup 设置\n  const popupProps = computed(() => ({\n    expandAnimation: true,\n    ...props.popupProps,\n    overlayInnerStyle: props.popupProps?.overlayInnerStyle ?? { width: 'auto' },\n    overlayClassName: [props.popupProps?.overlayClassName, `${COMPONENT_NAME.value}__panel-container`],\n    onVisibleChange: (visible: boolean, context: any) => {\n      // 这里劫持了进一步向 popup 传递的 onVisibleChange 事件，为了保证可以在 Datepicker 中使用 popupProps.onVisibleChange，故此处理\n      props.popupProps?.onVisibleChange?.(visible, context);\n      // 输入框点击不关闭面板\n      if (context.trigger === 'trigger-element-click') {\n        const indexMap = { 0: 'first', 1: 'second' };\n        inputRef.value.focus({ position: indexMap[activeIndex.value] });\n        popupVisible.value = true;\n        return;\n      }\n\n      popupVisible.value = visible;\n    },\n  }));\n\n  // 输入框响应 value 变化\n  watch(\n    value,\n    (value) => {\n      if (!value) {\n        inputValue.value = [];\n        return;\n      }\n      if (!isValidDate(value, formatRef.value.format)) return;\n\n      inputValue.value = formatDate(value, {\n        format: formatRef.value.format,\n      });\n    },\n    {\n      immediate: true,\n    },\n  );\n\n  // activeIndex 变化自动 focus 对应输入框\n  watch(\n    activeIndex,\n    (index) => {\n      if (!isMountedRef.value) {\n        isMountedRef.value = true;\n        return;\n      }\n      if (!popupVisible.value) return;\n      const indexMap = { 0: 'first', 1: 'second' };\n      inputRef.value?.focus?.({ position: indexMap[index] });\n    },\n    {\n      immediate: true,\n    },\n  );\n\n  return {\n    year,\n    month,\n    value,\n    time,\n    inputValue,\n    popupVisible,\n    rangeInputProps,\n    popupProps,\n    isHoverCell,\n    activeIndex,\n    isFirstValueSelected,\n    cacheValue,\n    onChange,\n  };\n}\n"],"names":["first","second","format","ref","readonly","placeholder","_resolveComponent","onClick","onClear","onChange","dayjsValue","trigger","onBlur","value","partial","e","onFocus","newVal","newYear","newMonth","onEnter","targetFormat","autoSwap","expandAnimation","overlayInnerStyle","width","overlayClassName","onVisibleChange","inputRef","position","watch","inputValue","immediate","year","month","time","popupVisible","rangeInputProps","popupProps","isHoverCell","activeIndex","isFirstValueSelected","cacheValue"],"mappings":"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"}