fix: some 🐛

This commit is contained in:
codytseng
2024-11-08 14:24:13 +08:00
parent d883220c93
commit 3a3cf6d256
6 changed files with 18 additions and 10 deletions

View File

@@ -27,6 +27,7 @@ type TSecondaryPageContext = {
} }
type TStackItem = { type TStackItem = {
index: number
pageName: string pageName: string
props: any props: any
component: React.ReactNode component: React.ReactNode
@@ -89,8 +90,10 @@ export function PageManager({
if (!isValidElement(element)) return if (!isValidElement(element)) return
setSecondaryStack((prevStack) => { setSecondaryStack((prevStack) => {
const currentStack = prevStack[prevStack.length - 1]
const index = currentStack ? currentStack.index + 1 : 0
const component = cloneElement(element, props) const component = cloneElement(element, props)
const newStack = [...prevStack, { pageName, props, component }] const newStack = [...prevStack, { index, pageName, props, component }]
if (newStack.length > maxStackSize) newStack.shift() if (newStack.length > maxStackSize) newStack.shift()
return newStack return newStack
}) })
@@ -112,7 +115,7 @@ export function PageManager({
{secondaryStack.length ? ( {secondaryStack.length ? (
secondaryStack.map((item, index) => ( secondaryStack.map((item, index) => (
<div <div
key={index} key={item.index}
className="absolute top-0 left-0 w-full h-full bg-background" className="absolute top-0 left-0 w-full h-full bg-background"
style={{ zIndex: index }} style={{ zIndex: index }}
> >

View File

@@ -10,8 +10,8 @@ export default function RepostNoteCard({ event, className }: { event: Event; cla
return ( return (
<div className={className}> <div className={className}>
<div className="flex gap-1 mb-1 pl-4 text-xs items-center text-muted-foreground"> <div className="flex gap-1 mb-1 pl-4 text-xs items-center text-muted-foreground">
<Repeat2 size={12} /> <Repeat2 size={12} className="shrink-0" />
<Username userId={event.pubkey} className="font-semibold" /> <Username userId={event.pubkey} className="font-semibold truncate" />
<div>reposted</div> <div>reposted</div>
</div> </div>
<ShortTextNoteCard event={targetEvent} /> <ShortTextNoteCard event={targetEvent} />

View File

@@ -42,7 +42,9 @@ export default function NoteList({
const sub = client.subscribeEvents(relayUrls, noteFilter, { const sub = client.subscribeEvents(relayUrls, noteFilter, {
onEose: (events) => { onEose: (events) => {
const processedEvents = events.filter((e) => !isReplyNoteEvent(e)) const processedEvents = events.filter((e) => !isReplyNoteEvent(e))
if (processedEvents.length > 0) {
setEvents((pre) => [...pre, ...processedEvents]) setEvents((pre) => [...pre, ...processedEvents])
}
if (events.length > 0) { if (events.length > 0) {
setUntil(events[events.length - 1].created_at - 1) setUntil(events[events.length - 1].created_at - 1)
} }

View File

@@ -1,5 +1,5 @@
import { Separator } from '@renderer/components/ui/separator' import { Separator } from '@renderer/components/ui/separator'
import { getParentEventId } from '@renderer/lib/event' import { getParentEventId, isReplyNoteEvent } from '@renderer/lib/event'
import { cn } from '@renderer/lib/utils' import { cn } from '@renderer/lib/utils'
import { useNoteStats } from '@renderer/providers/NoteStatsProvider' import { useNoteStats } from '@renderer/providers/NoteStatsProvider'
import client from '@renderer/services/client.service' import client from '@renderer/services/client.service'
@@ -28,14 +28,17 @@ export default function ReplyNoteList({ event, className }: { event: Event; clas
until until
}) })
const sortedEvents = events.sort((a, b) => a.created_at - b.created_at) const sortedEvents = events.sort((a, b) => a.created_at - b.created_at)
if (sortedEvents.length > 0) { const processedEvents = events.filter((e) => isReplyNoteEvent(e))
if (processedEvents.length > 0) {
const eventMap: Record<string, Event> = {} const eventMap: Record<string, Event> = {}
const eventsWithParentIds = sortedEvents.map((event) => { const eventsWithParentIds = processedEvents.map((event) => {
eventMap[event.id] = event eventMap[event.id] = event
return [event, getParentEventId(event)] as [Event, string | undefined] return [event, getParentEventId(event)] as [Event, string | undefined]
}) })
setEventsWithParentId((pre) => [...eventsWithParentIds, ...pre]) setEventsWithParentId((pre) => [...eventsWithParentIds, ...pre])
setEventMap((pre) => ({ ...pre, ...eventMap })) setEventMap((pre) => ({ ...pre, ...eventMap }))
}
if (sortedEvents.length > 0) {
setUntil(sortedEvents[0].created_at - 1) setUntil(sortedEvents[0].created_at - 1)
} }
setHasMore(sortedEvents.length >= 100) setHasMore(sortedEvents.length >= 100)

View File

@@ -9,7 +9,7 @@ export function isNsfwEvent(event: Event) {
} }
export function isReplyNoteEvent(event: Event) { export function isReplyNoteEvent(event: Event) {
return event.kind === kinds.ShortTextNote && event.tags.some(tagNameEquals('e')) return event.kind === kinds.ShortTextNote && event.tags.some(rootETag)
} }
export function getParentEventId(event: Event) { export function getParentEventId(event: Event) {

View File

@@ -1,5 +1,5 @@
import ReplyNoteList from '@renderer/components/ReplyNoteList'
import Note from '@renderer/components/Note' import Note from '@renderer/components/Note'
import ReplyNoteList from '@renderer/components/ReplyNoteList'
import { Separator } from '@renderer/components/ui/separator' import { Separator } from '@renderer/components/ui/separator'
import SecondaryPageLayout from '@renderer/layouts/SecondaryPageLayout' import SecondaryPageLayout from '@renderer/layouts/SecondaryPageLayout'
import { Event } from 'nostr-tools' import { Event } from 'nostr-tools'