From 38c6b2c76df49595abe400c6f78cab12c84eec1a Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Wed, 26 Apr 2023 17:43:29 +0700 Subject: [PATCH] update chat page --- src/pages/chat/index.page.tsx | 94 +++++++++++++++++++++-------------- src/utils/transform.tsx | 9 ++++ 2 files changed, 65 insertions(+), 38 deletions(-) diff --git a/src/pages/chat/index.page.tsx b/src/pages/chat/index.page.tsx index 699275b2..935b1ed8 100644 --- a/src/pages/chat/index.page.tsx +++ b/src/pages/chat/index.page.tsx @@ -1,20 +1,17 @@ import { AccountContext } from '@components/accountProvider'; +import { MessageListItem } from '@components/chats/messageListItem'; import FormChat from '@components/form/chat'; import NewsfeedLayout from '@components/layouts/newsfeed'; import { RelayContext } from '@components/relaysProvider'; -import { chatMessagesAtom } from '@stores/chat'; import { FULL_RELAYS } from '@stores/constants'; import { usePageContext } from '@utils/hooks/usePageContext'; +import { sortMessages } from '@utils/transform'; -import { useSetAtom } from 'jotai'; -import { useResetAtom } from 'jotai/utils'; -import { Suspense, lazy, useContext } from 'react'; +import { useContext } from 'react'; import useSWRSubscription from 'swr/subscription'; -const MessageList = lazy(() => import('@components/chats/messageList')); - export function Page() { const pageContext = usePageContext(); const searchParams: any = pageContext.urlParsed.search; @@ -24,43 +21,64 @@ export function Page() { const pool: any = useContext(RelayContext); const activeAccount: any = useContext(AccountContext); - const setChatMessages = useSetAtom(chatMessagesAtom); - const resetChatMessages = useResetAtom(chatMessagesAtom); + const { data, error } = useSWRSubscription( + pubkey + ? [ + { + kinds: [4], + authors: [pubkey], + '#p': [activeAccount.pubkey], + }, + { + kinds: [4], + authors: [activeAccount.pubkey], + '#p': [pubkey], + }, + ] + : null, + (key, { next }) => { + const unsubscribe = pool.subscribe(key, FULL_RELAYS, (event: any) => { + next(null, (prev) => (prev ? [event, ...prev] : [event])); + }); - useSWRSubscription(pubkey, () => { - // clear old messages - resetChatMessages(); - // subscribe for next messages - const unsubscribe = pool.subscribe( - [ - { - kinds: [4], - authors: [pubkey], - '#p': [activeAccount.pubkey], - }, - { - kinds: [4], - authors: [activeAccount.pubkey], - '#p': [pubkey], - }, - ], - FULL_RELAYS, - (event: any) => { - setChatMessages((prev) => [...prev, event]); - } - ); - - return () => { - unsubscribe(); - }; - }); + return () => { + unsubscribe(); + }; + } + ); return (
- Loading...

}> - -
+
+ {error &&
failed to load
} + {!data ? ( +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ ) : ( + sortMessages(data).map((message) => ( + + )) + )} +
diff --git a/src/utils/transform.tsx b/src/utils/transform.tsx index 1dd1d51e..1fb1caf2 100644 --- a/src/utils/transform.tsx +++ b/src/utils/transform.tsx @@ -49,3 +49,12 @@ export const getParentID = (arr: string[], fallback: string) => { return parentID; }; + +// sort messages by timestamp +export const sortMessages = (arr: any) => { + arr.sort((a, b) => { + return b.created_at - a.created_at; + }); + + return arr; +};