xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 10.3 kB
Source Map (JSON)
{"version":3,"file":"useSingle.mjs","sources":["../../../src/date-picker/hooks/useSingle.tsx"],"sourcesContent":["import { ref, computed, watch } from 'vue';\nimport dayjs from 'dayjs';\n\nimport { useTNodeJSX } from '../../hooks/tnode';\nimport { useFormDisabled } from '../../form/hooks';\nimport { usePrefixClass, useConfig } from '../../hooks/useConfig';\nimport { TdDatePickerProps, DateValue } from '../type';\nimport {\n isValidDate,\n formatDate,\n formatTime,\n getDefaultFormat,\n parseToDayjs,\n} from '../../_common/js/date-picker/format';\nimport useSingleValue from './useSingleValue';\n\nexport default function useSingle(props: TdDatePickerProps) {\n const COMPONENT_NAME = usePrefixClass('date-picker');\n const { globalConfig } = useConfig('datePicker');\n const disabled = useFormDisabled();\n const renderTNodeJSX = useTNodeJSX();\n\n const inputRef = ref();\n\n const { value, onChange, time, month, year, cacheValue } = useSingleValue(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 // 未真正选中前可能不断变更输入框的内容\n const inputValue = ref(formatDate(value.value, { format: formatRef.value.format }));\n\n // input 设置\n const inputProps = computed(() => ({\n ...props.inputProps,\n size: props.size,\n ref: inputRef,\n prefixIcon: props.prefixIcon && (() => renderTNodeJSX('prefixIcon')),\n readonly: !props.allowInput,\n placeholder: props.placeholder || globalConfig.value.placeholder[props.mode],\n suffixIcon: () => {\n return renderTNodeJSX('suffixIcon') || <icon-ri-calendar-line />;\n },\n class: [\n {\n [`${COMPONENT_NAME.value}__input--placeholder`]: isHoverCell.value,\n },\n ],\n onClear: (context: { e: InputEvent }) => {\n context?.e?.stopPropagation();\n popupVisible.value = false;\n onChange?.('', { dayjsValue: dayjs(), trigger: 'clear' });\n },\n onBlur: (val: string, context: { e: FocusEvent }) => {\n props.onBlur?.({ value: val, e: context.e });\n },\n onFocus: (_: string, { e }: { e: FocusEvent }) => {\n props.onFocus?.({ value: value.value, e });\n },\n onChange: (val: string) => {\n // 输入事件\n inputValue.value = val;\n\n // 跳过不符合格式化的输入框内容\n if (!isValidDate(val, formatRef.value.format)) return;\n cacheValue.value = val;\n const newMonth = parseToDayjs(val, formatRef.value.format).month();\n const newYear = parseToDayjs(val, formatRef.value.format).year();\n const newTime = formatTime(val, formatRef.value.format, formatRef.value.timeFormat, props.defaultTime);\n !Number.isNaN(newYear) && (year.value = newYear);\n !Number.isNaN(newMonth) && (month.value = newMonth);\n !Number.isNaN(newTime) && (time.value = newTime);\n },\n onEnter: (val: string) => {\n if (!val) {\n onChange('', { dayjsValue: dayjs(), trigger: 'enter' });\n popupVisible.value = false;\n return;\n }\n\n if (!isValidDate(val, formatRef.value.format) && !isValidDate(value.value, formatRef.value.format)) return;\n\n popupVisible.value = false;\n if (isValidDate(val, formatRef.value.format)) {\n onChange?.(\n formatDate(val, { format: formatRef.value.format, targetFormat: formatRef.value.valueType }) as DateValue,\n {\n dayjsValue: parseToDayjs(val, 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 disabled: disabled.value,\n overlayInnerStyle: props.popupProps?.overlayInnerStyle ?? { width: 'auto' },\n overlayClassName: [props.popupProps?.overlayClassName, `${COMPONENT_NAME.value}__panel-container`],\n onVisibleChange: (visible: boolean, context: any) => {\n if (disabled.value) return;\n // 这里劫持了进一步向 popup 传递的 onVisibleChange 事件,为了保证可以在 Datepicker 中使用 popupProps.onVisibleChange,故此处理\n props.popupProps?.onVisibleChange?.(visible, context);\n // 输入框点击不关闭面板\n if (context.trigger === 'trigger-element-click') {\n popupVisible.value = true;\n return;\n }\n popupVisible.value = visible;\n },\n }));\n\n watch(value, (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 return {\n year,\n month,\n value,\n time,\n inputValue,\n popupVisible,\n inputProps,\n popupProps,\n inputRef,\n cacheValue,\n isHoverCell,\n onChange,\n };\n}\n"],"names":["format","ref","prefixIcon","readonly","placeholder","_resolveComponent","onClear","context","onChange","trigger","onBlur","value","onFocus","e","onEnter","targetFormat","expandAnimation","overlayInnerStyle","width","overlayClassName","onVisibleChange","watch","inputValue","year","month","time","popupVisible","inputProps","popupProps","inputRef","cacheValue","isHoverCell"],"mappings":"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"}