You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
memos/web/src/pages/Home.tsx

64 lines
1.8 KiB
TypeScript

import { useEffect } from "react";
import { locationService, userService } from "../services";
import { useAppSelector } from "../store";
4 years ago
import useLoading from "../hooks/useLoading";
import Only from "../components/common/OnlyWhen";
import Sidebar from "../components/Sidebar";
import MemosHeader from "../components/MemosHeader";
import MemoEditor from "../components/MemoEditor";
import MemoFilter from "../components/MemoFilter";
import MemoList from "../components/MemoList";
import toastHelper from "../components/Toast";
4 years ago
import "../less/home.less";
function Home() {
const location = useAppSelector((state) => state.location);
4 years ago
const loadingState = useLoading();
useEffect(() => {
userService
.initialState()
.catch()
.finally(async () => {
const { host, owner, user } = userService.getState();
if (!host) {
locationService.replaceHistory("/signin");
return;
}
if (userService.isVisitorMode()) {
if (!owner) {
toastHelper.error("User not found");
}
} else {
if (!user) {
locationService.replaceHistory(`/u/${host.id}`);
}
}
loadingState.setFinish();
});
}, [location]);
4 years ago
return (
<section className="page-wrapper home">
4 years ago
{loadingState.isLoading ? null : (
<div className="page-container">
4 years ago
<Sidebar />
<main className="memos-wrapper">
<div className="memos-editor-wrapper">
<MemosHeader />
<Only when={!userService.isVisitorMode()}>
<MemoEditor />
</Only>
<MemoFilter />
</div>
<MemoList />
</main>
</div>
4 years ago
)}
</section>
4 years ago
);
}
export default Home;