diff --git a/src/components/Column.tsx b/src/components/Column.tsx index e88d0fa..0c6ed2b 100644 --- a/src/components/Column.tsx +++ b/src/components/Column.tsx @@ -50,7 +50,7 @@ const Column: Component = (props) => { {/* 🏠 */} {props.name} -
{props.children}
+ ); }; diff --git a/src/components/ColumnItem.tsx b/src/components/ColumnItem.tsx index 8af4378..737cafe 100644 --- a/src/components/ColumnItem.tsx +++ b/src/components/ColumnItem.tsx @@ -5,7 +5,7 @@ type ColumnItemProps = { }; const ColumnItem: Component = (props) => { - return
{props.children}
; + return
  • {props.children}
  • ; }; export default ColumnItem; diff --git a/src/components/EventLink.tsx b/src/components/EventLink.tsx index d98b3c1..50eab5f 100644 --- a/src/components/EventLink.tsx +++ b/src/components/EventLink.tsx @@ -1,11 +1,12 @@ import { Component } from 'solid-js'; +import { noteEncode } from 'nostr-tools/nip19'; type EventLinkProps = { eventId: string; }; const EventLink: Component = (props) => ( - {props.eventId} + {noteEncode(props.eventId)} ); export default EventLink; diff --git a/src/components/NotePostForm.tsx b/src/components/NotePostForm.tsx index 9e8161c..d7b4303 100644 --- a/src/components/NotePostForm.tsx +++ b/src/components/NotePostForm.tsx @@ -1,4 +1,13 @@ -import { createSignal, createMemo, onMount, For, type Component, type JSX, Show } from 'solid-js'; +import { + createSignal, + createMemo, + onMount, + Show, + For, + type Component, + type JSX, + type Accessor, +} from 'solid-js'; import { Event as NostrEvent } from 'nostr-tools'; import PaperAirplane from 'heroicons/24/solid/paper-airplane.svg'; @@ -41,7 +50,14 @@ const NotePostForm: Component = (props) => { const replyTo = () => props.replyTo && eventWrapper(props.replyTo); const mode = () => props.mode ?? 'normal'; - const notifyPubkeys = createMemo(() => replyTo()?.mentionedPubkeys() ?? []); + + const mentionedPubkeys: Accessor = createMemo( + () => replyTo()?.mentionedPubkeysWithoutAuthor() ?? [], + ); + const notifyPubkeys = (pubkey: string): string[] | undefined => { + if (mentionedPubkeys().length === 0) return undefined; + return [...mentionedPubkeys(), pubkey]; + }; const handleChangeText: JSX.EventHandler = (ev) => { setText(ev.currentTarget.value); @@ -58,7 +74,7 @@ const NotePostForm: Component = (props) => { relayUrls: config().relayUrls, pubkey, content: text(), - notifyPubkeys: notifyPubkeys(), + notifyPubkeys: notifyPubkeys(pubkey), rootEventId: replyTo()?.rootEvent()?.id ?? replyTo()?.id, replyEventId: replyTo()?.id, }) @@ -95,9 +111,9 @@ const NotePostForm: Component = (props) => { return (
    - 0}> + 0}>
    - + {(pubkey) => ( <> {' '} diff --git a/src/components/textNote/MentionedEventDisplay.tsx b/src/components/textNote/MentionedEventDisplay.tsx index 3945a21..383a946 100644 --- a/src/components/textNote/MentionedEventDisplay.tsx +++ b/src/components/textNote/MentionedEventDisplay.tsx @@ -15,10 +15,7 @@ const MentionedEventDisplay = (props: MentionedEventDisplayProps) => { props.mentionedEvent.marker.length === 0 || props.mentionedEvent.marker === 'mention' } - fallback={() => { - console.log(props.mentionedEvent); - return ; - }} + fallback={() => } >
    = (props) => { const pubkey = usePubkey(); const [showReplyForm, setShowReplyForm] = createSignal(false); + const [showMenu, setShowMenu] = createSignal(false); const [postingRepost, setPostingRepost] = createSignal(false); const [postingReaction, setPostingReaction] = createSignal(false); @@ -172,7 +173,7 @@ const TextNoteDisplay: Component = (props) => {
    {(id) => ( -
    +
    )} @@ -197,13 +198,13 @@ const TextNoteDisplay: Component = (props) => {
    = (props) => {
    = (props) => {
    {reactions().length}
    - +
    + +
    diff --git a/src/components/textNote/TextNoteDisplayById.tsx b/src/components/textNote/TextNoteDisplayById.tsx index 2424f17..dc5e6f8 100644 --- a/src/components/textNote/TextNoteDisplayById.tsx +++ b/src/components/textNote/TextNoteDisplayById.tsx @@ -1,4 +1,5 @@ import { Switch, Match, type Component } from 'solid-js'; +import { noteEncode } from 'nostr-tools/nip19'; import TextNoteDisplay, { type TextNoteDisplayProps } from '@/components/textNote/TextNoteDisplay'; @@ -6,6 +7,7 @@ import useConfig from '@/nostr/useConfig'; import useEvent from '@/nostr/useEvent'; import ensureNonNull from '@/utils/ensureNonNull'; +import EventLink from '../EventLink'; type TextNoteDisplayByIdProps = Omit & { eventId: string | undefined; @@ -25,11 +27,13 @@ const TextNoteDisplayById: Component = (props) => { {(ev) => } - -
    - {'読み込み中 '} - {props.eventId} -
    + + {(id) => ( +
    + {'読み込み中 '} + +
    + )}
    ); diff --git a/src/core/parseTextNote.ts b/src/core/parseTextNote.ts index d2e3b6b..47e80c3 100644 --- a/src/core/parseTextNote.ts +++ b/src/core/parseTextNote.ts @@ -1,5 +1,6 @@ import type { Event as NostrEvent } from 'nostr-tools'; import { decode, type ProfilePointer, type EventPointer } from 'nostr-tools/nip19'; +import eventWrapper from './event'; export type PlainText = { type: 'PlainText'; @@ -96,13 +97,17 @@ export const parseTextNote = (event: NostrEvent): ParsedTextNote => { }; result.push(mentionedUser); } else if (tagName === 'e') { - const marker = tag[2] != null && tag[2].length > 0 ? tag[2] : null; + const mention = eventWrapper(event) + .mentionedEvents() + .find((ev) => ev.index === tagIndex); + if (mention == null) return; + const mentionedEvent: MentionedEvent = { type: 'MentionedEvent', tagIndex, content: match[0], eventId: tag[1], - marker, + marker: mention.marker, }; result.push(mentionedEvent); } diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 09bc4fa..d6ce357 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,4 +1,4 @@ -import { createEffect, onMount, type Component } from 'solid-js'; +import { createSignal, createEffect, onMount, type Component, onCleanup } from 'solid-js'; import { useNavigate } from '@solidjs/router'; import Column from '@/components/Column';