diff options
author | crupest <crupest@outlook.com> | 2020-08-07 18:27:04 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-08-07 18:27:04 +0800 |
commit | 00b4f38a4c6f3c1039873cc8e274e24f207d81a7 (patch) | |
tree | 32603eda8592590e869b11f6c95dad9db74ce9b8 /Timeline/ClientApp/src/app/home/OfflineBoard.tsx | |
parent | ef5f490cf3155234a12d42f1b43630e38cb49a38 (diff) | |
download | timeline-00b4f38a4c6f3c1039873cc8e274e24f207d81a7.tar.gz timeline-00b4f38a4c6f3c1039873cc8e274e24f207d81a7.tar.bz2 timeline-00b4f38a4c6f3c1039873cc8e274e24f207d81a7.zip |
Create home page for offline.
Diffstat (limited to 'Timeline/ClientApp/src/app/home/OfflineBoard.tsx')
-rw-r--r-- | Timeline/ClientApp/src/app/home/OfflineBoard.tsx | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/home/OfflineBoard.tsx b/Timeline/ClientApp/src/app/home/OfflineBoard.tsx new file mode 100644 index 00000000..ca6d2a26 --- /dev/null +++ b/Timeline/ClientApp/src/app/home/OfflineBoard.tsx @@ -0,0 +1,62 @@ +import React from 'react';
+import { Link } from 'react-router-dom';
+import { Trans } from 'react-i18next';
+
+import { getAllCachedTimelineNames } from '../data/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;
|