/** * @author : 최정우 * @since : 2022.09.20 * @dscription : React를 활용한 Client단 구현 대상인 Application의 시작점(Index) Component 입니다. */ import React from "react"; import { useSelector, useDispatch } from "react-redux"; import { useLocation, /* useNavigate */ } from "react-router"; //Application의 전역 상태값(변수) 저장소(Store) 관리 Component import { setLoginUser } from "./AppStore.jsx"; //Application의 Route 정보를 관리하는 Component import {AdminApp, GovernmentApp, AgencyApp, GuardianApp} from "./AppRoute.jsx"; //Test Layout import Header from "../layout/Header.jsx"; import Menu from "../layout/Menu.jsx"; import Login from "./login/Login.jsx"; import Weather from "./main/Weather.jsx"; function App() { const location = useLocation(); //const navigate = useNavigate(); //전역 변수 저장 객체 const state = useSelector((state) => {return state}); const dispatch = useDispatch(); //로그인 여부 const [isLogin, setIsLogin] = React.useState(false); //로그인에 따라 각기 다른 App 주입 대상 변수(AdminApp, GovernmentApp, AgencyApp, GuardianApp) const [appRoute, setAppRoute] = React.useState(null); const [menuItems, setMenuItems] = React.useState(null); //로그인 사용자 조회 const loginUserSelectOne = (clientLoginCheck) => { fetch("/user/loginUserSelectOne.json", { method: "POST", headers: { 'Content-Type': 'application/json; charset=UTF-8' }, body: JSON.stringify({}), }).then((response) => response.json()).then((data) => { console.log("로그인 결과 : ", data); //로그인 사용자 정보 전역 변수에 저장 dispatch(setLoginUser(data)); //클라이언트 로그인 체크 (콜백) clientLoginCheck(data); }).catch((error) => { console.log('login() /user/loginUserSelectOne.json error : ', error); }); }; //URL 변경 시, 발생 이벤트(hook) React.useEffect(() => { loginUserSelectOne((loginResultData) => { //console.log('loginResultData : ', loginResultData); //console.log('isLogin : ', isLogin, ', authority : ', loginResultData['authority']); //로그인 유무(로그인 정보가 있으면 True, 없으면 False) let isLogin = (loginResultData != null && loginResultData['user_id'] != null); setIsLogin(isLogin); //로그인 -> 권한에 따른 App 주입 if (isLogin == true) { if (loginResultData['authority'] == 'ROLE_ADMIN') { setMenuItems(AdminApp.menuItems); setAppRoute(); } else if (loginResultData['authority'] == 'ROLE_GOVERNMENT') { setMenuItems(GovernmentApp.menuItems); setAppRoute(); } else if (loginResultData['authority'] == 'ROLE_AGENCY') { setMenuItems(AgencyApp.menuItems); setAppRoute(); } else if (loginResultData['authority'] == 'ROLE_GUARDIAN') { setMenuItems(GuardianApp.menuItems); setAppRoute(); } else { alert('권한 관련 에러 - 관리자에게 문의바랍니다.'); console.log('권한 관련 에러 - 관리자에게 문의바랍니다 : ', loginResultData); } } }); }, [location]); return (
{isLogin == true ? (
{appRoute != null ? appRoute : null}
) : ()}
); } export default App;