D·Camp UI

Analytics

TableToolbar

Dark Mode

테이블 상단 기능 바. useDataTable의 toolbarProps를 스프레드하면 검색·필터·정렬·필드 관리·건수·선택 삭제가 자동 연동됩니다. hideXxx props로 개별 기능을 비활성화할 수 있습니다.

import { TableToolbar } from "@/shared/ui/widget/analytics/table"

빌트인 기능 전체

다중 정렬, 필터 드롭다운, 필드 가시성, 검색 범위 선택, 커스텀 액션 버튼이 모두 포함된 형태입니다. useDataTable toolbarProps를 스프레드하면 이 구성이 자동으로 적용됩니다.

toolbarProps 스프레드 (권장)
// useDataTable의 toolbarProps를 스프레드 — 모든 기능 자동 연동
const table = useDataTable({ data, columns, pageSize: 10, editable: true });

<TableToolbar
  {...table.toolbarProps}
  onAddRow={handleAddRow}
  onAddColumn={handleAddColumn}
  onDeleteSelected={table.removeSelectedRows}
  onClearSelection={table.clearSelection}
/>

심플 모드 (검색 + 커스텀 액션)

빌트인 기능 없이 검색과 커스텀 actions만 사용하는 가장 간단한 형태입니다. 빌트인 props를 전달하지 않으면 해당 버튼이 자동으로 숨겨집니다.

심플 모드
// 빌트인 기능 숨기고 검색 + 커스텀 액션만
<TableToolbar
  searchPlaceholder="포트폴리오 검색..."
  hideFilter
  hideSort
  hideColumnVisibility
  actions={<ToolbarButton icon={Plus} label="추가" />}
/>

개별 Props 직접 구성

useDataTable 없이 직접 상태를 관리할 때의 전체 props 구성 예시입니다.

수동 구성
// 개별 Props로 직접 구성
<TableToolbar
  searchValue={search}
  onSearchChange={setSearch}
  filters={filters}
  onFilterChange={setFilters}
  onClearFilters={() => setFilters([])}
  filterableColumns={filterableColumns}
  sortConfigs={sortConfigs}
  onSortConfigsChange={setSortConfigs}
  sortableColumns={sortableColumns}
  visibleKeys={visibleKeys}
  onVisibleKeysChange={setVisibleKeys}
  allColumns={allColumns}
  totalCount={data.length}
  // 선택 삭제 — 콜백 전달 시 자동 표시
  selectedCount={selectedCount}
  onDeleteSelected={handleDelete}
  onClearSelection={handleClear}
  // 행/열 추가 — 콜백 전달 시 자동 표시
  onAddRow={handleAddRow}
  onAddColumn={handleAddColumn}
  // 개별 기능 숨기기
  hideViews
/>

빌트인 기능 상세

1. 필터 드롭다운

filterableColumns에 지정된 각 컬럼의 고유값을 체크박스로 표시합니다. 여러 컬럼에 동시에 필터를 적용할 수 있으며, 활성 필터 수가 뱃지로 표시됩니다.

관련 props: filterableColumns, filters, onFilterChange, onClearFilters, activeFilterCount

2. 검색 범위 선택

검색 바의 / 키를 클릭하면 검색 대상 컬럼을 선택하는 팝오버가 열립니다. 선택하면 해당 컬럼만 대상으로 검색합니다. null이면 전체 컬럼 대상으로 검색합니다.

관련 props: searchableColumns, searchKey, onSearchKeyChange

3. 보여줄 필드 선택

'필드' 드롭다운으로 테이블에 표시할 컬럼을 토글합니다. 기본값은 전체 선택이며, 숨긴 컬럼 수가 뱃지로 표시됩니다.

관련 props: allColumns, visibleKeys, onVisibleKeysChange

4. 다중 정렬

'정렬' 버튼 클릭 시 다중 정렬 모달이 열립니다. 1차·2차·3차 정렬 컬럼을 추가/삭제/순서 변경할 수 있으며, 각각 오름차순/내림차순을 선택합니다.

관련 props: sortableColumns, sortConfigs, onSortConfigsChange

5. 커스텀 슬롯

actions (중앙), trailing (우측 끝) 슬롯으로 커스텀 버튼을 배치할 수 있습니다. ToolbarButton 컴포넌트로 Toolbar UI와 일관된 버튼을 만들 수 있습니다.

관련 props: actions, trailing

Props

TableToolbar

PropTypeRequiredDefault설명
searchValuestring''검색 입력 값. toolbarProps 자동 포함.
onSearchChange(value: string) => void검색 값 변경 콜백.
filtersFilterValue[]활성 필터 목록.
onFilterChange(filters: FilterValue[]) => void필터 변경 콜백.
filterableColumns{ key: string; label: string }[]필터 가능 컬럼 목록.
sortConfigsSortConfig[]다중 정렬 설정.
onSortConfigsChange(configs: SortConfig[]) => void정렬 변경 콜백.
sortableColumns{ key: string; label: string }[]정렬 가능 컬럼 목록.
visibleKeysstring[]표시 중인 컬럼 키.
onVisibleKeysChange(keys: string[]) => void컬럼 가시성 변경 콜백.
allColumns{ key: string; label: string }[]전체 컬럼 목록.
sourceGroupsSourceGroup[]소스 그룹. 필드 드롭다운에서 소스별 구분 + 색상 변경.
onSourceColorChange(sourceId: string, color: string) => void소스 그룹 색상 변경 콜백.
totalCountnumber전체 건수. toolbarProps 자동 포함.
selectedCountnumber선택된 행 수. toolbarProps 자동 포함.
onDeleteSelected() => void선택 행 삭제 콜백. 설정 시 삭제 바 자동 표시.
onClearSelection() => void선택 해제 콜백.
onAddRow() => void행 추가 콜백. 설정 시 행 추가 버튼 표시.
onAddColumn() => void열 추가 콜백. 설정 시 열 추가 버튼 표시.
viewsSavedView[]저장된 뷰 목록.
onSaveView(name: string) => void뷰 저장 콜백. 설정 시 뷰 관리 버튼 표시.
onLoadView(viewId: string) => void뷰 로드 콜백.
hideSearchbooleanfalse검색 바 숨김.
hideFilterbooleanfalse필터 버튼 숨김.
hideColumnVisibilitybooleanfalse필드 관리 버튼 숨김.
hideSortbooleanfalse정렬 버튼 숨김.
hideViewsbooleanfalse뷰 관리 버튼 숨김.
hideSelectionbooleanfalse선택 삭제 바 숨김.
hideAddRowbooleanfalse행 추가 버튼 숨김.
hideAddColumnbooleanfalse열 추가 버튼 숨김.
actionsReactNode커스텀 액션 슬롯.
trailingReactNode우측 끝 커스텀 영역.
classNamestring추가 클래스.

ToolbarButton

PropTypeRequiredDefault설명
iconComponentType<{ className?: string }>아이콘 컴포넌트.
onClick() => void클릭 핸들러.
labelstring접근성 라벨.
activeboolean활성 상태 스타일.
childrenReactNode아이콘 옆 텍스트.