mirror of
https://github.com/luminous-devs/lume.git
synced 2024-09-19 19:46:34 +00:00
updated note metadata
This commit is contained in:
parent
a734d0ce9b
commit
0786ad6915
@ -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"
|
||||||
|
@ -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';
|
||||||
|
|
||||||
|
@ -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';
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
});
|
};
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
});
|
};
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
}
|
});
|
||||||
|
@ -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';
|
||||||
|
|
||||||
|
@ -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';
|
||||||
|
|
||||||
|
@ -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',
|
||||||
|
Loading…
Reference in New Issue
Block a user