"use client"; import { useEffect, useState } from "react"; import Button from "@/components/ui/button"; import { useFlutterBridge } from "@/hooks/useFlutterBridge"; const EXIT_ANIMATION_MS = 220; type ReportActionsSheetProps = { onClose?: () => void; }; export function ReportActionsSheet({ onClose }: ReportActionsSheetProps) { const [isVisible, setIsVisible] = useState(true); const [isEntering, setIsEntering] = useState(true); const [isClosing, setIsClosing] = useState(false); const [showLogs, setShowLogs] = useState(false); const { sendToFlutter, logs, lastEvent, isReady } = useFlutterBridge({ enableLogging: true, }); const closeSheet = () => { if (isClosing) return; setIsClosing(true); }; // ✅ دکمه WEB_READY const handleSendWebReady = () => { sendToFlutter("WEB_READY", { timestamp: Date.now(), url: window.location.href, userAgent: navigator.userAgent, }); console.log("✅ WEB_READY ارسال شد"); }; // ✅ دکمه دریافت موقعیت مکانی // پل اکنون از کانال واقعی HabibApp استفاده می‌کند، پس یک‌بار ارسال کافی است. const handleGetLocation = () => { sendToFlutter("REQUEST_LOCATION"); console.log("📍 REQUEST_LOCATION ارسال شد"); }; // ✅ دکمه مشاور const handleOpenConsultant = () => { sendToFlutter("REQUEST_CONSULTANT", { consultant: "habib@gmail.com", }); console.log("👨‍⚕️ REQUEST_CONSULTANT ارسال شد"); }; useEffect(() => { const frameId = window.requestAnimationFrame(() => { setIsEntering(false); }); return () => window.cancelAnimationFrame(frameId); }, []); useEffect(() => { if (!isVisible) return; const previousBodyOverflow = document.body.style.overflow; const previousHtmlOverflow = document.documentElement.style.overflow; document.body.style.overflow = "hidden"; document.documentElement.style.overflow = "hidden"; return () => { document.body.style.overflow = previousBodyOverflow; document.documentElement.style.overflow = previousHtmlOverflow; }; }, [isVisible]); useEffect(() => { if (!isClosing) return; const timeoutId = window.setTimeout(() => { setIsVisible(false); onClose?.(); }, EXIT_ANIMATION_MS); return () => window.clearTimeout(timeoutId); }, [isClosing, onClose]); useEffect(() => { const handleFlutterResponse: NonNullable = (event) => { if (event.action === "get_location" && event.success && event.data) { const message = `Location: ${event.data.latitude}, ${event.data.longitude}`; alert(message); } }; const unsubscribe = window.addFlutterResponseListener?.(handleFlutterResponse); return () => { unsubscribe?.(); }; }, []); if (!isVisible) return null; return (
{ if (event.target === event.currentTarget) closeSheet(); }} >
{/* Header */}

تنظیمات و پشتیبانی

{/* دکمه‌های اصلی */}
{/* دکمه تست WEB_READY */}

🧪 تست ارتباط با Flutter:

{/* نمایش آخرین ایونت دریافتی */} {lastEvent && (

📥 آخرین ایونت از Flutter:

{lastEvent.type}
{JSON.stringify(lastEvent.payload, null, 2)}
)} {/* لاگ‌ها */}

📋 لاگ‌ها ({logs.length})

{showLogs && (
{logs.length === 0 ? (

هنوز لاگی ثبت نشده

) : ( logs.slice(-10).map((log, index) => (
{log}
)) )}
)}
{/* راهنما */}

💡 راهنما:
• WEB_READY هنگام باز شدن این شیت به‌صورت خودکار از کانال HabibApp ارسال می‌شود
• نقطهٔ سبز یعنی کانال HabibApp در دسترس است
• برای ارسال دستی، دکمه «ارسال WEB_READY» را بزنید

); } export default ReportActionsSheet;