vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 9.44 kB
Source Map (JSON)
{"version":3,"file":"useTimePicker.mjs","sources":["../../../../../../src/components/va-time-picker/hooks/useTimePicker.ts"],"sourcesContent":["import { computed, ref, Ref, toRefs, watch } from 'vue'\nimport { TimePickerProps, ModelValueRef } from '../types'\n\n// Use safeModelValue if we need to update model value\nconst safeModelValue = (m: ModelValueRef) => m.value ? m.value : new Date(new Date().setHours(0, 0, 0, 0))\n\nconst createNumbersArray = (length: number) => Array.from(Array(length).keys())\n\n/**\n * Convert 00:00 -> 12:00 am, 00:01 -> 01:00 am.\n * So we need to changed 12 and 0 between two formats\n */\nconst from24to12 = (h: number) => (h === 0 ? 12 : h) - Number(h > 12) * 12\nconst from12to24 = (h: number, isAM = false) => (h === 12 ? 0 : h) + Number(isAM) * 12\n\nconst createHoursColumn = (props: TimePickerProps, modelValue: ModelValueRef, isPM: Ref<boolean>) => {\n const computedSize = computed(() => props.ampm ? 12 : 24)\n\n const items = computed(() => {\n let array = createNumbersArray(computedSize.value)\n\n if (props.hoursFilter) {\n array = array.filter((i) => props.hoursFilter!(props.ampm ? i + 12 * Number(isPM.value) : i))\n }\n\n return array.map((n) => {\n return props.ampm ? from24to12(n) : n\n })\n })\n\n const activeItem = computed({\n get: () => {\n if (!modelValue.value) { return -1 }\n\n if (props.ampm) {\n const h = from24to12(modelValue.value.getHours() - 12 * Number(isPM.value))\n return items.value.findIndex((i) => i === h)\n }\n\n const h = modelValue.value.getHours()\n\n return items.value.findIndex((i) => i === h)\n },\n set: (newIndex) => {\n if (props.readonly) { return }\n\n const hours = props.ampm ? from12to24(items.value[newIndex], isPM.value) : items.value[newIndex]\n\n modelValue.value = new Date(safeModelValue(modelValue).setHours(hours))\n },\n })\n\n return computed(() => ({\n items: items.value,\n activeItem: activeItem,\n }))\n}\n\nconst createMinutesColumn = (props: TimePickerProps, modelValue: ModelValueRef) => {\n const items = computed(() => {\n const array = createNumbersArray(60)\n\n if (!props.minutesFilter) { return array }\n\n return array.filter(props.minutesFilter)\n })\n\n const activeItem = computed({\n get: () => {\n if (!modelValue.value) { return -1 }\n\n const m = modelValue.value.getMinutes()\n\n return items.value.findIndex((i) => i === m)\n },\n set: (newIndex) => {\n if (props.readonly) { return }\n\n const v = items.value[newIndex]\n\n modelValue.value = new Date(safeModelValue(modelValue).setMinutes(v))\n },\n })\n\n return computed(() => ({\n items: items.value,\n activeItem: activeItem,\n }))\n}\n\nconst createSecondsColumn = (props: TimePickerProps, modelValue: ModelValueRef) => {\n const items = computed(() => {\n const array = createNumbersArray(60)\n\n if (!props.secondsFilter) { return array }\n\n return array.filter(props.secondsFilter)\n })\n\n const activeItem = computed({\n get: () => {\n if (!modelValue.value) { return -1 }\n\n const s = modelValue.value.getSeconds()\n\n return items.value.findIndex((i) => i === s)\n },\n set: (newIndex) => {\n if (props.readonly) { return }\n\n const v = items.value[newIndex]\n\n modelValue.value = new Date(safeModelValue(modelValue).setSeconds(v))\n },\n })\n\n return computed(() => ({\n items: items.value,\n activeItem: activeItem,\n }))\n}\n\nconst createPeriodColumn = (props: TimePickerProps, modelValue: ModelValueRef, isPM: Ref<boolean>) => {\n return computed(() => ({\n items: ['AM', 'PM'],\n activeItem: computed({\n get: () => {\n if (!modelValue.value) { return -1 }\n return Number(isPM.value)\n },\n set: (val) => {\n isPM.value = Boolean(val)\n const h = safeModelValue(modelValue).getHours()\n let h24 = isPM.value ? h + 12 : h\n\n if (isPM.value && h <= 12) { h24 = h + 12 }\n if (!isPM.value && h >= 12) { h24 = h - 12 }\n\n // If there is no hoursFilter - it must be valid, otherwise validate hours\n const isValidFilteredHour = !props.hoursFilter || props.hoursFilter(h24)\n\n if (props.periodUpdatesModelValue && isValidFilteredHour) {\n modelValue.value = new Date(safeModelValue(modelValue).setHours(h24))\n }\n },\n }),\n }))\n}\n\nexport const useTimePicker = (props: TimePickerProps, modelValue: ModelValueRef) => {\n const { view } = toRefs(props)\n\n const isPM = ref(false)\n watch(modelValue, () => { isPM.value = safeModelValue(modelValue).getHours() >= 12 }, { immediate: true })\n\n const hoursColumn = createHoursColumn(props, modelValue, isPM)\n const minutesColumn = createMinutesColumn(props, modelValue)\n const secondsColumn = createSecondsColumn(props, modelValue)\n const periodColumn = createPeriodColumn(props, modelValue, isPM)\n\n const columns = computed(() => {\n const array = []\n\n if (view.value === 'hours') {\n array.push(hoursColumn.value)\n } else if (view.value === 'minutes') {\n array.push(hoursColumn.value, minutesColumn.value)\n } else if (view.value === 'seconds') {\n array.push(hoursColumn.value, minutesColumn.value, secondsColumn.value)\n }\n if (props.ampm && !props.hidePeriodSwitch) {\n array.push(periodColumn.value)\n }\n\n return array\n })\n\n return {\n columns,\n isPM,\n }\n}\n"],"names":["h"],"mappings":"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"}