"use client"; import { useState } from "react"; import Image from "next/image"; import { Ic } from "@/icons"; import StickyHeader from "@/components/Componentes/sticky-header"; import NavigationButton from "@/components/Componentes/navigation-button"; import { PageBackground } from "@/components/Componentes/page-background"; import SupportSheet from "@/components/Componentes/support-sheet"; import { useI18n } from "@/translations/provider"; import { useMarriageAdvisorsQuery, type MarriageConsultant, } from "@/hooks/marriage/use-marriage-advisors"; import { postActionToFlutter } from "@/lib/webview-actions"; const FALLBACK_AVATAR = "/assets/images/Avatar Image.png"; type MarriageAdvisorsPageProps = { onClose?: () => void; }; export default function MarriageAdvisorsPage({ onClose, }: MarriageAdvisorsPageProps = {}) { const { dictionary: t } = useI18n(); const [isSupportOpen, setIsSupportOpen] = useState(false); const { data, isLoading, isError, refetch } = useMarriageAdvisorsQuery(); const advisors = data?.results ?? []; const mainStyle = { backgroundImage: `url("/assets/images/islamic_pattern_2_2892_3864.svg")`, backgroundColor: "#F5F5F5", backgroundRepeat: "repeat-y", backgroundSize: "100% auto", }; // Opens the native Talk consultant page; the Flutter side fetches the // consultant by username, so only the bare username is needed. Outside the // WebView (plain browser) postActionToFlutter is a no-op returning false. const openConsultantPage = (username: string) => { postActionToFlutter("open_consultant_page", { consultant: username }); }; return ( <>

{t["Marriage advisors"]}

{isLoading && } {isError && (

{t["Failed to load advisors."]}

)} {!isLoading && !isError && advisors.length === 0 && (

{t["No advisors are currently available."]}

)} {advisors.map((advisor) => ( openConsultantPage(advisor.username)} /> ))}
setIsSupportOpen(false)} /> ); } function AdvisorCard({ advisor, onOpen, }: { advisor: MarriageConsultant; onOpen: () => void; }) { const { dictionary: t, locale } = useI18n(); const isRtl = locale === "fa" || locale === "ar" || locale === "ur"; const unreadCount = advisor.unread_count ?? 0; const isOnline = advisor.status === "online"; const rating = Number(advisor.avg_rate ?? 0); const hasChat = advisor.contact_type?.includes("chat"); const hasVoice = advisor.contact_type?.includes("voice"); const hasVideo = advisor.contact_type?.includes("video"); const hasActiveContact = hasChat || hasVoice || hasVideo; const topics = advisor.topics?.filter(Boolean) ?? []; return (
{ if (event.key === "Enter" || event.key === " ") { event.preventDefault(); onOpen(); } }} className="relative w-full max-w-[343px] cursor-pointer transition-transform active:scale-[0.98] outline-none" > {/* Outer Card Container */}
0 ? "border border-[#ECA533]" : "border border-[#EBEBEB]" }`} >
{/* Header Row: Avatar + Info + Rating */}
{/* Avatar with Status Dot */}
{advisor.avatar_url ? ( // eslint-disable-next-line @next/next/no-img-element {advisor.fullname { event.currentTarget.src = FALLBACK_AVATAR; }} /> ) : (
)} {/* Status indicator dot badge (top-start) */}
{/* Consultant Info */}
{advisor.is_ai && ( AI )}

{advisor.fullname ?? advisor.username}

{rating > 0 && (
{rating.toFixed(1)}
)}

{advisor.slogan ?? ""}

{/* Contact Chips */} {hasActiveContact && (
{hasChat && (
{t["Text Message"] || "Text Message"}
)} {hasVoice && (
{t["Voice Call"] || "Voice Call"}
)} {hasVideo && (
{t["Video Call"] || "Video Call"}
)}
)} {/* Topics Badges */} {topics.length > 0 && ( <>
{topics.map((topic) => ( {topic} ))}
)}
{/* Floating Unread Badge at Top Corner */} {unreadCount > 0 && (
{unreadCount} {t["New Message"] || "New Message"}
)}
); } function AdvisorsSkeleton() { return ( <> {[0, 1, 2].map((index) => (
))} ); }