From ac50cd1373327cf0ba60e6d9bfc8fb6103e6ad2e Mon Sep 17 00:00:00 2001
From: Ren Amamiya <123083837+reyamir@users.noreply.github.com>
Date: Fri, 4 Aug 2023 08:51:26 +0700
Subject: [PATCH] polish
---
package.json | 2 +-
pnpm-lock.yaml | 32 ++++-----
src/app/space/components/blocks/thread.tsx | 2 +-
src/app/space/components/blocks/user.tsx | 2 +-
src/shared/notes/content.tsx | 10 ++-
src/shared/notes/kinds/repost.tsx | 2 +-
src/shared/notes/kinds/sub.tsx | 4 +-
src/shared/notes/mentions/note.tsx | 16 +++--
src/shared/notes/mentions/user.tsx | 6 +-
src/shared/notes/metadata.tsx | 2 +-
src/shared/notes/replies/list.tsx | 2 +-
src/shared/user.tsx | 2 +-
src/shared/userProfile.tsx | 6 --
src/utils/hooks/useEvent.tsx | 77 ++++++++++++----------
src/utils/hooks/useProfile.tsx | 14 ++--
src/utils/parser.tsx | 7 ++
16 files changed, 108 insertions(+), 78 deletions(-)
diff --git a/package.json b/package.json
index c34c012f..d1c89b19 100644
--- a/package.json
+++ b/package.json
@@ -81,7 +81,7 @@
"@tauri-apps/cli": "2.0.0-alpha.10",
"@trivago/prettier-plugin-sort-imports": "^4.2.0",
"@types/html-to-text": "^9.0.1",
- "@types/node": "^18.17.1",
+ "@types/node": "^18.17.2",
"@types/react": "^18.2.18",
"@types/react-dom": "^18.2.7",
"@types/youtube-player": "^5.5.7",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a52326b9..af13d821 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -190,8 +190,8 @@ devDependencies:
specifier: ^9.0.1
version: 9.0.1
'@types/node':
- specifier: ^18.17.1
- version: 18.17.1
+ specifier: ^18.17.2
+ version: 18.17.2
'@types/react':
specifier: ^18.2.18
version: 18.2.18
@@ -269,7 +269,7 @@ devDependencies:
version: 4.9.5
vite:
specifier: ^4.4.8
- version: 4.4.8(@types/node@18.17.1)
+ version: 4.4.8(@types/node@18.17.2)
vite-plugin-top-level-await:
specifier: ^1.3.1
version: 1.3.1(vite@4.4.8)
@@ -2437,8 +2437,8 @@ packages:
resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
dev: false
- /@types/node@18.17.1:
- resolution: {integrity: sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==}
+ /@types/node@18.17.2:
+ resolution: {integrity: sha512-wBo3KqP/PBqje5TI9UTiuL3yWfP6sdPtjtygSOqcYZWT232dfDeDOnkDps5wqZBP9NgGgYrNejinl0faAuE+HQ==}
dev: true
/@types/normalize-package-data@2.4.1:
@@ -2614,7 +2614,7 @@ packages:
vite: ^4
dependencies:
'@swc/core': 1.3.74
- vite: 4.4.8(@types/node@18.17.1)
+ vite: 4.4.8(@types/node@18.17.2)
transitivePeerDependencies:
- '@swc/helpers'
dev: true
@@ -2912,7 +2912,7 @@ packages:
hasBin: true
dependencies:
caniuse-lite: 1.0.30001519
- electron-to-chromium: 1.4.482
+ electron-to-chromium: 1.4.484
node-releases: 2.0.13
update-browserslist-db: 1.0.11(browserslist@4.21.10)
@@ -3389,8 +3389,8 @@ packages:
/eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- /electron-to-chromium@1.4.482:
- resolution: {integrity: sha512-h+UqpfmEr1Qkk0zp7ej/jid7CXoq4m4QzW6wNTb0ELJ/BZCpA4wgUylBIMGCe621tnr4l5VmoHjdoSx2lbnNJA==}
+ /electron-to-chromium@1.4.484:
+ resolution: {integrity: sha512-nO3ZEomTK2PO/3TUXgEx0A97xZTpKVf4p427lABHuCpT1IQ2N+njVh29DkQkCk6Q4m2wjU+faK4xAcfFndwjvw==}
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -6586,8 +6586,8 @@ packages:
dependencies:
glob: 7.2.3
- /rollup@3.27.0:
- resolution: {integrity: sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==}
+ /rollup@3.27.1:
+ resolution: {integrity: sha512-tXNDFwOkN6C2w5Blj1g6ForKeFw6c1mDu5jxoeDO3/pmYjgt+8yvIFjKzH5FQUq70OKZBkOt0zzv0THXL7vwzQ==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
@@ -7455,7 +7455,7 @@ packages:
'@rollup/plugin-virtual': 3.0.1
'@swc/core': 1.3.74
uuid: 9.0.0
- vite: 4.4.8(@types/node@18.17.1)
+ vite: 4.4.8(@types/node@18.17.2)
transitivePeerDependencies:
- '@swc/helpers'
- rollup
@@ -7472,13 +7472,13 @@ packages:
debug: 4.3.4
globrex: 0.1.2
tsconfck: 2.1.2(typescript@4.9.5)
- vite: 4.4.8(@types/node@18.17.1)
+ vite: 4.4.8(@types/node@18.17.2)
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /vite@4.4.8(@types/node@18.17.1):
+ /vite@4.4.8(@types/node@18.17.2):
resolution: {integrity: sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
@@ -7506,10 +7506,10 @@ packages:
terser:
optional: true
dependencies:
- '@types/node': 18.17.1
+ '@types/node': 18.17.2
esbuild: 0.18.17
postcss: 8.4.27
- rollup: 3.27.0
+ rollup: 3.27.1
optionalDependencies:
fsevents: 2.3.2
dev: true
diff --git a/src/app/space/components/blocks/thread.tsx b/src/app/space/components/blocks/thread.tsx
index 4bd33794..7e21efe6 100644
--- a/src/app/space/components/blocks/thread.tsx
+++ b/src/app/space/components/blocks/thread.tsx
@@ -22,7 +22,7 @@ export function ThreadBlock({ params }: { params: Block }) {
// useLiveThread(params.content);
return (
-
+
{status === 'loading' ? (
diff --git a/src/app/space/components/blocks/user.tsx b/src/app/space/components/blocks/user.tsx
index 4604d6c8..4fb78569 100644
--- a/src/app/space/components/blocks/user.tsx
+++ b/src/app/space/components/blocks/user.tsx
@@ -45,7 +45,7 @@ export function UserBlock({ params }: { params: Block }) {
-
+
Latest activities
diff --git a/src/shared/notes/content.tsx b/src/shared/notes/content.tsx
index 9b315961..c874f3a8 100644
--- a/src/shared/notes/content.tsx
+++ b/src/shared/notes/content.tsx
@@ -12,7 +12,15 @@ import {
import { Content } from '@utils/types';
-export function NoteContent({ content }: { content: Content }) {
+export function NoteContent({ content, long }: { content: Content; long?: boolean }) {
+ if (long) {
+ return (
+
+ {content as unknown as string}
+
+ );
+ }
+
return (
<>
- Failed to fetch
+ Failed to fetch event: {repostID}
);
}
diff --git a/src/shared/notes/kinds/sub.tsx b/src/shared/notes/kinds/sub.tsx
index e2f6e527..9f9709f7 100644
--- a/src/shared/notes/kinds/sub.tsx
+++ b/src/shared/notes/kinds/sub.tsx
@@ -17,7 +17,7 @@ export function SubNote({ id, root }: { id: string; root?: string }) {
if (status === 'error') {
return (
-
Failed to fetch
+
Failed to fetch event: {id}
);
}
@@ -30,7 +30,7 @@ export function SubNote({ id, root }: { id: string; root?: string }) {
diff --git a/src/shared/notes/mentions/note.tsx b/src/shared/notes/mentions/note.tsx
index 06c3db58..537c4bd7 100644
--- a/src/shared/notes/mentions/note.tsx
+++ b/src/shared/notes/mentions/note.tsx
@@ -23,6 +23,14 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) {
}
};
+ if (!id) {
+ return (
+
+
Failed to fetch event: {id}
+
+ );
+ }
+
return (
openThread(e, id)}
@@ -56,14 +64,14 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) {
},
}}
>
- {data?.content?.parsed?.length > 160
- ? data.content.parsed.substring(0, 160) + '...'
- : data.content.parsed}
+ {data?.content?.original?.length > 160
+ ? data.content.original.substring(0, 160) + '...'
+ : data.content.original}
>
) : (
- Failed to fetch event
+
Failed to fetch event: {id}
)}
);
diff --git a/src/shared/notes/mentions/user.tsx b/src/shared/notes/mentions/user.tsx
index 798d2ae7..0aa673a7 100644
--- a/src/shared/notes/mentions/user.tsx
+++ b/src/shared/notes/mentions/user.tsx
@@ -20,7 +20,11 @@ export function MentionUser({ pubkey }: { pubkey: string }) {
}
className="break-words font-normal text-blue-400 no-underline hover:text-blue-500"
>
- {'@' + user?.name || user?.displayName || displayNpub(pubkey, 16)}
+ {user?.nip05 ||
+ user?.name ||
+ user?.display_name ||
+ user?.username ||
+ displayNpub(pubkey, 16)}
);
}
diff --git a/src/shared/notes/metadata.tsx b/src/shared/notes/metadata.tsx
index a7331dcf..b3824091 100644
--- a/src/shared/notes/metadata.tsx
+++ b/src/shared/notes/metadata.tsx
@@ -61,7 +61,7 @@ export function NoteMetadata({ id }: { id: string }) {
return { replies, users, zap };
},
- { refetchOnWindowFocus: false, refetchOnReconnect: false }
+ { refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false }
);
if (status === 'loading') {
diff --git a/src/shared/notes/replies/list.tsx b/src/shared/notes/replies/list.tsx
index af861716..7a5a7891 100644
--- a/src/shared/notes/replies/list.tsx
+++ b/src/shared/notes/replies/list.tsx
@@ -43,7 +43,7 @@ export function RepliesList({ id }: { id: string }) {
return (
-
diff --git a/src/shared/user.tsx b/src/shared/user.tsx
index 4afe4210..a3bf6b03 100644
--- a/src/shared/user.tsx
+++ b/src/shared/user.tsx
@@ -93,7 +93,7 @@ export function User({
diff --git a/src/shared/userProfile.tsx b/src/shared/userProfile.tsx
index 75856def..dd438283 100644
--- a/src/shared/userProfile.tsx
+++ b/src/shared/userProfile.tsx
@@ -102,12 +102,6 @@ export function UserProfile({ pubkey }: { pubkey: string }) {
>
Message
-
diff --git a/src/utils/hooks/useEvent.tsx b/src/utils/hooks/useEvent.tsx
index 6ac3ad4e..c27881c6 100644
--- a/src/utils/hooks/useEvent.tsx
+++ b/src/utils/hooks/useEvent.tsx
@@ -8,47 +8,56 @@ import { LumeEvent } from '@utils/types';
export function useEvent(id: string, fallback?: string) {
const { ndk } = useNDK();
- const { status, data, error, isFetching } = useQuery(['note', id], async () => {
- const result = await getNoteByID(id);
- if (result) {
- return result as LumeEvent;
- } else {
- if (fallback) {
- const embed: LumeEvent = JSON.parse(fallback);
- embed['event_id'] = embed.id;
- await createNote(
- embed.id,
- embed.pubkey,
- embed.kind,
- embed.tags,
- embed.content as unknown as string,
- embed.created_at
- );
- return embed;
+ const { status, data, error, isFetching } = useQuery(
+ ['note', id],
+ async () => {
+ const result = await getNoteByID(id);
+ if (result) {
+ return result as LumeEvent;
} else {
- const event = await ndk.fetchEvent(id);
- if (event) {
+ if (fallback) {
+ const embed: LumeEvent = JSON.parse(fallback);
+ embed['event_id'] = embed.id;
await createNote(
- event.id,
- event.pubkey,
- event.kind,
- event.tags,
- event.content,
- event.created_at
+ embed.id,
+ embed.pubkey,
+ embed.kind,
+ embed.tags,
+ embed.content as unknown as string,
+ embed.created_at
);
- event['event_id'] = event.id;
- if (event.kind === 1) {
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
- event['content'] = parser(event);
- }
- return event as unknown as LumeEvent;
+ return embed;
} else {
- throw new Error('Event not found');
+ const event = await ndk.fetchEvent(id);
+ if (event) {
+ await createNote(
+ event.id,
+ event.pubkey,
+ event.kind,
+ event.tags,
+ event.content,
+ event.created_at
+ );
+ event['event_id'] = event.id;
+ if (event.kind === 1) {
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ event['content'] = parser(event);
+ }
+ return event as unknown as LumeEvent;
+ } else {
+ throw new Error('Event not found');
+ }
}
}
+ },
+ {
+ staleTime: Infinity,
+ refetchOnMount: false,
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
}
- });
+ );
return { status, data, error, isFetching };
}
diff --git a/src/utils/hooks/useProfile.tsx b/src/utils/hooks/useProfile.tsx
index e18f4a31..c815a0ac 100644
--- a/src/utils/hooks/useProfile.tsx
+++ b/src/utils/hooks/useProfile.tsx
@@ -1,4 +1,3 @@
-import { NDKFilter } from '@nostr-dev-kit/ndk';
import { useQuery } from '@tanstack/react-query';
import { useNDK } from '@libs/ndk/provider';
@@ -15,12 +14,12 @@ export function useProfile(pubkey: string, fallback?: string) {
['user', pubkey],
async () => {
if (!fallback) {
- const filter: NDKFilter = { kinds: [0], authors: [pubkey] };
- const events = await ndk.fetchEvents(filter);
- const latest = [...events].sort((a, b) => b.created_at - a.created_at).pop();
- if (latest) {
- await createMetadata(latest.id, latest.pubkey, latest.content);
- return JSON.parse(latest.content);
+ const user = await ndk.getUser({ hexpubkey: pubkey });
+ await user.fetchProfile();
+ if (user.profile) {
+ user.profile.display_name = user.profile.displayName;
+ await createMetadata(user.npub, pubkey, JSON.stringify(user.profile));
+ return user.profile;
} else {
throw new Error('User not found');
}
@@ -30,6 +29,7 @@ export function useProfile(pubkey: string, fallback?: string) {
}
},
{
+ staleTime: Infinity,
refetchOnMount: false,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
diff --git a/src/utils/parser.tsx b/src/utils/parser.tsx
index 714f06df..b12b9f89 100644
--- a/src/utils/parser.tsx
+++ b/src/utils/parser.tsx
@@ -5,6 +5,8 @@ import ReactPlayer from 'react-player';
import { Content, LumeEvent } from '@utils/types';
export function parser(event: LumeEvent) {
+ if (event.kind !== 1) return;
+
const references = parseReferences(event as unknown as Event);
const urls = getUrls(event.content as unknown as string);
@@ -49,6 +51,7 @@ export function parser(event: LumeEvent) {
references?.forEach((item) => {
const profile = item.profile;
const event = item.event;
+ const addr = item.address;
if (event) {
content.notes.push(event.id);
content.parsed = content.parsed.replace(item.text, '');
@@ -56,6 +59,10 @@ export function parser(event: LumeEvent) {
if (profile) {
content.parsed = content.parsed.replace(item.text, `~pub${item.profile.pubkey}~`);
}
+ if (addr) {
+ content.notes.push(addr.identifier);
+ content.parsed = content.parsed.replace(item.text, '');
+ }
});
return content;