code-monkey-ui
Version:
A Component Library for Vue 3
1 lines • 40.2 kB
Source Map (JSON)
{"version":3,"file":"picker.mjs","sources":["../../../../../../../packages/components/time-picker/src/common/picker.vue"],"sourcesContent":["<template>\n <el-tooltip\n ref=\"refPopper\"\n :visible=\"pickerVisible\"\n effect=\"light\"\n pure\n trigger=\"click\"\n v-bind=\"$attrs\"\n role=\"dialog\"\n teleported\n :transition=\"`${nsDate.namespace.value}-zoom-in-top`\"\n :popper-class=\"[`${nsDate.namespace.value}-picker__popper`, popperClass]\"\n :popper-options=\"elPopperOptions\"\n :fallback-placements=\"fallbackPlacements\"\n :gpu-acceleration=\"false\"\n :placement=\"placement\"\n :stop-popper-mouse-event=\"false\"\n :hide-after=\"0\"\n persistent\n @before-show=\"onBeforeShow\"\n @show=\"onShow\"\n @hide=\"onHide\"\n >\n <template #default>\n <el-input\n v-if=\"!isRangeInput\"\n :id=\"(id as string | undefined)\"\n ref=\"inputRef\"\n container-role=\"combobox\"\n :model-value=\"(displayValue as string)\"\n :name=\"name\"\n :size=\"pickerSize\"\n :disabled=\"pickerDisabled\"\n :placeholder=\"placeholder\"\n :class=\"[nsDate.b('editor'), nsDate.bm('editor', type), $attrs.class]\"\n :style=\"$attrs.style\"\n :readonly=\"\n !editable ||\n readonly ||\n isDatesPicker ||\n isMonthsPicker ||\n isYearsPicker ||\n type === 'week'\n \"\n :aria-label=\"ariaLabel\"\n :tabindex=\"tabindex\"\n :validate-event=\"false\"\n @input=\"onUserInput\"\n @focus=\"handleFocusInput\"\n @blur=\"handleBlurInput\"\n @keydown=\"\n //\n handleKeydownInput as any\n \"\n @change=\"handleChange\"\n @mousedown=\"onMouseDownInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @click.stop\n >\n <template #prefix>\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"nsInput.e('icon')\"\n @mousedown.prevent=\"onMouseDownInput\"\n @touchstart.passive=\"onTouchStartInput\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n </template>\n <template #suffix>\n <el-icon\n v-if=\"showClose && clearIcon\"\n :class=\"`${nsInput.e('icon')} clear-icon`\"\n @click.stop=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </template>\n </el-input>\n <div\n v-else\n ref=\"inputRef\"\n :class=\"rangeInputKls\"\n :style=\"($attrs.style as any)\"\n @click=\"handleFocusInput\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n @touchstart.passive=\"onTouchStartInput\"\n @keydown=\"handleKeydownInput\"\n >\n <el-icon\n v-if=\"triggerIcon\"\n :class=\"[nsInput.e('icon'), nsRange.e('icon')]\"\n @mousedown.prevent=\"onMouseDownInput\"\n @touchstart.passive=\"onTouchStartInput\"\n >\n <component :is=\"triggerIcon\" />\n </el-icon>\n <input\n :id=\"id && id[0]\"\n autocomplete=\"off\"\n :name=\"name && name[0]\"\n :placeholder=\"startPlaceholder\"\n :value=\"displayValue && displayValue[0]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n :class=\"nsRange.b('input')\"\n @mousedown=\"onMouseDownInput\"\n @input=\"handleStartInput\"\n @change=\"handleStartChange\"\n @focus=\"handleFocusInput\"\n @blur=\"handleBlurInput\"\n />\n <slot name=\"range-separator\">\n <span :class=\"nsRange.b('separator')\">{{ rangeSeparator }}</span>\n </slot>\n <input\n :id=\"id && id[1]\"\n autocomplete=\"off\"\n :name=\"name && name[1]\"\n :placeholder=\"endPlaceholder\"\n :value=\"displayValue && displayValue[1]\"\n :disabled=\"pickerDisabled\"\n :readonly=\"!editable || readonly\"\n :class=\"nsRange.b('input')\"\n @mousedown=\"onMouseDownInput\"\n @focus=\"handleFocusInput\"\n @blur=\"handleBlurInput\"\n @input=\"handleEndInput\"\n @change=\"handleEndChange\"\n />\n <el-icon\n v-if=\"clearIcon\"\n :class=\"clearIconKls\"\n @click=\"onClearIconClick\"\n >\n <component :is=\"clearIcon\" />\n </el-icon>\n </div>\n </template>\n <template #content>\n <slot\n :visible=\"pickerVisible\"\n :actual-visible=\"pickerActualVisible\"\n :parsed-value=\"parsedValue\"\n :format=\"format\"\n :date-format=\"dateFormat\"\n :time-format=\"timeFormat\"\n :unlink-panels=\"unlinkPanels\"\n :type=\"type\"\n :default-value=\"defaultValue\"\n @pick=\"onPick\"\n @select-range=\"setSelectionRange\"\n @set-picker-option=\"onSetPickerOption\"\n @calendar-change=\"onCalendarChange\"\n @panel-change=\"onPanelChange\"\n @keydown=\"onKeydownPopperContent\"\n @mousedown.stop\n />\n </template>\n </el-tooltip>\n</template>\n<script lang=\"ts\" setup>\nimport {\n computed,\n inject,\n nextTick,\n onBeforeUnmount,\n provide,\n ref,\n unref,\n useAttrs,\n watch,\n} from 'vue'\nimport { isEqual } from 'lodash-unified'\nimport { onClickOutside } from '@vueuse/core'\nimport { Calendar, Clock } from '@element-plus/icons-vue'\nimport { useEmptyValues, useLocale, useNamespace } from '@code-monkey-ui/hooks'\nimport { useFormItem, useFormSize } from '@code-monkey-ui/components/form'\nimport ElInput from '@code-monkey-ui/components/input'\nimport ElIcon from '@code-monkey-ui/components/icon'\nimport ElTooltip from '@code-monkey-ui/components/tooltip'\nimport { debugWarn, isArray } from '@code-monkey-ui/utils'\nimport { EVENT_CODE } from '@code-monkey-ui/constants'\nimport { formatter, parseDate, valueEquals } from '../utils'\nimport { timePickerDefaultProps } from './props'\n\nimport type { Dayjs } from 'dayjs'\nimport type { ComponentPublicInstance } from 'vue'\nimport type { Options } from '@popperjs/core'\nimport type {\n DateModelType,\n DateOrDates,\n DayOrDays,\n PickerOptions,\n SingleOrRange,\n TimePickerDefaultProps,\n UserInput,\n} from './props'\nimport type { TooltipInstance } from '@code-monkey-ui/components/tooltip'\n\n// Date object and string\n\ndefineOptions({\n name: 'Picker',\n})\n\nconst props = defineProps(timePickerDefaultProps)\nconst emit = defineEmits([\n 'update:modelValue',\n 'change',\n 'focus',\n 'blur',\n 'clear',\n 'calendar-change',\n 'panel-change',\n 'visible-change',\n 'keydown',\n])\nconst attrs = useAttrs()\n\nconst { lang } = useLocale()\n\nconst nsDate = useNamespace('date')\nconst nsInput = useNamespace('input')\nconst nsRange = useNamespace('range')\n\nconst { form, formItem } = useFormItem()\nconst elPopperOptions = inject('ElPopperOptions', {} as Options)\nconst { valueOnClear } = useEmptyValues(props, null)\n\nconst refPopper = ref<TooltipInstance>()\nconst inputRef = ref<HTMLElement | ComponentPublicInstance>()\nconst pickerVisible = ref(false)\nconst pickerActualVisible = ref(false)\nconst valueOnOpen = ref<TimePickerDefaultProps['modelValue'] | null>(null)\n\nlet hasJustTabExitedInput = false\nlet ignoreFocusEvent = false\n\nconst rangeInputKls = computed(() => [\n nsDate.b('editor'),\n nsDate.bm('editor', props.type),\n nsInput.e('wrapper'),\n nsDate.is('disabled', pickerDisabled.value),\n nsDate.is('active', pickerVisible.value),\n nsRange.b('editor'),\n pickerSize ? nsRange.bm('editor', pickerSize.value) : '',\n attrs.class,\n])\n\nconst clearIconKls = computed(() => [\n nsInput.e('icon'),\n nsRange.e('close-icon'),\n !showClose.value ? nsRange.e('close-icon--hidden') : '',\n])\n\nwatch(pickerVisible, (val) => {\n if (!val) {\n userInput.value = null\n nextTick(() => {\n emitChange(props.modelValue)\n })\n } else {\n nextTick(() => {\n if (val) {\n valueOnOpen.value = props.modelValue\n }\n })\n }\n})\nconst emitChange = (\n val: TimePickerDefaultProps['modelValue'] | null,\n isClear?: boolean\n) => {\n // determine user real change only\n if (isClear || !valueEquals(val, valueOnOpen.value)) {\n emit('change', val)\n props.validateEvent &&\n formItem?.validate('change').catch((err) => debugWarn(err))\n }\n}\nconst emitInput = (input: SingleOrRange<DateModelType | Dayjs> | null) => {\n if (!valueEquals(props.modelValue, input)) {\n let formatted\n if (isArray(input)) {\n formatted = input.map((item) =>\n formatter(item, props.valueFormat, lang.value)\n )\n } else if (input) {\n formatted = formatter(input, props.valueFormat, lang.value)\n }\n emit('update:modelValue', input ? formatted : input, lang.value)\n }\n}\nconst emitKeydown = (e: KeyboardEvent) => {\n emit('keydown', e)\n}\n\nconst refInput = computed<HTMLInputElement[]>(() => {\n if (inputRef.value) {\n const _r = isRangeInput.value\n ? inputRef.value\n : (inputRef.value as any as ComponentPublicInstance).$el\n return Array.from<HTMLInputElement>(_r.querySelectorAll('input'))\n }\n return []\n})\n\nconst setSelectionRange = (start: number, end: number, pos?: 'min' | 'max') => {\n const _inputs = refInput.value\n if (!_inputs.length) return\n if (!pos || pos === 'min') {\n _inputs[0].setSelectionRange(start, end)\n _inputs[0].focus()\n } else if (pos === 'max') {\n _inputs[1].setSelectionRange(start, end)\n _inputs[1].focus()\n }\n}\nconst focusOnInputBox = () => {\n focus(true, true)\n nextTick(() => {\n ignoreFocusEvent = false\n })\n}\n\nconst onPick = (date: any = '', visible = false) => {\n if (!visible) {\n ignoreFocusEvent = true\n }\n pickerVisible.value = visible\n let result\n if (isArray(date)) {\n result = date.map((_) => _.toDate())\n } else {\n // clear btn emit null\n result = date ? date.toDate() : date\n }\n userInput.value = null\n emitInput(result)\n}\n\nconst onBeforeShow = () => {\n pickerActualVisible.value = true\n}\n\nconst onShow = () => {\n emit('visible-change', true)\n}\n\nconst onKeydownPopperContent = (event: KeyboardEvent) => {\n if ((event as KeyboardEvent)?.key === EVENT_CODE.esc) {\n focus(true, true)\n }\n}\n\nconst onHide = () => {\n pickerActualVisible.value = false\n pickerVisible.value = false\n ignoreFocusEvent = false\n emit('visible-change', false)\n}\n\nconst handleOpen = () => {\n pickerVisible.value = true\n}\n\nconst handleClose = () => {\n refPopper.value?.onClose()\n pickerVisible.value = false\n}\n\nconst focus = (focusStartInput = true, isIgnoreFocusEvent = false) => {\n ignoreFocusEvent = isIgnoreFocusEvent\n const [leftInput, rightInput] = unref(refInput)\n let input = leftInput\n if (!focusStartInput && isRangeInput.value) {\n input = rightInput\n }\n if (input) {\n input.focus()\n }\n}\n\nconst handleFocusInput = (e?: FocusEvent) => {\n if (\n props.readonly ||\n pickerDisabled.value ||\n pickerVisible.value ||\n ignoreFocusEvent\n ) {\n return\n }\n pickerVisible.value = true\n emit('focus', e)\n}\n\nlet currentHandleBlurDeferCallback:\n | (() => Promise<void> | undefined)\n | undefined = undefined\n\n// Check if document.activeElement is inside popper or any input before popper close\nconst handleBlurInput = (e?: FocusEvent) => {\n const handleBlurDefer = async () => {\n setTimeout(() => {\n if (currentHandleBlurDeferCallback === handleBlurDefer) {\n if (\n !(\n refPopper.value?.isFocusInsideContent() && !hasJustTabExitedInput\n ) &&\n refInput.value.filter((input) => {\n return input.contains(document.activeElement)\n }).length === 0\n ) {\n handleChange()\n pickerVisible.value = false\n emit('blur', e)\n props.validateEvent &&\n formItem?.validate('blur').catch((err) => debugWarn(err))\n }\n hasJustTabExitedInput = false\n }\n }, 0)\n }\n currentHandleBlurDeferCallback = handleBlurDefer\n handleBlurDefer()\n}\n\nconst pickerDisabled = computed(() => {\n return props.disabled || form?.disabled\n})\n\nconst parsedValue = computed(() => {\n let dayOrDays: DayOrDays\n if (valueIsEmpty.value) {\n if (pickerOptions.value.getDefaultValue) {\n dayOrDays = pickerOptions.value.getDefaultValue()\n }\n } else {\n if (isArray(props.modelValue)) {\n dayOrDays = props.modelValue.map((d) =>\n parseDate(d, props.valueFormat, lang.value)\n ) as [Dayjs, Dayjs]\n } else {\n dayOrDays = parseDate(props.modelValue, props.valueFormat, lang.value)!\n }\n }\n\n if (pickerOptions.value.getRangeAvailableTime) {\n const availableResult = pickerOptions.value.getRangeAvailableTime(\n dayOrDays!\n )\n if (!isEqual(availableResult, dayOrDays!)) {\n dayOrDays = availableResult\n\n // The result is corrected only when model-value exists\n if (!valueIsEmpty.value) {\n emitInput(\n (isArray(dayOrDays)\n ? dayOrDays.map((_) => _.toDate())\n : dayOrDays.toDate()) as SingleOrRange<Date>\n )\n }\n }\n }\n if (isArray(dayOrDays!) && dayOrDays.some((day) => !day)) {\n dayOrDays = [] as unknown as DayOrDays\n }\n return dayOrDays!\n})\n\nconst displayValue = computed<UserInput>(() => {\n if (!pickerOptions.value.panelReady) return ''\n const formattedValue = formatDayjsToString(parsedValue.value)\n if (isArray(userInput.value)) {\n return [\n userInput.value[0] || (formattedValue && formattedValue[0]) || '',\n userInput.value[1] || (formattedValue && formattedValue[1]) || '',\n ]\n } else if (userInput.value !== null) {\n return userInput.value\n }\n if (!isTimePicker.value && valueIsEmpty.value) return ''\n if (!pickerVisible.value && valueIsEmpty.value) return ''\n if (formattedValue) {\n return isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value\n ? (formattedValue as Array<string>).join(', ')\n : formattedValue\n }\n return ''\n})\n\nconst isTimeLikePicker = computed(() => props.type.includes('time'))\n\nconst isTimePicker = computed(() => props.type.startsWith('time'))\n\nconst isDatesPicker = computed(() => props.type === 'dates')\n\nconst isMonthsPicker = computed(() => props.type === 'months')\n\nconst isYearsPicker = computed(() => props.type === 'years')\n\nconst triggerIcon = computed(\n () => props.prefixIcon || (isTimeLikePicker.value ? Clock : Calendar)\n)\n\nconst showClose = ref(false)\n\nconst onClearIconClick = (event: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (showClose.value) {\n event.stopPropagation()\n focusOnInputBox()\n // When the handleClear Function was provided, emit null will be executed inside it\n // There is no need for us to execute emit null twice. #14752\n if (pickerOptions.value.handleClear) {\n pickerOptions.value.handleClear()\n } else {\n emitInput(valueOnClear.value)\n }\n emitChange(valueOnClear.value, true)\n showClose.value = false\n onHide()\n }\n emit('clear')\n}\n\nconst valueIsEmpty = computed(() => {\n const { modelValue } = props\n return (\n !modelValue || (isArray(modelValue) && !modelValue.filter(Boolean).length)\n )\n})\n\nconst onMouseDownInput = async (event: MouseEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.target as HTMLElement)?.tagName !== 'INPUT' ||\n refInput.value.includes(document.activeElement as HTMLInputElement)\n ) {\n pickerVisible.value = true\n }\n}\nconst onMouseEnter = () => {\n if (props.readonly || pickerDisabled.value) return\n if (!valueIsEmpty.value && props.clearable) {\n showClose.value = true\n }\n}\nconst onMouseLeave = () => {\n showClose.value = false\n}\nconst onTouchStartInput = (event: TouchEvent) => {\n if (props.readonly || pickerDisabled.value) return\n if (\n (event.touches[0].target as HTMLElement)?.tagName !== 'INPUT' ||\n refInput.value.includes(document.activeElement as HTMLInputElement)\n ) {\n pickerVisible.value = true\n }\n}\nconst isRangeInput = computed(() => {\n return props.type.includes('range')\n})\n\nconst pickerSize = useFormSize()\n\nconst popperEl = computed(() => unref(refPopper)?.popperRef?.contentRef)\nconst actualInputRef = computed(() => {\n if (unref(isRangeInput)) {\n return unref(inputRef)\n }\n\n return (unref(inputRef) as ComponentPublicInstance)?.$el\n})\n\nconst stophandle = onClickOutside(actualInputRef, (e: PointerEvent) => {\n const unrefedPopperEl = unref(popperEl)\n const inputEl = unref(actualInputRef)\n if (\n (unrefedPopperEl &&\n (e.target === unrefedPopperEl ||\n e.composedPath().includes(unrefedPopperEl))) ||\n e.target === inputEl ||\n e.composedPath().includes(inputEl)\n )\n return\n pickerVisible.value = false\n})\n\nonBeforeUnmount(() => {\n stophandle?.()\n})\n\nconst userInput = ref<UserInput>(null)\n\nconst handleChange = () => {\n if (userInput.value) {\n const value = parseUserInputToDayjs(displayValue.value)\n if (value) {\n if (isValidValue(value)) {\n emitInput(\n (isArray(value)\n ? value.map((_) => _.toDate())\n : value.toDate()) as DateOrDates\n )\n userInput.value = null\n }\n }\n }\n if (userInput.value === '') {\n emitInput(valueOnClear.value)\n emitChange(valueOnClear.value)\n userInput.value = null\n }\n}\n\nconst parseUserInputToDayjs = (value: UserInput) => {\n if (!value) return null\n return pickerOptions.value.parseUserInput!(value)\n}\n\nconst formatDayjsToString = (value: DayOrDays) => {\n if (!value) return null\n return pickerOptions.value.formatToString!(value)\n}\n\nconst isValidValue = (value: DayOrDays) => {\n return pickerOptions.value.isValidValue!(value)\n}\n\nconst handleKeydownInput = async (event: KeyboardEvent) => {\n if (props.readonly || pickerDisabled.value) return\n\n const { code } = event\n emitKeydown(event)\n if (code === EVENT_CODE.esc) {\n if (pickerVisible.value === true) {\n pickerVisible.value = false\n event.preventDefault()\n event.stopPropagation()\n }\n return\n }\n\n if (code === EVENT_CODE.down) {\n if (pickerOptions.value.handleFocusPicker) {\n event.preventDefault()\n event.stopPropagation()\n }\n if (pickerVisible.value === false) {\n pickerVisible.value = true\n await nextTick()\n }\n if (pickerOptions.value.handleFocusPicker) {\n pickerOptions.value.handleFocusPicker()\n return\n }\n }\n\n if (code === EVENT_CODE.tab) {\n hasJustTabExitedInput = true\n return\n }\n\n if (code === EVENT_CODE.enter || code === EVENT_CODE.numpadEnter) {\n if (\n userInput.value === null ||\n userInput.value === '' ||\n isValidValue(parseUserInputToDayjs(displayValue.value) as DayOrDays)\n ) {\n handleChange()\n pickerVisible.value = false\n }\n event.stopPropagation()\n return\n }\n\n // if user is typing, do not let picker handle key input\n if (userInput.value) {\n event.stopPropagation()\n return\n }\n if (pickerOptions.value.handleKeydownInput) {\n pickerOptions.value.handleKeydownInput(event)\n }\n}\nconst onUserInput = (e: string) => {\n userInput.value = e\n // Temporary fix when the picker is dismissed and the input box\n // is focused, just mimic the behavior of antdesign.\n if (!pickerVisible.value) {\n pickerVisible.value = true\n }\n}\n\nconst handleStartInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [target.value, userInput.value[1]]\n } else {\n userInput.value = [target.value, null]\n }\n}\n\nconst handleEndInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n if (userInput.value) {\n userInput.value = [userInput.value[0], target.value]\n } else {\n userInput.value = [null, target.value]\n }\n}\n\nconst handleStartChange = () => {\n const values = userInput.value as string[]\n const value = parseUserInputToDayjs(values && values[0]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n formatDayjsToString(value) as string,\n displayValue.value?.[1] || null,\n ]\n const newValue = [value, parsedVal && (parsedVal[1] || null)] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n}\n\nconst handleEndChange = () => {\n const values = unref(userInput) as string[]\n const value = parseUserInputToDayjs(values && values[1]) as Dayjs\n const parsedVal = unref(parsedValue) as [Dayjs, Dayjs]\n if (value && value.isValid()) {\n userInput.value = [\n unref(displayValue)?.[0] || null,\n formatDayjsToString(value) as string,\n ]\n const newValue = [parsedVal && parsedVal[0], value] as DayOrDays\n if (isValidValue(newValue)) {\n emitInput(newValue)\n userInput.value = null\n }\n }\n}\n\nconst pickerOptions = ref<Partial<PickerOptions>>({})\nconst onSetPickerOption = <T extends keyof PickerOptions>(\n e: [T, PickerOptions[T]]\n) => {\n pickerOptions.value[e[0]] = e[1]\n pickerOptions.value.panelReady = true\n}\n\nconst onCalendarChange = (e: [Date, null | Date]) => {\n emit('calendar-change', e)\n}\n\nconst onPanelChange = (\n value: [Dayjs, Dayjs],\n mode: 'month' | 'year',\n view: unknown\n) => {\n emit('panel-change', value, mode, view)\n}\n\nprovide('EP_PICKER_BASE', {\n props,\n})\n\ndefineExpose({\n /**\n * @description focus input box.\n */\n focus,\n /**\n * @description emit focus event\n */\n handleFocusInput,\n /**\n * @description emit blur event\n */\n handleBlurInput,\n /**\n * @description opens picker\n */\n handleOpen,\n /**\n * @description closes picker\n */\n handleClose,\n /**\n * @description pick item manually\n */\n onPick,\n})\n</script>\n"],"names":[],"mappings":"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"}