작업중

This commit is contained in:
focp212@naver.com
2025-09-29 16:59:26 +09:00
parent 74ab29f80a
commit 0a747469a6
18 changed files with 313 additions and 111 deletions

View File

@@ -9,14 +9,16 @@ import { PullToRefresh } from '@/widgets/pull-to-refresh/pull-to-refresh';
import { useNavigate } from '@/shared/lib/hooks';
import { useScrollToTop } from '@/shared/lib/hooks/use-scroll-to-top';
import { HeaderType } from '@/entities/common/model/types';
export interface ContextType {
setOnBack: (onBack: () => void) => void;
setHeaderTitle: (title: string) => void;
setIsPullToRefreshEnabled: (enabled: boolean) => void;
setMenuOn:(on: boolean) => void;
setMenuOn: (menuOn: boolean) => void;
setHeaderType: (headerType: HeaderType) => void;
setFooterMode:(footMode: boolean) => void;
setFooterCurrentPage:(currentPage?: string | null) => void;
setFooterMode: (footerMode: boolean) => void;
setFooterCurrentPage: (footerCurrentPage?: string | null) => void;
setFavoriteEdit: (favoriteEdit?: boolean) => void;
};
export const SubLayout = () => {
@@ -29,7 +31,8 @@ export const SubLayout = () => {
const [headerType, setHeaderType] = useState<HeaderType>(HeaderType.NoHeader);
const [footerMode, setFooterMode] = useState<boolean>(false);
const [footerCurrentPage, setFooterCurrentPage] = useState<undefined | string | null>(undefined);
const [favoriteEdit, setFavoriteEdit] = useState<boolean>(false);
const wrapperClassName = 'wrapper';
return (
@@ -45,6 +48,7 @@ export const SubLayout = () => {
menuOn={ menuOn }
setMenuOn={ setMenuOn }
headerType={ headerType }
favoriteEdit={ favoriteEdit }
/>
<Outlet
context={{
@@ -54,7 +58,8 @@ export const SubLayout = () => {
setMenuOn,
setHeaderType,
setFooterMode,
setFooterCurrentPage
setFooterCurrentPage,
setFavoriteEdit
}}
/>
{
@@ -62,6 +67,7 @@ export const SubLayout = () => {
<FooterNavigation
setMenuOn={ setMenuOn }
footerCurrentPage={ footerCurrentPage }
setFavoriteEdit={ setFavoriteEdit }
></FooterNavigation>
}

View File

@@ -1,9 +1,8 @@
/* eslint-disable react-hooks/exhaustive-deps */
import { ReactNode, useEffect } from 'react';
import { useEffect } from 'react';
import { useOutletContext } from 'react-router';
import { ContextType } from '.';
import { FooterItemActiveKey } from '@/entities/common/model/types';
import { HeaderType } from '@/entities/common/model/types';
import { ContextType } from '.';
export const useSubLayoutContext = () => {
return useOutletContext<ContextType>();
@@ -25,7 +24,7 @@ export const useSetHeaderTitle = (title: string) => {
useEffect(() => {
setHeaderTitle(title);
return () => setHeaderTitle('');
}, [setHeaderTitle]);
}, [title, setHeaderTitle]);
return { setHeaderTitle };
};
@@ -34,16 +33,16 @@ export const useSetIsPullToRefreshEnabled = (enabled: boolean) => {
useEffect(() => {
setIsPullToRefreshEnabled(enabled);
return () => setIsPullToRefreshEnabled(false);
}, [setIsPullToRefreshEnabled, enabled]);
}, [enabled, setIsPullToRefreshEnabled]);
return { setIsPullToRefreshEnabled };
};
export const useSetMenuOn = (on: boolean) => {
export const useSetMenuOn = (menuOn: boolean) => {
const { setMenuOn } = useSubLayoutContext();
useEffect(() => {
setMenuOn(on);
setMenuOn(menuOn);
return () => setMenuOn(false);
}, [setMenuOn, on]);
}, [menuOn, setMenuOn]);
return { setMenuOn };
};
@@ -52,16 +51,25 @@ export const useSetHeaderType = (headerType: HeaderType) => {
useEffect(() => {
setHeaderType(headerType);
return () => setHeaderType(HeaderType.NoHeader);
}, [setHeaderType]);
}, [headerType, 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) => {
const { setFooterMode } = useSubLayoutContext();
useEffect(() => {
setFooterMode(footerMode);
return () => setFooterMode(false);
}, [setFooterMode, footerMode]);
}, [footerMode, setFooterMode]);
return { setFooterMode };
};
@@ -70,6 +78,6 @@ export const useSetFooterCurrentPage = (footerCurrentPage?: FooterItemActiveKey
useEffect(() => {
setFooterCurrentPage(footerCurrentPage);
return () => setFooterCurrentPage(undefined);
}, [setFooterCurrentPage, footerCurrentPage]);
}, [footerCurrentPage, setFooterCurrentPage]);
return { setFooterCurrentPage };
};