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.
77 lines
2.6 KiB
77 lines
2.6 KiB
"use client";
|
|
|
|
import { useEffect } from "react";
|
|
import { useRouter } from "next/navigation";
|
|
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
|
|
import {
|
|
getSubmitPath,
|
|
hasCompletedMarriageProfileBasics,
|
|
} from "@/lib/get-submit-path";
|
|
import { useHabibWebReady } from "@/hooks/use-habib-web-ready";
|
|
import SliderPage from "@/components/Componentes/slider-page";
|
|
import Button from "@/components/Componentes/button";
|
|
import { useI18n } from "@/translations/provider";
|
|
import { localizePath } from "@/translations/config";
|
|
|
|
export default function TermsRoute() {
|
|
const { data: profile, isLoading, isError, refetch } = useMarriageProfileQuery();
|
|
const router = useRouter();
|
|
const { locale, dictionary: t } = useI18n();
|
|
|
|
// Signal Flutter when profile data is available (or failed — the page
|
|
// has its own loading/error UI so the cover can safely be removed).
|
|
useHabibWebReady(!isLoading);
|
|
|
|
useEffect(() => {
|
|
if (!isLoading && profile) {
|
|
if (
|
|
profile.status !== "pending_onboarding" ||
|
|
hasCompletedMarriageProfileBasics(profile)
|
|
) {
|
|
const target = getSubmitPath(profile);
|
|
if (target !== "/terms") {
|
|
router.replace(localizePath(target, locale));
|
|
}
|
|
}
|
|
}
|
|
}, [profile, isLoading, router, locale]);
|
|
|
|
if (isLoading) {
|
|
return (
|
|
<div className="flex h-[100dvh] items-center justify-center bg-[#F5F5F5]">
|
|
<div className="size-8 animate-spin rounded-full border-4 border-[#F14B46] border-t-transparent" />
|
|
</div>
|
|
);
|
|
}
|
|
|
|
if (isError) {
|
|
return (
|
|
<div className="flex h-[100dvh] flex-col items-center justify-center p-4 bg-[#F5F5F5]">
|
|
<p className="mb-4 text-center font-medium text-[#F14B46]">
|
|
{t["Failed to load profile. Please try again."] || "Failed to load profile. Please try again."}
|
|
</p>
|
|
<div className="w-full max-w-[200px]">
|
|
<Button onClick={() => refetch()}>
|
|
{t["Retry"] || "Retry"}
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
if (
|
|
profile &&
|
|
(profile.status !== "pending_onboarding" ||
|
|
hasCompletedMarriageProfileBasics(profile))
|
|
) {
|
|
// If target is /terms but status is not pending_onboarding, we should still not render SliderPage
|
|
// to prevent showing Onboarding to users who already finished it but have an unknown status.
|
|
return (
|
|
<div className="flex h-[100dvh] items-center justify-center bg-[#F5F5F5]">
|
|
<div className="size-8 animate-spin rounded-full border-4 border-[#F14B46] border-t-transparent" />
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return <SliderPage />;
|
|
}
|