From 928ba0ce419bacba113951095278a5138ead34cf Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 10 Apr 2022 16:04:03 +0800 Subject: ... --- FrontEnd/src/views/timeline/index.tsx | 80 +++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 12 deletions(-) (limited to 'FrontEnd/src/views/timeline/index.tsx') diff --git a/FrontEnd/src/views/timeline/index.tsx b/FrontEnd/src/views/timeline/index.tsx index 02d773dc..4faf8af8 100644 --- a/FrontEnd/src/views/timeline/index.tsx +++ b/FrontEnd/src/views/timeline/index.tsx @@ -1,28 +1,84 @@ import React from "react"; +import { HubConnectionState } from "@microsoft/signalr"; import { useParams } from "react-router-dom"; import { UiLogicError } from "@/common"; +import { HttpTimelineInfo } from "@/http/timeline"; +import useReverseScrollPositionRemember from "@/utilities/useReverseScrollPositionRemember"; +import { generatePalette, setPalette } from "@/palette"; -import TimelinePageTemplate from "../timeline-common/TimelinePageTemplate"; +import Timeline from "./Timeline"; import TimelineCard from "./TimelineCard"; const TimelinePage: React.FC = () => { - const { name } = useParams(); + const { owner: ownerUsername, timeline: timelineNameParam } = useParams(); - if (name == null) { - throw new UiLogicError("No route param 'name'."); - } + if (ownerUsername == null || ownerUsername == "") + throw new UiLogicError("Route param owner is not set."); + + const timelineName = + timelineNameParam == null || timelineNameParam === "" + ? "self" + : timelineNameParam; + + const [timeline, setTimeline] = React.useState(null); const [reloadKey, setReloadKey] = React.useState(0); + const reload = (): void => setReloadKey(reloadKey + 1); + + 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.${ownerUsername}.${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 ( - setReloadKey(reloadKey + 1)} - /> + <> + {timeline != null ? ( + + ) : null} +
+ setTimeline(t)} + onConnectionStateChanged={setConnectionStatus} + /> +
+ ); }; -- cgit v1.2.3