UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 12.5 kB
{"version":3,"file":"time-range-picker.mjs","sources":["../../src/time-picker/time-range-picker.tsx"],"sourcesContent":["import { defineComponent, ref, toRefs, watch, computed } from 'vue';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\nimport { RangeInputPopup, RangeInputPosition } from '../range-input';\nimport TimePickerPanel from './panel/time-picker-panel';\n\nimport { TIME_PICKER_EMPTY } from '../_common/js/time-picker/const';\nimport { formatInputValue, validateInputValue } from '../_common/js/time-picker/utils';\n\n// interfaces\nimport props from './time-range-picker-props';\nimport { TimeRangeValue } from './interface';\nimport { TimeRangePickerPartial } from './type';\n// hooks\nimport useVModel from '../hooks/useVModel';\nimport { useConfig, usePrefixClass } from '../hooks/useConfig';\nimport { useFormDisabled } from '../form/hooks';\n\ndayjs.extend(customParseFormat);\n\nexport default defineComponent({\n name: 'XTimeRangePicker',\n\n props: { ...props, rangeInputProps: Object, popupProps: Object },\n\n setup(props) {\n const componentName = usePrefixClass('time-range-picker');\n const { globalConfig } = useConfig('timePicker');\n const { classPrefix } = useConfig('classPrefix');\n\n const disabled = useFormDisabled();\n const currentPanelIdx = ref(undefined);\n const currentValue = ref<Array<string>>(TIME_PICKER_EMPTY);\n const isShowPanel = ref(false);\n\n const inputClasses = computed(() => [\n `${componentName.value}__group`,\n {\n [`${classPrefix.value}-is-focused`]: isShowPanel.value,\n },\n ]);\n const { value, modelValue, allowInput, format } = toRefs(props);\n const [innerValue, setInnerValue] = useVModel(value, modelValue, props.defaultValue, props.onChange as any);\n\n const handleShowPopup = (visible: boolean, context: any) => {\n // 输入框点击不关闭面板\n if (context.trigger === 'trigger-element-click') {\n isShowPanel.value = true;\n return;\n }\n isShowPanel.value = visible;\n };\n\n const handleClear = (context: { e: MouseEvent }) => {\n const { e } = context;\n e.stopPropagation();\n currentValue.value = TIME_PICKER_EMPTY;\n setInnerValue(null);\n };\n\n const handleClick = ({ position }: { position: 'first' | 'second' }) => {\n currentPanelIdx.value = position === 'first' ? 0 : 1;\n };\n\n const handleTimeChange = (newValue: string, e: MouseEvent) => {\n if (currentPanelIdx.value === 0) {\n currentValue.value = [newValue, currentValue.value[1] ?? newValue];\n } else {\n currentValue.value = [currentValue.value[0] ?? newValue, newValue];\n }\n handleOnPick(newValue, e);\n };\n\n const handleInputBlur = (value: TimeRangeValue, { e }: { e: FocusEvent }) => {\n if (allowInput.value) {\n const isValidTime = validateInputValue(currentValue.value[currentPanelIdx.value], format.value);\n if (isValidTime) {\n const formattedVal = formatInputValue(currentValue.value[currentPanelIdx.value], format.value);\n currentPanelIdx.value === 0\n ? (currentValue.value = [formattedVal, currentValue.value[1] ?? formattedVal])\n : (currentValue.value = [currentValue.value[0] ?? formattedVal, formattedVal]);\n }\n }\n props.onBlur?.({ value, e });\n };\n\n const handleInputChange = (\n inputVal: TimeRangeValue,\n { e, position }: { e: InputEvent; position: RangeInputPosition },\n ) => {\n currentValue.value = inputVal;\n props.onInput?.({ value: innerValue.value, e, position: position === 'first' ? 'start' : 'end' });\n };\n\n const handleClickConfirm = () => {\n const isValidTime = !currentValue.value.find((v) => !validateInputValue(v, format.value));\n if (isValidTime) setInnerValue(currentValue.value);\n isShowPanel.value = false;\n };\n\n const handleFocus = (value: TimeRangeValue, { e, position }: { e: FocusEvent; position: RangeInputPosition }) => {\n props.onFocus?.({ value, e, position: position === 'first' ? 'start' : 'end' });\n };\n\n const handleOnPick = (pickValue: string, e: MouseEvent) => {\n let pickedRangeValue = [];\n let context;\n if (currentPanelIdx.value === 0) {\n pickedRangeValue = [pickValue, currentValue.value[1] ?? pickValue];\n context = { e, position: 'start' as TimeRangePickerPartial };\n } else {\n pickedRangeValue = [currentValue.value[0] ?? pickValue, pickValue];\n context = { e, position: 'end' as TimeRangePickerPartial };\n }\n props.onPick?.(pickedRangeValue, context);\n };\n\n watch(\n () => isShowPanel.value,\n () => {\n currentValue.value = isShowPanel.value ? innerValue.value ?? TIME_PICKER_EMPTY : TIME_PICKER_EMPTY;\n if (!isShowPanel.value) currentPanelIdx.value = undefined;\n },\n );\n\n return () => (\n <div class={componentName.value}>\n <RangeInputPopup\n disabled={disabled.value}\n popupVisible={isShowPanel.value}\n popupProps={{\n overlayInnerStyle: {\n width: 'auto',\n padding: 0,\n },\n onVisibleChange: handleShowPopup,\n ...props.popupProps,\n }}\n onInputChange={handleInputChange}\n inputValue={isShowPanel.value ? currentValue.value : innerValue.value ?? TIME_PICKER_EMPTY}\n rangeInputProps={{\n size: props.size,\n clearable: props.clearable,\n class: inputClasses.value,\n value: isShowPanel.value ? currentValue.value : innerValue.value ?? undefined,\n placeholder: props.placeholder || [globalConfig.value.placeholder, globalConfig.value.placeholder],\n suffixIcon: () => <icon-ri-time-line />,\n onClear: handleClear,\n onClick: handleClick,\n onFocus: handleFocus,\n onBlur: handleInputBlur,\n readonly: !allowInput.value,\n activeIndex: currentPanelIdx.value,\n ...props.rangeInputProps,\n }}\n status={props.status}\n tips={props.tips}\n panel={() => (\n <TimePickerPanel\n steps={props.steps}\n format={format.value}\n isShowPanel={isShowPanel.value}\n disableTime={props.disableTime}\n hideDisabledTime={props.hideDisabledTime}\n isFooterDisplay={true}\n value={currentValue.value[currentPanelIdx.value || 0]}\n onChange={handleTimeChange}\n onPick={handleOnPick}\n handleConfirmClick={handleClickConfirm}\n position={currentPanelIdx.value === 0 ? 'start' : 'end'}\n />\n )}\n />\n </div>\n );\n },\n});\n"],"names":["dayjs","name","props","rangeInputProps","popupProps","innerValue","setInnerValue","handleOnPick","value","e","position","pickedRangeValue","context","watch","currentValue","_createVNode","overlayInnerStyle","width","padding","onVisibleChange","placeholder","_resolveComponent","onClear","onClick","onFocus","onBlur","readonly"],"mappings":"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"}