Browse Source

fix build

imwald
Silberengel 5 months ago
parent
commit
95c420d6b7
  1. 26
      src/components/Note/Article/index.tsx
  2. 4
      src/components/Note/SimpleContent/index.tsx
  3. 2
      src/lib/discussion-topics.ts
  4. 14
      src/pages/primary/DiscussionsPage/index.tsx
  5. 4
      src/providers/GroupListProvider.tsx
  6. 2
      src/services/nip89.service.ts

26
src/components/Note/Article/index.tsx

@ -167,7 +167,7 @@ export default function Article({
} }
return ( return (
<div className={`${parsedContent.cssClasses} ${className || ''}`}> <div className={`${parsedContent?.cssClasses || ''} ${className || ''}`}>
{/* Article metadata */} {/* Article metadata */}
<h1 className="break-words">{metadata.title}</h1> <h1 className="break-words">{metadata.title}</h1>
{metadata.summary && ( {metadata.summary && (
@ -184,10 +184,10 @@ export default function Article({
{/* Render AsciiDoc content (everything is now processed as AsciiDoc) */} {/* Render AsciiDoc content (everything is now processed as AsciiDoc) */}
<div ref={contentRef} className={isArticleType ? "asciidoc-content" : "simple-content"} dangerouslySetInnerHTML={{ __html: parsedContent.html }} /> <div ref={contentRef} className={isArticleType ? "asciidoc-content" : "simple-content"} dangerouslySetInnerHTML={{ __html: parsedContent?.html || '' }} />
{/* Collapsible Article Info - only for article-type events */} {/* Collapsible Article Info - only for article-type events */}
{isArticleType && (parsedContent.media.length > 0 || parsedContent.links.length > 0 || parsedContent.nostrLinks.length > 0 || parsedContent.highlightSources.length > 0 || parsedContent.hashtags.length > 0) && ( {isArticleType && (parsedContent?.media?.length > 0 || parsedContent?.links?.length > 0 || parsedContent?.nostrLinks?.length > 0 || parsedContent?.highlightSources?.length > 0 || parsedContent?.hashtags?.length > 0) && (
<Collapsible open={isInfoOpen} onOpenChange={setIsInfoOpen} className="mt-4"> <Collapsible open={isInfoOpen} onOpenChange={setIsInfoOpen} className="mt-4">
<CollapsibleTrigger asChild> <CollapsibleTrigger asChild>
<Button variant="outline" className="w-full justify-between"> <Button variant="outline" className="w-full justify-between">
@ -197,11 +197,11 @@ export default function Article({
</CollapsibleTrigger> </CollapsibleTrigger>
<CollapsibleContent className="space-y-4 mt-2"> <CollapsibleContent className="space-y-4 mt-2">
{/* Media thumbnails */} {/* Media thumbnails */}
{parsedContent.media.length > 0 && ( {parsedContent?.media?.length > 0 && (
<div className="p-4 bg-muted rounded-lg"> <div className="p-4 bg-muted rounded-lg">
<h4 className="text-sm font-semibold mb-3">Images in this article:</h4> <h4 className="text-sm font-semibold mb-3">Images in this article:</h4>
<div className="grid grid-cols-8 sm:grid-cols-12 md:grid-cols-16 gap-1"> <div className="grid grid-cols-8 sm:grid-cols-12 md:grid-cols-16 gap-1">
{parsedContent.media.map((media, index) => ( {parsedContent?.media?.map((media, index) => (
<div key={index} className="aspect-square"> <div key={index} className="aspect-square">
<ImageWithLightbox <ImageWithLightbox
image={media} image={media}
@ -217,11 +217,11 @@ export default function Article({
)} )}
{/* Links summary with OpenGraph previews */} {/* Links summary with OpenGraph previews */}
{parsedContent.links.length > 0 && ( {parsedContent?.links?.length > 0 && (
<div className="p-4 bg-muted rounded-lg"> <div className="p-4 bg-muted rounded-lg">
<h4 className="text-sm font-semibold mb-3">Links in this article:</h4> <h4 className="text-sm font-semibold mb-3">Links in this article:</h4>
<div className="space-y-3"> <div className="space-y-3">
{parsedContent.links.map((link, index) => ( {parsedContent?.links?.map((link, index) => (
<WebPreview <WebPreview
key={index} key={index}
url={link.url} url={link.url}
@ -233,11 +233,11 @@ export default function Article({
)} )}
{/* Nostr links summary */} {/* Nostr links summary */}
{parsedContent.nostrLinks.length > 0 && ( {parsedContent?.nostrLinks?.length > 0 && (
<div className="p-4 bg-muted rounded-lg"> <div className="p-4 bg-muted rounded-lg">
<h4 className="text-sm font-semibold mb-2">Nostr references:</h4> <h4 className="text-sm font-semibold mb-2">Nostr references:</h4>
<div className="space-y-1"> <div className="space-y-1">
{parsedContent.nostrLinks.map((link, index) => ( {parsedContent?.nostrLinks?.map((link, index) => (
<div key={index} className="text-sm"> <div key={index} className="text-sm">
<span className="font-mono text-blue-600">{link.type}:</span>{' '} <span className="font-mono text-blue-600">{link.type}:</span>{' '}
<span className="font-mono">{link.id}</span> <span className="font-mono">{link.id}</span>
@ -248,11 +248,11 @@ export default function Article({
)} )}
{/* Highlight sources */} {/* Highlight sources */}
{parsedContent.highlightSources.length > 0 && ( {parsedContent?.highlightSources?.length > 0 && (
<div className="p-4 bg-muted rounded-lg"> <div className="p-4 bg-muted rounded-lg">
<h4 className="text-sm font-semibold mb-3">Highlight sources:</h4> <h4 className="text-sm font-semibold mb-3">Highlight sources:</h4>
<div className="space-y-3"> <div className="space-y-3">
{parsedContent.highlightSources.map((source, index) => ( {parsedContent?.highlightSources?.map((source, index) => (
<HighlightSourcePreview <HighlightSourcePreview
key={index} key={index}
source={source} source={source}
@ -264,11 +264,11 @@ export default function Article({
)} )}
{/* Hashtags */} {/* Hashtags */}
{parsedContent.hashtags.length > 0 && ( {parsedContent?.hashtags?.length > 0 && (
<div className="p-4 bg-muted rounded-lg"> <div className="p-4 bg-muted rounded-lg">
<h4 className="text-sm font-semibold mb-3">Tags:</h4> <h4 className="text-sm font-semibold mb-3">Tags:</h4>
<div className="flex gap-2 flex-wrap"> <div className="flex gap-2 flex-wrap">
{parsedContent.hashtags.map((tag) => ( {parsedContent?.hashtags?.map((tag) => (
<div <div
key={tag} key={tag}
title={tag} title={tag}

4
src/components/Note/SimpleContent/index.tsx

@ -22,6 +22,10 @@ export default function SimpleContent({
return <div className={className}>Error loading content</div> return <div className={className}>Error loading content</div>
} }
if (!parsedContent) {
return <div className={className}>No content available</div>
}
return ( return (
<div className={`${parsedContent.cssClasses} ${className || ''}`}> <div className={`${parsedContent.cssClasses} ${className || ''}`}>
{/* Render content without ToC and Article Info */} {/* Render content without ToC and Article Info */}

2
src/lib/discussion-topics.ts

@ -309,7 +309,7 @@ export function extractGroupInfo(
} }
} }
const { groupId, groupRelay, fullIdentifier } = parseGroupIdentifier(hTag, relaySources) const { groupId, groupRelay } = parseGroupIdentifier(hTag, relaySources)
const groupDisplayName = buildGroupDisplayName(groupId, groupRelay) const groupDisplayName = buildGroupDisplayName(groupId, groupRelay)
return { return {

14
src/pages/primary/DiscussionsPage/index.tsx

@ -457,6 +457,13 @@ const DiscussionsPage = forwardRef((_, ref) => {
logger.debug('[DiscussionsPage] Thread', threadId.substring(0, 8), 'has votes:', voteStats) logger.debug('[DiscussionsPage] Thread', threadId.substring(0, 8), 'has votes:', voteStats)
} }
// Get relay sources
const eventHints = client.getEventHints(threadId)
const relaySources = eventHints.length > 0 ? eventHints : ['unknown']
// Extract group information
const groupInfo = extractGroupInfo(thread, relaySources)
// Extract topics // Extract topics
const tTagsRaw = thread.tags.filter((tag: string[]) => tag[0] === 't' && tag[1]).map((tag: string[]) => tag[1].toLowerCase()) const tTagsRaw = thread.tags.filter((tag: string[]) => tag[0] === 't' && tag[1]).map((tag: string[]) => tag[1].toLowerCase())
const hashtagsRaw = (thread.content.match(/#\w+/g) || []).map((tag: string) => tag.slice(1).toLowerCase()) const hashtagsRaw = (thread.content.match(/#\w+/g) || []).map((tag: string) => tag.slice(1).toLowerCase())
@ -471,13 +478,6 @@ const DiscussionsPage = forwardRef((_, ref) => {
const hashtags = hashtagsRaw.map((tag: string) => normalizeTopic(tag)) const hashtags = hashtagsRaw.map((tag: string) => normalizeTopic(tag))
const allTopics = [...new Set([...tTags, ...hashtags])] const allTopics = [...new Set([...tTags, ...hashtags])]
// Get relay sources
const eventHints = client.getEventHints(threadId)
const relaySources = eventHints.length > 0 ? eventHints : ['unknown']
// Extract group information
const groupInfo = extractGroupInfo(thread, relaySources)
newEventMap.set(threadId, { newEventMap.set(threadId, {
event: thread, event: thread,
relaySources, relaySources,

4
src/providers/GroupListProvider.tsx

@ -1,5 +1,4 @@
import { createContext, useContext, useEffect, useState, useCallback, useMemo } from 'react' import { createContext, useContext, useEffect, useState, useCallback, useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import { useNostr } from '@/providers/NostrProvider' import { useNostr } from '@/providers/NostrProvider'
import { useFavoriteRelays } from '@/providers/FavoriteRelaysProvider' import { useFavoriteRelays } from '@/providers/FavoriteRelaysProvider'
import { ExtendedKind } from '@/constants' import { ExtendedKind } from '@/constants'
@ -26,8 +25,7 @@ export const useGroupList = () => {
} }
export function GroupListProvider({ children }: { children: React.ReactNode }) { export function GroupListProvider({ children }: { children: React.ReactNode }) {
const { t } = useTranslation() const { pubkey: accountPubkey } = useNostr()
const { pubkey: accountPubkey, publish, updateGroupListEvent } = useNostr()
const { favoriteRelays } = useFavoriteRelays() const { favoriteRelays } = useFavoriteRelays()
const [userGroups, setUserGroups] = useState<string[]>([]) const [userGroups, setUserGroups] = useState<string[]>([])
const [isLoading, setIsLoading] = useState(false) const [isLoading, setIsLoading] = useState(false)

2
src/services/nip89.service.ts

@ -1,6 +1,5 @@
import { ExtendedKind } from '@/constants' import { ExtendedKind } from '@/constants'
import { Event, kinds } from 'nostr-tools' import { Event, kinds } from 'nostr-tools'
import * as nip19 from 'nostr-tools/nip19'
export interface ApplicationHandlerInfo { export interface ApplicationHandlerInfo {
name: string name: string
@ -227,7 +226,6 @@ class Nip89Service {
ExtendedKind.RELAY_REVIEW, ExtendedKind.RELAY_REVIEW,
ExtendedKind.PUBLICATION, ExtendedKind.PUBLICATION,
ExtendedKind.WIKI_ARTICLE, ExtendedKind.WIKI_ARTICLE,
ExtendedKind.WIKI_CHAPTER
], ],
platforms: { platforms: {
web: 'https://jumble.gitcitadel.eu/note/bech32', web: 'https://jumble.gitcitadel.eu/note/bech32',

Loading…
Cancel
Save