From 555c13c6cf40663143c4cfba689f7c9c14007e21 Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Wed, 3 May 2023 12:17:04 +0700 Subject: [PATCH] use new note parser for chat message --- src/app/chat/components/messages/item.tsx | 15 +++++++++++++-- src/utils/hooks/useDecryptMessage.tsx | 20 +++++++------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/app/chat/components/messages/item.tsx b/src/app/chat/components/messages/item.tsx index e38705a9..f86f24f8 100644 --- a/src/app/chat/components/messages/item.tsx +++ b/src/app/chat/components/messages/item.tsx @@ -1,4 +1,7 @@ import ChatMessageUser from '@lume/app/chat/components/messages/user'; +import { noteParser } from '@lume/app/note/components/parser'; +import ImagePreview from '@lume/app/note/components/preview/image'; +import VideoPreview from '@lume/app/note/components/preview/video'; import { useDecryptMessage } from '@lume/utils/hooks/useDecryptMessage'; import { memo } from 'react'; @@ -12,14 +15,22 @@ export const ChatMessageItem = memo(function MessageListItem({ userPubkey: string; userPrivkey: string; }) { - const content = useDecryptMessage(userPubkey, userPrivkey, data.pubkey, data.tags, data.content); + const decryptedContent = useDecryptMessage(userPubkey, userPrivkey, data); + // if we have decrypted content, use it instead of the encrypted content + if (decryptedContent) { + data['content'] = decryptedContent; + } + // parse the note content + const content = noteParser(data); return (
-
{content}
+
{content.parsed}
+ {Array.isArray(content.images) && content.images.length ? : <>} + {Array.isArray(content.videos) && content.videos.length ? : <>}
diff --git a/src/utils/hooks/useDecryptMessage.tsx b/src/utils/hooks/useDecryptMessage.tsx index 4866b2a5..b6fee199 100644 --- a/src/utils/hooks/useDecryptMessage.tsx +++ b/src/utils/hooks/useDecryptMessage.tsx @@ -1,34 +1,28 @@ import { nip04 } from 'nostr-tools'; import { useCallback, useEffect, useState } from 'react'; -export const useDecryptMessage = ( - userKey: string, - userPriv: string, - eventKey: string, - eventTags: string[], - encryptedContent: string -) => { +export const useDecryptMessage = (userKey: string, userPriv: string, data: any) => { const [content, setContent] = useState(null); const extractSenderKey = useCallback(() => { - const keyInTags = eventTags.find(([k, v]) => k === 'p' && v && v !== '')[1]; + const keyInTags = data.tags.find(([k, v]) => k === 'p' && v && v !== '')[1]; if (keyInTags === userKey) { - return eventKey; + return data.pubkey; } else { return keyInTags; } - }, [eventKey, eventTags, userKey]); + }, [data.pubkey, data.tags, userKey]); const decrypt = useCallback(async () => { const senderKey = extractSenderKey(); - const result = await nip04.decrypt(userPriv, senderKey, encryptedContent); + const result = await nip04.decrypt(userPriv, senderKey, data.content); // update state with decrypt content setContent(result); - }, [userPriv, encryptedContent, extractSenderKey]); + }, [extractSenderKey, userPriv, data.content]); useEffect(() => { decrypt().catch(console.error); }, [decrypt]); - return content ? content : ''; + return content ? content : null; };