chore: update state initial loader

pull/2221/head
Steven 2 years ago
parent f5802a7d82
commit 936fe5ac9d

@ -5,7 +5,8 @@ import { Outlet } from "react-router-dom";
import storage from "./helpers/storage"; import storage from "./helpers/storage";
import { getSystemColorScheme } from "./helpers/utils"; import { getSystemColorScheme } from "./helpers/utils";
import Loading from "./pages/Loading"; import Loading from "./pages/Loading";
import { initialGlobalState, initialUserState, useGlobalStore } from "./store/module"; import store from "./store";
import { useGlobalStore } from "./store/module";
import { useUserV1Store } from "./store/v1"; import { useUserV1Store } from "./store/v1";
const App = () => { const App = () => {
@ -18,21 +19,10 @@ const App = () => {
useEffect(() => { useEffect(() => {
const initialState = async () => { const initialState = async () => {
try { const { user } = store.getState().user;
await initialGlobalState();
} catch (error) {
// do nothing
}
try {
const user = await initialUserState();
if (user) { if (user) {
await userV1Store.getOrFetchUserByUsername(user.username); await userV1Store.getOrFetchUserByUsername(user.username);
} }
} catch (error) {
// do nothing.
}
setLoading(false); setLoading(false);
}; };

@ -4,7 +4,6 @@ import ArchivedMemo from "@/components/ArchivedMemo";
import Empty from "@/components/Empty"; import Empty from "@/components/Empty";
import MemoFilter from "@/components/MemoFilter"; import MemoFilter from "@/components/MemoFilter";
import MobileHeader from "@/components/MobileHeader"; import MobileHeader from "@/components/MobileHeader";
import useCurrentUser from "@/hooks/useCurrentUser";
import useLoading from "@/hooks/useLoading"; import useLoading from "@/hooks/useLoading";
import { useFilterStore, useMemoStore } from "@/store/module"; import { useFilterStore, useMemoStore } from "@/store/module";
import { useTranslate } from "@/utils/i18n"; import { useTranslate } from "@/utils/i18n";
@ -12,7 +11,6 @@ import "@/less/archived.less";
const Archived = () => { const Archived = () => {
const t = useTranslate(); const t = useTranslate();
const user = useCurrentUser();
const memoStore = useMemoStore(); const memoStore = useMemoStore();
const loadingState = useLoading(); const loadingState = useLoading();
const [archivedMemos, setArchivedMemos] = useState<Memo[]>([]); const [archivedMemos, setArchivedMemos] = useState<Memo[]>([]);
@ -21,12 +19,6 @@ const Archived = () => {
const filter = filterStore.state; const filter = filterStore.state;
const { text: textQuery } = filter; const { text: textQuery } = filter;
useEffect(() => {
if (!user) {
window.location.href = "/auth";
}
}, []);
useEffect(() => { useEffect(() => {
memoStore memoStore
.fetchArchivedMemos() .fetchArchivedMemos()

@ -45,12 +45,6 @@ const DailyReview = () => {
}) })
.sort((a, b) => getTimeStampByDate(a.displayTs) - getTimeStampByDate(b.displayTs)); .sort((a, b) => getTimeStampByDate(a.displayTs) - getTimeStampByDate(b.displayTs));
useEffect(() => {
if (!user) {
window.location.href = "/auth";
}
}, []);
useEffect(() => { useEffect(() => {
let offset = 0; let offset = 0;
const fetchMoreMemos = async () => { const fetchMoreMemos = async () => {

@ -1,27 +1,12 @@
import { useEffect } from "react";
import HomeSidebar from "@/components/HomeSidebar"; import HomeSidebar from "@/components/HomeSidebar";
import MemoEditor from "@/components/MemoEditor"; import MemoEditor from "@/components/MemoEditor";
import MemoFilter from "@/components/MemoFilter"; import MemoFilter from "@/components/MemoFilter";
import MemoList from "@/components/MemoList"; import MemoList from "@/components/MemoList";
import MobileHeader from "@/components/MobileHeader"; import MobileHeader from "@/components/MobileHeader";
import useCurrentUser from "@/hooks/useCurrentUser"; import { useUserStore } from "@/store/module";
import { useGlobalStore, useUserStore } from "@/store/module";
const Home = () => { const Home = () => {
const globalStore = useGlobalStore();
const userStore = useUserStore(); const userStore = useUserStore();
const user = useCurrentUser();
useEffect(() => {
if (!user) {
const systemStatus = globalStore.state.systemStatus;
if (systemStatus.disablePublicMemos) {
window.location.href = "/auth";
} else {
window.location.href = "/explore";
}
}
}, []);
return ( return (
<div className="w-full flex flex-row justify-start items-start"> <div className="w-full flex flex-row justify-start items-start">

@ -10,7 +10,6 @@ import ResourceCard from "@/components/ResourceCard";
import ResourceSearchBar from "@/components/ResourceSearchBar"; import ResourceSearchBar from "@/components/ResourceSearchBar";
import Dropdown from "@/components/kit/Dropdown"; import Dropdown from "@/components/kit/Dropdown";
import { DEFAULT_MEMO_LIMIT } from "@/helpers/consts"; import { DEFAULT_MEMO_LIMIT } from "@/helpers/consts";
import useCurrentUser from "@/hooks/useCurrentUser";
import useLoading from "@/hooks/useLoading"; import useLoading from "@/hooks/useLoading";
import { useResourceStore } from "@/store/module"; import { useResourceStore } from "@/store/module";
import { useTranslate } from "@/utils/i18n"; import { useTranslate } from "@/utils/i18n";
@ -18,19 +17,12 @@ import { useTranslate } from "@/utils/i18n";
const ResourcesDashboard = () => { const ResourcesDashboard = () => {
const t = useTranslate(); const t = useTranslate();
const loadingState = useLoading(); const loadingState = useLoading();
const user = useCurrentUser();
const resourceStore = useResourceStore(); const resourceStore = useResourceStore();
const resources = resourceStore.state.resources; const resources = resourceStore.state.resources;
const [queryText, setQueryText] = useState<string>(""); const [queryText, setQueryText] = useState<string>("");
const [dragActive, setDragActive] = useState(false); const [dragActive, setDragActive] = useState(false);
const [isComplete, setIsComplete] = useState<boolean>(false); const [isComplete, setIsComplete] = useState<boolean>(false);
useEffect(() => {
if (!user) {
window.location.href = "/auth";
}
}, []);
useEffect(() => { useEffect(() => {
resourceStore resourceStore
.fetchResourceListWithLimit(DEFAULT_MEMO_LIMIT) .fetchResourceListWithLimit(DEFAULT_MEMO_LIMIT)

@ -1,6 +1,6 @@
import { Option, Select } from "@mui/joy"; import { Option, Select } from "@mui/joy";
import { isEqual } from "lodash-es"; import { isEqual } from "lodash-es";
import { useEffect, useState } from "react"; import { useState } from "react";
import BetaBadge from "@/components/BetaBadge"; import BetaBadge from "@/components/BetaBadge";
import Icon from "@/components/Icon"; import Icon from "@/components/Icon";
import MobileHeader from "@/components/MobileHeader"; import MobileHeader from "@/components/MobileHeader";
@ -28,12 +28,6 @@ const Setting = () => {
}); });
const isHost = isEqual(user.role, "HOST"); const isHost = isEqual(user.role, "HOST");
useEffect(() => {
if (!user) {
window.location.href = "/auth";
}
}, []);
const handleSectionSelectorItemClick = (settingSection: SettingSection) => { const handleSectionSelectorItemClick = (settingSection: SettingSection) => {
setState({ setState({
selectedSection: settingSection, selectedSection: settingSection,

@ -1,11 +1,13 @@
import { lazy } from "react"; import { lazy } from "react";
import { createBrowserRouter } from "react-router-dom"; import { createBrowserRouter, redirect } from "react-router-dom";
import App from "@/App"; import App from "@/App";
import { isNullorUndefined } from "@/helpers/utils";
import Archived from "@/pages/Archived"; import Archived from "@/pages/Archived";
import DailyReview from "@/pages/DailyReview"; import DailyReview from "@/pages/DailyReview";
import ResourcesDashboard from "@/pages/ResourcesDashboard"; import ResourcesDashboard from "@/pages/ResourcesDashboard";
import Setting from "@/pages/Setting"; import Setting from "@/pages/Setting";
import { initialGlobalState } from "@/store/module"; import store from "@/store";
import { initialGlobalState, initialUserState } from "@/store/module";
const Root = lazy(() => import("@/layouts/Root")); const Root = lazy(() => import("@/layouts/Root"));
const Auth = lazy(() => import("@/pages/Auth")); const Auth = lazy(() => import("@/pages/Auth"));
@ -37,14 +39,14 @@ const router = createBrowserRouter([
{ {
path: "/", path: "/",
element: <App />, element: <App />,
children: [
{
path: "/auth",
element: <Auth />,
loader: async () => { loader: async () => {
await initialGlobalStateLoader(); await initialGlobalStateLoader();
return null; return null;
}, },
children: [
{
path: "/auth",
element: <Auth />,
}, },
{ {
path: "/auth/callback", path: "/auth/callback",
@ -53,10 +55,25 @@ const router = createBrowserRouter([
{ {
path: "/", path: "/",
element: <Root />, element: <Root />,
loader: async () => {
try {
await initialUserState();
} catch (error) {
// do nth
}
return null;
},
children: [ children: [
{ {
path: "", path: "",
element: <Home />, element: <Home />,
loader: async () => {
const { user } = store.getState().user;
if (isNullorUndefined(user)) {
return redirect("/explore");
}
},
}, },
{ {
path: "explore", path: "explore",
@ -65,18 +82,46 @@ const router = createBrowserRouter([
{ {
path: "review", path: "review",
element: <DailyReview />, element: <DailyReview />,
loader: async () => {
const { user } = store.getState().user;
if (isNullorUndefined(user)) {
return redirect("/explore");
}
},
}, },
{ {
path: "resources", path: "resources",
element: <ResourcesDashboard />, element: <ResourcesDashboard />,
loader: async () => {
const { user } = store.getState().user;
if (isNullorUndefined(user)) {
return redirect("/explore");
}
},
}, },
{ {
path: "archived", path: "archived",
element: <Archived />, element: <Archived />,
loader: async () => {
const { user } = store.getState().user;
if (isNullorUndefined(user)) {
return redirect("/explore");
}
},
}, },
{ {
path: "setting", path: "setting",
element: <Setting />, element: <Setting />,
loader: async () => {
const { user } = store.getState().user;
if (isNullorUndefined(user)) {
return redirect("/explore");
}
},
}, },
], ],
}, },

Loading…
Cancel
Save