fix: displayAs

This commit is contained in:
2024-04-26 14:28:24 +01:00
parent 85261eaeab
commit b642f13d36
4 changed files with 15 additions and 15 deletions

View File

@ -5,7 +5,7 @@ import { ReactNode, useMemo } from "react";
import { WindowChunk } from "@/Hooks/useTimelineChunks"; import { WindowChunk } from "@/Hooks/useTimelineChunks";
import { DisplayAs } from "./DisplayAsSelector"; import { DisplayAs } from "./DisplayAsSelector";
import { TimelineFragment } from "./TimelineFragment"; import { TimelineRenderer } from "./TimelineRenderer";
export interface TimelineChunkProps { export interface TimelineChunkProps {
id: string; id: string;
@ -15,7 +15,6 @@ export interface TimelineChunkProps {
noteRenderer?: (ev: NostrEvent) => ReactNode; noteRenderer?: (ev: NostrEvent) => ReactNode;
noteOnClick?: (ev: NostrEvent) => void; noteOnClick?: (ev: NostrEvent) => void;
displayAs?: DisplayAs; displayAs?: DisplayAs;
showDisplayAsSelector?: boolean;
} }
/** /**
@ -34,13 +33,16 @@ export default function TimelineChunk(props: TimelineChunkProps) {
const feed = useRequestBuilder(sub); const feed = useRequestBuilder(sub);
return ( return (
<TimelineFragment <TimelineRenderer
frag={{ frags={{
events: feed.filter(a => props.noteFilter?.(a) ?? true), events: feed.filter(a => props.noteFilter?.(a) ?? true),
refTime: props.chunk.until, refTime: props.chunk.until,
}} }}
noteOnClick={props.noteOnClick} noteOnClick={props.noteOnClick}
noteRenderer={props.noteRenderer} noteRenderer={props.noteRenderer}
displayAs={props.displayAs}
latest={[]}
showLatest={() => {}}
/> />
); );
} }

View File

@ -21,7 +21,6 @@ export interface TimelineFollowsProps {
noteRenderer?: (ev: NostrEvent) => ReactNode; noteRenderer?: (ev: NostrEvent) => ReactNode;
noteOnClick?: (ev: NostrEvent) => void; noteOnClick?: (ev: NostrEvent) => void;
displayAs?: DisplayAs; displayAs?: DisplayAs;
showDisplayAsSelector?: boolean;
} }
/** /**
@ -53,11 +52,7 @@ const TimelineFollows = (props: TimelineFollowsProps) => {
return ( return (
<> <>
<DisplayAsSelector <DisplayAsSelector activeSelection={displayAs} onSelect={(displayAs: DisplayAs) => setDisplayAs(displayAs)} />
show={props.showDisplayAsSelector}
activeSelection={displayAs}
onSelect={(displayAs: DisplayAs) => setDisplayAs(displayAs)}
/>
{chunks.map(c => ( {chunks.map(c => (
<TimelineChunk <TimelineChunk
key={c.until} key={c.until}
@ -67,6 +62,7 @@ const TimelineFollows = (props: TimelineFollowsProps) => {
noteFilter={filterEvents} noteFilter={filterEvents}
noteOnClick={props.noteOnClick} noteOnClick={props.noteOnClick}
noteRenderer={props.noteRenderer} noteRenderer={props.noteRenderer}
displayAs={displayAs}
/> />
))} ))}
<AutoLoadMore onClick={() => showMore()} /> <AutoLoadMore onClick={() => showMore()} />

View File

@ -14,7 +14,7 @@ import ProfileImage from "@/Components/User/ProfileImage";
import getEventMedia from "@/Utils/getEventMedia"; import getEventMedia from "@/Utils/getEventMedia";
export interface TimelineRendererProps { export interface TimelineRendererProps {
frags: Array<TimelineFragment>; frags: Array<TimelineFragment> | TimelineFragment;
/** /**
* List of pubkeys who have posted recently * List of pubkeys who have posted recently
*/ */
@ -29,10 +29,10 @@ export interface TimelineRendererProps {
} }
// filter frags[0].events that have media // filter frags[0].events that have media
function Grid({ frags }: { frags: Array<TimelineFragment> }) { function Grid({ frags }: { frags: Array<TimelineFragment> | TimelineFragment }) {
const [modalEventIndex, setModalEventIndex] = useState<number | undefined>(undefined); const [modalEventIndex, setModalEventIndex] = useState<number | undefined>(undefined);
const allEvents = useMemo(() => { const allEvents = useMemo(() => {
return frags.flatMap(frag => frag.events); return (Array.isArray(frags) ? frags : [frags]).flatMap(frag => frag.events);
}, [frags]); }, [frags]);
const mediaEvents = useMemo(() => { const mediaEvents = useMemo(() => {
return allEvents.filter(event => getEventMedia(event).length > 0); return allEvents.filter(event => getEventMedia(event).length > 0);
@ -99,7 +99,8 @@ export function TimelineRenderer(props: TimelineRendererProps) {
}, [inView, props.latest]); }, [inView, props.latest]);
const renderNotes = () => { const renderNotes = () => {
return props.frags.map((frag, index) => ( const frags = Array.isArray(props.frags) ? props.frags : [props.frags];
return frags.map((frag, index) => (
<ErrorBoundary key={frag.events[0]?.id + index}> <ErrorBoundary key={frag.events[0]?.id + index}>
<TimelineFragment <TimelineFragment
frag={frag} frag={frag}

View File

@ -9,15 +9,16 @@ export default function useTimelineChunks(opt: { window?: number; firstChunkSize
const [windowSize] = useState(opt.window ?? 60 * 60 * 2); const [windowSize] = useState(opt.window ?? 60 * 60 * 2);
const [windows, setWindows] = useState(1); const [windows, setWindows] = useState(1);
let offset = opt.now;
const chunks: Array<WindowChunk> = []; const chunks: Array<WindowChunk> = [];
for (let x = 0; x < windows; x++) { for (let x = 0; x < windows; x++) {
// offset from now going backwards in time // offset from now going backwards in time
const offset = opt.now - windowSize * (x - 1);
const size = x === 0 && opt.firstChunkSize ? opt.firstChunkSize : windowSize; const size = x === 0 && opt.firstChunkSize ? opt.firstChunkSize : windowSize;
chunks.push({ chunks.push({
since: offset - size, since: offset - size,
until: offset, until: offset,
}); });
offset -= size;
} }
return { return {