From fd2ddc4d2bae88cc22131557cad39b71fefaba0e Mon Sep 17 00:00:00 2001
From: Ren Amamiya <123083837+reyamir@users.noreply.github.com>
Date: Sun, 26 Mar 2023 15:41:44 +0700
Subject: [PATCH] updated thread page
---
src/components/form/base.tsx | 7 ++-
src/components/form/comment.tsx | 14 +++---
src/components/note/comment.tsx | 79 +++++++++++++++++++++++++++++++++
src/pages/newsfeed/[id].tsx | 8 +---
4 files changed, 93 insertions(+), 15 deletions(-)
create mode 100644 src/components/note/comment.tsx
diff --git a/src/components/form/base.tsx b/src/components/form/base.tsx
index e0fa4b2e..9f982d56 100644
--- a/src/components/form/base.tsx
+++ b/src/components/form/base.tsx
@@ -8,6 +8,7 @@ import { relaysAtom } from '@stores/relays';
import { dateToUnix } from '@utils/getDate';
import { ImageIcon, ResetIcon } from '@radix-ui/react-icons';
+import { sendNotification } from '@tauri-apps/api/notification';
import { useAtom, useAtomValue } from 'jotai';
import { useResetAtom } from 'jotai/utils';
import { getEventHash, signEvent } from 'nostr-tools';
@@ -35,8 +36,12 @@ export default function FormBase() {
event.id = getEventHash(event);
event.sig = signEvent(event, privkey);
+ // publish note
pool.publish(event, relays);
- resetValue;
+ // reset form
+ resetValue();
+ // send notification
+ sendNotification('Note has been published successfully');
};
return (
diff --git a/src/components/form/comment.tsx b/src/components/form/comment.tsx
index 5c9ee04c..be2a9697 100644
--- a/src/components/form/comment.tsx
+++ b/src/components/form/comment.tsx
@@ -2,26 +2,22 @@ import { ImageWithFallback } from '@components/imageWithFallback';
import { RelayContext } from '@components/relaysProvider';
import { activeAccountAtom } from '@stores/account';
-import { noteContentAtom } from '@stores/note';
import { relaysAtom } from '@stores/relays';
import { dateToUnix } from '@utils/getDate';
-import EmojiPicker from '@emoji-mart/react';
-import { ImageIcon } from '@radix-ui/react-icons';
+import { sendNotification } from '@tauri-apps/api/notification';
import destr from 'destr';
import { useAtom, useAtomValue } from 'jotai';
-import { useResetAtom } from 'jotai/utils';
import { getEventHash, signEvent } from 'nostr-tools';
-import { useContext } from 'react';
+import { useContext, useState } from 'react';
export default function FormComment({ eventID }: { eventID: any }) {
const pool: any = useContext(RelayContext);
const relays = useAtomValue(relaysAtom);
const [activeAccount] = useAtom(activeAccountAtom);
- const [value, setValue] = useAtom(noteContentAtom);
- const resetValue = useResetAtom(noteContentAtom);
+ const [value, setValue] = useState('');
const profile = destr(activeAccount.metadata);
@@ -36,8 +32,10 @@ export default function FormComment({ eventID }: { eventID: any }) {
event.id = getEventHash(event);
event.sig = signEvent(event, activeAccount.privkey);
+ // publish note
pool.publish(event, relays);
- resetValue;
+ // send notification
+ sendNotification('Comment has been published successfully');
};
return (
diff --git a/src/components/note/comment.tsx b/src/components/note/comment.tsx
new file mode 100644
index 00000000..023d66c0
--- /dev/null
+++ b/src/components/note/comment.tsx
@@ -0,0 +1,79 @@
+import NoteMetadata from '@components/note/metadata';
+import { ImagePreview } from '@components/note/preview/image';
+import { VideoPreview } from '@components/note/preview/video';
+import { NoteRepost } from '@components/note/repost';
+import { UserExtend } from '@components/user/extend';
+import { UserMention } from '@components/user/mention';
+
+import destr from 'destr';
+import { memo, useMemo } from 'react';
+import ReactPlayer from 'react-player/lazy';
+import reactStringReplace from 'react-string-replace';
+
+export const NoteComment = memo(function NoteComment({ event }: { event: any }) {
+ const content = useMemo(() => {
+ let parsedContent = event.content;
+ // get data tags
+ const tags = destr(event.tags);
+ // handle urls
+ parsedContent = reactStringReplace(parsedContent, /(https?:\/\/\S+)/g, (match, i) => {
+ if (match.toLowerCase().match(/\.(jpg|jpeg|gif|png|webp)$/)) {
+ // image url
+ return
- {comment.id}-{comment.content} -
- ))} + {comments.length > 0 && comments.map((comment) =>