UNPKG

@opensig/opendesign

Version:

94 lines (93 loc) 3.38 kB
import { computed } from "vue"; import { useTimePickerOptions } from "./use-time-picker-options.mjs"; import { isTimeBefore, isTimeAfter } from "./use-time-range-constraints.mjs"; function parseTimeString(time) { const [hour, minute, second] = (time == null ? void 0 : time.split(":").map((v) => Number.parseInt(v))) ?? []; return { hour, minute, second }; } function isValidTimeUnit(value, options, disabled) { if (Number.isNaN(value)) return false; if (!options.some((opt) => opt.value === value)) return false; return !disabled.includes(value); } function useTimeRangeInputValidation(params) { const { tempStart, tempEnd, format, hourStep, minuteStep, secondStep, minTime, maxTime, maxStartTime, minEndTime, disabledHours, disabledMinutes, disabledSeconds } = params; const showSeconds = computed(() => format.value.toLowerCase().includes("ss")); const parsedStart = computed(() => parseTimeString(tempStart.value)); const parsedEnd = computed(() => parseTimeString(tempEnd.value)); const startHour = computed(() => Number.isNaN(parsedStart.value.hour) ? null : parsedStart.value.hour); const startMinute = computed(() => Number.isNaN(parsedStart.value.minute) ? null : parsedStart.value.minute); const endHour = computed(() => Number.isNaN(parsedEnd.value.hour) ? null : parsedEnd.value.hour); const endMinute = computed(() => Number.isNaN(parsedEnd.value.minute) ? null : parsedEnd.value.minute); const startMaxTime = computed(() => maxStartTime.value ?? (maxTime == null ? void 0 : maxTime.value)); const endMinTime = computed(() => minEndTime.value ?? (minTime == null ? void 0 : minTime.value)); const startOptions = useTimePickerOptions({ hourStep, minuteStep, secondStep, disabledHours, disabledMinutes, disabledSeconds, minTime, maxTime: startMaxTime, selectedHour: startHour, selectedMinute: startMinute }); const endOptions = useTimePickerOptions({ hourStep, minuteStep, secondStep, disabledHours, disabledMinutes, disabledSeconds, minTime: endMinTime, maxTime, selectedHour: endHour, selectedMinute: endMinute }); const isStartValid = createBoundaryValidator({ parsedTime: parsedStart, options: startOptions, showSeconds, boundaryTime: startMaxTime, tempTime: tempStart, checkFn: isTimeAfter }); const isEndValid = createBoundaryValidator({ parsedTime: parsedEnd, options: endOptions, showSeconds, boundaryTime: endMinTime, tempTime: tempEnd, checkFn: isTimeBefore }); return { isStartValid, isEndValid }; } function createBoundaryValidator({ parsedTime, options, showSeconds, boundaryTime, tempTime, checkFn }) { return computed(() => { const { hour, minute, second } = parsedTime.value; if (!isValidTimeUnit(hour, options.hourOptions.value, options.disabledHourOptions.value)) return false; if (!isValidTimeUnit(minute, options.minuteOptions.value, options.disabledMinuteOptions.value)) return false; if (showSeconds.value && !isValidTimeUnit(second, options.secondOptions.value, options.disabledSecondOptions.value)) return false; return !(boundaryTime.value && tempTime.value && checkFn(tempTime.value, boundaryTime.value)); }); } export { isValidTimeUnit, parseTimeString, useTimeRangeInputValidation };