import { ChatSidebar } from "../components/sidebar"; import { ChatMessageList } from "@app/chat/components/messageList"; import { ChatMessageForm } from "@app/chat/components/messages/form"; import { RelayContext } from "@shared/relayProvider"; import { useActiveAccount } from "@stores/accounts"; import { useChatMessages } from "@stores/chats"; import { dateToUnix } from "@utils/date"; import { usePageContext } from "@utils/hooks/usePageContext"; import { LumeEvent } from "@utils/types"; import { useContext, useEffect } from "react"; import useSWRSubscription from "swr/subscription"; export function Page() { const ndk = useContext(RelayContext); const account = useActiveAccount((state: any) => state.account); const pageContext = usePageContext(); const searchParams: any = pageContext.urlParsed.search; const pubkey = searchParams.pubkey; const [fetchMessages, clear] = useChatMessages((state: any) => [ state.fetch, state.clear, ]); const add = useChatMessages((state: any) => state.add); useSWRSubscription(account !== pubkey ? ["chat", pubkey] : null, () => { const sub = ndk.subscribe({ kinds: [4], authors: [pubkey], "#p": [account.pubkey], since: dateToUnix(), }); sub.addListener("event", (event: LumeEvent) => { add(account.pubkey, event); }); return () => { sub.stop(); }; }); useEffect(() => { fetchMessages(account.pubkey, pubkey); return () => { clear(); }; }, [pubkey, fetchMessages]); if (!account) return