UNPKG

@hitachivantara/uikit-react-core

Version:

Core React components for the NEXT Design System.

127 lines (126 loc) 4.8 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const jsxRuntime = require("react/jsx-runtime"); const React = require("react"); const uikitReactUtils = require("@hitachivantara/uikit-react-utils"); const keyboardUtils = require("../../utils/keyboardUtils.cjs"); const setId = require("../../utils/setId.cjs"); const utils = require("../utils.cjs"); const CalendarHeader_styles = require("./CalendarHeader.styles.cjs"); const Input = require("../../Input/Input.cjs"); const context = require("../../FormElement/context.cjs"); const Typography = require("../../Typography/Typography.cjs"); const HvCalendarHeader = (props) => { const { id: idProp, value: valueProp, locale = utils.DEFAULT_LOCALE, classes: classesProp, onChange, showEndDate, showDayOfWeek = false, onFocus, invalidDateLabel = "Invalid Date" } = uikitReactUtils.useDefaultProps("HvCalendarHeader", props); const { classes, cx } = CalendarHeader_styles.useClasses(classesProp); const context$1 = React.useContext(context.HvFormElementContext); const { label } = React.useContext(context.HvFormElementDescriptorsContext); const localValue = utils.isRange(valueProp) ? showEndDate ? valueProp.endDate : valueProp.startDate : valueProp; const [dateValue, setDateValue] = React.useState(localValue); const [editedValue, setEditedValue] = React.useState(null); const [displayValue, setDisplayValue] = React.useState(""); const [weekdayDisplay, setWeekdayDisplay] = React.useState(""); const id = idProp ?? setId.setId(context$1.id, "calendarHeader"); const inputValue = editedValue ?? displayValue; const localeFormat = utils.getLocaleDateFormat(locale); const [isValidValue, setIsValidValue] = React.useState( inputValue.length === 0 || inputValue && utils.isDate(new Date(inputValue)) ); React.useEffect(() => { const valid = !localValue || utils.isDate(new Date(localValue)); setIsValidValue(valid); if (valid) { if (!localValue) { setDisplayValue(""); setEditedValue(null); setWeekdayDisplay(""); return; } const weekday = new Intl.DateTimeFormat(locale, { weekday: "short" }).format(utils.isDate(localValue) ? localValue : 0); setDisplayValue(utils.getFormattedDate(localValue, locale)); setEditedValue(null); setWeekdayDisplay(weekday); } }, [localValue, locale]); const handleNewDate = (event, date) => { const localeParsedDate = utils.parseDateString(date, locale); const isValidInput = utils.isDate(localeParsedDate); const dateParsed = isValidInput ? localeParsedDate : new Date(date); if (!utils.isSameDay(dateParsed, dateValue)) { setDateValue(dateParsed); onChange?.(event, dateParsed); } setIsValidValue(isValidInput); if (isValidInput) { setEditedValue(null); } }; const onBlurHandler = (event) => { if (editedValue == null) return; if (editedValue === "") { setIsValidValue(true); setEditedValue(null); return; } handleNewDate(event, editedValue); }; const keyDownHandler = (event) => { if (!keyboardUtils.isKey(event, "Enter") || editedValue == null || editedValue === "") return; event.preventDefault(); handleNewDate(event, editedValue); }; const onFocusHandler = (event) => { if (!localValue) return; const formattedDate = isValidValue && utils.isDate(localValue) ? utils.getStringFromDate(localValue, locale) : editedValue; setEditedValue(formattedDate); onFocus?.(event, formattedDate); }; const onChangeHandler = (event, val) => { setEditedValue(val); }; const isInvalid = !isValidValue && inputValue !== ""; return /* @__PURE__ */ jsxRuntime.jsxs( "div", { id, className: cx(classes.root, { [classes.invalid]: isInvalid }), children: [ showDayOfWeek && /* @__PURE__ */ jsxRuntime.jsx(Typography.HvTypography, { className: classes.headerDayOfWeek, children: weekdayDisplay || " " }), /* @__PURE__ */ jsxRuntime.jsx( Input.HvInput, { type: "text", id: setId.setId(id, "header-input"), placeholder: localeFormat, value: inputValue, "aria-labelledby": label?.[0]?.id, onBlur: onBlurHandler, onFocus: onFocusHandler, onChange: onChangeHandler, onKeyDown: keyDownHandler, status: isInvalid ? "invalid" : "valid", statusMessage: invalidDateLabel } ) ] } ); }; HvCalendarHeader.formElementType = "HvCalendarHeader"; exports.calendarHeaderClasses = CalendarHeader_styles.staticClasses; exports.HvCalendarHeader = HvCalendarHeader;