diff --git a/packages/app/src/Components/Event/Application.tsx b/packages/app/src/Components/Event/Application.tsx new file mode 100644 index 00000000..fb78ddbe --- /dev/null +++ b/packages/app/src/Components/Event/Application.tsx @@ -0,0 +1,39 @@ +import { mapEventToProfile, TaggedNostrEvent } from "@snort/system"; +import { FormattedMessage } from "react-intl"; + +import KindName from "../kind-name"; +import Avatar from "../User/Avatar"; +import DisplayName from "../User/DisplayName"; +import ProfileImage from "../User/ProfileImage"; + +export function ApplicationHandler({ ev }: { ev: TaggedNostrEvent }) { + const profile = mapEventToProfile(ev); + const kinds = ev.tags + .filter(a => a[0] === "k") + .map(a => Number(a[1])) + .sort((a, b) => a - b); + return ( +
+
+ +
+ +
+
+ +
+ +
+
+
+ +
+ {kinds.map(a => ( +
+ +
+ ))} +
+
+ ); +} diff --git a/packages/app/src/Components/Event/EventComponent.tsx b/packages/app/src/Components/Event/EventComponent.tsx index cd46ac93..ba599b9d 100644 --- a/packages/app/src/Components/Event/EventComponent.tsx +++ b/packages/app/src/Components/Event/EventComponent.tsx @@ -6,15 +6,15 @@ import { memo, ReactNode } from "react"; import PubkeyList from "@/Components/Embed/PubkeyList"; import ZapstrEmbed from "@/Components/Embed/ZapstrEmbed"; import ErrorBoundary from "@/Components/ErrorBoundary"; +import { ApplicationHandler } from "@/Components/Event/Application"; +import { LongFormText } from "@/Components/Event/LongFormText"; import { NostrFileElement } from "@/Components/Event/NostrFileHeader"; +import { Note } from "@/Components/Event/Note/Note"; import NoteReaction from "@/Components/Event/NoteReaction"; import { ZapGoal } from "@/Components/Event/ZapGoal"; import { LiveEvent } from "@/Components/LiveStream/LiveEvent"; import ProfilePreview from "@/Components/User/ProfilePreview"; -import { LongFormText } from "./LongFormText"; -import { Note } from "./Note/Note"; - export interface NotePropsOptions { isRoot?: boolean; showHeader?: boolean; @@ -75,6 +75,10 @@ export default memo(function EventComponent(props: NoteProps) { case 9041: // Assuming 9041 is a valid EventKind content = ; break; + case EventKind.ApplicationHandler: { + content = ; + break; + } case EventKind.Photo: case EventKind.Video: case EventKind.ShortVideo: { diff --git a/packages/app/src/Components/kind-name.tsx b/packages/app/src/Components/kind-name.tsx index b5c42430..a8be82d9 100644 --- a/packages/app/src/Components/kind-name.tsx +++ b/packages/app/src/Components/kind-name.tsx @@ -1,3 +1,4 @@ +/* eslint-disable max-lines */ import { FormattedMessage } from "react-intl"; export default function KindName({ kind }: { kind: number }) { @@ -222,5 +223,9 @@ export default function KindName({ kind }: { kind: number }) { return ; case 34550: return ; + case 31337: + return ; + default: + return kind; } } diff --git a/packages/app/src/Pages/Layout/Header.tsx b/packages/app/src/Pages/Layout/Header.tsx index 23ff57b0..f9ad1dad 100644 --- a/packages/app/src/Pages/Layout/Header.tsx +++ b/packages/app/src/Pages/Layout/Header.tsx @@ -64,7 +64,11 @@ export function Header() { ); } else if (nostrLink) { - if (nostrLink.type === NostrPrefix.Event || nostrLink.type === NostrPrefix.Note) { + if ( + nostrLink.type === NostrPrefix.Event || + nostrLink.type === NostrPrefix.Note || + nostrLink.type === NostrPrefix.Address + ) { title = ; } else if (nostrLink.type === NostrPrefix.PublicKey || nostrLink.type === NostrPrefix.Profile) { try { diff --git a/packages/app/src/lang.json b/packages/app/src/lang.json index 93041fac..0633ea7f 100644 --- a/packages/app/src/lang.json +++ b/packages/app/src/lang.json @@ -270,6 +270,9 @@ "4emo2p": { "defaultMessage": "Missing Relays" }, + "4oPRxH": { + "defaultMessage": "Supported Kinds:" + }, "4rYCjn": { "defaultMessage": "Note to Self" }, @@ -1148,6 +1151,9 @@ "QWhotP": { "defaultMessage": "Zap Pool only works if you use one of the supported wallet connections (WebLN, LNC, LNDHub or Nostr Wallet Connect)" }, + "QaGyuN": { + "defaultMessage": "Zapstr Track" + }, "QpaLA3": { "defaultMessage": "Channel Message" }, @@ -1302,6 +1308,9 @@ "ULXFfP": { "defaultMessage": "Receive" }, + "ULsJTk": { + "defaultMessage": "Published by" + }, "UNjfWJ": { "defaultMessage": "Check all event signatures received from relays" }, diff --git a/packages/app/src/translations/en.json b/packages/app/src/translations/en.json index 2132910e..0d591ba1 100644 --- a/packages/app/src/translations/en.json +++ b/packages/app/src/translations/en.json @@ -89,6 +89,7 @@ "4Vmpt4": "Nostr Plebs is one of the first NIP-05 providers in the space and offers a good collection of domains at reasonable prices", "4Z3t5i": "Use imgproxy to compress images", "4emo2p": "Missing Relays", + "4oPRxH": "Supported Kinds:", "4rYCjn": "Note to Self", "4wgYpI": "Recommended Application Handlers", "5BVs2e": "zap", @@ -380,6 +381,7 @@ "QDFTjG": "{n} Relays", "QJfhKt": "The private key is like a password, but it cannot be reset. Guard it carefully and never show it to anyone. Once someone has your private key, they will have access to your account forever.", "QWhotP": "Zap Pool only works if you use one of the supported wallet connections (WebLN, LNC, LNDHub or Nostr Wallet Connect)", + "QaGyuN": "Zapstr Track", "QpaLA3": "Channel Message", "Qxv0B2": "You currently have {number} sats in your zap pool.", "Qy6/Ft": "Private Direct Messages", @@ -431,6 +433,7 @@ "U30H69": "Community Definition", "UJTWqI": "Remove from my relays", "ULXFfP": "Receive", + "ULsJTk": "Published by", "UNjfWJ": "Check all event signatures received from relays", "UT7Nkj": "New Chat", "UUPFlt": "Users must accept the content warning to show the content of your note.", diff --git a/packages/system/src/event-kind.ts b/packages/system/src/event-kind.ts index f30ce316..70372a69 100644 --- a/packages/system/src/event-kind.ts +++ b/packages/system/src/event-kind.ts @@ -55,6 +55,7 @@ const enum EventKind { LiveEvent = 30311, // NIP-102 UserStatus = 30315, // NIP-38 ZapstrTrack = 31337, + ApplicationHandler = 31_990, SimpleChatMetadata = 39_000, // NIP-29 ZapRequest = 9734, // NIP 57 ZapReceipt = 9735, // NIP 57