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) &&
}
)
}