From 00b4f38a4c6f3c1039873cc8e274e24f207d81a7 Mon Sep 17 00:00:00 2001
From: crupest <crupest@outlook.com>
Date: Fri, 7 Aug 2020 18:27:04 +0800
Subject: Create home page for offline.

---
 Timeline/ClientApp/src/app/home/BoardWithUser.tsx | 102 ++++++++++++++++++++++
 1 file changed, 102 insertions(+)
 create mode 100644 Timeline/ClientApp/src/app/home/BoardWithUser.tsx

(limited to 'Timeline/ClientApp/src/app/home/BoardWithUser.tsx')

diff --git a/Timeline/ClientApp/src/app/home/BoardWithUser.tsx b/Timeline/ClientApp/src/app/home/BoardWithUser.tsx
new file mode 100644
index 00000000..3830104f
--- /dev/null
+++ b/Timeline/ClientApp/src/app/home/BoardWithUser.tsx
@@ -0,0 +1,102 @@
+import React from 'react';
+import { Row, Col } from 'reactstrap';
+import { useTranslation } from 'react-i18next';
+
+import { UserWithToken } from '../data/user';
+import { TimelineInfo } from '../data/timeline';
+
+import { getHttpTimelineClient } from '../http/timeline';
+
+import TimelineBoard from './TimelineBoard';
+import OfflineBoard from './OfflineBoard';
+
+const BoardWithUser: React.FC<{ user: UserWithToken }> = ({ user }) => {
+  const { t } = useTranslation();
+
+  const [ownTimelines, setOwnTimelines] = React.useState<
+    TimelineInfo[] | 'offline' | 'loading'
+  >('loading');
+  const [joinTimelines, setJoinTimelines] = React.useState<
+    TimelineInfo[] | 'offline' | 'loading'
+  >('loading');
+
+  React.useEffect(() => {
+    let subscribe = true;
+    if (ownTimelines === 'loading') {
+      void getHttpTimelineClient()
+        .listTimeline({ relate: user.username, relateType: 'own' })
+        .then(
+          (timelines) => {
+            if (subscribe) {
+              setOwnTimelines(timelines);
+            }
+          },
+          () => {
+            setOwnTimelines('offline');
+          }
+        );
+    }
+    return () => {
+      subscribe = false;
+    };
+  }, [user, ownTimelines]);
+
+  React.useEffect(() => {
+    let subscribe = true;
+    if (joinTimelines === 'loading') {
+      void getHttpTimelineClient()
+        .listTimeline({ relate: user.username, relateType: 'join' })
+        .then(
+          (timelines) => {
+            if (subscribe) {
+              setJoinTimelines(timelines);
+            }
+          },
+          () => {
+            setJoinTimelines('offline');
+          }
+        );
+    }
+    return () => {
+      subscribe = false;
+    };
+  }, [user, joinTimelines]);
+
+  return (
+    <Row className="my-2 justify-content-center">
+      {ownTimelines === 'offline' && joinTimelines === 'offline' ? (
+        <Col className="py-2" sm="8" lg="6">
+          <OfflineBoard
+            onReload={() => {
+              setOwnTimelines('loading');
+              setJoinTimelines('loading');
+            }}
+          />
+        </Col>
+      ) : (
+        <>
+          <Col sm="6" lg="5" className="py-2">
+            <TimelineBoard
+              title={t('home.ownTimeline')}
+              timelines={ownTimelines}
+              onReload={() => {
+                setOwnTimelines('loading');
+              }}
+            />
+          </Col>
+          <Col sm="6" lg="5" className="py-2">
+            <TimelineBoard
+              title={t('home.joinTimeline')}
+              timelines={joinTimelines}
+              onReload={() => {
+                setJoinTimelines('loading');
+              }}
+            />
+          </Col>
+        </>
+      )}
+    </Row>
+  );
+};
+
+export default BoardWithUser;
-- 
cgit v1.2.3

