element-plus
Version:
A Component Library for Vue 3
1 lines • 25.8 kB
Source Map (JSON)
{"version":3,"file":"basic-time-spinner.mjs","sources":["../../../../../../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue"],"sourcesContent":["<template>\n <div :class=\"[ns.b('spinner'), { 'has-seconds': showSeconds }]\">\n <template v-if=\"!arrowControl\">\n <el-scrollbar\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :ref=\"(scollbar) => setRef(scollbar, item)\"\n :class=\"ns.be('spinner', 'wrapper')\"\n wrap-style=\"max-height: inherit;\"\n :view-class=\"ns.be('spinner', 'list')\"\n noresize\n tag=\"ul\"\n @mouseenter=\"emitSelectRange(item)\"\n @mousemove=\"adjustCurrentSpinner(item)\"\n >\n <li\n v-for=\"(disabled, key) in listMap[item].value\"\n :key=\"key\"\n :class=\"[\n ns.be('spinner', 'item'),\n ns.is('active', key === timePartsMap[item].value),\n ns.is('disabled', disabled),\n ]\"\n @click=\"handleClick(item, { value: key, disabled })\"\n >\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? key % 12 || 12 : key)).slice(-2)\n }}{{ getAmPmFlag(key) }}\n </template>\n <template v-else>\n {{ ('0' + key).slice(-2) }}\n </template>\n </li>\n </el-scrollbar>\n </template>\n <template v-if=\"arrowControl\">\n <div\n v-for=\"item in spinnerItems\"\n :key=\"item\"\n :class=\"[ns.be('spinner', 'wrapper'), ns.is('arrow')]\"\n @mouseenter=\"emitSelectRange(item)\"\n >\n <el-icon\n v-repeat-click=\"onDecreaseClick\"\n :class=\"['arrow-up', ns.be('spinner', 'arrow')]\"\n >\n <arrow-up />\n </el-icon>\n <el-icon\n v-repeat-click=\"onIncreaseClick\"\n :class=\"['arrow-down', ns.be('spinner', 'arrow')]\"\n >\n <arrow-down />\n </el-icon>\n <ul :class=\"ns.be('spinner', 'list')\">\n <li\n v-for=\"(time, key) in arrowListMap[item].value\"\n :key=\"key\"\n :class=\"[\n ns.be('spinner', 'item'),\n ns.is('active', time === timePartsMap[item].value),\n ns.is('disabled', listMap[item].value[time]),\n ]\"\n >\n <template v-if=\"typeof time === 'number'\">\n <template v-if=\"item === 'hours'\">\n {{ ('0' + (amPmMode ? time % 12 || 12 : time)).slice(-2)\n }}{{ getAmPmFlag(time) }}\n </template>\n <template v-else>\n {{ ('0' + time).slice(-2) }}\n </template>\n </template>\n </li>\n </ul>\n </div>\n </template>\n </div>\n</template>\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, onMounted, ref, watch } from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { RepeatClick } from '@element-plus/directives'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElIcon from '@element-plus/components/icon'\nimport { ArrowDown, ArrowUp } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { getTimeLists } from './useTimePicker'\n\nimport type { PropType, Ref } from 'vue'\nimport type { Dayjs } from 'dayjs'\nimport type { Nullable } from '@element-plus/utils'\n\nexport default defineComponent({\n directives: {\n repeatClick: RepeatClick,\n },\n\n components: {\n ElScrollbar,\n ElIcon,\n ArrowUp,\n ArrowDown,\n },\n\n props: {\n role: {\n type: String,\n required: true,\n },\n spinnerDate: {\n type: Object as PropType<Dayjs>,\n required: true,\n },\n showSeconds: {\n type: Boolean,\n default: true,\n },\n arrowControl: Boolean,\n amPmMode: {\n type: String,\n default: '', // 'a': am/pm; 'A': AM/PM\n },\n disabledHours: {\n type: Function,\n },\n disabledMinutes: {\n type: Function,\n },\n disabledSeconds: {\n type: Function,\n },\n },\n\n emits: ['change', 'select-range', 'set-option'],\n\n setup(props, ctx) {\n const ns = useNamespace('time')\n // data\n let isScrolling = false\n const debouncedResetScroll = debounce((type) => {\n isScrolling = false\n adjustCurrentSpinner(type)\n }, 200)\n const currentScrollbar = ref(null)\n const listHoursRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listMinutesRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listSecondsRef: Ref<Nullable<HTMLElement>> = ref(null)\n const listRefsMap = {\n hours: listHoursRef,\n minutes: listMinutesRef,\n seconds: listSecondsRef,\n }\n\n // computed\n const spinnerItems = computed(() => {\n const arr = ['hours', 'minutes', 'seconds']\n return props.showSeconds ? arr : arr.slice(0, 2)\n })\n const hours = computed(() => {\n return props.spinnerDate.hour()\n })\n const minutes = computed(() => {\n return props.spinnerDate.minute()\n })\n const seconds = computed(() => {\n return props.spinnerDate.second()\n })\n const timePartsMap = computed(() => ({\n hours,\n minutes,\n seconds,\n }))\n const hoursList = computed(() => {\n return getHoursList(props.role)\n })\n const minutesList = computed(() => {\n return getMinutesList(hours.value, props.role)\n })\n const secondsList = computed(() => {\n return getSecondsList(hours.value, minutes.value, props.role)\n })\n const listMap = computed(() => ({\n hours: hoursList,\n minutes: minutesList,\n seconds: secondsList,\n }))\n const arrowHourList = computed(() => {\n const hour = hours.value\n return [\n hour > 0 ? hour - 1 : undefined,\n hour,\n hour < 23 ? hour + 1 : undefined,\n ]\n })\n const arrowMinuteList = computed(() => {\n const minute = minutes.value\n return [\n minute > 0 ? minute - 1 : undefined,\n minute,\n minute < 59 ? minute + 1 : undefined,\n ]\n })\n const arrowSecondList = computed(() => {\n const second = seconds.value\n return [\n second > 0 ? second - 1 : undefined,\n second,\n second < 59 ? second + 1 : undefined,\n ]\n })\n const arrowListMap = computed(() => ({\n hours: arrowHourList,\n minutes: arrowMinuteList,\n seconds: arrowSecondList,\n }))\n const getAmPmFlag = (hour) => {\n const shouldShowAmPm = !!props.amPmMode\n if (!shouldShowAmPm) return ''\n const isCapital = props.amPmMode === 'A'\n // todo locale\n let content = hour < 12 ? ' am' : ' pm'\n if (isCapital) content = content.toUpperCase()\n return content\n }\n\n const emitSelectRange = (type) => {\n if (type === 'hours') {\n ctx.emit('select-range', 0, 2)\n } else if (type === 'minutes') {\n ctx.emit('select-range', 3, 5)\n } else if (type === 'seconds') {\n ctx.emit('select-range', 6, 8)\n }\n currentScrollbar.value = type\n }\n\n const adjustCurrentSpinner = (type) => {\n adjustSpinner(type, timePartsMap.value[type].value)\n }\n\n // NOTE: used by datetime / date-range panel\n // renamed from adjustScrollTop\n // should try to refactory it\n const adjustSpinners = () => {\n adjustCurrentSpinner('hours')\n adjustCurrentSpinner('minutes')\n adjustCurrentSpinner('seconds')\n }\n\n const getScrollbarElement = (el: HTMLElement) =>\n el.querySelector(`.${ns.namespace.value}-scrollbar__wrap`) as HTMLElement\n\n const adjustSpinner = (type, value) => {\n if (props.arrowControl) return\n const el = listRefsMap[type]\n if (el && el.$el) {\n getScrollbarElement(el.$el).scrollTop = Math.max(\n 0,\n value * typeItemHeight(type)\n )\n }\n }\n\n const typeItemHeight = (type) => {\n const el = listRefsMap[type]\n return el.$el.querySelector('li').offsetHeight\n }\n\n const onIncreaseClick = () => {\n scrollDown(1)\n }\n\n const onDecreaseClick = () => {\n scrollDown(-1)\n }\n\n const scrollDown = (step) => {\n if (!currentScrollbar.value) {\n emitSelectRange('hours')\n }\n\n const label = currentScrollbar.value\n let now = timePartsMap.value[label].value\n const total = currentScrollbar.value === 'hours' ? 24 : 60\n now = (now + step + total) % total\n\n modifyDateField(label, now)\n adjustSpinner(label, now)\n nextTick(() => emitSelectRange(currentScrollbar.value))\n }\n\n const modifyDateField = (type, value) => {\n const list = listMap.value[type].value\n const isDisabled = list[value]\n if (isDisabled) return\n switch (type) {\n case 'hours':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(value)\n .minute(minutes.value)\n .second(seconds.value)\n )\n break\n case 'minutes':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(value)\n .second(seconds.value)\n )\n break\n case 'seconds':\n ctx.emit(\n 'change',\n props.spinnerDate\n .hour(hours.value)\n .minute(minutes.value)\n .second(value)\n )\n break\n }\n }\n\n const handleClick = (type, { value, disabled }) => {\n if (!disabled) {\n modifyDateField(type, value)\n emitSelectRange(type)\n adjustSpinner(type, value)\n }\n }\n\n const handleScroll = (type) => {\n isScrolling = true\n debouncedResetScroll(type)\n const value = Math.min(\n Math.round(\n (getScrollbarElement(listRefsMap[type].$el).scrollTop -\n (scrollBarHeight(type) * 0.5 - 10) / typeItemHeight(type) +\n 3) /\n typeItemHeight(type)\n ),\n type === 'hours' ? 23 : 59\n )\n modifyDateField(type, value)\n }\n\n const scrollBarHeight = (type) => {\n return listRefsMap[type].$el.offsetHeight\n }\n\n const bindScrollEvent = () => {\n const bindFunction = (type) => {\n if (listRefsMap[type] && listRefsMap[type].$el) {\n getScrollbarElement(listRefsMap[type].$el).onscroll = () => {\n // TODO: scroll is emitted when set scrollTop programatically\n // should find better solutions in the future!\n handleScroll(type)\n }\n }\n }\n bindFunction('hours')\n bindFunction('minutes')\n bindFunction('seconds')\n }\n\n onMounted(() => {\n nextTick(() => {\n !props.arrowControl && bindScrollEvent()\n adjustSpinners()\n // set selection on the first hour part\n if (props.role === 'start') emitSelectRange('hours')\n })\n })\n\n const setRef = (scrollbar, type) => {\n listRefsMap[type] = scrollbar\n }\n\n ctx.emit('set-option', [`${props.role}_scrollDown`, scrollDown])\n ctx.emit('set-option', [`${props.role}_emitSelectRange`, emitSelectRange])\n\n const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(\n props.disabledHours,\n props.disabledMinutes,\n props.disabledSeconds\n )\n\n watch(\n () => props.spinnerDate,\n () => {\n if (isScrolling) return\n adjustSpinners()\n }\n )\n\n return {\n ns,\n\n setRef,\n spinnerItems,\n currentScrollbar,\n hours,\n minutes,\n seconds,\n hoursList,\n minutesList,\n arrowHourList,\n arrowMinuteList,\n arrowSecondList,\n getAmPmFlag,\n emitSelectRange,\n adjustCurrentSpinner,\n typeItemHeight,\n listHoursRef,\n listMinutesRef,\n listSecondsRef,\n onIncreaseClick,\n onDecreaseClick,\n handleClick,\n secondsList,\n timePartsMap,\n arrowListMap,\n listMap,\n }\n },\n})\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_openBlock","_Fragment","_renderList","_createBlock","_createTextVNode","_toDisplayString","_createVNode","_withDirectives","_createElementVNode"],"mappings":"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"}