import React from "react"; import { HubConnectionState } from "@microsoft/signalr"; import { HttpTimelineInfo } from "@/http/timeline"; import useReverseScrollPositionRemember from "@/utilities/useReverseScrollPositionRemember"; import { generatePalette, setPalette } from "@/palette"; import Timeline from "./Timeline"; export interface TimelinePageCardProps { timeline: HttpTimelineInfo; collapse: boolean; toggleCollapse: () => void; connectionStatus: HubConnectionState; className?: string; onReload: () => void; } export interface TimelinePageTemplateProps { timelineName: string; notFoundI18nKey: string; reloadKey: number; onReload: () => void; CardComponent: React.ComponentType; } const TimelinePageTemplate: React.FC = (props) => { const { timelineName, reloadKey, onReload, CardComponent } = props; const [timeline, setTimeline] = React.useState(null); const [connectionStatus, setConnectionStatus] = React.useState(HubConnectionState.Connecting); useReverseScrollPositionRemember(); React.useEffect(() => { if (timeline != null && timeline.color != null) { return setPalette(generatePalette({ primary: timeline.color })); } }, [timeline]); const cardCollapseLocalStorageKey = `timeline.${timelineName}.cardCollapse`; const [cardCollapse, setCardCollapse] = React.useState(true); React.useEffect(() => { const savedCollapse = window.localStorage.getItem( cardCollapseLocalStorageKey ); setCardCollapse(savedCollapse == null ? true : savedCollapse === "true"); }, [cardCollapseLocalStorageKey]); const toggleCardCollapse = (): void => { const newState = !cardCollapse; setCardCollapse(newState); window.localStorage.setItem( cardCollapseLocalStorageKey, newState.toString() ); }; return ( <> {timeline != null ? ( ) : null}
setTimeline(t)} onConnectionStateChanged={setConnectionStatus} />
); }; export default TimelinePageTemplate;