xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 8.49 kB
Source Map (JSON)
{"version":3,"file":"time-picker.mjs","sources":["../../src/time-picker/time-picker.tsx"],"sourcesContent":["import { computed, defineComponent, ref, toRefs, watch } from 'vue';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\nimport TimePickerPanel from './panel/time-picker-panel';\nimport TSelectInput, { TdSelectInputProps } from '../select-input';\nimport { formatInputValue, validateInputValue } from '../_common/js/time-picker/utils';\n\nimport type { InputProps } from '../input';\n\nimport props from './props';\n\n// hooks\nimport useVModel from '../hooks/useVModel';\nimport { useFormDisabled } from '../form/hooks';\nimport { useConfig, usePrefixClass } from '../hooks/useConfig';\n\ndayjs.extend(customParseFormat);\n\nexport default defineComponent({\n name: 'XTimePicker',\n\n props: { ...props },\n\n setup(props) {\n const currentValue = ref('');\n const isShowPanel = ref(false);\n const { globalConfig } = useConfig('timePicker');\n const { value, modelValue } = toRefs(props);\n const [innerValue, setInnerValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n\n const disabled = useFormDisabled();\n const { allowInput, format } = toRefs(props);\n const { classPrefix } = useConfig('classPrefix');\n\n const componentName = usePrefixClass('time-picker');\n\n const inputClasses = computed(() => [\n `${componentName.value}__group`,\n {\n [`${classPrefix.value}-is-focused`]: isShowPanel.value,\n },\n ]);\n\n const handleShowPopup = (visible: boolean, context: { e: MouseEvent }) => {\n isShowPanel.value = visible;\n visible ? props.onOpen?.(context) : props.onClose?.(context); // trigger on-open and on-close\n };\n\n const handleClear = (context: { e: MouseEvent }) => {\n const { e } = context;\n e.stopPropagation();\n currentValue.value = null;\n setInnerValue(null);\n };\n\n const handleInputChange = (value: string) => {\n currentValue.value = value;\n };\n\n const handleInputBlur: TdSelectInputProps['onBlur'] = (value, { e }) => {\n if (allowInput.value) {\n const isValidTime = validateInputValue(currentValue.value, format.value);\n if (isValidTime) {\n setInnerValue(formatInputValue(currentValue.value, format.value));\n }\n }\n props.onBlur?.({ value: String(value), e: e as FocusEvent });\n };\n\n const handleClickConfirm = () => {\n const isValidTime = validateInputValue(currentValue.value, format.value);\n if (isValidTime) setInnerValue(currentValue.value);\n isShowPanel.value = false;\n };\n\n const handlePanelChange = (v: string, e: MouseEvent) => {\n currentValue.value = v;\n props.onPick?.(v, { e });\n };\n\n watch(\n () => isShowPanel.value,\n () => {\n currentValue.value = isShowPanel.value ? innerValue.value ?? '' : '';\n },\n );\n\n return () => (\n <div class={componentName.value}>\n <TSelectInput\n onFocus={props.onFocus}\n onClear={handleClear}\n disabled={disabled.value}\n clearable={props.clearable}\n allowInput={allowInput.value}\n className={inputClasses.value}\n suffixIcon={() => <icon-ri-time-line />}\n popupVisible={isShowPanel.value}\n onInputChange={handleInputChange}\n onBlur={handleInputBlur}\n onPopupVisibleChange={handleShowPopup}\n placeholder={!innerValue.value ? props.placeholder || globalConfig.value.placeholder : undefined}\n value={isShowPanel.value ? currentValue.value : innerValue.value ?? undefined}\n inputValue={isShowPanel.value ? currentValue.value : innerValue.value ?? undefined}\n inputProps={{ ...(props.inputProps as InputProps), size: props.size }}\n popupProps={{ overlayInnerStyle: { width: 'auto', padding: 0 }, ...(props.popupProps as object) }}\n status={props.status}\n tips={props.tips}\n panel={() => (\n <TimePickerPanel\n steps={props.steps}\n format={format.value}\n value={currentValue.value}\n isFooterDisplay={true}\n isShowPanel={isShowPanel.value}\n disableTime={props.disableTime}\n onChange={handlePanelChange}\n hideDisabledTime={props.hideDisabledTime}\n handleConfirmClick={handleClickConfirm}\n />\n )}\n />\n </div>\n );\n },\n});\n"],"names":["dayjs","name","props","innerValue","setInnerValue","visible","value","e","watch","currentValue","_createVNode","_resolveComponent","overlayInnerStyle","width","padding"],"mappings":"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"}