로그인 위치 변경

This commit is contained in:
focp212@naver.com
2025-09-30 16:42:09 +09:00
parent 4428528a65
commit 5c43550a22
3 changed files with 164 additions and 152 deletions

View File

@@ -1,14 +1,13 @@
import moment from 'moment'; import moment from 'moment';
import { useCallback, useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useUserInfo } from '@/entities/user/lib/use-user-info'; import { useUserInfo } from '@/entities/user/lib/use-user-info';
import { FavoriteWrapper } from '@/entities/home/ui/favorite-wrapper'; import { FavoriteWrapper } from '@/entities/home/ui/favorite-wrapper';
import { DayStatusBox } from '@/entities/home/ui/day-status-box'; import { DayStatusBox } from '@/entities/home/ui/day-status-box';
import { HomeBottomBanner } from '@/entities/home/ui/home-bottom-banner'; import { HomeBottomBanner } from '@/entities/home/ui/home-bottom-banner';
import { AuthRegister } from '@/entities/home/ui/auth-reguster'; import { AuthRegister } from '@/entities/home/ui/auth-reguster';
import { FooterItemActiveKey } from '@/entities/common/model/types'; import { FooterItemActiveKey } from '@/entities/common/model/types';
import { useStore } from '@/shared/model/store';
import { StorageKeys } from '@/shared/constants/local-storage'; import { StorageKeys } from '@/shared/constants/local-storage';
import { setLocalStorage, getLocalStorage } from '@/shared/lib/web-view-bridge'; import { getLocalStorage } from '@/shared/lib/web-view-bridge';
import { useAppBridge } from '@/hooks/useAppBridge'; import { useAppBridge } from '@/hooks/useAppBridge';
import { HeaderType } from '@/entities/common/model/types'; import { HeaderType } from '@/entities/common/model/types';
import { import {
@@ -19,8 +18,6 @@ import {
useSetFavoriteEdit, useSetFavoriteEdit,
useSetMenuOn useSetMenuOn
} from '@/widgets/sub-layout/use-sub-layout'; } from '@/widgets/sub-layout/use-sub-layout';
import { useHomeGroupsMutation } from '@/entities/home/api/use-home-groups-mutation';
import { HomeGroupsParams, HomeGroupsResponse } from '@/entities/home/model/types';
export const HomePage = () => { export const HomePage = () => {
const { callLogin } = useUserInfo(); const { callLogin } = useUserInfo();
@@ -42,124 +39,9 @@ export const HomePage = () => {
const [bottomBannerOn, setBottomBannerOn] = useState<boolean>(false); const [bottomBannerOn, setBottomBannerOn] = useState<boolean>(false);
const [authRegisterOn, setAuthRegisterOn] = useState<boolean>(false); const [authRegisterOn, setAuthRegisterOn] = useState<boolean>(false);
const [loginSuccess, setLoginSuccess] = useState<boolean>(false); const [loginSuccess, setLoginSuccess] = useState<boolean>(true);
const { mutateAsync: homeGroups } = useHomeGroupsMutation();
const callHomeGroups = () => {
let userInfo = useStore.getState().UserStore.userInfo;
let params: HomeGroupsParams = {
userid: userInfo.usrid
};
homeGroups(params).then((rs: HomeGroupsResponse) => {
useStore.getState().UserStore.setUserMids(rs.mids);
let options: Array<Record<string, string>> = rs.mids.map((value, index) => {
return {
name: value,
value: value
};
});
useStore.getState().UserStore.setSelectOptionsMids(options);
});
};
/*
const userParmas = {
id: 'thenaun12',
password: 'answjddl1!'
};
*/
const userParmas = {
id: 'nictest00',
password: 'nictest00'
};
const handleRequestToken = useCallback(async () =>{
console.log('handleRequestToken');
alert('handleRequestToken');
requestToken()
.then((token) => {
if (!token) {
// 토큰이 null인 경우 로그아웃 처리
console.error('Token is null, performing logout');
useStore.getState().UserStore.resetUserInfo();
setLoginSuccess(false);
logout();
return;
}
console.log('token', token);
setLocalStorage(StorageKeys.Usrid, token.usrid);
setLocalStorage(StorageKeys.TokenType, token.tokenType);
setLocalStorage(StorageKeys.AccessToken, token.accessToken);
setLocalStorage(StorageKeys.RefreshToken, token.refreshToken);
setLocalStorage(StorageKeys.AccessTokenExpiresIn, token.accessTokenExpiresIn);
setLocalStorage(StorageKeys.RefreshTokenExpiresIn, token.refreshTokenExpiresIn);
setLocalStorage(StorageKeys.MenuGrants, token.menuGrants);
setLocalStorage(StorageKeys.ClientAddressIP, token.clientAddressIP);
setLocalStorage(StorageKeys.Requires2FA, token.requires2FA);
useStore.getState().UserStore.setUserInfo({
usrid: userParmas.id,
tokenType: token.tokenType,
accessToken: token.accessToken,
refreshToken: token.refreshToken,
accessTokenExpiresIn: token.accessTokenExpiresIn,
refreshTokenExpiresIn: token.refreshTokenExpiresIn,
menuGrants: token.menuGrants,
clientAddressIP: token.clientAddressIP,
requires2FA: token.requires2FA,
});
setLoginSuccess(true);
})
.catch((error) => {
// 토큰 요청 실패 시 로그아웃 처리
console.error('Failed to request token:', error);
useStore.getState().UserStore.resetUserInfo();
setLoginSuccess(false);
logout();
});
}, []);
const handleLogin = useCallback(async () =>{
//let appStart = getLocalStorage(StorageKeys.AppStart);
//if(!!appStart){
if(false){
useStore.getState().UserStore.resetUserInfo();
let tokenType = getLocalStorage(StorageKeys.TokenType);
let accessToken = getLocalStorage(StorageKeys.AccessToken);
let refreshToken = getLocalStorage(StorageKeys.RefreshToken);
let accessTokenExpiresIn = getLocalStorage(StorageKeys.AccessTokenExpiresIn);
let refreshTokenExpiresIn = getLocalStorage(StorageKeys.RefreshTokenExpiresIn);
let menuGrants = getLocalStorage(StorageKeys.TokenType);
// let usrid = getLocalStorage(StorageKeys.Usrid);
useStore.getState().UserStore.setUserInfo({
tokenType: tokenType,
accessToken: accessToken,
refreshToken: refreshToken,
accessTokenExpiresIn: accessTokenExpiresIn,
refreshTokenExpiresIn: refreshTokenExpiresIn,
menuGrants: menuGrants,
// usrid: usrid
});
setLoginSuccess(true);
callHomeGroups();
}
else{
callLogin(userParmas).then(() => {
setLoginSuccess(true);
callHomeGroups();
});
}
}, []);
const checkBottomBannerOpen = () => { const checkBottomBannerOpen = () => {
console.log('checkBottomBannerOpen');
if(!!bannerToday){ if(!!bannerToday){
bannerToday = bannerToday.toString(); bannerToday = bannerToday.toString();
} }
@@ -176,23 +58,14 @@ export const HomePage = () => {
}).finally(() => { }).finally(() => {
console.log('finally') console.log('finally')
// setAuthRegisterOn(true); setAuthRegisterOn(true);
}); });
}; };
useEffect(() => { useEffect(() => {
// handleRequestToken();
if (isNativeEnvironment) {
handleRequestToken();
} else {
handleLogin();
}
checkBottomBannerOpen(); checkBottomBannerOpen();
checkAuthRegisterOpen(); checkAuthRegisterOpen();
}, []); }, []);
const setBottomBannerEffect = (mode: boolean) => { const setBottomBannerEffect = (mode: boolean) => {
@@ -207,12 +80,7 @@ export const HomePage = () => {
} }
}; };
/*useLoginMutation
const [userInfo] = useStore(
useShallow((state) => [state.userSlice.userInfo]),
);
*/
// useRefreshUserInfo(); // useRefreshUserInfo();
return ( return (
<> <>

View File

@@ -6,6 +6,8 @@ import {
HeaderType, HeaderType,
HeaderNavigationProps HeaderNavigationProps
} from '@/entities/common/model/types'; } from '@/entities/common/model/types';
import { useStore } from '@/shared/model/store';
import { useEffect, useState } from 'react';
export const HeaderNavigation = ({ export const HeaderNavigation = ({
onBack, onBack,
@@ -15,6 +17,9 @@ export const HeaderNavigation = ({
setMenuOn, setMenuOn,
favoriteEdit favoriteEdit
}: HeaderNavigationProps) => { }: HeaderNavigationProps) => {
let [selectOptions, setSelectOptions] = useState<Array<Record<string, string>>>([]);
const { const {
navigate, navigate,
navigateBack navigateBack
@@ -40,6 +45,11 @@ export const HeaderNavigation = ({
navigate(PATHS.alarm.list); navigate(PATHS.alarm.list);
}; };
useEffect(() => {
let mids = useStore.getState().UserStore.selectOptionsMids;
setSelectOptions(mids);
});
return ( return (
<> <>
{ {
@@ -64,9 +74,11 @@ export const HeaderNavigation = ({
<h1 className="app-title blind"></h1> <h1 className="app-title blind"></h1>
<div className="input-wrapper"> <div className="input-wrapper">
<select className="heading-select"> <select className="heading-select">
<option value="1">madzoneviper</option> { selectOptions && selectOptions.length > 0 &&
<option value="2">stormflarewolf</option> selectOptions.map((value, index) => (
<option value="3">blazefangco</option> <option value={ value.value }>{ value.name }</option>
))
}
</select> </select>
</div> </div>
</div> </div>

View File

@@ -1,5 +1,7 @@
import { import {
Fragment, Fragment,
useCallback,
useEffect,
useState useState
} from 'react'; } from 'react';
import { Outlet } from 'react-router-dom'; import { Outlet } from 'react-router-dom';
@@ -9,6 +11,13 @@ import { PullToRefresh } from '@/widgets/pull-to-refresh/pull-to-refresh';
import { useNavigate } from '@/shared/lib/hooks'; import { useNavigate } from '@/shared/lib/hooks';
import { useScrollToTop } from '@/shared/lib/hooks/use-scroll-to-top'; import { useScrollToTop } from '@/shared/lib/hooks/use-scroll-to-top';
import { HeaderType } from '@/entities/common/model/types'; import { HeaderType } from '@/entities/common/model/types';
import { useHomeGroupsMutation } from '@/entities/home/api/use-home-groups-mutation';
import { useUserInfo } from '@/entities/user/lib/use-user-info';
import { useAppBridge } from '@/hooks';
import { useStore } from '@/shared/model/store';
import { getLocalStorage, setLocalStorage } from '@/shared/lib';
import { StorageKeys } from '@/shared/constants/local-storage';
import { HomeGroupsParams, HomeGroupsResponse } from '@/entities/home/model/types';
export interface ContextType { export interface ContextType {
setOnBack: (onBack: () => void) => void; setOnBack: (onBack: () => void) => void;
@@ -33,7 +42,128 @@ export const SubLayout = () => {
const [footerCurrentPage, setFooterCurrentPage] = useState<undefined | string | null>(undefined); const [footerCurrentPage, setFooterCurrentPage] = useState<undefined | string | null>(undefined);
const [favoriteEdit, setFavoriteEdit] = useState<boolean>(false); const [favoriteEdit, setFavoriteEdit] = useState<boolean>(false);
const { callLogin } = useUserInfo();
const {
isNativeEnvironment,
openBiometricRegistrationPopup,
requestToken,
logout
} = useAppBridge();
const { mutateAsync: homeGroups } = useHomeGroupsMutation();
const [loginSuccess, setLoginSuccess] = useState<boolean>(false);
const wrapperClassName = 'wrapper'; const wrapperClassName = 'wrapper';
const userParmas = {
id: 'nictest00',
password: 'nictest00'
};
const handleRequestToken = useCallback(async () =>{
console.log('handleRequestToken');
alert('handleRequestToken');
requestToken().then((token) => {
if(!token) {
// 토큰이 null인 경우 로그아웃 처리
console.error('Token is null, performing logout');
useStore.getState().UserStore.resetUserInfo();
setLoginSuccess(false);
logout();
return;
}
console.log('token', token);
setLocalStorage(StorageKeys.Usrid, token.usrid);
setLocalStorage(StorageKeys.TokenType, token.tokenType);
setLocalStorage(StorageKeys.AccessToken, token.accessToken);
setLocalStorage(StorageKeys.RefreshToken, token.refreshToken);
setLocalStorage(StorageKeys.AccessTokenExpiresIn, token.accessTokenExpiresIn);
setLocalStorage(StorageKeys.RefreshTokenExpiresIn, token.refreshTokenExpiresIn);
setLocalStorage(StorageKeys.MenuGrants, token.menuGrants);
setLocalStorage(StorageKeys.ClientAddressIP, token.clientAddressIP);
setLocalStorage(StorageKeys.Requires2FA, token.requires2FA);
useStore.getState().UserStore.setUserInfo({
usrid: userParmas.id,
tokenType: token.tokenType,
accessToken: token.accessToken,
refreshToken: token.refreshToken,
accessTokenExpiresIn: token.accessTokenExpiresIn,
refreshTokenExpiresIn: token.refreshTokenExpiresIn,
menuGrants: token.menuGrants,
clientAddressIP: token.clientAddressIP,
requires2FA: token.requires2FA,
});
setLoginSuccess(true);
}).catch((error) => {
// 토큰 요청 실패 시 로그아웃 처리
console.error('Failed to request token:', error);
useStore.getState().UserStore.resetUserInfo();
setLoginSuccess(false);
logout();
});
}, []);
const callHomeGroups = () => {
let userInfo = useStore.getState().UserStore.userInfo;
let params: HomeGroupsParams = {
userid: userInfo.usrid
};
homeGroups(params).then((rs: HomeGroupsResponse) => {
useStore.getState().UserStore.setUserMids(rs.mids);
let options: Array<Record<string, string>> = rs.mids.map((value, index) => {
return {
name: value,
value: value
};
});
useStore.getState().UserStore.setSelectOptionsMids(options);
});
};
const handleLogin = useCallback(async () =>{
//let appStart = getLocalStorage(StorageKeys.AppStart);
//if(!!appStart){
if(false){
useStore.getState().UserStore.resetUserInfo();
let tokenType = getLocalStorage(StorageKeys.TokenType);
let accessToken = getLocalStorage(StorageKeys.AccessToken);
let refreshToken = getLocalStorage(StorageKeys.RefreshToken);
let accessTokenExpiresIn = getLocalStorage(StorageKeys.AccessTokenExpiresIn);
let refreshTokenExpiresIn = getLocalStorage(StorageKeys.RefreshTokenExpiresIn);
let menuGrants = getLocalStorage(StorageKeys.TokenType);
// let usrid = getLocalStorage(StorageKeys.Usrid);
useStore.getState().UserStore.setUserInfo({
tokenType: tokenType,
accessToken: accessToken,
refreshToken: refreshToken,
accessTokenExpiresIn: accessTokenExpiresIn,
refreshTokenExpiresIn: refreshTokenExpiresIn,
menuGrants: menuGrants,
// usrid: usrid
});
setLoginSuccess(true);
callHomeGroups();
}
else{
callLogin(userParmas).then(() => {
setLoginSuccess(true);
callHomeGroups();
});
}
}, []);
useEffect(() => {
// handleRequestToken();
if (isNativeEnvironment) {
handleRequestToken();
} else {
handleLogin();
}
}, []);
return ( return (
<PullToRefresh <PullToRefresh
@@ -50,6 +180,7 @@ export const SubLayout = () => {
headerType={ headerType } headerType={ headerType }
favoriteEdit={ favoriteEdit } favoriteEdit={ favoriteEdit }
/> />
{ loginSuccess &&
<Outlet <Outlet
context={{ context={{
setOnBack, setOnBack,
@@ -62,6 +193,7 @@ export const SubLayout = () => {
setFavoriteEdit setFavoriteEdit
}} }}
/> />
}
{ {
footerMode && footerMode &&
<FooterNavigation <FooterNavigation