@ozen-ui/kit
Version:
React component library
48 lines (47 loc) • 3.22 kB
JavaScript
import { __assign, __rest } from "tslib";
import './Calendar.css';
import React, { forwardRef } from 'react';
import { logger } from '@ozen-ui/logger';
import { useDevEffect } from '../../hooks/useDevEffect';
import { useThemeProps } from '../../hooks/useThemeProps';
import { getByMap } from '../../utils/getByMap';
import { CalendarModeRange, CalendarModeSingle } from './components';
import { CALENDAR_DEFAULT_CALENDARS, CALENDAR_DEFAULT_MODE, CALENDAR_DEFAULT_SIZE, CALENDAR_DEFAULT_START_DAY, CALENDAR_DEFAULT_STEPS, CALENDAR_DEFAULT_INITIAL_STEP, } from './constants';
import { getPeriodSwitchAriaLabel as createPeriodSwitchAriaLabel } from './utils';
var typeMap = {
range: CalendarModeRange,
single: CalendarModeSingle,
};
export var Calendar = forwardRef(function (inProps, ref) {
var props = useThemeProps({
props: inProps,
name: 'Calendar',
});
var _a = props.size, size = _a === void 0 ? CALENDAR_DEFAULT_SIZE : _a, _b = props.mode, mode = _b === void 0 ? CALENDAR_DEFAULT_MODE : _b, _c = props.startDay, startDay = _c === void 0 ? CALENDAR_DEFAULT_START_DAY : _c, _d = props.calendars, calendars = _d === void 0 ? CALENDAR_DEFAULT_CALENDARS : _d, getPeriodSwitchAriaLabelProp = props.getPeriodSwitchAriaLabel, stepsProp = props.steps, initialStepProp = props.initialStep, other = __rest(props, ["size", "mode", "startDay", "calendars", "getPeriodSwitchAriaLabel", "steps", "initialStep"]);
var initialStep = (function () {
if (initialStepProp) {
return initialStepProp;
}
if (stepsProp !== undefined && initialStepProp === undefined) {
return stepsProp[0];
}
return CALENDAR_DEFAULT_INITIAL_STEP;
})();
var steps = stepsProp !== null && stepsProp !== void 0 ? stepsProp : CALENDAR_DEFAULT_STEPS;
var getPeriodSwitchAriaLabel = getPeriodSwitchAriaLabelProp || createPeriodSwitchAriaLabel;
var Component = getByMap(typeMap, mode);
useDevEffect(function () {
if (steps.length === 0) {
logger.error('steps не может быть пустым массивом.');
return;
}
if (!steps.includes(initialStep)) {
logger.error("initialStep \"".concat(initialStep, "\" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u0432 steps [").concat(steps.map(function (step) { return "\"".concat(step, "\""); }).join(', '), "]."));
}
if (steps.length !== new Set(steps).size) {
logger.error("\u0412 steps [".concat(steps.map(function (step) { return "\"".concat(step, "\""); }).join(', '), "] \u0435\u0441\u0442\u044C \u0434\u0443\u0431\u043B\u0438\u0440\u0443\u044E\u0449\u0438\u0435 \u0448\u0430\u0433\u0438, \u043F\u0435\u0440\u0435\u043F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043C\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435."));
}
}, [steps, initialStep]);
return (React.createElement(Component, __assign({ size: size, startDay: startDay, calendars: calendars, getPeriodSwitchAriaLabel: getPeriodSwitchAriaLabel, steps: steps, initialStep: initialStep }, other, { ref: ref })));
});
Calendar.displayName = 'Calendar';