From 0d4e3079aa53f9553eb538951b6ebd6bf4a7a2ee Mon Sep 17 00:00:00 2001 From: crupest 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 ( + + {ownTimelines === 'offline' && joinTimelines === 'offline' ? ( + + { + setOwnTimelines('loading'); + setJoinTimelines('loading'); + }} + /> + + ) : ( + <> + + { + setOwnTimelines('loading'); + }} + /> + + + { + setJoinTimelines('loading'); + }} + /> + + + )} + + ); +}; + +export default BoardWithUser; -- cgit v1.2.3