You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

74 lines
2.0 KiB

"use client";
import { useEffect, useMemo, useState } from "react";
import type { FormOverviewSection } from "@/hooks/marriage/use-form-schema";
import TermsSheet, {
TERMS_SECTIONS,
type TermItem,
type TermSection,
type TermsSheetProps,
} from "@/components/Componentes/terms-sheet";
const FIRST_ENTRY_TERMS_SEEN_KEY = "marriage:first-entry-terms-seen";
export { TERMS_SECTIONS, type TermItem, type TermSection, type TermsSheetProps };
export default function SectionsRequest({
sections,
isOpen: controlledIsOpen,
onClose: controlledOnClose,
}: {
sections?: FormOverviewSection[] | undefined;
isOpen?: boolean;
onClose?: () => void;
}) {
const [hasSeenSheet, setHasSeenSheet] = useState(true);
const [isAutoOpenDismissed, setIsAutoOpenDismissed] = useState(false);
const hasNoProgression = useMemo(() => {
if (!sections?.length) {
return false;
}
return sections.every(
(section) =>
section.progress.current_step <= 0 &&
section.progress.completion_percent <= 0,
);
}, [sections]);
useEffect(() => {
try {
const seenLocal =
window.localStorage.getItem(FIRST_ENTRY_TERMS_SEEN_KEY) === "true";
const seenSession =
window.sessionStorage.getItem(FIRST_ENTRY_TERMS_SEEN_KEY) === "true";
setHasSeenSheet(seenLocal || seenSession);
} catch (e) {
console.warn("Storage is not accessible:", e);
setHasSeenSheet(false);
}
}, []);
const isAutoOpen =
Boolean(sections) && hasNoProgression && !hasSeenSheet && !isAutoOpenDismissed;
const isSheetOpen = Boolean(controlledIsOpen) || isAutoOpen;
const handleClose = () => {
setIsAutoOpenDismissed(true);
try {
window.localStorage.setItem(FIRST_ENTRY_TERMS_SEEN_KEY, "true");
window.sessionStorage.setItem(FIRST_ENTRY_TERMS_SEEN_KEY, "true");
} catch (e) {
console.warn("Storage is not accessible:", e);
}
controlledOnClose?.();
};
return (
<TermsSheet
isOpen={isSheetOpen}
onClose={handleClose}
/>
);
}