react-admin-panel-orient/src/App.tsx

109 lines
3.1 KiB
TypeScript

// Modules
import { useMemo, useState, useEffect } from "react";
import { Routes, Route, useNavigate } from "react-router-dom";
import { UserContext } from "./context/UserContext";
import { PostContext } from "./context/PostContext";
// Style
import "./assets/styles/style.scss";
// Types
import { PostType } from "./types/posts";
import { SourceType } from "./types/sources";
import { PopupType } from "./types/popup";
// Components
import Popup from "./components/Popup";
// Pages
import Login from "./pages/Login";
import Main from "./pages/Main";
import Dashboard from "./pages/Dashboard";
import Posts from "./pages/Posts";
import Details from "./pages/Details";
import Post from "./pages/Post";
import Source from "./pages/Source";
import EditSource from "./pages/EditSource";
import CreateSource from "./pages/CreateSource";
// Helpers
import { getLinks } from "./helpers/apiRequests";
const App = () => {
const navigate = useNavigate();
const [posts, setPosts] = useState<PostType[]>();
const [popup, setPopup] = useState<PopupType>({
message: "Link created successfully",
pop: false,
remove: false,
});
const [sources, setSources] = useState<SourceType[]>();
const [user, setUser] = useState({
username: "",
accessLevel: "",
});
useEffect(() => {
const userData = localStorage.getItem("userData");
if (userData) {
setUser(JSON.parse(userData));
}
}, []);
const userValue = useMemo(() => ({ user, setUser }), [user, setUser]);
const postValue = useMemo(() => ({ posts, setPosts }), [posts, setPosts]);
const popupValue = useMemo(() => ({ popup, setPopup }), [popup, setPopup]);
const sourceValue = useMemo(
() => ({ sources, setSources }),
[sources, setSources]
);
useEffect(() => {
if (!user.username) {
// localStorage.removeItem("lastLocation");
navigate("/login");
} else {
navigate(localStorage.getItem("lastLocation") || "/dashboard");
}
}, [user]);
useEffect(() => {
getLinks(setSources);
}, []);
return (
<PostContext.Provider value={{ postValue, sourceValue, popupValue }}>
<UserContext.Provider value={userValue}>
<div className="App">
<Popup />
<Routes>
<Route path="/" element={<Main />} />
<Route path="/dashboard" element={<Main child={<Dashboard />} />} />
<Route path="/posts" element={<Main child={<Posts />} />} />
<Route path="/source" element={<Main child={<Source />} />} />
<Route
path="/source/edit/:id"
element={<Main child={<EditSource />} />}
/>
<Route path="/posts/:id" element={<Main child={<Post />} />} />
<Route
path="/source/create"
element={<Main child={<CreateSource />} />}
/>
<Route
path="/user_details"
element={<Main child={<Details />} />}
/>
<Route path="/login" element={<Login />} />
</Routes>
</div>
</UserContext.Provider>
</PostContext.Provider>
);
};
export default App;