Files
jaejadle/nextjs/lib/tabs.ts
Mayne0213 f78454c2a1
Some checks failed
Build Docker Image / build-and-push (push) Has been cancelled
CI / lint-and-build (push) Has been cancelled
CHORE(merge): merge from develop
- Initial setup and all features from develop branch
- Includes: auth, deploy, docker, style fixes
- K3S deployment configuration
2026-01-06 17:29:16 +09:00

116 lines
3.4 KiB
TypeScript

import tabs from "@/const/tabs";
// 타입 정의
export interface TabInfo {
title: string;
subtitle: string;
subtitleEnglish: string;
image: string;
index: number;
description: string;
tab: typeof tabs[number];
submenu: typeof tabs[number]["submenu"][number];
}
export const getTabInfo = (pathname: string): TabInfo | null => {
// 먼저 정확히 일치하는 경로를 찾습니다
for (const [index, tab] of tabs.entries()) {
for (const item of tab.submenu) {
if (item.href === pathname) {
return {
title: tab.label,
subtitle: item.label,
subtitleEnglish: item.englishLabel,
image: tab.imageHref,
index,
description: item.description,
tab,
submenu: item,
};
}
}
}
// 정확히 일치하는 경로가 없으면, pathname이 시작하는 경로를 찾습니다
// (예: /announcements/create는 /announcements와 매칭)
for (const [index, tab] of tabs.entries()) {
for (const item of tab.submenu) {
if (pathname.startsWith(item.href + '/')) {
return {
title: tab.label,
subtitle: item.label,
subtitleEnglish: item.englishLabel,
image: tab.imageHref,
index,
description: item.description,
tab,
submenu: item,
};
}
}
}
// pathname이 tab.href와 정확히 일치하는 경우 (예: /system)
for (const [index, tab] of tabs.entries()) {
if (tab.href === pathname && tab.submenu.length > 0) {
// tab.href와 일치하는 경우, 한글 라벨 사용
const firstItem = tab.submenu[0];
// Discipling System의 경우 "제자화 시스템" 사용
const subtitle = tab.label === "Discipling System" ? "제자화 시스템" : tab.label;
const subtitleEnglish = tab.label === "Discipling System" ? "DISCIPLESHIP SYSTEM" : tab.label.toUpperCase();
return {
title: tab.label,
subtitle,
subtitleEnglish,
image: tab.imageHref,
index,
description: firstItem.description,
tab,
submenu: firstItem,
};
}
}
// pathname이 tab.href로 시작하는 경우 (예: /system/new-family는 /system과 매칭)
for (const [index, tab] of tabs.entries()) {
if (pathname.startsWith(tab.href + '/') && tab.submenu.length > 0) {
// pathname과 일치하는 submenu 항목 찾기
for (const item of tab.submenu) {
if (pathname.startsWith(item.href + '/') || pathname === item.href) {
return {
title: tab.label,
subtitle: item.label,
subtitleEnglish: item.englishLabel,
image: tab.imageHref,
index,
description: item.description,
tab,
submenu: item,
};
}
}
// 일치하는 submenu가 없으면 첫 번째 항목 사용
const firstItem = tab.submenu[0];
return {
title: tab.label,
subtitle: firstItem.label,
subtitleEnglish: firstItem.englishLabel,
image: tab.imageHref,
index,
description: firstItem.description,
tab,
submenu: firstItem,
};
}
}
return null;
};
export const getNavbarTabs = () => {
return tabs.map((tab) => ({
label: tab.label,
// 항상 첫 번째 submenu 항목으로 이동 (루트 페이지가 없으므로)
href: tab.submenu[0]?.href || "#",
}));
};