UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 25.6 kB
{"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","_createElementVNode"],"mappings":"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"}