"use client"; import type { HTMLAttributes } from "react"; import { useEffect, useId, useState } from "react"; import { useI18n } from "@/translations/provider"; const EXIT_ANIMATION_MS = 220; export type CallResultSheetProps = Omit< HTMLAttributes, "title" | "onSubmit" > & { closeOnOutside?: boolean; onClose?: () => void; onSubmit?: (value: string) => void; onOtherReasonsClick?: () => void; }; export function CallResultSheet({ closeOnOutside = true, onClose, onSubmit, onOtherReasonsClick, className, ...props }: CallResultSheetProps) { const { dictionary: t } = useI18n(); const callResultOptions = t.sheets.callOptions; const groupId = useId(); const [isVisible, setIsVisible] = useState(true); const [isEntering, setIsEntering] = useState(true); const [isClosing, setIsClosing] = useState(false); const [selectedReason, setSelectedReason] = useState( callResultOptions[0], ); const closeSheet = () => { if (isClosing) { return; } setIsClosing(true); }; useEffect(() => { const frameId = window.requestAnimationFrame(() => { setIsEntering(false); }); return () => { window.cancelAnimationFrame(frameId); }; }, []); useEffect(() => { if (!isVisible) { return; } const previousBodyOverflow = document.body.style.overflow; const previousHtmlOverflow = document.documentElement.style.overflow; document.body.style.overflow = "hidden"; document.documentElement.style.overflow = "hidden"; return () => { document.body.style.overflow = previousBodyOverflow; document.documentElement.style.overflow = previousHtmlOverflow; }; }, [isVisible]); useEffect(() => { if (!isClosing) { return; } const timeoutId = window.setTimeout(() => { setIsVisible(false); onClose?.(); }, EXIT_ANIMATION_MS); return () => { window.clearTimeout(timeoutId); }; }, [isClosing, onClose]); if (!isVisible) { return null; } return (
{ if (closeOnOutside && event.target === event.currentTarget) { closeSheet(); } }} onKeyDown={(event) => { if ( closeOnOutside && event.target === event.currentTarget && (event.key === "Escape" || event.key === "Enter" || event.key === " ") ) { event.preventDefault(); closeSheet(); } }} >

{t.sheets.callResult}

{t.sheets.selectCallResult}
{callResultOptions.map((option) => { const checked = selectedReason === option; return ( ); })}
); } export default CallResultSheet;