@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
110 lines (109 loc) • 3.23 kB
JavaScript
import { jsx, jsxs } from "react/jsx-runtime";
import { useContext } from "react";
import { useDefaultProps } from "@hitachivantara/uikit-react-utils";
import { setId } from "../utils/setId.js";
import { useClasses } from "./Calendar.styles.js";
import { staticClasses } from "./Calendar.styles.js";
import { DEFAULT_LOCALE, isRange } from "./utils.js";
import { HvFormElementContext, HvFormElementValueContext } from "../FormElement/context.js";
import { HvSingleCalendar } from "./SingleCalendar/SingleCalendar.js";
const HvCalendar = (props) => {
const {
classes: classesProp,
id: idProp,
locale = DEFAULT_LOCALE,
value: valueProp,
visibleMonth,
visibleYear,
rightVisibleMonth,
rightVisibleYear,
minimumDate,
maximumDate,
startAdornment,
onChange,
onInputChange,
onVisibleDateChange,
invalidDateLabel,
...others
} = useDefaultProps("HvCalendar", props);
const { classes } = useClasses(classesProp);
const context = useContext(HvFormElementContext);
const elementValue = useContext(HvFormElementValueContext);
const value = valueProp ?? elementValue;
const id = idProp ?? setId(context.id, "single-calendar");
const rangeMode = isRange(value);
const rightCalendarId = setId(id, "single-calendar-right");
const clampedMonth = visibleMonth && visibleMonth % 13 > 0 ? visibleMonth % 13 : 1;
const singleCalendar = /* @__PURE__ */ jsx(
HvSingleCalendar,
{
id,
locale,
value,
visibleMonth: clampedMonth,
visibleYear,
minimumDate,
maximumDate,
onChange,
onInputChange: (evt, date) => {
onInputChange?.(evt, date, "left");
},
onVisibleDateChange,
invalidDateLabel,
...others
}
);
const rangeCalendar = /* @__PURE__ */ jsxs("div", { className: classes.rangeCalendarContainer, children: [
/* @__PURE__ */ jsx(
HvSingleCalendar,
{
className: classes.singleCalendar,
id,
locale,
value,
visibleMonth: clampedMonth,
visibleYear,
minimumDate,
maximumDate,
onChange,
onInputChange: (evt, date) => {
onInputChange?.(evt, date, "left");
},
onVisibleDateChange: (event, action, index) => onVisibleDateChange?.(event, action, index, "left"),
invalidDateLabel,
...others
}
),
/* @__PURE__ */ jsx(
HvSingleCalendar,
{
className: classes.singleCalendar,
id: rightCalendarId,
locale,
value,
visibleMonth: rightVisibleMonth,
visibleYear: rightVisibleYear,
minimumDate,
maximumDate,
onChange,
onInputChange: (evt, date) => {
onInputChange?.(evt, date, "right");
},
onVisibleDateChange: (event, action, index) => {
onVisibleDateChange?.(event, action, index, "right");
},
showEndDate: true,
invalidDateLabel,
...others
}
)
] });
return /* @__PURE__ */ jsxs("div", { className: classes.root, children: [
startAdornment,
rangeMode ? rangeCalendar : singleCalendar
] });
};
export {
HvCalendar,
staticClasses as calendarClasses
};