summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-21 16:37:24 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-21 16:37:24 +0900
commit204fbfb126daf057a4567f64cfb7ab03a5679e82 (patch)
tree6df8a692760894ae4c525e7e1964149a0ca1b6fa
parentf83bb6e0a31f1439a8f411095f3dffee498fcda2 (diff)
(김준회) 오픈 전, 헤더에서 특정 메뉴 가리기 처리
-rw-r--r--.env.development5
-rw-r--r--.env.production5
-rw-r--r--components/layout/Header.tsx53
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}
/>
)}