From 20d31be7bcb1f5b1a218ca071c0ed120db4ecf9a Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Sun, 14 May 2023 20:01:24 +0700 Subject: [PATCH] display zap in note metadata --- package.json | 1 + pnpm-lock.yaml | 9 ++++++ src/app/note/components/metadata.tsx | 33 ++++++++++----------- src/app/note/components/metadata/like.tsx | 2 +- src/app/note/components/metadata/reply.tsx | 2 +- src/app/note/components/metadata/repost.tsx | 2 +- src/app/note/components/metadata/zap.tsx | 27 +++++++++++++++++ src/shared/icons/zap.tsx | 5 +++- 8 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 src/app/note/components/metadata/zap.tsx diff --git a/package.json b/package.json index 47f24191..efd2c417 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "dayjs": "^1.11.7", "destr": "^1.2.2", "jotai": "^2.1.0", + "light-bolt11-decoder": "^3.0.0", "nostr-relaypool": "^0.6.27", "nostr-tools": "^1.10.1", "react": "^18.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f6a6f72b..5d26a9cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,6 +28,9 @@ dependencies: jotai: specifier: ^2.1.0 version: 2.1.0(react@18.2.0) + light-bolt11-decoder: + specifier: ^3.0.0 + version: 3.0.0 nostr-relaypool: specifier: ^0.6.27 version: 0.6.27(ws@8.13.0) @@ -1558,6 +1561,12 @@ packages: engines: {node: '>=6'} dev: false + /light-bolt11-decoder@3.0.0: + resolution: {integrity: sha512-AKvOigD2pmC8ktnn2TIqdJu0K0qk6ukUmTvHwF3JNkm8uWCqt18Ijn33A/a7gaRZ4PghJ59X+8+MXrzLKdBTmQ==} + dependencies: + '@scure/base': 1.1.1 + dev: false + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} diff --git a/src/app/note/components/metadata.tsx b/src/app/note/components/metadata.tsx index 59f82acc..d7daea96 100644 --- a/src/app/note/components/metadata.tsx +++ b/src/app/note/components/metadata.tsx @@ -3,10 +3,9 @@ import NoteRepost from "@app/note/components/metadata/repost"; import { RelayContext } from "@shared/relayProvider"; -import ZapIcon from "@icons/zap"; - +import NoteZap from "@app/note/components/metadata/zap"; import { READONLY_RELAYS } from "@stores/constants"; - +import { decode } from "light-bolt11-decoder"; import { useContext, useState } from "react"; import useSWRSubscription from "swr/subscription"; @@ -18,6 +17,7 @@ export default function NoteMetadata({ const [replies, setReplies] = useState(0); const [reposts, setReposts] = useState(0); + const [zaps, setZaps] = useState(0); useSWRSubscription(id ? ["note-metadata", id] : null, ([, key]) => { const unsubscribe = pool.subscribe( @@ -25,7 +25,7 @@ export default function NoteMetadata({ { "#e": [key], since: 0, - kinds: [1, 6], + kinds: [1, 6, 9735], limit: 20, }, ], @@ -38,6 +38,17 @@ export default function NoteMetadata({ case 6: setReposts((reposts) => reposts + 1); break; + case 9735: { + const bolt11 = event.tags.find((tag) => tag[0] === "bolt11")[1]; + if (bolt11) { + const decoded = decode(bolt11); + const amount = decoded.sections.find( + (item) => item.name === "amount", + ); + setZaps(amount.value / 1000); + } + break; + } default: break; } @@ -53,19 +64,7 @@ export default function NoteMetadata({
- +
); } diff --git a/src/app/note/components/metadata/like.tsx b/src/app/note/components/metadata/like.tsx index f6931cb2..36e46a48 100644 --- a/src/app/note/components/metadata/like.tsx +++ b/src/app/note/components/metadata/like.tsx @@ -53,7 +53,7 @@ export default function NoteLike({ + ); +} diff --git a/src/shared/icons/zap.tsx b/src/shared/icons/zap.tsx index f7bb68c3..493e524c 100644 --- a/src/shared/icons/zap.tsx +++ b/src/shared/icons/zap.tsx @@ -5,15 +5,18 @@ export default function ZapIcon( ) { return (