UNPKG

@i-novus/ui-core

Version:

Базовые UI компоненты

61 lines (60 loc) 2.12 kB
import { useCallback } from 'react'; import { INTERVAL_SEPARATOR, OUTPUT_FORMAT } from '../../../const'; import { getValidDayjs } from '../../../dayjs-utils'; const parseIntervalString = (interval) => { if (!interval) { return { begin: null, end: null, }; } const [begin, end] = interval.split(INTERVAL_SEPARATOR); return { begin: begin?.trim() || null, end: end?.trim() || null, }; }; const prepareValue = (value, limiter, format) => { let begin = getValidDayjs(value.begin, format); let end = getValidDayjs(value.end, format); const { min, max } = limiter; if (begin && end) { /** * Дата начала не может быть меньше минимально допустимой */ if (min && (begin < min)) { begin = min; } /** * Дата начала не может быть больше максимально допустимой */ if (max && (begin > max)) { begin = max; } /** * Дата окончания не может быть больше максимально допустимой */ if (max && (end > max)) { end = max; } /** * Дата начала не может быть больше даты окончания. * В этом случае считаем дату окончания ошибочной и равной дате начала. */ if (begin > end) { end = begin; } } return ({ begin: begin?.format(OUTPUT_FORMAT) ?? null, end: end?.format(OUTPUT_FORMAT) ?? null, }); }; export const useHandleInputCompleteHook = (callback, config) => { const { min, max, format } = config; return (useCallback((value) => { const parsedValue = parseIntervalString(value); const validISODateString = prepareValue(parsedValue, { min, max }, format); callback(validISODateString); }, [min, max, format, callback])); };