Loading web/src/hooks/useSuperadminHomePage.tsx 0 → 100644 +65 −0 Original line number Diff line number Diff line import { useEffect, useState } from "react"; import { SuperAdminSelectedPanel } from "../constants/selected_panel"; import { useAuth } from "../context/auth_context"; import { useWindowShow } from "./useWindowShow"; import { useAdmin } from "./useAdmin"; import { UserRole } from "../constants/roles"; import { useGetStatesList } from "./useGetStatesList"; import axios, { AxiosError } from "axios"; import { showErrorAxios } from "../utils/Messages"; export const useSuperAdminHomePage = () => { const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(false); const [errorMessage, setErrorMessage] = useState(""); const [collapsed, setCollapsed] = useState(true); const {setIsWindowActive, isWindowActive} = useWindowShow(); const [selectedPanel, setSelectedPanel] = useState<SuperAdminSelectedPanel>(SuperAdminSelectedPanel.TOWNS); const {user, logout} = useAuth(); const {getAdminInfo} = useAdmin(); const {getStates, statesList} = useGetStatesList(); useEffect(() => { const checkAdminRole = async () => { const admin = await getAdminInfo(); if(admin){ if(admin.role!==UserRole.SUPERADMIN){ setError(true); setErrorMessage("No estas autorizado para acceder a esta página") setTimeout(() => { logout(); }, 5000); return; } } setIsLoading(false); }; checkAdminRole(); const getStatesList = async () => { try{ getStates(); setIsLoading(false); }catch(error: any){ if(axios.isAxiosError(error)){ error as AxiosError; showErrorAxios(error); } } } getStatesList(); },[user]); return { collapsed, isWindowActive, selectedPanel, setCollapsed, setSelectedPanel, setIsWindowActive, isLoading, error, errorMessage, statesList }; } No newline at end of file web/src/pages/home/super_admin_page/super_admin_home_page.tsx +63 −48 Original line number Diff line number Diff line import { Menu, MenuItem, Sidebar } from "react-pro-sidebar" import './assets/styles/style.css'; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faMonument, faUserTie } from "@fortawesome/free-solid-svg-icons"; import { useEffect, useState } from "react"; import { faMonument, faTags, faUserTie } from "@fortawesome/free-solid-svg-icons"; import { AdminPanelNavBar } from "../../../components/admin_panel_navbar/admin_navbar"; import { SidebarHeader } from "../../../components/sidebar_header/sidebar_header"; import { SuperadminPanelTownScreen } from "../../../components/sa_panel_town/sa_panel_town_screen/sa_panel_town_screen"; import { SuperadminPanelAdminScreen } from "../../../components/sa_panel_admin/sa_panel_admin_screen/sa_panel_admin_screen"; import { useGetStatesList } from "../../../hooks/useGetStatesList"; import axios, { AxiosError } from "axios"; import { LoadingScreen } from "../../../components/loading_screen/loading_screen"; import { ToastContainer } from "react-toastify"; import { showErrorAxios } from "../../../utils/Messages"; import { ErrorWindow } from "../../../components/error_window/error_window"; import { LoadingSpinner } from "../../../components/loading_spinner/loading_spinner"; import { SuperAdminSelectedPanel } from "../../../constants/selected_panel"; import { useSuperAdminHomePage } from "../../../hooks/useSuperadminHomePage"; import { SuperAdminPanelCategoryScreen } from "../../../components/sa_panel_category/sa_panel_category_screen/sa_panel_category_screen"; export const SuperAdminHomePage = () => { const [collapsed, setCollapsed] = useState(true); const [windowActive, setWindowActive] = useState(false); const [townPanel, setTownPanel] = useState(true); const [isLoading, setIsLoading] = useState(true); const {getStates, statesList} = useGetStatesList(); const { collapsed, isWindowActive, setCollapsed, selectedPanel, setSelectedPanel, setIsWindowActive, isLoading, error, errorMessage, statesList, useEffect(() => { const getStatesList = async () => { try{ getStates(); setIsLoading(false); }catch(error: any){ if(axios.isAxiosError(error)){ error as AxiosError; showErrorAxios(error); } } } getStatesList(); }, []); } = useSuperAdminHomePage(); if(isLoading) return <LoadingScreen/>; if(error) return ( <div style={{display:'flex', flexDirection:'column', alignItems:'center', justifyContent:'center', width: '100vw', height:'100vh'}}> <LoadingSpinner/> Redirigiendo... <ErrorWindow message={errorMessage}/> </div> ); return ( <div className="superdmin-panel-root"> <Sidebar className="sidebar" collapsed={collapsed} onMouseOver={() => { windowActive ? isWindowActive ? setCollapsed(true) : setCollapsed(false) Loading @@ -50,39 +54,50 @@ export const SuperAdminHomePage = () => { <SidebarHeader/> <Menu> <MenuItem icon={<FontAwesomeIcon icon={faMonument}/>} onClick={() => setTownPanel(true)} disabled={windowActive}> onClick={() => setSelectedPanel(SuperAdminSelectedPanel.TOWNS)} disabled={isWindowActive}> Pueblos </MenuItem> <MenuItem icon={<FontAwesomeIcon icon={faUserTie}/>} onClick={() => setTownPanel(false)} disabled={windowActive}> onClick={() => setSelectedPanel(SuperAdminSelectedPanel.ADMINS)} disabled={isWindowActive}> Administradores </MenuItem> <MenuItem icon={<FontAwesomeIcon icon={faTags}/>} onClick={() => setSelectedPanel(SuperAdminSelectedPanel.CATEGORIES)} disabled={isWindowActive}> Categorías </MenuItem> </Menu> </Sidebar> <div className="superadmin-panel-body"> <AdminPanelNavBar windowActive={windowActive}/> <AdminPanelNavBar windowActive={isWindowActive}/> <div className="superadmin-panel-content"> {townPanel ? isLoading || statesList.length===0 ? <LoadingScreen/> : <SuperadminPanelTownScreen windowActive={windowActive} setWindowActive={setWindowActive} {(() => { switch (selectedPanel) { case SuperAdminSelectedPanel.TOWNS: return <SuperadminPanelTownScreen windowActive={isWindowActive} setWindowActive={setIsWindowActive} statesList={statesList} /> : <SuperadminPanelAdminScreen windowActive={windowActive} setWindowActive={setWindowActive} case SuperAdminSelectedPanel.ADMINS: return <SuperadminPanelAdminScreen windowActive={isWindowActive} setWindowActive={setIsWindowActive} statesList={statesList} /> case SuperAdminSelectedPanel.CATEGORIES: return <SuperAdminPanelCategoryScreen isWindowActive={isWindowActive} setIsWindowActive={setIsWindowActive} /> default: return null; } })()} <ToastContainer position='bottom-right' autoClose = {1000} Loading Loading
web/src/hooks/useSuperadminHomePage.tsx 0 → 100644 +65 −0 Original line number Diff line number Diff line import { useEffect, useState } from "react"; import { SuperAdminSelectedPanel } from "../constants/selected_panel"; import { useAuth } from "../context/auth_context"; import { useWindowShow } from "./useWindowShow"; import { useAdmin } from "./useAdmin"; import { UserRole } from "../constants/roles"; import { useGetStatesList } from "./useGetStatesList"; import axios, { AxiosError } from "axios"; import { showErrorAxios } from "../utils/Messages"; export const useSuperAdminHomePage = () => { const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(false); const [errorMessage, setErrorMessage] = useState(""); const [collapsed, setCollapsed] = useState(true); const {setIsWindowActive, isWindowActive} = useWindowShow(); const [selectedPanel, setSelectedPanel] = useState<SuperAdminSelectedPanel>(SuperAdminSelectedPanel.TOWNS); const {user, logout} = useAuth(); const {getAdminInfo} = useAdmin(); const {getStates, statesList} = useGetStatesList(); useEffect(() => { const checkAdminRole = async () => { const admin = await getAdminInfo(); if(admin){ if(admin.role!==UserRole.SUPERADMIN){ setError(true); setErrorMessage("No estas autorizado para acceder a esta página") setTimeout(() => { logout(); }, 5000); return; } } setIsLoading(false); }; checkAdminRole(); const getStatesList = async () => { try{ getStates(); setIsLoading(false); }catch(error: any){ if(axios.isAxiosError(error)){ error as AxiosError; showErrorAxios(error); } } } getStatesList(); },[user]); return { collapsed, isWindowActive, selectedPanel, setCollapsed, setSelectedPanel, setIsWindowActive, isLoading, error, errorMessage, statesList }; } No newline at end of file
web/src/pages/home/super_admin_page/super_admin_home_page.tsx +63 −48 Original line number Diff line number Diff line import { Menu, MenuItem, Sidebar } from "react-pro-sidebar" import './assets/styles/style.css'; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faMonument, faUserTie } from "@fortawesome/free-solid-svg-icons"; import { useEffect, useState } from "react"; import { faMonument, faTags, faUserTie } from "@fortawesome/free-solid-svg-icons"; import { AdminPanelNavBar } from "../../../components/admin_panel_navbar/admin_navbar"; import { SidebarHeader } from "../../../components/sidebar_header/sidebar_header"; import { SuperadminPanelTownScreen } from "../../../components/sa_panel_town/sa_panel_town_screen/sa_panel_town_screen"; import { SuperadminPanelAdminScreen } from "../../../components/sa_panel_admin/sa_panel_admin_screen/sa_panel_admin_screen"; import { useGetStatesList } from "../../../hooks/useGetStatesList"; import axios, { AxiosError } from "axios"; import { LoadingScreen } from "../../../components/loading_screen/loading_screen"; import { ToastContainer } from "react-toastify"; import { showErrorAxios } from "../../../utils/Messages"; import { ErrorWindow } from "../../../components/error_window/error_window"; import { LoadingSpinner } from "../../../components/loading_spinner/loading_spinner"; import { SuperAdminSelectedPanel } from "../../../constants/selected_panel"; import { useSuperAdminHomePage } from "../../../hooks/useSuperadminHomePage"; import { SuperAdminPanelCategoryScreen } from "../../../components/sa_panel_category/sa_panel_category_screen/sa_panel_category_screen"; export const SuperAdminHomePage = () => { const [collapsed, setCollapsed] = useState(true); const [windowActive, setWindowActive] = useState(false); const [townPanel, setTownPanel] = useState(true); const [isLoading, setIsLoading] = useState(true); const {getStates, statesList} = useGetStatesList(); const { collapsed, isWindowActive, setCollapsed, selectedPanel, setSelectedPanel, setIsWindowActive, isLoading, error, errorMessage, statesList, useEffect(() => { const getStatesList = async () => { try{ getStates(); setIsLoading(false); }catch(error: any){ if(axios.isAxiosError(error)){ error as AxiosError; showErrorAxios(error); } } } getStatesList(); }, []); } = useSuperAdminHomePage(); if(isLoading) return <LoadingScreen/>; if(error) return ( <div style={{display:'flex', flexDirection:'column', alignItems:'center', justifyContent:'center', width: '100vw', height:'100vh'}}> <LoadingSpinner/> Redirigiendo... <ErrorWindow message={errorMessage}/> </div> ); return ( <div className="superdmin-panel-root"> <Sidebar className="sidebar" collapsed={collapsed} onMouseOver={() => { windowActive ? isWindowActive ? setCollapsed(true) : setCollapsed(false) Loading @@ -50,39 +54,50 @@ export const SuperAdminHomePage = () => { <SidebarHeader/> <Menu> <MenuItem icon={<FontAwesomeIcon icon={faMonument}/>} onClick={() => setTownPanel(true)} disabled={windowActive}> onClick={() => setSelectedPanel(SuperAdminSelectedPanel.TOWNS)} disabled={isWindowActive}> Pueblos </MenuItem> <MenuItem icon={<FontAwesomeIcon icon={faUserTie}/>} onClick={() => setTownPanel(false)} disabled={windowActive}> onClick={() => setSelectedPanel(SuperAdminSelectedPanel.ADMINS)} disabled={isWindowActive}> Administradores </MenuItem> <MenuItem icon={<FontAwesomeIcon icon={faTags}/>} onClick={() => setSelectedPanel(SuperAdminSelectedPanel.CATEGORIES)} disabled={isWindowActive}> Categorías </MenuItem> </Menu> </Sidebar> <div className="superadmin-panel-body"> <AdminPanelNavBar windowActive={windowActive}/> <AdminPanelNavBar windowActive={isWindowActive}/> <div className="superadmin-panel-content"> {townPanel ? isLoading || statesList.length===0 ? <LoadingScreen/> : <SuperadminPanelTownScreen windowActive={windowActive} setWindowActive={setWindowActive} {(() => { switch (selectedPanel) { case SuperAdminSelectedPanel.TOWNS: return <SuperadminPanelTownScreen windowActive={isWindowActive} setWindowActive={setIsWindowActive} statesList={statesList} /> : <SuperadminPanelAdminScreen windowActive={windowActive} setWindowActive={setWindowActive} case SuperAdminSelectedPanel.ADMINS: return <SuperadminPanelAdminScreen windowActive={isWindowActive} setWindowActive={setIsWindowActive} statesList={statesList} /> case SuperAdminSelectedPanel.CATEGORIES: return <SuperAdminPanelCategoryScreen isWindowActive={isWindowActive} setIsWindowActive={setIsWindowActive} /> default: return null; } })()} <ToastContainer position='bottom-right' autoClose = {1000} Loading