diff --git a/src/app/channel/components/messageList.tsx b/src/app/channel/components/messageList.tsx index e02d8215..fecf9592 100644 --- a/src/app/channel/components/messageList.tsx +++ b/src/app/channel/components/messageList.tsx @@ -1,37 +1,34 @@ -import ChannelMessageItem from "@app/channel/components/messages/item"; - -import { sortedChannelMessagesAtom } from "@stores/channel"; - +import { ChannelMessageItem } from "@app/channel/components/messages/item"; +import { useChannelMessages } from "@stores/channels"; import { getHourAgo } from "@utils/date"; - -import { useAtomValue } from "jotai"; import { useCallback, useRef } from "react"; import { Virtuoso } from "react-virtuoso"; -export default function ChannelMessageList() { +export function ChannelMessageList() { const now = useRef(new Date()); const virtuosoRef = useRef(null); - const data = useAtomValue(sortedChannelMessagesAtom); + + const messages = useChannelMessages((state: any) => state.messages); const itemContent: any = useCallback( (index: string | number) => { - return ; + return ; }, - [data], + [messages], ); const computeItemKey = useCallback( (index: string | number) => { - return data[index].id; + return messages[index].id; }, - [data], + [messages], ); return (
( @@ -66,7 +63,7 @@ export default function ChannelMessageList() { ), }} computeItemKey={computeItemKey} - initialTopMostItemIndex={data.length - 1} + initialTopMostItemIndex={messages.length - 1} alignToBottom={true} followOutput={true} overscan={50} diff --git a/src/app/channel/components/messages/item.tsx b/src/app/channel/components/messages/item.tsx index 11f65f5b..bc3bd368 100644 --- a/src/app/channel/components/messages/item.tsx +++ b/src/app/channel/components/messages/item.tsx @@ -1,28 +1,24 @@ import MessageHideButton from "@app/channel/components/messages/hideButton"; import MessageMuteButton from "@app/channel/components/messages/muteButton"; import MessageReplyButton from "@app/channel/components/messages/replyButton"; -import ChannelMessageUser from "@app/channel/components/messages/user"; - +import { ChannelMessageUser } from "@app/channel/components/messages/user"; import { noteParser } from "@utils/parser"; - import { useMemo } from "react"; -export default function ChannelMessageItem({ data }: { data: any }) { +export function ChannelMessageItem({ data }: { data: any }) { const content = useMemo(() => noteParser(data), [data]); return ( -
+
-
-
-
- {data.hide ? ( - [hided message] - ) : ( - content.parsed - )} -
+
+
+ {data.hide ? ( + [hided message] + ) : ( + content.parsed + )}
diff --git a/src/app/channel/components/messages/user.tsx b/src/app/channel/components/messages/user.tsx index 3ed6b17f..5b2c5763 100644 --- a/src/app/channel/components/messages/user.tsx +++ b/src/app/channel/components/messages/user.tsx @@ -7,7 +7,7 @@ import relativeTime from "dayjs/plugin/relativeTime"; dayjs.extend(relativeTime); -export default function ChannelMessageUser({ +export function ChannelMessageUser({ pubkey, time, }: { pubkey: string; time: number }) { @@ -17,7 +17,7 @@ export default function ChannelMessageUser({
{isError || isLoading ? ( <> -
+
@@ -26,17 +26,17 @@ export default function ChannelMessageUser({ ) : ( <> -
+
{pubkey}
- {user?.display_name || user?.name || shortenKey(pubkey)} + {user?.nip05 || user?.name || shortenKey(pubkey)} ยท diff --git a/src/app/channel/pages/index.page.tsx b/src/app/channel/pages/index.page.tsx index 5e0d55f6..11f2d3be 100644 --- a/src/app/channel/pages/index.page.tsx +++ b/src/app/channel/pages/index.page.tsx @@ -1,19 +1,18 @@ import ChannelBlackList from "@app/channel/components/blacklist"; import ChannelMembers from "@app/channel/components/members"; +import { ChannelMessageList } from "@app/channel/components/messageList"; import ChannelMessageForm from "@app/channel/components/messages/form"; import ChannelMetadata from "@app/channel/components/metadata"; import ChannelUpdateModal from "@app/channel/components/updateModal"; import { RelayContext } from "@shared/relayProvider"; import { useActiveAccount } from "@stores/accounts"; -import { channelMessagesAtom, channelReplyAtom } from "@stores/channel"; +import { useChannelMessages } from "@stores/channels"; import { READONLY_RELAYS } from "@stores/constants"; import { dateToUnix, getHourAgo } from "@utils/date"; import { usePageContext } from "@utils/hooks/usePageContext"; import { getActiveBlacklist, getBlacklist } from "@utils/storage"; import { arrayObjToPureArr } from "@utils/transform"; -import { useSetAtom } from "jotai"; -import { useResetAtom } from "jotai/utils"; -import { Suspense, lazy, useContext, useEffect, useRef } from "react"; +import { useContext, useRef } from "react"; import useSWR from "swr"; import useSWRSubscription from "swr/subscription"; @@ -29,20 +28,17 @@ const fetchHided = async ([, id]) => { return array; }; -const ChannelMessageList = lazy( - () => import("@app/channel/components/messageList"), -); - export function Page() { const pool: any = useContext(RelayContext); - const account: any = useActiveAccount((state: any) => state.account); const pageContext = usePageContext(); const searchParams: any = pageContext.urlParsed.search; - const channelID = searchParams.id; const channelPubkey = searchParams.channelpub; + const account: any = useActiveAccount((state: any) => state.account); + const addMessage = useChannelMessages((state: any) => state.add); + const { data: muted } = useSWR( account ? ["muted", account.id] : null, fetchMuted, @@ -52,10 +48,6 @@ export function Page() { fetchHided, ); - const setChannelMessages = useSetAtom(channelMessagesAtom); - const resetChannelMessages = useResetAtom(channelMessagesAtom); - const resetChannelReply = useResetAtom(channelReplyAtom); - const now = useRef(new Date()); useSWRSubscription( @@ -80,7 +72,7 @@ export function Page() { message["hide"] = false; } if (!muted.array.includes(event.pubkey)) { - setChannelMessages((prev) => [...prev, message]); + addMessage(message); } }, ); @@ -91,24 +83,29 @@ export function Page() { }, ); - useEffect(() => { - let ignore = false; - - if (!ignore) { - // reset channel reply - resetChannelReply(); - // reset channel messages - resetChannelMessages(); - } - - return () => { - ignore = true; - }; - }); - return ( -
-
+
+
+
+

Public Channel

+
+
+
+ +
+ +
+
+
+
+
+
@@ -124,14 +121,6 @@ export function Page() { )}
-
- Loading...

}> - -
-
- -
-
); } diff --git a/src/app/chat/components/item.tsx b/src/app/chat/components/item.tsx index cabf8c52..13362056 100644 --- a/src/app/chat/components/item.tsx +++ b/src/app/chat/components/item.tsx @@ -44,7 +44,7 @@ export function ChatsListItem({ pubkey }: { pubkey: string }) {
- {user?.nip05 || user.name || shortenKey(pubkey)} + {user?.nip05 || user?.name || shortenKey(pubkey)}
{account?.pubkey === pubkey && ( (you) diff --git a/src/shared/accounts/active.tsx b/src/shared/accounts/active.tsx index d89119ac..47d53abe 100644 --- a/src/shared/accounts/active.tsx +++ b/src/shared/accounts/active.tsx @@ -4,7 +4,7 @@ import { DEFAULT_AVATAR } from "@stores/constants"; import { useProfile } from "@utils/hooks/useProfile"; export default function ActiveAccount({ data }: { data: any }) { - const { user } = useProfile(data.npub); + const { user } = useProfile(data.pubkey); return (