vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 11.8 kB
Source Map (JSON)
{"version":3,"file":"helper.cjs","sources":["../../../components/date-picker/helper.ts"],"sourcesContent":["import { computed, reactive, ref } from 'vue'\n\nimport { getLast, toNumber } from '@vexip-ui/utils'\nimport { DisabledType } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { DisabledTime } from './symbol'\n\ntype Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9\n\nconst numberKeys = Array.from({ length: 10 }, (_, i) => i) as Digit[]\n\nfunction isNumberKey(key: string, num: Digit) {\n return key === `Digit${num}` || key === `Numpad${num}` || key === `${num}`\n}\n\nexport function handleKeyEnter(event: KeyboardEvent) {\n const key = event.code || event.key\n\n let type: null | number | 'next' | 'prev' | 'up' | 'down' | 'ok' | 'esc' = null\n let isMatch = false\n\n switch (key) {\n case 'Tab': {\n isMatch = true\n type = event.shiftKey ? 'prev' : 'next'\n break\n }\n case 'ArrowRight': {\n // 下一列\n isMatch = true\n type = 'next'\n break\n }\n case 'Delete':\n case 'ArrowLeft': {\n // 上一列\n isMatch = true\n type = 'prev'\n break\n }\n case 'ArrowUp': {\n // 加一\n isMatch = true\n type = 'up'\n break\n }\n case 'ArrowDown': {\n // 减一\n isMatch = true\n type = 'down'\n break\n }\n case 'Space':\n case ' ':\n case 'Enter':\n case 'NumpadEnter': {\n // 确认\n isMatch = true\n type = 'ok'\n break\n }\n case 'Escape': {\n // 取消\n isMatch = true\n type = 'esc'\n break\n }\n }\n\n if (isMatch) {\n event.preventDefault()\n event.stopPropagation()\n } else {\n // 键入数字\n const inputtedNumber = numberKeys.findIndex(num => isNumberKey(key, num))\n\n if (~inputtedNumber) {\n type = inputtedNumber\n\n event.preventDefault()\n event.stopPropagation()\n }\n }\n\n return type\n}\n\nexport function useColumn<T extends string>(\n colTypes: T[],\n currentColumn = ref(colTypes[0]) as Ref<T | null>,\n) {\n const columnTypes = Array.from(colTypes)\n const columnCount = columnTypes.length\n const enabled = reactive(\n columnTypes.reduce((prev, current) => {\n prev[current] = false\n return prev\n }, {} as any),\n ) as Record<T, boolean>\n\n function findEnabledColumn(types: T[]) {\n currentColumn.value = types.find(type => enabled[type]) ?? currentColumn.value\n }\n\n function resetColumn(type?: T | null, reverse = false) {\n if (!type) {\n currentColumn.value = null\n }\n\n const types = reverse ? Array.from(columnTypes).reverse() : columnTypes\n const index = types.findIndex(column => column === type)\n\n if (~index) {\n findEnabledColumn(types.slice(index, columnCount).concat(types.slice(0, index)))\n } else {\n findEnabledColumn(types)\n }\n }\n\n function enterColumn(type: 'prev' | 'next', canLoop = true) {\n if (!currentColumn.value) {\n currentColumn.value = (type === 'next' ? getLast(columnTypes) : columnTypes[0]) ?? null\n }\n\n for (let i = 0; i < columnCount; ++i) {\n if (currentColumn.value === columnTypes[i]) {\n const rawTypes = type === 'prev' ? Array.from(columnTypes).reverse() : columnTypes\n const nextIndex = (type === 'prev' ? columnCount - i : i + 1) % columnCount\n const types = canLoop\n ? rawTypes.slice(nextIndex, columnCount).concat(rawTypes.slice(0, nextIndex))\n : nextIndex\n ? rawTypes.slice(nextIndex, columnCount)\n : []\n\n findEnabledColumn(types)\n\n break\n }\n }\n }\n\n return {\n currentColumn,\n enabled,\n resetColumn,\n enterColumn,\n }\n}\n\nconst defaultMin = [0, 0, 0]\nconst defaultMax = [23, 59, 59]\n\nexport function useTimeBound(originMin: Ref<string>, originMax: Ref<string>) {\n const minUnits = computed(() => {\n return originMin.value ? originMin.value.split(':').map(toNumber) : defaultMin\n })\n const maxUnits = computed(() => {\n return originMax.value ? originMax.value.split(':').map(toNumber) : defaultMax\n })\n const reversed = computed(() => {\n const min = minUnits.value\n const max = maxUnits.value\n\n for (let i = 0; i < 3; ++i) {\n if (min[i] < max[i]) return false\n if (min[i] > max[i]) return true\n }\n\n return false\n })\n\n const isTimeDisabled: Required<DisabledTime> = {\n hour: isHourDisabled,\n minute: (hour, minute) => isMinuteDisabled(hour, minute) !== DisabledType.FALSE,\n second: (hour, minute, second) => isSecondDisabled(hour, minute, second) !== DisabledType.FALSE,\n }\n\n function isHourDisabled(hour: number) {\n const min = minUnits.value[0] || defaultMin[0]\n const max = maxUnits.value[0] || defaultMax[0]\n\n return reversed.value ? hour > max && hour < min : hour < min || hour > max\n }\n\n function isMinuteDisabled(hour: number, minute: number) {\n if (isHourDisabled(hour)) return DisabledType.UPSTREAM\n\n if (minUnits.value[0] === maxUnits.value[0] && hour === minUnits.value[0]) {\n const min = minUnits.value[1] || defaultMin[1]\n const max = maxUnits.value[1] || defaultMax[1]\n\n if (reversed.value ? minute > max && minute < min : minute < min || minute > max) {\n return DisabledType.TRUE\n }\n }\n\n if (hour === minUnits.value[0]) {\n const min = minUnits.value[1] || defaultMin[1]\n\n if (minute < min) return DisabledType.AT_MIN_TRUE\n }\n\n if (hour === maxUnits.value[0]) {\n const max = maxUnits.value[1] || defaultMax[1]\n\n if (minute > max) return DisabledType.AT_MAX_TRUE\n }\n\n return DisabledType.FALSE\n }\n\n function isSecondDisabled(hour: number, minute: number, second: number) {\n if (isMinuteDisabled(hour, minute) !== DisabledType.FALSE) return DisabledType.UPSTREAM\n\n if (\n minUnits.value[0] === maxUnits.value[0] &&\n hour === minUnits.value[0] &&\n minUnits.value[1] === maxUnits.value[1] &&\n minute === minUnits.value[1]\n ) {\n const min = minUnits.value[2] || defaultMin[2]\n const max = maxUnits.value[2] || defaultMax[2]\n\n if (reversed.value ? second > max && second < min : second < min || second > max) {\n return DisabledType.TRUE\n }\n }\n\n if (hour === minUnits.value[0] && minute === minUnits.value[1]) {\n const min = minUnits.value[2] || defaultMin[2]\n\n if (second < min) return DisabledType.AT_MIN_TRUE\n }\n\n if (hour === maxUnits.value[0] && minute === maxUnits.value[1]) {\n const max = maxUnits.value[2] || defaultMax[2]\n\n if (second > max) return DisabledType.AT_MAX_TRUE\n }\n\n return DisabledType.FALSE\n }\n\n return {\n minUnits,\n maxUnits,\n reversed,\n isTimeDisabled,\n }\n}\n"],"names":["numberKeys","_","i","isNumberKey","key","num","handleKeyEnter","event","type","isMatch","inputtedNumber","useColumn","colTypes","currentColumn","ref","columnTypes","columnCount","enabled","reactive","prev","current","findEnabledColumn","types","resetColumn","reverse","index","column","enterColumn","canLoop","getLast","rawTypes","nextIndex","defaultMin","defaultMax","useTimeBound","originMin","originMax","minUnits","computed","toNumber","maxUnits","reversed","min","max","isTimeDisabled","isHourDisabled","hour","minute","isMinuteDisabled","DisabledType","second","isSecondDisabled"],"mappings":"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"}