diff options
| -rw-r--r-- | .env.development | 5 | ||||
| -rw-r--r-- | .env.production | 5 | ||||
| -rw-r--r-- | components/layout/Header.tsx | 53 |
3 files changed, 55 insertions, 8 deletions
diff --git a/.env.development b/.env.development index 068a66e8..2dbf998a 100644 --- a/.env.development +++ b/.env.development @@ -189,4 +189,7 @@ POS_APP_CODE="SQ13" # 품질, 운영의 경우 SO13 EDP_MASTER_DATA_SYNC_CRON="0 23 * * *" # request context 부재한 서버사이드 함수 호출시, api revalidate를 안전하게 호출하기 위한 키 추가 -REVALIDATION_SECRET="biwjeofijosdkfjoiwejfksdjf1"
\ No newline at end of file +REVALIDATION_SECRET="biwjeofijosdkfjoiwejfksdjf1" + +# 오픈 전, 벤더에게 특정 메뉴 보이지 않기, 운영 배포시 true로 설정할 것 (나준규프로 요청사항) +NEXT_PUBLIC_HIDE_PARTNERS_MENU_BEFORE_OPEN=false
\ No newline at end of file diff --git a/.env.production b/.env.production index 81f2e266..eade8da1 100644 --- a/.env.production +++ b/.env.production @@ -191,4 +191,7 @@ POS_APP_CODE="SQ13" # 품질, 운영의 경우 SO13 EDP_MASTER_DATA_SYNC_CRON="0 23 * * *" # request context 부재한 서버사이드 함수 호출시, api revalidate를 안전하게 호출하기 위한 키 추가 -REVALIDATION_SECRET="biwjeofijosdkfjoiwejfksdjf1"
\ No newline at end of file +REVALIDATION_SECRET="biwjeofijosdkfjoiwejfksdjf1" + +# 오픈 전, 벤더에게 특정 메뉴 보이지 않기, 운영 배포시 true로 설정할 것 (나준규프로 요청사항) +NEXT_PUBLIC_HIDE_PARTNERS_MENU_BEFORE_OPEN=false
\ No newline at end of file diff --git a/components/layout/Header.tsx b/components/layout/Header.tsx index b3d9ee6a..b12c673c 100644 --- a/components/layout/Header.tsx +++ b/components/layout/Header.tsx @@ -33,6 +33,7 @@ import { salesNav, engineeringNav, MenuSection, + MenuItem, mainNavVendor, additionalNavVendor, domainBrandingKeys @@ -46,6 +47,42 @@ import { useActiveMenus, filterActiveMenus, filterActiveAdditionalMenus } from " import { NotificationDropdown } from "./NotificationDropdown"; import { useTranslation } from '@/i18n/client' +// 환경변수에 따라 숨길 메뉴 키 목록 (수정 및 제거가 용이하도록 상수로 분리) +const HIDDEN_MENU_SECTION_KEYS = [ + "menu.vendor.sales.title", + "menu.vendor.procurement.title", +]; + +const HIDDEN_ADDITIONAL_MENU_KEYS = [ + "menu.additional.system_settings", +]; + +/** + * 환경변수에 따라 메뉴 섹션을 필터링하는 함수 + */ +const filterMenusByEnvironment = (sections: MenuSection[]): MenuSection[] => { + const shouldHideMenus = process.env.NEXT_PUBLIC_HIDE_PARTNERS_MENU_BEFORE_OPEN === 'true'; + + if (!shouldHideMenus) { + return sections; + } + + return sections.filter(section => !HIDDEN_MENU_SECTION_KEYS.includes(section.titleKey)); +}; + +/** + * 환경변수에 따라 추가 메뉴 항목을 필터링하는 함수 + */ +const filterAdditionalMenusByEnvironment = (items: MenuItem[]): MenuItem[] => { + const shouldHideMenus = process.env.NEXT_PUBLIC_HIDE_PARTNERS_MENU_BEFORE_OPEN === 'true'; + + if (!shouldHideMenus) { + return items; + } + + return items.filter(item => !HIDDEN_ADDITIONAL_MENU_KEYS.includes(item.titleKey)); +}; + export function Header() { const params = useParams(); const lng = params?.lng as string; @@ -131,9 +168,13 @@ export function Header() { const { main: originalMain, additional: originalAdditional, logoHref, brandNameKey, basePath } = getDomainConfig(pathname); - // 활성 메뉴만 필터링 (로딩 중이거나 에러 시에는 모든 메뉴 표시) - const main = isLoading ? originalMain : filterActiveMenus(originalMain, activeMenus); - const additional = isLoading ? originalAdditional : filterActiveAdditionalMenus(originalAdditional, activeMenus); + // 1단계: 환경변수에 따른 메뉴 필터링 + const envFilteredMain = filterMenusByEnvironment(originalMain); + const envFilteredAdditional = filterAdditionalMenusByEnvironment(originalAdditional); + + // 2단계: 활성 메뉴만 필터링 (로딩 중이거나 에러 시에는 환경변수 필터링만 적용) + const main = isLoading ? envFilteredMain : filterActiveMenus(envFilteredMain, activeMenus); + const additional = isLoading ? envFilteredAdditional : filterActiveAdditionalMenus(envFilteredAdditional, activeMenus); return ( @@ -300,14 +341,14 @@ export function Header() { </div> </div> - {/* 모바일 메뉴 - 도메인별 활성화된 메뉴만 전달 */} + {/* 모바일 메뉴 - 도메인별 활성화된 메뉴만 전달 (환경변수 필터링 적용) */} {isMobileMenuOpen && ( <MobileMenu lng={lng} onClose={toggleMobileMenu} activeMenus={activeMenus} - domainMain={originalMain} - domainAdditional={originalAdditional} + domainMain={envFilteredMain} + domainAdditional={envFilteredAdditional} t={t} /> )} |
