Browse Source

bug-fixes

imwald
Silberengel 5 months ago
parent
commit
c40c809e6f
  1. 4
      src/components/Note/AsciidocArticle/AsciidocArticle.tsx
  2. 10
      src/components/Note/MarkdownArticle/MarkdownArticle.tsx
  3. 20
      src/components/Note/PublicationIndex/PublicationIndex.tsx
  4. 15
      src/components/NoteList/index.tsx

4
src/components/Note/AsciidocArticle/AsciidocArticle.tsx

@ -345,7 +345,8 @@ export default function AsciidocArticle({ @@ -345,7 +345,8 @@ export default function AsciidocArticle({
return (
<article className={`prose prose-zinc max-w-none dark:prose-invert break-words leading-relaxed ${parsedContent?.cssClasses || ''} ${className || ''}`}>
{/* Article metadata */}
{/* Article metadata - hide when used as nested content */}
{!hideImagesAndInfo && (
<header className="mb-8">
<h1 className="break-words text-4xl font-bold mb-6 leading-tight">{metadata.title}</h1>
{metadata.summary && (
@ -362,6 +363,7 @@ export default function AsciidocArticle({ @@ -362,6 +363,7 @@ export default function AsciidocArticle({
</div>
)}
</header>
)}
{/* Render AsciiDoc content (everything is now processed as AsciiDoc) */}
<div

10
src/components/Note/MarkdownArticle/MarkdownArticle.tsx

@ -25,11 +25,13 @@ import { Components } from './types' @@ -25,11 +25,13 @@ import { Components } from './types'
export default function MarkdownArticle({
event,
className,
showImageGallery = false
showImageGallery = false,
hideMetadata = false
}: {
event: Event
className?: string
showImageGallery?: boolean
hideMetadata?: boolean
}) {
const { push } = useSecondaryPage()
const { navigateToHashtag } = useSmartHashtagNavigation()
@ -491,13 +493,13 @@ export default function MarkdownArticle({ @@ -491,13 +493,13 @@ export default function MarkdownArticle({
ref={contentRef}
className={`prose prose-zinc max-w-none dark:prose-invert break-words overflow-wrap-anywhere ${className || ''}`}
>
{metadata.title && <h1 className="break-words">{metadata.title}</h1>}
{metadata.summary && (
{!hideMetadata && metadata.title && <h1 className="break-words">{metadata.title}</h1>}
{!hideMetadata && metadata.summary && (
<blockquote>
<p className="break-words">{metadata.summary}</p>
</blockquote>
)}
{metadata.image && (() => {
{!hideMetadata && metadata.image && (() => {
// Find the index of the metadata image in allImages
const cleanedMetadataImage = cleanUrl(metadata.image)
const metadataImageIndex = cleanedMetadataImage

20
src/components/Note/PublicationIndex/PublicationIndex.tsx

@ -46,10 +46,12 @@ interface PublicationMetadata { @@ -46,10 +46,12 @@ interface PublicationMetadata {
export default function PublicationIndex({
event,
className
className,
isNested = false
}: {
event: Event
className?: string
isNested?: boolean
}) {
const { push } = useSecondaryPage()
// Parse publication metadata from event tags
@ -780,7 +782,8 @@ export default function PublicationIndex({ @@ -780,7 +782,8 @@ export default function PublicationIndex({
return (
<div className={cn('space-y-6', className)}>
{/* Publication Metadata */}
{/* Publication Metadata - only show for top-level publications */}
{!isNested && (
<div className="prose prose-zinc max-w-none dark:prose-invert">
<header className="mb-8 border-b pb-6">
<div className="flex items-start justify-between gap-4 mb-4">
@ -819,9 +822,10 @@ export default function PublicationIndex({ @@ -819,9 +822,10 @@ export default function PublicationIndex({
</div>
</header>
</div>
)}
{/* Table of Contents */}
{!isLoading && tableOfContents.length > 0 && (
{/* Table of Contents - only show for top-level publications */}
{!isNested && !isLoading && tableOfContents.length > 0 && (
<div className="border rounded-lg p-6 bg-muted/30">
<h2 className="text-xl font-semibold mb-4">Table of Contents</h2>
<nav>
@ -839,8 +843,8 @@ export default function PublicationIndex({ @@ -839,8 +843,8 @@ export default function PublicationIndex({
</div>
)}
{/* Failed References Banner */}
{!isLoading && failedReferences.length > 0 && references.length > 0 && (
{/* Failed References Banner - only show for top-level publications */}
{!isNested && !isLoading && failedReferences.length > 0 && references.length > 0 && (
<div className="p-4 border rounded-lg bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800">
<div className="flex items-center justify-between gap-4">
<div className="text-sm text-yellow-800 dark:text-yellow-200">
@ -954,7 +958,7 @@ export default function PublicationIndex({ @@ -954,7 +958,7 @@ export default function PublicationIndex({
// Recursively render nested 30040 publication index
return (
<div key={index} id={sectionId} className="border-l-4 border-primary pl-6 scroll-mt-4">
<PublicationIndex event={ref.event} />
<PublicationIndex event={ref.event} isNested={true} />
</div>
)
} else if (eventKind === ExtendedKind.PUBLICATION_CONTENT || eventKind === ExtendedKind.WIKI_ARTICLE) {
@ -968,7 +972,7 @@ export default function PublicationIndex({ @@ -968,7 +972,7 @@ export default function PublicationIndex({
// Render 30817 content as MarkdownArticle
return (
<div key={index} id={sectionId} className="scroll-mt-4">
<MarkdownArticle event={ref.event} showImageGallery={false} />
<MarkdownArticle event={ref.event} showImageGallery={false} hideMetadata={true} />
</div>
)
} else {

15
src/components/NoteList/index.tsx

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
import NewNotesButton from '@/components/NewNotesButton'
import { Button } from '@/components/ui/button'
import { ExtendedKind } from '@/constants'
import {
getReplaceableCoordinateFromEvent,
isMentioningMutedUsers,
@ -7,12 +8,14 @@ import { @@ -7,12 +8,14 @@ import {
isReplyNoteEvent
} from '@/lib/event'
import { shouldFilterEvent } from '@/lib/event-filtering'
import { getZapInfoFromEvent } from '@/lib/event-metadata'
import { isTouchDevice } from '@/lib/utils'
import { useContentPolicy } from '@/providers/ContentPolicyProvider'
import { useDeletedEvent } from '@/providers/DeletedEventProvider'
import { useMuteList } from '@/providers/MuteListProvider'
import { useNostr } from '@/providers/NostrProvider'
import { useUserTrust } from '@/providers/UserTrustProvider'
import { useZap } from '@/providers/ZapProvider'
import client from '@/services/client.service'
import { TFeedSubRequest } from '@/types'
import dayjs from 'dayjs'
@ -65,6 +68,7 @@ const NoteList = forwardRef( @@ -65,6 +68,7 @@ const NoteList = forwardRef(
const { mutePubkeySet } = useMuteList()
const { hideContentMentioningMutedUsers } = useContentPolicy()
const { isEventDeleted } = useDeletedEvent()
const { zapReplyThreshold } = useZap()
const [events, setEvents] = useState<Event[]>([])
const [newEvents, setNewEvents] = useState<Event[]>([])
const [hasMore, setHasMore] = useState<boolean>(true)
@ -106,9 +110,18 @@ const NoteList = forwardRef( @@ -106,9 +110,18 @@ const NoteList = forwardRef(
// Filter out expired events
if (shouldFilterEvent(evt)) return true
// Filter out zap receipts below the zap threshold (superzaps)
if (evt.kind === ExtendedKind.ZAP_RECEIPT) {
const zapInfo = getZapInfoFromEvent(evt)
// Hide zap receipts if amount is missing, 0, or below the threshold
if (!zapInfo || zapInfo.amount === undefined || zapInfo.amount === 0 || zapInfo.amount < zapReplyThreshold) {
return true
}
}
return false
},
[hideReplies, hideUntrustedNotes, mutePubkeySet, pinnedEventIds, isEventDeleted]
[hideReplies, hideUntrustedNotes, mutePubkeySet, pinnedEventIds, isEventDeleted, zapReplyThreshold]
)
const filteredEvents = useMemo(() => {

Loading…
Cancel
Save