Browse Source

feat: implement marriage match profile view with acceptance and rejection workflows

front-test-2
ghorbani 4 weeks ago
parent
commit
6287801452
  1. 6
      src/app/new-match/profile/page.tsx
  2. 39
      src/app/request-accepted/page.tsx
  3. 2
      src/hooks/marriage/types.ts

6
src/app/new-match/profile/page.tsx

@ -116,11 +116,15 @@ export default function NewMatchProfilePage() {
const respondMutation = useRespondToMarriageCaseMutation(caseId ?? "", {
onSuccess: async (_, variables) => {
if (variables.action === "accept") {
if (isFemaleProfile) {
router.push(localizePath("/request-accepted", locale));
} else {
router.push(localizePath("/request-sent", locale));
}
return;
}
router.push(localizePath("/candidate-contact", locale));
router.push(localizePath("/finding-match", locale));
},
});

39
src/app/request-accepted/page.tsx

@ -12,6 +12,7 @@ import SubscriptionRequiredSheet from "@/components/ui/subscription-required-she
import { PageBackground } from "@/components/utils/page-background";
import type { MarriageField, MarriagePhoneFieldValue } from "@/hooks/marriage/types";
import { useMarriageContactInfoQuery } from "@/hooks/marriage/use-contact-info";
import { useSubmitMarriageContactStatusMutation } from "@/hooks/marriage/use-contact-status";
import {
extractHabcoinPaymentUrl,
useHabcoinPaymentMutation,
@ -158,6 +159,11 @@ export default function RequestAcceptedPage() {
const caseStatus = profile?.active_case?.status;
const recommendedPlanId = profile?.recommended_plan?.id;
const paymentMutation = useHabcoinPaymentMutation();
const contactStatusMutation = useSubmitMarriageContactStatusMutation(caseId ?? "", {
onSuccess: () => {
router.push(localizePath("/finding-match", locale));
},
});
const contactInfoQuery = useMarriageContactInfoQuery(caseId, {
enabled: false,
});
@ -217,12 +223,30 @@ export default function RequestAcceptedPage() {
}
};
const handleNoContactReport = async () => {
if (!caseId || contactStatusMutation.isPending) return;
await contactStatusMutation.mutateAsync({
action: "no_contact",
custom_note: "No contact reported by female candidate after decision window",
});
};
return (
<>
<PageBackground />
{isCallResultSheetOpen ? (
<CallResultSheet onClose={() => setIsCallResultSheetOpen(false)} />
<CallResultSheet
onClose={() => setIsCallResultSheetOpen(false)}
onSubmit={async (value) => {
if (caseId) {
await contactStatusMutation.mutateAsync({
action: "contacted",
custom_note: value,
});
}
}}
/>
) : null}
{isContactInfoSheetOpen ? (
@ -287,11 +311,24 @@ export default function RequestAcceptedPage() {
</p>
<div className="flex mt-9 w-full justify-center gap-4">
{isFemaleProfile ? (
<button
type="button"
onClick={handleNoContactReport}
disabled={contactStatusMutation.isPending}
className="max-w-[212px] cursor-pointer appearance-none border-0 bg-transparent p-0 text-left"
>
<div className="bg-[#F5F5F5] px-4 py-2 rounded-[15px] shadow group-14 text-center font-semibold text-[#36363C] hover:bg-[#EBEBEB] transition-colors">
{primaryActionText}
</div>
</button>
) : (
<Link href={profileHref} className="max-w-[212px]">
<div className="bg-[#F5F5F5] px-4 py-2 rounded-[15px] shadow group-14 text-center font-semibold text-[#36363C]">
{primaryActionText}
</div>
</Link>
)}
<button
type="button"

2
src/hooks/marriage/types.ts

@ -154,6 +154,8 @@ export type RespondMarriageCasePayload = {
export type SubmitMarriageContactStatusPayload = {
action: "contacted" | "no_contact";
reason_code?: string;
custom_note?: string;
};
export type MarriageCaseActionResponse = {

Loading…
Cancel
Save