import React, { useMemo } from 'react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faHighlighter, faClock } from '@fortawesome/free-solid-svg-icons' import { format } from 'date-fns' import { useImageCache } from '../hooks/useImageCache' import { UserSettings } from '../services/settingsService' import { Highlight, HighlightLevel } from '../types/highlights' import { HighlightVisibility } from './HighlightsPanel' import { hexToRgb } from '../utils/colorHelpers' interface ReaderHeaderProps { title?: string image?: string summary?: string published?: number readingTimeText?: string | null hasHighlights: boolean highlightCount: number settings?: UserSettings highlights?: Highlight[] highlightVisibility?: HighlightVisibility } const ReaderHeader: React.FC = ({ title, image, summary, published, readingTimeText, hasHighlights, highlightCount, settings, highlights = [], highlightVisibility = { nostrverse: true, friends: true, mine: true } }) => { const cachedImage = useImageCache(image, settings) const formattedDate = published ? format(new Date(published * 1000), 'MMM d, yyyy') : null const isLongSummary = summary && summary.length > 150 // Determine the dominant highlight color based on visibility and priority const highlightIndicatorStyles = useMemo(() => { if (!highlights.length) return undefined // Count highlights by level that are visible const visibleLevels = new Set() highlights.forEach(h => { if (h.level && highlightVisibility[h.level]) { visibleLevels.add(h.level) } }) let hexColor: string | undefined // Priority: nostrverse > friends > mine if (visibleLevels.has('nostrverse') && highlightVisibility.nostrverse) { hexColor = settings?.highlightColorNostrverse || '#9333ea' } else if (visibleLevels.has('friends') && highlightVisibility.friends) { hexColor = settings?.highlightColorFriends || '#f97316' } else if (visibleLevels.has('mine') && highlightVisibility.mine) { hexColor = settings?.highlightColorMine || '#ffff00' } if (!hexColor) return undefined const rgb = hexToRgb(hexColor) return { backgroundColor: `rgba(${rgb}, 0.1)`, borderColor: `rgba(${rgb}, 0.3)`, color: '#fff' } }, [highlights, highlightVisibility, settings]) if (cachedImage) { return ( <>
{title {formattedDate && (
{formattedDate}
)} {title && (

{title}

{summary &&

{summary}

}
{readingTimeText && (
{readingTimeText}
)} {hasHighlights && (
{highlightCount} highlight{highlightCount !== 1 ? 's' : ''}
)}
)}
{isLongSummary && (

{summary}

)} ) } return ( <> {title && (
{formattedDate && (
{formattedDate}
)}

{title}

{summary &&

{summary}

}
{readingTimeText && (
{readingTimeText}
)} {hasHighlights && (
{highlightCount} highlight{highlightCount !== 1 ? 's' : ''}
)}
)} ) } export default ReaderHeader