import React, { InputHTMLAttributes, forwardRef } from "react"; import { CalendarIcon } from "@navikt/aksel-icons"; import { Button } from "../button"; import { ReadOnlyIcon } from "../form/ReadOnlyIcon"; import { FormFieldProps, useFormField } from "../form/useFormField"; import { BodyShort, ErrorMessage, Label } from "../typography"; import { omit } from "../utils-external"; import { cl, createStrictContext } from "../utils/helpers"; import { useDateTranslationContext } from "./Date.locale"; interface DateInputContextProps { /** * Open state for popover */ open: boolean; /** * Callback for onOpen toggle */ onOpen: () => void; /** * Aria-connected ID */ ariaId?: string; /** * Flag for enabled-check */ defined: boolean; } export const { Provider: DateInputContextProvider, useContext: useDateInputContext, } = createStrictContext({ name: "DateInputContext", errorMessage: "useDateInputContext must be used with DateInputContext", }); export interface DateInputProps extends FormFieldProps, Omit, "size"> { /** * Input label */ label: React.ReactNode; /** * Shows label and description for screen readers only * @default false */ hideLabel?: boolean; /** * Changes padding and font-sizes * @default "medium" */ size?: "medium" | "small"; /** * @private */ variant?: "datepicker" | "monthpicker"; /** * @private */ setAnchorRef?: React.Dispatch>; } const DateInput = forwardRef((props, ref) => { const { className, hideLabel = false, label, description, variant = "datepicker", setAnchorRef, "data-color": dataColor, ...rest } = props; const translate = useDateTranslationContext().translate; const isDatepickerVariant = variant === "datepicker"; const conditionalVariables = { prefix: isDatepickerVariant ? "datepicker-input" : "monthpicker-input", iconTitle: { open: isDatepickerVariant ? "openDatePicker" : "openMonthPicker", close: isDatepickerVariant ? "closeDatePicker" : "closeMonthPicker", }, } as const; const context = useDateInputContext(); const { inputProps, size = "medium", inputDescriptionId, errorId, showErrorMsg, hasError, readOnly, } = useFormField(props, conditionalVariables.prefix); return (
{!!description && ( {description} )}
{showErrorMsg && ( {props.error} )}
); }); export const DatePickerInput = forwardRef( (props, ref) => , ); export const MonthPickerInput = forwardRef( (props, ref) => , );