From a99a66d80155cd89ab95b85f3637b63ce1245bca Mon Sep 17 00:00:00 2001 From: mortezaei Date: Sun, 30 Aug 2026 04:46:10 +0330 Subject: [PATCH] refactor: standardize profile opening flow using async refetching and replace deprecated useEffect-based logic across match modules --- src/app/new-match/new-match-client.tsx | 63 +++++++++++++------ src/app/new-match/profile/page.tsx | 2 +- .../request-accepted-client.tsx | 38 ++++++----- src/app/request-sent/request-sent-client.tsx | 33 +++++----- 4 files changed, 84 insertions(+), 52 deletions(-) diff --git a/src/app/new-match/new-match-client.tsx b/src/app/new-match/new-match-client.tsx index 8578b76..fcb440b 100644 --- a/src/app/new-match/new-match-client.tsx +++ b/src/app/new-match/new-match-client.tsx @@ -488,9 +488,15 @@ export default function NewMatchClient() { const { isAdvisorOpen, openAdvisors, closeAdvisors } = useMarriageAdvisorsOverlay(); const { isProfileOpen, openProfile, closeProfile } = useMatchProfileOverlay(); + const { + data: profile, + isError, + isLoading, + isFetched, + isFetching, + refetch: refetchProfile, + } = useMarriageProfileQuery(); const [isOpeningProfile, setIsOpeningProfile] = useState(false); - const { data: profile, isError, isLoading, isFetched } = - useMarriageProfileQuery(); const [isPaymentSheetOpen, setIsPaymentSheetOpen] = useState(false); const [isDeclineConfirmOpen, setIsDeclineConfirmOpen] = useState(false); const [paymentError, setPaymentError] = useState(null); @@ -608,20 +614,43 @@ export default function NewMatchClient() { // Signal Flutter to lift its loading cover immediately with 0ms latency. useHabibWebReady(true); - const handleOpenProfile = () => { - if (profile) { - openProfile(); - } else { + const handleOpenProfile = async () => { + // If profile has not yet completed its initial server fetch or is in flight: + if (!isFetched || isFetching) { setIsOpeningProfile(true); + try { + const result = await refetchProfile(); + const freshProfile = result.data ?? profile; + setIsOpeningProfile(false); + + const isMaleUser = freshProfile?.gender === "male"; + const hasActiveSubscription = + !!freshProfile?.active_subscription && + freshProfile.active_subscription.is_active !== false && + freshProfile.active_subscription.is_valid !== false; + + if (isMaleUser && !hasActiveSubscription) { + setIsPaymentSheetOpen(true); + } else { + openProfile(); + } + } catch (err) { + setIsOpeningProfile(false); + if (isMale && !hasActiveSub) { + setIsPaymentSheetOpen(true); + } else { + openProfile(); + } + } + return; } - }; - useEffect(() => { - if (isOpeningProfile && profile) { - setIsOpeningProfile(false); + if (isMale && !hasActiveSub) { + setIsPaymentSheetOpen(true); + } else { openProfile(); } - }, [isOpeningProfile, profile, openProfile]); + }; const isRedirecting = useMemo(() => { if (!profile) return false; @@ -835,14 +864,8 @@ export default function NewMatchClient() { {/* Button */}