UNPKG

@opensig/opendesign

Version:

94 lines (93 loc) 3.67 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const vue = require("vue"); const useTimePickerOptions = require("./use-time-picker-options.js"); const useTimeRangeConstraints = require("./use-time-range-constraints.js"); 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 = vue.computed(() => format.value.toLowerCase().includes("ss")); const parsedStart = vue.computed(() => parseTimeString(tempStart.value)); const parsedEnd = vue.computed(() => parseTimeString(tempEnd.value)); const startHour = vue.computed(() => Number.isNaN(parsedStart.value.hour) ? null : parsedStart.value.hour); const startMinute = vue.computed(() => Number.isNaN(parsedStart.value.minute) ? null : parsedStart.value.minute); const endHour = vue.computed(() => Number.isNaN(parsedEnd.value.hour) ? null : parsedEnd.value.hour); const endMinute = vue.computed(() => Number.isNaN(parsedEnd.value.minute) ? null : parsedEnd.value.minute); const startMaxTime = vue.computed(() => maxStartTime.value ?? (maxTime == null ? void 0 : maxTime.value)); const endMinTime = vue.computed(() => minEndTime.value ?? (minTime == null ? void 0 : minTime.value)); const startOptions = useTimePickerOptions.useTimePickerOptions({ hourStep, minuteStep, secondStep, disabledHours, disabledMinutes, disabledSeconds, minTime, maxTime: startMaxTime, selectedHour: startHour, selectedMinute: startMinute }); const endOptions = useTimePickerOptions.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: useTimeRangeConstraints.isTimeAfter }); const isEndValid = createBoundaryValidator({ parsedTime: parsedEnd, options: endOptions, showSeconds, boundaryTime: endMinTime, tempTime: tempEnd, checkFn: useTimeRangeConstraints.isTimeBefore }); return { isStartValid, isEndValid }; } function createBoundaryValidator({ parsedTime, options, showSeconds, boundaryTime, tempTime, checkFn }) { return vue.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)); }); } exports.isValidTimeUnit = isValidTimeUnit; exports.parseTimeString = parseTimeString; exports.useTimeRangeInputValidation = useTimeRangeInputValidation;