diff options
author | crupest <crupest@outlook.com> | 2020-09-03 23:09:03 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-03 23:09:03 +0800 |
commit | 292e5551c5a83a08e9e3c7125567a75f265d4374 (patch) | |
tree | 923c0183f0df17217e2534b50c4f49303aec9dca /Timeline/ClientApp/src/app/views/home/OfflineBoard.tsx | |
parent | edfefcf9bdbf5ba186a8f2c7d021acf04dbbb329 (diff) | |
parent | c97e69f7c22cc93cca44d14ae3c499c30f7760b8 (diff) | |
download | timeline-292e5551c5a83a08e9e3c7125567a75f265d4374.tar.gz timeline-292e5551c5a83a08e9e3c7125567a75f265d4374.tar.bz2 timeline-292e5551c5a83a08e9e3c7125567a75f265d4374.zip |
Merge pull request #159 from crupest/dev
Development on front end.
Diffstat (limited to 'Timeline/ClientApp/src/app/views/home/OfflineBoard.tsx')
-rw-r--r-- | Timeline/ClientApp/src/app/views/home/OfflineBoard.tsx | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/views/home/OfflineBoard.tsx b/Timeline/ClientApp/src/app/views/home/OfflineBoard.tsx new file mode 100644 index 00000000..fc05bd74 --- /dev/null +++ b/Timeline/ClientApp/src/app/views/home/OfflineBoard.tsx @@ -0,0 +1,61 @@ +import React from "react"; +import { Link } from "react-router-dom"; +import { Trans } from "react-i18next"; + +import { getAllCachedTimelineNames } from "@/services/timeline"; +import UserTimelineLogo from "../common/UserTimelineLogo"; +import TimelineLogo from "../common/TimelineLogo"; + +export interface OfflineBoardProps { + onReload: () => void; +} + +const OfflineBoard: React.FC<OfflineBoardProps> = ({ onReload }) => { + const [timelines, setTimelines] = React.useState<string[]>([]); + + React.useEffect(() => { + let subscribe = true; + void getAllCachedTimelineNames().then((t) => { + if (subscribe) setTimelines(t); + }); + return () => { + subscribe = false; + }; + }); + + return ( + <> + <Trans i18nKey="home.offlinePrompt"> + 0 + <a + href="#" + onClick={(e) => { + onReload(); + e.preventDefault(); + }} + > + 1 + </a> + 2 + </Trans> + {timelines.map((timeline) => { + const isPersonal = timeline.startsWith("@"); + const url = isPersonal + ? `/users/${timeline.slice(1)}` + : `/timelines/${timeline}`; + return ( + <div key={timeline} className="timeline-board-item"> + {isPersonal ? ( + <UserTimelineLogo className="icon" /> + ) : ( + <TimelineLogo className="icon" /> + )} + <Link to={url}>{timeline}</Link> + </div> + ); + })} + </> + ); +}; + +export default OfflineBoard; |