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

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

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

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

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

15
src/components/NoteList/index.tsx

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

Loading…
Cancel
Save