"use client"; import type { HTMLAttributes } from "react"; import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react"; import { useI18n } from "@/translations/provider"; const EXIT_ANIMATION_MS = 200; 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 = useMemo( () => [ t["Not a good personal fit"], t["No mutual interest"], t["Different expectations"], t["No connection felt"], t["Location not suitable"], t["Other reasons"], ], [t], ); const groupId = useId(); const [isVisible, setIsVisible] = useState(true); const [isClosing, setIsClosing] = useState(false); const [selectedReason, setSelectedReason] = useState( callResultOptions[0], ); const isMountedRef = useRef(true); useEffect(() => { isMountedRef.current = true; return () => { isMountedRef.current = false; }; }, []); const closeSheet = useCallback(() => { if (isClosing) { return; } setIsClosing(true); window.setTimeout(() => { if (isMountedRef.current) { setIsVisible(false); } onClose?.(); }, EXIT_ANIMATION_MS); }, [isClosing, onClose]); 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]); 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["Call result"]}

{t["Select call result"]}
{callResultOptions.map((option) => { const checked = selectedReason === option; return ( ); })}
); } export default CallResultSheet;