fix: displayAs
This commit is contained in:
@ -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={() => {}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -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()} />
|
||||||
|
@ -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}
|
||||||
|
@ -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 {
|
||||||
|
Reference in New Issue
Block a user