feat(nav): hide dashboard and admin settings from practitioner role
This commit is contained in:
@@ -41,10 +41,18 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
|
|||||||
trigger.className = 'gnb-trigger';
|
trigger.className = 'gnb-trigger';
|
||||||
trigger.textContent = config.label;
|
trigger.textContent = config.label;
|
||||||
|
|
||||||
|
// 역할에 따라 노출할 서브탭 필터링
|
||||||
|
const visibleTabs = config.tabs.filter((tab: string) => {
|
||||||
|
if (tab === '대시보드' && state.currentUserRole !== 'admin') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
trigger.addEventListener('click', () => {
|
trigger.addEventListener('click', () => {
|
||||||
if (state.activeCategory !== catKey) {
|
if (state.activeCategory !== catKey) {
|
||||||
state.activeCategory = catKey as any;
|
state.activeCategory = catKey as any;
|
||||||
const firstTab = config.tabs[0];
|
const firstTab = visibleTabs[0] || config.tabs[0];
|
||||||
state.activeSubTab = firstTab;
|
state.activeSubTab = firstTab;
|
||||||
render();
|
render();
|
||||||
onTabChange(firstTab);
|
onTabChange(firstTab);
|
||||||
@@ -55,7 +63,7 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
|
|||||||
const shelf = document.createElement('div');
|
const shelf = document.createElement('div');
|
||||||
shelf.className = 'lnb-shelf';
|
shelf.className = 'lnb-shelf';
|
||||||
|
|
||||||
config.tabs.forEach((tab: string) => {
|
visibleTabs.forEach((tab: string) => {
|
||||||
const item = document.createElement('div');
|
const item = document.createElement('div');
|
||||||
item.className = `lnb-item ${isActive && state.activeSubTab === tab ? 'active' : ''}`;
|
item.className = `lnb-item ${isActive && state.activeSubTab === tab ? 'active' : ''}`;
|
||||||
item.textContent = tab;
|
item.textContent = tab;
|
||||||
@@ -73,24 +81,26 @@ export function renderNavigation(onTabChange: (tab: string) => void) {
|
|||||||
navContainer.appendChild(group);
|
navContainer.appendChild(group);
|
||||||
});
|
});
|
||||||
|
|
||||||
// ─── '관리자' 메뉴 별도 추가 (GNB 스타일) ───
|
// ─── '관리자' 메뉴 별도 추가 (GNB 스타일 - 관리자 역할일 때만 노출) ───
|
||||||
const adminGroup = document.createElement('div');
|
if (state.currentUserRole === 'admin') {
|
||||||
adminGroup.className = 'nav-group';
|
const adminGroup = document.createElement('div');
|
||||||
|
adminGroup.className = 'nav-group';
|
||||||
const adminTrigger = document.createElement('div');
|
|
||||||
adminTrigger.className = 'gnb-trigger';
|
const adminTrigger = document.createElement('div');
|
||||||
adminTrigger.innerHTML = '관리자';
|
adminTrigger.className = 'gnb-trigger';
|
||||||
adminTrigger.style.color = 'var(--text-muted)';
|
adminTrigger.innerHTML = '관리자';
|
||||||
adminTrigger.style.borderLeft = '1px solid var(--border-color)';
|
adminTrigger.style.color = 'var(--text-muted)';
|
||||||
adminTrigger.style.marginLeft = '1rem';
|
adminTrigger.style.borderLeft = '1px solid var(--border-color)';
|
||||||
adminTrigger.style.paddingLeft = '1.5rem';
|
adminTrigger.style.marginLeft = '1rem';
|
||||||
|
adminTrigger.style.paddingLeft = '1.5rem';
|
||||||
adminTrigger.addEventListener('click', () => {
|
|
||||||
window.open('/map_editor.html', '_blank');
|
adminTrigger.addEventListener('click', () => {
|
||||||
});
|
window.open('/map_editor.html', '_blank');
|
||||||
|
});
|
||||||
adminGroup.appendChild(adminTrigger);
|
|
||||||
navContainer.appendChild(adminGroup);
|
adminGroup.appendChild(adminTrigger);
|
||||||
|
navContainer.appendChild(adminGroup);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
render();
|
render();
|
||||||
|
|||||||
Reference in New Issue
Block a user