Skip to Content

Tree

Foundation Tree를 래핑한 CALS 전용 트리 컴포넌트입니다.

접기/펼치기 가능한 헤더, 실시간 필터 검색, 데이터 속성 매핑, 스타일 오버라이드를 지원합니다.

주요 기능

  • BasicUI: 계층 구조 데이터를 트리로 표시
  • 검색: 인라인 필터(filter) / 조건 검색(static) / 검색 없음(none)
  • 전체 펼치기/접기: 헤더 버튼으로 모든 노드를 한 번에 제어
  • 접기 잠금: collapseDisabled로 항상 펼침 상태 고정
  • 데이터 매핑: idKey, labelKey, childrenKey로 외부 데이터 필드 매핑
  • 스타일 오버라이드: 배경색, 글자색, 글꼴, 크기, 테두리 등
  • 빈 상태: 데이터 없을 시 커스텀 메시지 표시

기본 사용

import { Tree } from "@vortex/ui-cals" const items = [ { id: "1", label: "부서 A", children: [ { id: "1-1", label: "팀 1" }, { id: "1-2", label: "팀 2" }, ], }, { id: "2", label: "부서 B" }, ] <Tree items={items} title="조직도" />

인터랙티브 예시

기본 트리

조직도
부서 A
부서 B
부서 C

필터 검색

검색 포함
부서 A
부서 B
부서 C

전체 펼침

초기 전체 펼침
부서 A
팀 1
팀 2
파트 A
파트 B
부서 B
팀 3
부서 C

도구 모음

도구 모음 포함
부서 A
부서 B
부서 C

스타일 오버라이드

배경색 + 글자색
부서 A
부서 B
부서 C

빈 상태

빈 트리
데이터가 없습니다

API Reference

Props

PropTypeDefaultDescription
itemsTreeDataItem[][]트리 데이터 배열
titleReactNode-헤더 영역에 표시할 제목
visiblebooleantrue화면 표시 여부 (false → 렌더 안 함)
treeExpandAllbooleanfalse초기 전체 펼침 상태
collapseDisabledbooleanfalse접기 잠금 — true이면 항상 펼쳐진 상태로 고정
defaultCollapsedbooleanfalse초기 접힌 상태 (collapseDisabled 시 무시)
searchType"filter" | "static" | "none""none"검색 유형
searchContentReactNode-static 검색 시 표시할 검색 폼
readOnlybooleanfalse읽기 전용 (검색 입력 disabled)
labelKeystring"label"표시 이름으로 사용할 데이터 필드명
idKeystring"id"식별자로 사용할 데이터 필드명
childrenKeystring"children"하위 항목으로 사용할 데이터 필드명
actionsReactNode-헤더 도구 모음 영역에 렌더링할 커스텀 요소
backgroundColorstring-컨테이너 배경색
colorstring-컨테이너 글자색
fontFamilystring-트리 콘텐츠 글꼴
fontSizestring-트리 콘텐츠 글자 크기
fontWeightstring | number | boolean-글꼴 굵기 (truthy 시 500 고정)
fontStylestring-글꼴 스타일 (italic 등)
borderColorstring-검색 입력 테두리 색상
borderWidthstring-검색 입력 테두리 두께
heightstring-트리 영역 높이 (설정 시 overflow: auto 적용)
classNamestring-컨테이너 CSS 클래스
styleCSSProperties-인라인 스타일
emptyTextstring"데이터가 없습니다"데이터 없을 시 표시할 빈 상태 메시지

Events

EventTypeDescription
onNodeClick(node: TreeDataItem) => void노드 클릭 시 원본 데이터 전달
onSearch(keyword: string) => voidstatic 검색에서 Enter 입력 시
onExpandAll() => void전체 펼치기 버튼 클릭 시
onCollapseAll() => void전체 접기 버튼 클릭 시

TreeDataItem

type TreeDataItem = Record<string, unknown>

외부 데이터 형태를 자유롭게 사용할 수 있도록 제네릭 Record 타입입니다. idKey, labelKey, childrenKey prop으로 실제 사용할 필드를 매핑합니다.


접근성

권장 사항

  • ✅ 헤더 영역에 role="button", tabIndex=0이 자동 적용되어 키보드로 접기/펼치기 가능
  • ✅ 전체 펼치기/접기 버튼에 aria-label 자동 제공 (“전체 펼치기”, “전체 접기”)
  • ✅ Foundation Tree 내부에서 role="tree", role="treeitem" 시맨틱 자동 적용
  • collapseDisabled 시 트리거에 disabled 속성 부여
  • ❌ 대량 노드 시 height를 설정하여 스크롤 영역을 제한하는 것을 권장

관련 컴포넌트

  • Foundation Tree: 기반 트리 프리미티브
  • Grid: 표 형태 데이터 표시가 필요한 경우
Last updated on