@opensig/opendesign
Version:
94 lines (93 loc) • 3.67 kB
JavaScript
;
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;