import ContentPreview from '@/components/ContentPreview' import UserAvatar from '@/components/UserAvatar' import { Skeleton } from '@/components/ui/skeleton' import { Separator } from '@/components/ui/separator' import SecondaryPageLayout from '@/layouts/SecondaryPageLayout' import { getParentBech32Id, getParentEventHexId, getRootBech32Id, getRootEventHexId } from '@/lib/event' import { getCachedThreadContextEvents } from '@/lib/navigation-related-events' import { resolveNoteEventSync } from '@/lib/resolve-note-event-sync' import client from '@/services/client.service' import type { Event } from 'nostr-tools' import { useTranslation } from 'react-i18next' function peekThreadContextEvent(bech32OrHex: string | undefined): Event | undefined { if (!bech32OrHex?.trim()) return undefined return client.peekSessionCachedEvent(bech32OrHex.trim()) } function ThreadContextPreview({ event }: { event: Event }) { return (
) } /** * Shown while the lazy NotePage chunk loads. Renders the clicked note from the navigation/session * cache when available so the secondary panel is not blank. */ export default function NotePageInstantShell({ id, index, hideTitlebar = false, initialEvent }: { id?: string index?: number hideTitlebar?: boolean initialEvent?: Event }) { const { t } = useTranslation() const event = resolveNoteEventSync(id, initialEvent) if (!event) { return (
) } const cachedContext = getCachedThreadContextEvents(event) const parentBech32 = getParentBech32Id(event) const rootBech32 = getRootBech32Id(event) const parentHex = getParentEventHexId(event)?.toLowerCase() const rootHex = getRootEventHexId(event)?.toLowerCase() const selfHex = event.id.toLowerCase() const parentEvent = cachedContext.find((e) => parentHex && e.id.toLowerCase() === parentHex) ?? peekThreadContextEvent(parentBech32) const rootEvent = cachedContext.find((e) => rootHex && e.id.toLowerCase() === rootHex) ?? peekThreadContextEvent(rootBech32) const parentEventForStrip = parentEvent && parentEvent.id.toLowerCase() !== selfHex ? parentEvent : undefined const rootEventForStrip = rootEvent && rootEvent.id.toLowerCase() !== selfHex ? rootEvent : undefined return (
{rootEventForStrip && parentEventForStrip?.id !== rootEventForStrip.id && ( )} {parentEventForStrip && ( <>
)} {(rootEventForStrip || parentEventForStrip) && }
) }