import clsx from "clsx"; import { forwardRef, ReactNode, Ref, RefObject, useEffect, useImperativeHandle, useRef, useState } from "react"; import EntityIcon from "../../layouts/icons/EntityIcon"; import HintTooltip from "../tooltips/HintTooltip"; export interface RefInputDate { input: RefObject; } interface Props { name?: string; title: string; defaultValue?: Date; value?: Date; onChange?: (date: Date) => void; className?: string; help?: string; disabled?: boolean; readOnly?: boolean; required?: boolean; hint?: ReactNode; icon?: string; darkMode?: boolean; autoFocus?: boolean; } const InputDate = ( { name, title, value, defaultValue, onChange, className, help, disabled = false, readOnly = false, required = false, hint, icon, darkMode, autoFocus }: Props, ref: Ref ) => { useImperativeHandle(ref, () => ({ input })); const input = useRef(null); const [actualValue, setActualValue] = useState(""); useEffect(() => { if (defaultValue) { setActualValue(defaultValue?.toISOString().split("T")[0]); } }, [defaultValue]); useEffect(() => { if (value) { const date = new Date(value); if (date) { setActualValue(date.toISOString().split("T")[0]); } } }, [value]); useEffect(() => { if (defaultValue) { const date = new Date(defaultValue); if (date) { setActualValue(date.toISOString().split("T")[0]); } } }, [defaultValue]); useEffect(() => { if (onChange && actualValue) { const date = new Date(actualValue); if (date) { onChange(date); } } // eslint-disable-next-line react-hooks/exhaustive-deps }, [actualValue]); return (
{icon && (
)} setActualValue(e.currentTarget.value)} disabled={disabled} readOnly={readOnly} autoFocus={autoFocus} className={clsx( "block w-full min-w-0 flex-1 rounded-md border-gray-300 focus:border-accent-500 focus:ring-accent-500 sm:text-sm", className, (disabled || readOnly) && "cursor-not-allowed bg-gray-100", icon && "pl-10" )} />
); }; export default forwardRef(InputDate);