홈 즐겨찾기 변경
This commit is contained in:
@@ -84,7 +84,6 @@
|
|||||||
"react-tooltip": "^5.29.1",
|
"react-tooltip": "^5.29.1",
|
||||||
"react-transition-group": "^4.4.5",
|
"react-transition-group": "^4.4.5",
|
||||||
"react-use": "^17.6.0",
|
"react-use": "^17.6.0",
|
||||||
"recoil": "^0.7.7",
|
|
||||||
"rimraf": "^6.0.1",
|
"rimraf": "^6.0.1",
|
||||||
"root": "git+https://github.com/tanstack/react-query.git",
|
"root": "git+https://github.com/tanstack/react-query.git",
|
||||||
"source-map-loader": "^5.0.0",
|
"source-map-loader": "^5.0.0",
|
||||||
|
|||||||
537
pnpm-lock.yaml
generated
537
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,5 @@
|
|||||||
import { Splash } from '@/widgets/splash/splash';
|
import { Splash } from '@/widgets/splash/splash';
|
||||||
import { Suspense } from 'react';
|
import { Suspense } from 'react';
|
||||||
import { RecoilRoot } from 'recoil';
|
|
||||||
import { CookiesProvider } from 'react-cookie';
|
import { CookiesProvider } from 'react-cookie';
|
||||||
import { QueryClientProvider } from '@tanstack/react-query';
|
import { QueryClientProvider } from '@tanstack/react-query';
|
||||||
import { GlobalErrorBoundary } from '@/widgets/error-boundaries';
|
import { GlobalErrorBoundary } from '@/widgets/error-boundaries';
|
||||||
@@ -16,14 +15,12 @@ export const AppProvider = ({
|
|||||||
}: AppProviderProps) => {
|
}: AppProviderProps) => {
|
||||||
return (
|
return (
|
||||||
<GlobalErrorBoundary>
|
<GlobalErrorBoundary>
|
||||||
<RecoilRoot>
|
<QueryClientProvider client={ getGlobalQueryClient() }>
|
||||||
<QueryClientProvider client={ getGlobalQueryClient() }>
|
<Suspense fallback={<Splash />}>
|
||||||
<Suspense fallback={<Splash />}>
|
<CookiesProvider>{children}</CookiesProvider>
|
||||||
<CookiesProvider>{children}</CookiesProvider>
|
{/* <ReactQueryDevtools /> */}
|
||||||
{/* <ReactQueryDevtools /> */}
|
</Suspense>
|
||||||
</Suspense>
|
</QueryClientProvider>
|
||||||
</QueryClientProvider>
|
|
||||||
</RecoilRoot>
|
|
||||||
</GlobalErrorBoundary>
|
</GlobalErrorBoundary>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -72,19 +72,14 @@ export interface HeaderNavigationProps {
|
|||||||
headerTitle?: string;
|
headerTitle?: string;
|
||||||
headerLeft?: React.ReactNode;
|
headerLeft?: React.ReactNode;
|
||||||
headerRight?: React.ReactNode;
|
headerRight?: React.ReactNode;
|
||||||
menuOn: boolean;
|
|
||||||
headerType: HeaderType;
|
headerType: HeaderType;
|
||||||
setMenuOn: (menuOn: boolean) => void;
|
|
||||||
favoriteEdit?: boolean;
|
|
||||||
loginSuccess: boolean;
|
loginSuccess: boolean;
|
||||||
mid?: string;
|
mid?: string;
|
||||||
setMid: (mid: string) => void;
|
setMid: (mid: string) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface FooterProps {
|
export interface FooterProps {
|
||||||
setMenuOn: (menuOn: boolean) => void;
|
|
||||||
footerCurrentPage?: string | null;
|
footerCurrentPage?: string | null;
|
||||||
setFavoriteEdit: (favoriteEdit: boolean) => void;
|
|
||||||
};
|
};
|
||||||
export enum FooterItemActiveKey {
|
export enum FooterItemActiveKey {
|
||||||
Home = 'Home',
|
Home = 'Home',
|
||||||
|
|||||||
@@ -4,29 +4,26 @@ import { Swiper, SwiperSlide } from 'swiper/react';
|
|||||||
import 'swiper/css';
|
import 'swiper/css';
|
||||||
import { IMAGE_ROOT } from '@/shared/constants/common';
|
import { IMAGE_ROOT } from '@/shared/constants/common';
|
||||||
import { UserFavorite } from '@/entities/user/model/types';
|
import { UserFavorite } from '@/entities/user/model/types';
|
||||||
import { useStore } from '@/shared/model/store';
|
import { useFavoriteEditOnStore, useMenuOnStore, useStore } from '@/shared/model/store';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { showAlert } from '@/widgets/show-alert';
|
import { showAlert } from '@/widgets/show-alert';
|
||||||
import { checkGrant } from '@/shared/lib/check-grant';
|
import { checkGrant } from '@/shared/lib/check-grant';
|
||||||
|
|
||||||
export interface FavoriteWrapperProps {
|
export interface FavoriteWrapperProps {
|
||||||
usingType: 'home' | 'menu',
|
usingType: 'home' | 'menu',
|
||||||
editMode?: boolean,
|
|
||||||
setEditMode?: (editMode: boolean) => void;
|
|
||||||
changeMenuId?: string;
|
changeMenuId?: string;
|
||||||
setMenuOn?: (menuOn: boolean) => void;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FavoriteWrapper = ({
|
export const FavoriteWrapper = ({
|
||||||
usingType,
|
usingType,
|
||||||
editMode,
|
|
||||||
setEditMode,
|
|
||||||
changeMenuId,
|
changeMenuId,
|
||||||
setMenuOn
|
|
||||||
}: FavoriteWrapperProps) => {
|
}: FavoriteWrapperProps) => {
|
||||||
const { navigate } = useNavigate();
|
const { navigate } = useNavigate();
|
||||||
const { i18n, t } = useTranslation();
|
const { i18n, t } = useTranslation();
|
||||||
|
|
||||||
|
const { menuOn, setMenuOn } = useMenuOnStore();
|
||||||
|
const { favoriteEditOn, setFavoriteEditOn } = useFavoriteEditOnStore();
|
||||||
|
|
||||||
const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
|
const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
|
||||||
|
|
||||||
const itemAdd: UserFavorite = {
|
const itemAdd: UserFavorite = {
|
||||||
@@ -38,18 +35,15 @@ export const FavoriteWrapper = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onClickToFavoriteEdit = () => {
|
const onClickToFavoriteEdit = () => {
|
||||||
if(setEditMode){
|
setMenuOn(true);
|
||||||
setEditMode(true);
|
setFavoriteEditOn(true);
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const onClickToNavigate = (menuId?: number, path?: string) => {
|
const onClickToNavigate = (menuId?: number, path?: string) => {
|
||||||
if(menuId && checkGrant(menuId, 'R')){
|
if(menuId && checkGrant(menuId, 'R')){
|
||||||
if(!!path){
|
if(!!path){
|
||||||
navigate(path);
|
navigate(path);
|
||||||
if(setMenuOn){
|
setMenuOn(false);
|
||||||
setMenuOn(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@@ -73,7 +67,7 @@ export const FavoriteWrapper = ({
|
|||||||
<SwiperSlide key={ `favorite-slide-key-${i}` }>
|
<SwiperSlide key={ `favorite-slide-key-${i}` }>
|
||||||
<div
|
<div
|
||||||
className="swiper-item"
|
className="swiper-item"
|
||||||
onClick={ () => !editMode && onClickToNavigate(favoriteItems[i]?.menuId, favoriteItems[i]?.programPath) }
|
onClick={ () => !favoriteEditOn && onClickToNavigate(favoriteItems[i]?.menuId, favoriteItems[i]?.programPath) }
|
||||||
>
|
>
|
||||||
<div className="swiper-icon coin-icon">
|
<div className="swiper-icon coin-icon">
|
||||||
<img
|
<img
|
||||||
@@ -90,7 +84,7 @@ export const FavoriteWrapper = ({
|
|||||||
};
|
};
|
||||||
const makeAddFavoriteItem = () => {
|
const makeAddFavoriteItem = () => {
|
||||||
let rs = [];
|
let rs = [];
|
||||||
if(!editMode && usingType === 'menu'){
|
if(!favoriteEditOn){
|
||||||
rs.push(
|
rs.push(
|
||||||
<SwiperSlide key={ `favorite-item-add-slide-key` }>
|
<SwiperSlide key={ `favorite-item-add-slide-key` }>
|
||||||
<div
|
<div
|
||||||
@@ -114,7 +108,7 @@ export const FavoriteWrapper = ({
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getFavoriteList();
|
getFavoriteList();
|
||||||
}, [changeMenuId]);
|
}, [changeMenuId, favoriteEditOn]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
|
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
|
||||||
import { useStore } from '@/shared/model/store';
|
import { useFavoriteEditOnStore, useMenuOnStore, useStore } from '@/shared/model/store';
|
||||||
import { UserFavorite } from '@/entities/user/model/types';
|
import { UserFavorite } from '@/entities/user/model/types';
|
||||||
import { RefObject, useEffect, useState } from 'react';
|
import { RefObject, useEffect, useState } from 'react';
|
||||||
import { MenuItem } from '../model/types';
|
import { MenuItem } from '../model/types';
|
||||||
@@ -13,8 +13,6 @@ export interface MenuCategoryProps {
|
|||||||
menuName?: string;
|
menuName?: string;
|
||||||
iconFilePath?: string;
|
iconFilePath?: string;
|
||||||
subMenu?: Array<MenuItem>;
|
subMenu?: Array<MenuItem>;
|
||||||
setMenuOn?: (menuOn: boolean) => void;
|
|
||||||
editMode?: boolean;
|
|
||||||
changeMenuId?: string;
|
changeMenuId?: string;
|
||||||
setChangeMenuId: (menuIdChecked?: string) => void;
|
setChangeMenuId: (menuIdChecked?: string) => void;
|
||||||
buttonRefs: RefObject<Array<HTMLDivElement>>;
|
buttonRefs: RefObject<Array<HTMLDivElement>>;
|
||||||
@@ -26,8 +24,6 @@ export const MenuCategory = ({
|
|||||||
iconFilePath,
|
iconFilePath,
|
||||||
menuName,
|
menuName,
|
||||||
subMenu,
|
subMenu,
|
||||||
setMenuOn,
|
|
||||||
editMode,
|
|
||||||
changeMenuId,
|
changeMenuId,
|
||||||
setChangeMenuId,
|
setChangeMenuId,
|
||||||
buttonRefs,
|
buttonRefs,
|
||||||
@@ -39,9 +35,12 @@ export const MenuCategory = ({
|
|||||||
const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
|
const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
|
||||||
const [menuIds, setMenuIds] = useState<Array<number | undefined>>([]);
|
const [menuIds, setMenuIds] = useState<Array<number | undefined>>([]);
|
||||||
|
|
||||||
|
const { menuOn, setMenuOn } = useMenuOnStore();
|
||||||
|
const { favoriteEditOn, setFavoriteEditOn } = useFavoriteEditOnStore();
|
||||||
|
|
||||||
const onClickToNavigate = (menuId?: number, path?: string) => {
|
const onClickToNavigate = (menuId?: number, path?: string) => {
|
||||||
if(menuId && checkGrant(menuId, 'R')){
|
if(menuId && checkGrant(menuId, 'R')){
|
||||||
if(!!path && !!setMenuOn && !editMode){
|
if(!!path && !favoriteEditOn){
|
||||||
setMenuOn(false);
|
setMenuOn(false);
|
||||||
navigate(path);
|
navigate(path);
|
||||||
}
|
}
|
||||||
@@ -125,7 +124,7 @@ export const MenuCategory = ({
|
|||||||
? subMenu[i]?.menuNameEng
|
? subMenu[i]?.menuNameEng
|
||||||
: subMenu[i]?.menuName;
|
: subMenu[i]?.menuName;
|
||||||
|
|
||||||
if(!!editMode && subMenu[i] && subMenu[i]?.menuId){
|
if(!!favoriteEditOn && subMenu[i] && subMenu[i]?.menuId){
|
||||||
rs.push(
|
rs.push(
|
||||||
<li
|
<li
|
||||||
key={ `menu-item-key-${menuId}-${i}` }
|
key={ `menu-item-key-${menuId}-${i}` }
|
||||||
|
|||||||
@@ -13,10 +13,9 @@ import {
|
|||||||
useSetHeaderTitle,
|
useSetHeaderTitle,
|
||||||
useSetHeaderType,
|
useSetHeaderType,
|
||||||
useSetFooterMode,
|
useSetFooterMode,
|
||||||
useSetFooterCurrentPage
|
useSetFooterCurrentPage,
|
||||||
} from '@/widgets/sub-layout/use-sub-layout';
|
} from '@/widgets/sub-layout/use-sub-layout';
|
||||||
import { useStore } from '@/shared/model/store';
|
import { useStore } from '@/shared/model/store';
|
||||||
import { UserFavorite } from '@/entities/user/model/types';
|
|
||||||
import { useHomeBannerListMutation } from '@/entities/home/api/use-home-banner-list-mutation';
|
import { useHomeBannerListMutation } from '@/entities/home/api/use-home-banner-list-mutation';
|
||||||
import {
|
import {
|
||||||
BannerList,
|
BannerList,
|
||||||
@@ -27,11 +26,6 @@ import {
|
|||||||
import { showAlert } from '@/widgets/show-alert';
|
import { showAlert } from '@/widgets/show-alert';
|
||||||
import { snackBar } from '@/shared/lib';
|
import { snackBar } from '@/shared/lib';
|
||||||
|
|
||||||
export let homeReloadKey = 1;
|
|
||||||
export const setHomeReloadKey = () => {
|
|
||||||
homeReloadKey++;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const HomePage = () => {
|
export const HomePage = () => {
|
||||||
const { openBiometricRegistrationPopup, checkAlarmLink } = useAppBridge();
|
const { openBiometricRegistrationPopup, checkAlarmLink } = useAppBridge();
|
||||||
const { mutateAsync: homeBannerList } = useHomeBannerListMutation();
|
const { mutateAsync: homeBannerList } = useHomeBannerListMutation();
|
||||||
@@ -46,7 +40,6 @@ 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 [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
|
|
||||||
const [bannerList, setBannerList] = useState<Array<BannerList>>([]);
|
const [bannerList, setBannerList] = useState<Array<BannerList>>([]);
|
||||||
|
|
||||||
const callHomeBannerList = () => {
|
const callHomeBannerList = () => {
|
||||||
@@ -117,12 +110,9 @@ export const HomePage = () => {
|
|||||||
else{
|
else{
|
||||||
useStore.getState().UserStore.setFirstAccess(false);
|
useStore.getState().UserStore.setFirstAccess(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
let userFavorite = useStore.getState().UserStore.userFavorite;
|
|
||||||
setFavoriteItems(userFavorite);
|
|
||||||
callHomeBannerList();
|
callHomeBannerList();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const setBottomBannerEffect = (mode: boolean) => {
|
const setBottomBannerEffect = (mode: boolean) => {
|
||||||
setBottomBannerOn(mode);
|
setBottomBannerOn(mode);
|
||||||
if(mode === false){
|
if(mode === false){
|
||||||
@@ -143,7 +133,6 @@ export const HomePage = () => {
|
|||||||
<div className="tab-pane dashboard active">
|
<div className="tab-pane dashboard active">
|
||||||
<FavoriteWrapper
|
<FavoriteWrapper
|
||||||
usingType='home'
|
usingType='home'
|
||||||
key={ homeReloadKey }
|
|
||||||
></FavoriteWrapper>
|
></FavoriteWrapper>
|
||||||
<DayStatusBox></DayStatusBox>
|
<DayStatusBox></DayStatusBox>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,6 +6,31 @@ import { createUserInfoStore, UserInfoState } from '@/entities/user/model/store'
|
|||||||
import { createBannerInfoStore, BannerInfoState, createCommonStore, CommonState } from '@/entities/common/model/store';
|
import { createBannerInfoStore, BannerInfoState, createCommonStore, CommonState } from '@/entities/common/model/store';
|
||||||
import { StorageKeys } from '@/shared/constants/local-storage';
|
import { StorageKeys } from '@/shared/constants/local-storage';
|
||||||
|
|
||||||
|
export interface MenuOnStore {
|
||||||
|
menuOn: boolean;
|
||||||
|
setMenuOn: (menuOn: boolean) => void;
|
||||||
|
};
|
||||||
|
export interface FavoriteEditOnStore {
|
||||||
|
favoriteEditOn: boolean;
|
||||||
|
setFavoriteEditOn: (favoriteEditOn: boolean) => void;
|
||||||
|
};
|
||||||
|
export const useMenuOnStore = create<MenuOnStore>((set) => ({
|
||||||
|
menuOn: false,
|
||||||
|
setMenuOn: (menuOn: boolean) => {
|
||||||
|
set((state: { menuOn: boolean}) => ({
|
||||||
|
menuOn: (state.menuOn = menuOn)
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
export const useFavoriteEditOnStore = create<FavoriteEditOnStore>((set) => ({
|
||||||
|
favoriteEditOn: false,
|
||||||
|
setFavoriteEditOn: (favoriteEditOn: boolean) => {
|
||||||
|
set((state: { favoriteEditOn: boolean}) => ({
|
||||||
|
favoriteEditOn: (state.favoriteEditOn = favoriteEditOn)
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
export type RootStore = {
|
export type RootStore = {
|
||||||
UserStore: UserInfoState;
|
UserStore: UserInfoState;
|
||||||
BannerStore: BannerInfoState;
|
BannerStore: BannerInfoState;
|
||||||
|
|||||||
@@ -4,11 +4,10 @@ import { IMAGE_ROOT } from '@/shared/constants/common';
|
|||||||
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
|
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
|
||||||
import { MenuCategory } from '@/entities/menu/ui/menu-category';
|
import { MenuCategory } from '@/entities/menu/ui/menu-category';
|
||||||
import { FavoriteWrapper } from '@/entities/home/ui/favorite-wrapper';
|
import { FavoriteWrapper } from '@/entities/home/ui/favorite-wrapper';
|
||||||
import { useStore } from '@/shared/model/store';
|
import { useFavoriteEditOnStore, useMenuOnStore, useStore } from '@/shared/model/store';
|
||||||
import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants, MenuItems } from '@/entities/common/model/constant';
|
import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants, MenuItems } from '@/entities/common/model/constant';
|
||||||
import { useEffect, useRef, useState } from 'react';
|
import { useEffect, useRef, useState } from 'react';
|
||||||
import { useLocation } from 'react-router';
|
import { useLocation } from 'react-router';
|
||||||
import { setHomeReloadKey } from '@/pages/home/home-page';
|
|
||||||
import { useShortcutSaveMutation } from '@/entities/user/api/use-shortcut-save-mutation';
|
import { useShortcutSaveMutation } from '@/entities/user/api/use-shortcut-save-mutation';
|
||||||
import { ShortcutSaveParams, ShortcutSaveResponse } from '@/entities/user/model/types';
|
import { ShortcutSaveParams, ShortcutSaveResponse } from '@/entities/user/model/types';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
@@ -28,17 +27,10 @@ interface ShortButton {
|
|||||||
index: number;
|
index: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MenuProps {
|
export const Menu = () => {
|
||||||
menuOn: boolean;
|
const { menuOn, setMenuOn } = useMenuOnStore();
|
||||||
setMenuOn: (menuOn: boolean) => void;
|
const { favoriteEditOn, setFavoriteEditOn } = useFavoriteEditOnStore();
|
||||||
favoriteEdit?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const Menu = ({
|
|
||||||
menuOn,
|
|
||||||
setMenuOn,
|
|
||||||
favoriteEdit
|
|
||||||
}: MenuProps) => {
|
|
||||||
const { i18n } = useTranslation();
|
const { i18n } = useTranslation();
|
||||||
const userMids = useStore.getState().UserStore.userMids;
|
const userMids = useStore.getState().UserStore.userMids;
|
||||||
const userMid = useStore.getState().UserStore.mid;
|
const userMid = useStore.getState().UserStore.mid;
|
||||||
@@ -49,7 +41,6 @@ export const Menu = ({
|
|||||||
const { mutateAsync: shortcutSave } = useShortcutSaveMutation();
|
const { mutateAsync: shortcutSave } = useShortcutSaveMutation();
|
||||||
|
|
||||||
const [shortBtns, setShortBtns] = useState<ShortButton[]>([]);
|
const [shortBtns, setShortBtns] = useState<ShortButton[]>([]);
|
||||||
const [editMode, setEditMode] = useState(false);
|
|
||||||
const [changeMenuId, setChangeMenuId] = useState<string>();
|
const [changeMenuId, setChangeMenuId] = useState<string>();
|
||||||
const [shortBtnIdx, setShortBtnIdx] = useState(0);
|
const [shortBtnIdx, setShortBtnIdx] = useState(0);
|
||||||
|
|
||||||
@@ -135,17 +126,12 @@ export const Menu = ({
|
|||||||
}, SCROLL_ANIMATION_DURATION);
|
}, SCROLL_ANIMATION_DURATION);
|
||||||
};
|
};
|
||||||
const onClickToMenuClose = () => {
|
const onClickToMenuClose = () => {
|
||||||
if(editMode){
|
if(favoriteEditOn){
|
||||||
setEditMode(false);
|
setFavoriteEditOn(false);
|
||||||
callShortcutSave();
|
callShortcutSave();
|
||||||
|
|
||||||
// 여기에 저장 로직?
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
setMenuOn(false);
|
setMenuOn(false);
|
||||||
if(location.pathname === PATHS.home){
|
|
||||||
setHomeReloadKey();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -160,8 +146,6 @@ export const Menu = ({
|
|||||||
iconFilePath={ MenuItems[i]?.iconFilePath }
|
iconFilePath={ MenuItems[i]?.iconFilePath }
|
||||||
menuName={ MenuItems[i]?.menuName }
|
menuName={ MenuItems[i]?.menuName }
|
||||||
subMenu={ MenuItems[i]?.subMenu }
|
subMenu={ MenuItems[i]?.subMenu }
|
||||||
setMenuOn={ setMenuOn }
|
|
||||||
editMode={ editMode }
|
|
||||||
changeMenuId={ changeMenuId }
|
changeMenuId={ changeMenuId }
|
||||||
setChangeMenuId= { setChangeMenuId }
|
setChangeMenuId= { setChangeMenuId }
|
||||||
buttonRefs={ buttonRefs }
|
buttonRefs={ buttonRefs }
|
||||||
@@ -254,12 +238,7 @@ export const Menu = ({
|
|||||||
shortBtnsSetting();
|
shortBtnsSetting();
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [i18n.language]);
|
}, [i18n.language]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if(favoriteEdit){
|
|
||||||
setEditMode(favoriteEdit)
|
|
||||||
}
|
|
||||||
},[favoriteEdit]);
|
|
||||||
|
|
||||||
// 메뉴가 열릴 때 초기화
|
// 메뉴가 열릴 때 초기화
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -292,7 +271,7 @@ export const Menu = ({
|
|||||||
<div className="full-menu-header">
|
<div className="full-menu-header">
|
||||||
<div className="full-menu-title">{ userMid }</div>
|
<div className="full-menu-title">{ userMid }</div>
|
||||||
<div className="full-menu-actions">
|
<div className="full-menu-actions">
|
||||||
{ !editMode &&
|
{ !favoriteEditOn &&
|
||||||
<button
|
<button
|
||||||
className="full-menu-settings"
|
className="full-menu-settings"
|
||||||
onClick={ () => onClickToNavigate(PATHS.setting) }
|
onClick={ () => onClickToNavigate(PATHS.setting) }
|
||||||
@@ -314,10 +293,7 @@ export const Menu = ({
|
|||||||
{
|
{
|
||||||
<FavoriteWrapper
|
<FavoriteWrapper
|
||||||
usingType='menu'
|
usingType='menu'
|
||||||
editMode={ editMode }
|
|
||||||
setEditMode={ setEditMode }
|
|
||||||
changeMenuId={ changeMenuId }
|
changeMenuId={ changeMenuId }
|
||||||
setMenuOn={ setMenuOn }
|
|
||||||
></FavoriteWrapper>
|
></FavoriteWrapper>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -8,17 +8,17 @@ import {
|
|||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { useAppBridge } from '@/hooks';
|
import { useAppBridge } from '@/hooks';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useStore } from '@/shared/model/store';
|
|
||||||
import { showAlert } from '../show-alert';
|
import { showAlert } from '../show-alert';
|
||||||
import { checkGrant } from '@/shared/lib/check-grant';
|
import { checkGrant } from '@/shared/lib/check-grant';
|
||||||
|
import { useFavoriteEditOnStore, useMenuOnStore } from '@/shared/model/store';
|
||||||
|
|
||||||
export const FooterNavigation = ({
|
export const FooterNavigation = ({
|
||||||
setMenuOn,
|
|
||||||
footerCurrentPage,
|
footerCurrentPage,
|
||||||
setFavoriteEdit
|
|
||||||
}: FooterProps) => {
|
}: FooterProps) => {
|
||||||
|
const { favoriteEditOn, setFavoriteEditOn } = useFavoriteEditOnStore();
|
||||||
const { navigate } = useNavigate();
|
const { navigate } = useNavigate();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const { menuOn, setMenuOn } = useMenuOnStore();
|
||||||
|
|
||||||
const [isFooterOn, setIsFooterOn] = useState<boolean>(true);
|
const [isFooterOn, setIsFooterOn] = useState<boolean>(true);
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ export const FooterNavigation = ({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
const onClickToOpenMenu = () => {
|
const onClickToOpenMenu = () => {
|
||||||
setFavoriteEdit(false);
|
setFavoriteEditOn(false);
|
||||||
setMenuOn(true);
|
setMenuOn(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -15,10 +15,7 @@ import { appBridge } from '@/utils/appBridge';
|
|||||||
export const HeaderNavigation = ({
|
export const HeaderNavigation = ({
|
||||||
onBack,
|
onBack,
|
||||||
headerTitle,
|
headerTitle,
|
||||||
menuOn,
|
|
||||||
headerType,
|
headerType,
|
||||||
setMenuOn,
|
|
||||||
favoriteEdit,
|
|
||||||
loginSuccess,
|
loginSuccess,
|
||||||
mid,
|
mid,
|
||||||
setMid
|
setMid
|
||||||
@@ -95,11 +92,7 @@ export const HeaderNavigation = ({
|
|||||||
|| headerType === HeaderType.Alim
|
|| headerType === HeaderType.Alim
|
||||||
|| headerType === HeaderType.LeftArrow
|
|| headerType === HeaderType.LeftArrow
|
||||||
) &&
|
) &&
|
||||||
<Menu
|
<Menu></Menu>
|
||||||
menuOn={ menuOn }
|
|
||||||
setMenuOn={ setMenuOn }
|
|
||||||
favoriteEdit={ favoriteEdit }
|
|
||||||
></Menu>
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
(headerType !== HeaderType.NoHeader) &&
|
(headerType !== HeaderType.NoHeader) &&
|
||||||
|
|||||||
@@ -66,12 +66,9 @@ export const SubLayout = () => {
|
|||||||
|
|
||||||
const [onBack, setOnBack] = useState(undefined);
|
const [onBack, setOnBack] = useState(undefined);
|
||||||
const [headerTitle, setHeaderTitle] = useState<string>('');
|
const [headerTitle, setHeaderTitle] = useState<string>('');
|
||||||
const [isPullToRefreshEnabled, setIsPullToRefreshEnabled] = useState<boolean>(false);
|
|
||||||
const [menuOn, setMenuOn] = useState<boolean>(false);
|
|
||||||
const [headerType, setHeaderType] = useState<HeaderType>(HeaderType.NoHeader);
|
const [headerType, setHeaderType] = useState<HeaderType>(HeaderType.NoHeader);
|
||||||
const [footerMode, setFooterMode] = useState<boolean>(false);
|
const [footerMode, setFooterMode] = useState<boolean>(false);
|
||||||
const [footerCurrentPage, setFooterCurrentPage] = useState<undefined | string | null>(undefined);
|
const [footerCurrentPage, setFooterCurrentPage] = useState<undefined | string | null>(undefined);
|
||||||
const [favoriteEdit, setFavoriteEdit] = useState<boolean>(false);
|
|
||||||
const [headerNavigationKey, setHeaderNavigationKey] = useState<number>(1);
|
const [headerNavigationKey, setHeaderNavigationKey] = useState<number>(1);
|
||||||
const [loginSuccess, setLoginSuccess] = useState<boolean>(false);
|
const [loginSuccess, setLoginSuccess] = useState<boolean>(false);
|
||||||
const [mid, setMid] = useState<string>();
|
const [mid, setMid] = useState<string>();
|
||||||
@@ -411,10 +408,7 @@ export const SubLayout = () => {
|
|||||||
<HeaderNavigation
|
<HeaderNavigation
|
||||||
onBack={ onBack }
|
onBack={ onBack }
|
||||||
headerTitle={ headerTitle }
|
headerTitle={ headerTitle }
|
||||||
menuOn={ menuOn }
|
|
||||||
setMenuOn={ setMenuOn }
|
|
||||||
headerType={ headerType }
|
headerType={ headerType }
|
||||||
favoriteEdit={ favoriteEdit }
|
|
||||||
key={ headerNavigationKey }
|
key={ headerNavigationKey }
|
||||||
loginSuccess={ loginSuccess }
|
loginSuccess={ loginSuccess }
|
||||||
mid={ mid }
|
mid={ mid }
|
||||||
@@ -425,21 +419,16 @@ export const SubLayout = () => {
|
|||||||
context={{
|
context={{
|
||||||
setOnBack,
|
setOnBack,
|
||||||
setHeaderTitle,
|
setHeaderTitle,
|
||||||
setIsPullToRefreshEnabled,
|
|
||||||
setMenuOn,
|
|
||||||
setHeaderType,
|
setHeaderType,
|
||||||
setFooterMode,
|
setFooterMode,
|
||||||
setFooterCurrentPage,
|
setFooterCurrentPage,
|
||||||
setFavoriteEdit
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
footerMode &&
|
footerMode &&
|
||||||
<FooterNavigation
|
<FooterNavigation
|
||||||
setMenuOn={ setMenuOn }
|
|
||||||
footerCurrentPage={ footerCurrentPage }
|
footerCurrentPage={ footerCurrentPage }
|
||||||
setFavoriteEdit={ setFavoriteEdit }
|
|
||||||
></FooterNavigation>
|
></FooterNavigation>
|
||||||
}
|
}
|
||||||
{ alarmRoutesOn &&
|
{ alarmRoutesOn &&
|
||||||
|
|||||||
@@ -28,24 +28,6 @@ export const useSetHeaderTitle = (title: string) => {
|
|||||||
return { setHeaderTitle };
|
return { setHeaderTitle };
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useSetIsPullToRefreshEnabled = (enabled: boolean) => {
|
|
||||||
const { setIsPullToRefreshEnabled } = useSubLayoutContext();
|
|
||||||
useEffect(() => {
|
|
||||||
setIsPullToRefreshEnabled(enabled);
|
|
||||||
return () => setIsPullToRefreshEnabled(false);
|
|
||||||
}, [enabled, setIsPullToRefreshEnabled]);
|
|
||||||
return { setIsPullToRefreshEnabled };
|
|
||||||
};
|
|
||||||
|
|
||||||
export const useSetMenuOn = (menuOn: boolean) => {
|
|
||||||
const { setMenuOn } = useSubLayoutContext();
|
|
||||||
useEffect(() => {
|
|
||||||
setMenuOn(menuOn);
|
|
||||||
return () => setMenuOn(false);
|
|
||||||
}, [menuOn, setMenuOn]);
|
|
||||||
return { setMenuOn };
|
|
||||||
};
|
|
||||||
|
|
||||||
export const useSetHeaderType = (headerType: HeaderType) => {
|
export const useSetHeaderType = (headerType: HeaderType) => {
|
||||||
const { setHeaderType } = useSubLayoutContext();
|
const { setHeaderType } = useSubLayoutContext();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -55,15 +37,6 @@ export const useSetHeaderType = (headerType: HeaderType) => {
|
|||||||
return { setHeaderType };
|
return { setHeaderType };
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useSetFavoriteEdit = (favoriteEdit: boolean) => {
|
|
||||||
const { setFavoriteEdit } = useSubLayoutContext();
|
|
||||||
useEffect(() => {
|
|
||||||
setFavoriteEdit(favoriteEdit);
|
|
||||||
return () => setFavoriteEdit(false);
|
|
||||||
}, [favoriteEdit, setFavoriteEdit]);
|
|
||||||
return { setFavoriteEdit }
|
|
||||||
};
|
|
||||||
|
|
||||||
export const useSetFooterMode = (footerMode: boolean) => {
|
export const useSetFooterMode = (footerMode: boolean) => {
|
||||||
const { setFooterMode } = useSubLayoutContext();
|
const { setFooterMode } = useSubLayoutContext();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user