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.
 
 
 
 

201 lines
6.4 KiB

"use client";
import Image from "next/image";
import { useEffect, useState } from "react";
import { useRouter } from "next/navigation";
import Button from "@/components/ui/button";
import NavigationButton from "@/components/ui/navigation-button";
import ReportActionsSheet from "@/components/ui/report-actions-sheet";
import { authBridge } from "@/lib/auth-bridge";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import type { MarriageProfileResponse } from "@/hooks/marriage/types";
import { localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
const REDIRECT_SESSION_KEY = "redirect";
function getSubmitPath(profile: MarriageProfileResponse | undefined) {
const isInCase = profile?.status === "in_case";
const isFemaleAcceptedFlow =
isInCase &&
(profile?.active_case?.status === "payment_pending" ||
profile?.active_case?.status === "female_accepted" ||
profile?.active_case?.status === "payment_done");
return isFemaleAcceptedFlow
? "/request-accepted"
: isInCase && profile?.active_case?.status === "male_accepted"
? "/request-sent"
: profile?.status === "pending_onboarding"
? "/terms"
: profile?.status === "pending_info"
? "/questions-list"
: profile?.status === "waiting"
? "/finding-match"
: profile?.status === "in_case" || profile?.status === "matched"
? "/new-match"
: "/terms";
}
export default function Intro() {
const router = useRouter();
const { dictionary: t, locale } = useI18n();
const { data: profile, refetch } = useMarriageProfileQuery({
enabled: false,
retry: false,
});
const [isReportSheetOpen, setIsReportSheetOpen] = useState(false);
const [isSubmitting, setIsSubmitting] = useState(false);
const [isCheckingRedirect, setIsCheckingRedirect] = useState(true);
useEffect(() => {
let isCancelled = false;
const redirectIfNeeded = async () => {
const shouldRedirect =
authBridge.isAuthenticated() &&
window.sessionStorage.getItem(REDIRECT_SESSION_KEY) === "true";
if (!shouldRedirect) {
if (!isCancelled) {
setIsCheckingRedirect(false);
}
return;
}
const profileResponse = profile ?? (await refetch()).data;
const nextPath = localizePath(getSubmitPath(profileResponse), locale);
window.sessionStorage.removeItem(REDIRECT_SESSION_KEY);
if (!isCancelled) {
router.replace(nextPath);
}
};
void redirectIfNeeded();
return () => {
isCancelled = true;
};
}, [locale, profile, refetch, router]);
const handleSubmit = async () => {
if (isSubmitting) {
return;
}
setIsSubmitting(true);
try {
if (!authBridge.isAuthenticated()) {
const token = await authBridge.ensureToken();
if (!token) {
return;
}
}
} finally {
setIsSubmitting(false);
}
};
if (isCheckingRedirect) {
return null;
}
return (
<div className="pt-7">
{isReportSheetOpen && (
<ReportActionsSheet onClose={() => setIsReportSheetOpen(false)} />
)}
<header className="flex items-center justify-between">
<NavigationButton icon="back" />
<h1 className="font-faminela">{t.common.appName}</h1>
<NavigationButton
icon="support"
iconLabel={t.common.support}
onClick={() => setIsReportSheetOpen(true)}
/>
</header>
<main>
<div className="flex flex-col items-center mt-16">
<Image
src={"/assets/images/Group 1597880466.svg"}
alt={t.intro.imageAlt}
width={168}
height={155}
/>
<h2 className="text-[#475569] font-bold mt-5 text-center">
{t.intro.title}
</h2>
<p className=" text-center mt-2 text-xs text-[#4D4D4D]">
{t.intro.description}
</p>
</div>
<div className="flex items-center justify-between mt-4">
<div className="flex items-center gap-0.5 p-2 border border-[#FD6ABB]/10 rounded-2xl">
<Image
src={"/assets/images/tabler_user-filled.svg"}
alt="User"
width={37}
height={37}
/>
<div className="flex flex-col items-start justify-start -mb-2">
<p className="text-[#36363C] text-lg font-bold leading-3">120</p>
<p className="text-[#36363C] text-[10px] font-semibold">
{t.intro.userProfile}
</p>
</div>
</div>
<div className="flex items-center gap-0.5 p-2 border border-[#FD6ABB]/10 rounded-2xl">
<Image
src={"/assets/images/icon-park-solid_success.svg"}
alt="User"
width={37}
height={37}
/>
<div className="flex flex-col items-start justify-start -mb-2">
<p className="text-[#36363C] text-lg font-bold leading-3">14</p>
<p className="text-[#36363C] text-[10px] font-semibold">
{t.intro.matches}
</p>
</div>
</div>
<div className="flex items-center gap-0.5 p-2 border border-[#FD6ABB]/10 rounded-2xl">
<Image
src={"/assets/images/typcn_heart-full-outline.svg"}
alt="User"
width={37}
height={37}
/>
<div className="flex flex-col items-start justify-start -mb-2">
<p className="text-[#36363C] text-lg font-bold leading-3">14</p>
<p className="text-[#36363C] text-[10px] font-semibold">
{t.intro.marriage}
</p>
</div>
</div>
</div>
<div className="mt-14 relative">
<Image
src={"/assets/images/Frame 2095586523.png"}
alt={t.intro.videoAlt}
width={344}
height={221}
/>
<Image
src={"/assets/images/Frame 1116607280.svg"}
alt={t.intro.playAlt}
width={68}
height={68}
className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"
/>
</div>
<div className="mt-7 pb-5">
<Button onClick={handleSubmit} disabled={isSubmitting}>
{t.common.submit}
</Button>
</div>
</main>
</div>
);
}