File name
Commit message
Commit date
File name
Commit message
Commit date
09-04
File name
Commit message
Commit date
/**
* 사이드바 메뉴 도메인 — 시안(snb-area 3041:11860)의 `section > 1depth > 2depth > 3depth`
* 중첩을 그대로 옮긴 모양이다.
*
* **메뉴는 화면이 소유하지 않는다.** 계정 권한마다 보이는 항목이 달라서 매 요청 백엔드가
* 구성해 주는 값이며, 컴포넌트는 받은 트리를 그리기만 한다. 그래서 라우트 목록을 컴포넌트
* 안에 상수로 두지 않는다.
*
* 아이콘은 컴포넌트가 아니라 **이름 문자열**로 받는다 — 백엔드가 넘길 수 있는 형태가 문자열
* 뿐이고, 이름 → 컴포넌트 변환은 화면 쪽 레지스트리가 맡는다(sidebar-menu-icon.tsx).
*/
/** 3depth 항목 — 더 내려가지 않는 잎이다. */
export type SidebarMenuLeaf = {
id: string;
label: string;
href: string;
};
/** 2depth 항목 — 자식이 있으면 펼침 대상이 되고, 없으면 그 자체가 링크다. */
export type SidebarMenuChild = {
id: string;
label: string;
/** 자식이 있는 항목은 스스로 이동하지 않을 수 있다. */
href?: string;
children?: SidebarMenuLeaf[];
};
/** 1depth 항목 — 아이콘을 갖는 최상위 메뉴다. */
export type SidebarMenuItem = {
id: string;
label: string;
/** Phosphor 아이콘 이름(kebab-case). 예: `users-three`. */
icon: string;
href?: string;
children?: SidebarMenuChild[];
};
/** 시안의 "플랫폼 운영"·"서비스"·"플러그인"처럼 제목을 가진 묶음. */
export type SidebarMenuSection = {
id: string;
label: string;
items: SidebarMenuItem[];
};
export type SidebarMenu = {
sections: SidebarMenuSection[];
};