UNPKG

@kelvininc/ui-components

Version:
66 lines (65 loc) 2.82 kB
import { isEmpty, isNil, isNumber } from "lodash-es"; import { EAbsoluteTimeError, EAbsoluteTimePickerMode } from "../../types"; import { CALENDAR_DATE_TIME_MASK } from "../absolute-time-picker/absolute-time-picker.config"; import { createTimestampInTimezoneFromFormattedDate } from "../time-picker/time-picker.helper"; import dayjs from "dayjs"; export const getSelectedTimestampDates = (range, mode, timezoneName) => { if ((range === null || range === void 0 ? void 0 : range.length) === 0) return []; if (mode === EAbsoluteTimePickerMode.Single) { const [date] = range; return [createTimestampInTimezoneFromFormattedDate(date, timezoneName, CALENDAR_DATE_TIME_MASK)]; } const [from, to] = range; const dateFrom = createTimestampInTimezoneFromFormattedDate(from, timezoneName, CALENDAR_DATE_TIME_MASK); const dateTo = !isEmpty(to) ? createTimestampInTimezoneFromFormattedDate(to, timezoneName, CALENDAR_DATE_TIME_MASK) : undefined; return [dateFrom, dateTo]; }; export const getFormattedSelectedDates = (range, mode, timezoneName) => { if (isEmpty(range)) return []; if (mode === EAbsoluteTimePickerMode.Single) { const [date] = range; return [dayjs(date).tz(timezoneName).format(CALENDAR_DATE_TIME_MASK)]; } const [from, to] = range; const dateFrom = dayjs(from).tz(timezoneName).format(CALENDAR_DATE_TIME_MASK); const dateTo = !isNil(to) ? dayjs(to).tz(timezoneName).format(CALENDAR_DATE_TIME_MASK) : undefined; return [dateFrom, dateTo]; }; export const getAbsoluteTimePickerError = (range, mode, limits) => { if (!isAbsoluteTimePickerFilled(range, mode)) { return; } if (mode === EAbsoluteTimePickerMode.Single) { const [date] = range; if (limits.minDate && dayjs(date).isBefore(limits.minDate)) { return EAbsoluteTimeError.StartDateBeforeMinimumDate; } if (limits.maxDate && dayjs(date).isAfter(limits.maxDate)) { return EAbsoluteTimeError.EndDateAfterMaximumDate; } return; } const [startDate, endDate] = range; if (!dayjs(endDate).isAfter(startDate)) { return EAbsoluteTimeError.EndDateBeforeStartDate; } if (limits.minDate && dayjs(startDate).isBefore(limits.minDate)) { return EAbsoluteTimeError.StartDateBeforeMinimumDate; } if (limits.maxDate && dayjs(endDate).isAfter(limits.maxDate)) { return EAbsoluteTimeError.EndDateAfterMaximumDate; } return; }; export const isAbsoluteTimePickerFilled = (range, mode) => { if (isEmpty(range)) return false; if (mode === EAbsoluteTimePickerMode.Single) { const [date] = range; return isNumber(date); } const [from, to] = range; return isNumber(from) && isNumber(to); };