diff --git a/src/app/newsfeed/components/metadata/like.tsx b/src/app/newsfeed/components/metadata/like.tsx new file mode 100644 index 00000000..1f79dda4 --- /dev/null +++ b/src/app/newsfeed/components/metadata/like.tsx @@ -0,0 +1,51 @@ +import LikeIcon from '@lume/shared/icons/like'; +import { RelayContext } from '@lume/shared/relayProvider'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; +import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount'; + +import { getEventHash, signEvent } from 'nostr-tools'; +import { useContext, useEffect, useState } from 'react'; + +export default function NoteLike({ id, pubkey, likes }: { id: string; pubkey: string; likes: number }) { + const pool: any = useContext(RelayContext); + const { account, isLoading, isError } = useActiveAccount(); + + const [count, setCount] = useState(0); + + const submitEvent = (e: any) => { + e.stopPropagation(); + + if (!isLoading && !isError && account) { + const event: any = { + content: '+', + kind: 7, + tags: [ + ['e', id], + ['p', pubkey], + ], + created_at: dateToUnix(), + pubkey: account.pubkey, + }; + event.id = getEventHash(event); + event.sig = signEvent(event, account.privkey); + // publish event to all relays + pool.publish(event, WRITEONLY_RELAYS); + // update state + setCount(count + 1); + } else { + console.log('error'); + } + }; + + useEffect(() => { + setCount(likes); + }, [likes]); + + return ( + + ); +} diff --git a/src/app/newsfeed/components/note/meta/comment.tsx b/src/app/newsfeed/components/metadata/reply.tsx similarity index 60% rename from src/app/newsfeed/components/note/meta/comment.tsx rename to src/app/newsfeed/components/metadata/reply.tsx index ae00efc7..6aca88d6 100644 --- a/src/app/newsfeed/components/note/meta/comment.tsx +++ b/src/app/newsfeed/components/metadata/reply.tsx @@ -1,35 +1,22 @@ -import { AccountContext } from '@lume/shared/accountProvider'; -import { RelayContext } from '@lume/shared/relaysProvider'; -import { UserExtend } from '@lume/shared/user/extend'; +import ReplyIcon from '@lume/shared/icons/reply'; +import { RelayContext } from '@lume/shared/relayProvider'; import { WRITEONLY_RELAYS } from '@lume/stores/constants'; import { dateToUnix } from '@lume/utils/getDate'; +import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount'; import { Dialog, Transition } from '@headlessui/react'; -import { ChatLines, OpenNewWindow } from 'iconoir-react'; import { getEventHash, signEvent } from 'nostr-tools'; -import { Fragment, useContext, useState } from 'react'; -import { navigate } from 'vite-plugin-ssr/client/router'; +import { Fragment, useContext, useEffect, useState } from 'react'; -export const NoteComment = ({ - count, - eventID, - eventPubkey, - eventContent, - eventTime, -}: { - count: number; - eventID: string; - eventPubkey: string; - eventTime: number; - eventContent: any; -}) => { +export default function NoteReply({ id, replies }: { id: string; replies: number }) { const pool: any = useContext(RelayContext); - const activeAccount: any = useContext(AccountContext); + const [count, setCount] = useState(0); const [isOpen, setIsOpen] = useState(false); const [value, setValue] = useState(''); - const profile = activeAccount ? JSON.parse(activeAccount.metadata) : null; + const { account, isLoading, isError } = useActiveAccount(); + const profile = account ? JSON.parse(account.metadata) : null; const closeModal = () => { setIsOpen(false); @@ -39,36 +26,37 @@ export const NoteComment = ({ setIsOpen(true); }; - const openThread = () => { - navigate(`/newsfeed/note?id=${eventID}`); - }; - const submitEvent = () => { - const event: any = { - content: value, - created_at: dateToUnix(), - kind: 1, - pubkey: activeAccount.pubkey, - tags: [['e', eventID]], - }; - event.id = getEventHash(event); - event.sig = signEvent(event, activeAccount.privkey); + if (!isLoading && !isError && account) { + const event: any = { + content: value, + created_at: dateToUnix(), + kind: 1, + pubkey: account.pubkey, + tags: [['e', id]], + }; + event.id = getEventHash(event); + event.sig = signEvent(event, account.privkey); - pool.publish(event, WRITEONLY_RELAYS); - setIsOpen(false); + // publish event + pool.publish(event, WRITEONLY_RELAYS); + // close modal + setIsOpen(false); + setCount(count + 1); + } else { + console.log('error'); + } }; + useEffect(() => { + setCount(replies); + }, [replies]); + return ( <> - @@ -93,20 +81,8 @@ export const NoteComment = ({ leaveFrom="opacity-100 scale-100" leaveTo="opacity-0 scale-95" > - + {/* root note */} -
-
- -
-
-
- {eventContent} -
-
- {/* divider */} -
-
{/* comment form */}
@@ -114,25 +90,19 @@ export const NoteComment = ({ user's avatar
-
+