updated note metadata

This commit is contained in:
Ren Amamiya 2023-04-17 10:42:15 +07:00
parent a734d0ce9b
commit 0786ad6915
9 changed files with 60 additions and 45 deletions

View File

@ -4,7 +4,7 @@
"version": "0.2.5", "version": "0.2.5",
"scripts": { "scripts": {
"dev": "next dev -p 1420", "dev": "next dev -p 1420",
"build": "next build && next export -o dist", "build": "pnpm init-db && next build",
"tauri": "tauri", "tauri": "tauri",
"init-db": "cd src-tauri/ && cargo prisma generate", "init-db": "cd src-tauri/ && cargo prisma generate",
"prepare": "husky install" "prepare": "husky install"

View File

@ -1,4 +1,4 @@
import NoteMetadata from '@components/note/metadata'; import { NoteMetadata } from '@components/note/metadata';
import { NoteParent } from '@components/note/parent'; import { NoteParent } from '@components/note/parent';
import { UserExtend } from '@components/user/extend'; import { UserExtend } from '@components/user/extend';

View File

@ -1,4 +1,4 @@
import NoteMetadata from '@components/note/metadata'; import { NoteMetadata } from '@components/note/metadata';
import { ImagePreview } from '@components/note/preview/image'; import { ImagePreview } from '@components/note/preview/image';
import { VideoPreview } from '@components/note/preview/video'; import { VideoPreview } from '@components/note/preview/video';
import { NoteQuote } from '@components/note/quote'; import { NoteQuote } from '@components/note/quote';

View File

@ -9,9 +9,9 @@ import useLocalStorage from '@rehooks/local-storage';
import { MultiBubble, OpenNewWindow } from 'iconoir-react'; import { MultiBubble, OpenNewWindow } from 'iconoir-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { getEventHash, signEvent } from 'nostr-tools'; import { getEventHash, signEvent } from 'nostr-tools';
import { memo, useContext, useState } from 'react'; import { useContext, useState } from 'react';
export const NoteComment = memo(function NoteComment({ export const NoteComment = ({
count, count,
eventID, eventID,
eventPubkey, eventPubkey,
@ -23,7 +23,7 @@ export const NoteComment = memo(function NoteComment({
eventPubkey: string; eventPubkey: string;
eventTime: number; eventTime: number;
eventContent: any; eventContent: any;
}) { }) => {
const router = useRouter(); const router = useRouter();
const [pool, relays]: any = useContext(RelayContext); const [pool, relays]: any = useContext(RelayContext);
@ -132,4 +132,4 @@ export const NoteComment = memo(function NoteComment({
</Dialog.Portal> </Dialog.Portal>
</Dialog.Root> </Dialog.Root>
); );
}); };

View File

@ -5,26 +5,29 @@ import { dateToUnix } from '@utils/getDate';
import useLocalStorage from '@rehooks/local-storage'; import useLocalStorage from '@rehooks/local-storage';
import { Heart } from 'iconoir-react'; import { Heart } from 'iconoir-react';
import { getEventHash, signEvent } from 'nostr-tools'; import { getEventHash, signEvent } from 'nostr-tools';
import { memo, useContext, useEffect, useState } from 'react'; import { useContext, useEffect, useState } from 'react';
export const NoteReaction = memo(function NoteReaction({ export const NoteReaction = ({
count, count,
liked,
eventID, eventID,
eventPubkey, eventPubkey,
}: { }: {
count: number; count: number;
liked: boolean;
eventID: string; eventID: string;
eventPubkey: string; eventPubkey: string;
}) { }) => {
const [pool, relays]: any = useContext(RelayContext); const [pool, relays]: any = useContext(RelayContext);
const [activeAccount]: any = useLocalStorage('activeAccount', {}); const [activeAccount]: any = useLocalStorage('activeAccount', {});
const [isReact, setIsReact] = useState(false); const [isReact, setIsReact] = useState(false);
const [like, setLike] = useState(0); const [like, setLike] = useState(0);
const handleLike = (e: any) => { const handleLike = (e: any) => {
e.stopPropagation(); e.stopPropagation();
if (liked === false || isReact === false) {
const event: any = { const event: any = {
content: '+', content: '+',
kind: 7, kind: 7,
@ -42,18 +45,20 @@ export const NoteReaction = memo(function NoteReaction({
// update state to change icon to filled heart // update state to change icon to filled heart
setIsReact(true); setIsReact(true);
// update counter // update counter
setLike(like + 1); setLike((like) => (like += 1));
}
}; };
useEffect(() => { useEffect(() => {
setIsReact(liked);
setLike(count); setLike(count);
}, [count]); }, [count, liked]);
return ( return (
<button onClick={(e) => handleLike(e)} className="group flex w-16 items-center gap-1 text-sm text-zinc-500"> <button onClick={(e) => handleLike(e)} className="group flex w-16 items-center gap-1 text-sm text-zinc-500">
<div className="rounded-md p-1 group-hover:bg-zinc-800"> <div className="rounded-md p-1 group-hover:bg-zinc-800">
{isReact ? ( {isReact ? (
<Heart width={20} height={20} className="fill-red-500" /> <Heart width={20} height={20} className="fill-red-500 text-transparent" />
) : ( ) : (
<Heart width={20} height={20} className="text-zinc-500" /> <Heart width={20} height={20} className="text-zinc-500" />
)} )}
@ -61,4 +66,4 @@ export const NoteReaction = memo(function NoteReaction({
<span>{like}</span> <span>{like}</span>
</button> </button>
); );
}); };

View File

@ -2,9 +2,10 @@ import { NoteComment } from '@components/note/meta/comment';
import { NoteReaction } from '@components/note/meta/reaction'; import { NoteReaction } from '@components/note/meta/reaction';
import { RelayContext } from '@components/relaysProvider'; import { RelayContext } from '@components/relaysProvider';
import { useContext, useEffect, useState } from 'react'; import useLocalStorage from '@rehooks/local-storage';
import { memo, useContext, useEffect, useState } from 'react';
export default function NoteMetadata({ export const NoteMetadata = memo(function NoteMetadata({
eventID, eventID,
eventPubkey, eventPubkey,
eventContent, eventContent,
@ -16,8 +17,10 @@ export default function NoteMetadata({
eventContent: any; eventContent: any;
}) { }) {
const [pool, relays]: any = useContext(RelayContext); const [pool, relays]: any = useContext(RelayContext);
const [activeAccount]: any = useLocalStorage('activeAccount', {});
const [likes, setLikes] = useState(0); const [liked, setLiked] = useState(false);
const [likeCount, setLikeCount] = useState(0);
const [comments, setComments] = useState(0); const [comments, setComments] = useState(0);
useEffect(() => { useEffect(() => {
@ -26,8 +29,7 @@ export default function NoteMetadata({
{ {
'#e': [eventID], '#e': [eventID],
since: parseInt(eventTime), since: parseInt(eventTime),
kinds: [7], kinds: [1, 7],
limit: 50,
}, },
], ],
relays, relays,
@ -40,21 +42,29 @@ export default function NoteMetadata({
// createCacheCommentNote(event, eventID); // createCacheCommentNote(event, eventID);
break; break;
case 7: case 7:
if (event.pubkey === activeAccount.pubkey) {
setLiked(true);
}
if (event.content === '🤙' || event.content === '+') { if (event.content === '🤙' || event.content === '+') {
setLikes((likes) => (likes += 1)); setLikeCount((likes) => (likes += 1));
} }
break; break;
default: default:
break; break;
} }
}, },
1000 100,
undefined,
{
unsubscribeOnEose: true,
logAllEvents: false,
}
); );
return () => { return () => {
unsubscribe(); unsubscribe();
}; };
}, [eventID, eventTime, pool, relays]); }, [eventID, eventTime, pool, relays, activeAccount.pubkey]);
return ( return (
<div className="relative z-10 -ml-1 flex items-center gap-8"> <div className="relative z-10 -ml-1 flex items-center gap-8">
@ -65,7 +75,7 @@ export default function NoteMetadata({
eventContent={eventContent} eventContent={eventContent}
eventTime={eventTime} eventTime={eventTime}
/> />
<NoteReaction count={likes} eventID={eventID} eventPubkey={eventPubkey} /> <NoteReaction count={likeCount} liked={liked} eventID={eventID} eventPubkey={eventPubkey} />
</div> </div>
); );
} });

View File

@ -1,4 +1,4 @@
import NoteMetadata from '@components/note/metadata'; import { NoteMetadata } from '@components/note/metadata';
import { RelayContext } from '@components/relaysProvider'; import { RelayContext } from '@components/relaysProvider';
import { UserExtend } from '@components/user/extend'; import { UserExtend } from '@components/user/extend';

View File

@ -1,4 +1,4 @@
import NoteMetadata from '@components/note/metadata'; import { NoteMetadata } from '@components/note/metadata';
import { RelayContext } from '@components/relaysProvider'; import { RelayContext } from '@components/relaysProvider';
import { UserExtend } from '@components/user/extend'; import { UserExtend } from '@components/user/extend';

View File

@ -8,7 +8,7 @@ export const RelayContext = createContext({});
const relays = [ const relays = [
'wss://relay.damus.io', 'wss://relay.damus.io',
'wss://nostr-pub.wellorder.net', 'wss://nostr-pub.wellorder.net',
'wss://nostr.bongbong.com', //'wss://nostr.bongbong.com',
'wss://nostr.zebedee.cloud', 'wss://nostr.zebedee.cloud',
'wss://nostr.fmt.wiz.biz', 'wss://nostr.fmt.wiz.biz',
'wss://relay.snort.social', 'wss://relay.snort.social',