ToolbarList
Collapsible 헤더(제목 + 도구 모음) 와 데이터 리스트(인라인 편집 + 페이지네이션/무한스크롤 포함)를 결합한 복합 컴포넌트입니다. 선택적으로 검색 폼 영역을 리스트 상단에 배치할 수 있습니다.
기본 사용
import { ToolbarList, TableColumn } from "@vortex/ui-cals"
function ProductList() {
return (
<ToolbarList
title="상품 목록"
actions={<button>조회</button>}
getRowId={(row) => row.id}
data={data}
pageSize={10}
manualPagination={false}
>
<TableColumn field="id" title="ID" width={80} />
<TableColumn field="name" title="상품명" sortable />
<TableColumn field="category" title="카테고리" />
<TableColumn field="price" title="가격" />
</ToolbarList>
)
}인라인 편집
inlineEdit={true}와 showAdd, showEdit, showDelete, showSave props로 인라인 편집 도구모음을 활성화합니다.
<ToolbarList
title="편집 가능 목록"
inlineEdit
showAdd
showEdit
showDelete
showSave
addMode={addMode}
editMode={editMode}
deleteMode={deleteMode}
onAdd={() => setAddMode(true)}
onEdit={() => setEditMode(true)}
onDeleteMode={() => setDeleteMode(true)}
onCancel={handleCancel}
onSave={handleSave}
onDelete={handleDelete}
getRowId={(row) => row.id}
data={data}
>
<TableColumn field="id" title="ID" />
<TableColumn field="name" title="상품명" />
</ToolbarList>무한 스크롤
infiniteScroll={true}이면 페이지네이션 대신 스크롤 시 다음 데이터를 자동 로드합니다.
<ToolbarList
title="무한 스크롤"
infiniteScroll
height={400}
onLoadMore={loadNextPage}
getRowId={(row) => row.id}
data={data}
>
...
</ToolbarList>검색 폼
searchContent prop으로 헤더와 리스트 사이에 검색 입력 격자를 추가합니다.
<ToolbarList
title="검색 + 리스트"
searchContent={
<>
<ToolbarList.Col span={8}>
<Input label="상품명" />
</ToolbarList.Col>
<ToolbarList.Col span={8}>
<Select label="카테고리" />
</ToolbarList.Col>
</>
}
getRowId={(row) => row.id}
data={data}
>
...
</ToolbarList>Props
ToolbarList 고유 Props
| Prop | Type | Default | 설명 |
|---|---|---|---|
title | ReactNode | - | 헤더 제목 |
actions | ReactNode | - | 도구 모음 버튼 |
visible | boolean | true | false이면 비렌더링 |
defaultCollapsed | boolean | false | 초기 접힘 상태 |
collapseDisabled | boolean | false | 접기 잠금 (항상 펼침) |
toolbarPosition | 'top' | 'bottom' | 'top' | 도구 모음 위치 |
showPageTotal | boolean | false | 전체 건수 표시 |
searchContent | ReactNode | - | 검색 폼 영역 콘텐츠 |
columns | number | 24 | 검색 폼 격자 컬럼 수 |
colGap | number | 15 | 검색 폼 가로 간격 (px) |
rowGap | number | 20 | 검색 폼 세로 간격 (px) |
readOnly | boolean | false | 검색 폼 + 인라인 편집 읽기 전용 |
showLabel | boolean | true | 레이블 표시 여부 |
labelPosition | LabelPosition | 'left' | 레이블 위치 |
backgroundColor | string | - | wrapper + 헤더 + List 배경색 |
color | string | - | 헤더 글자색 |
borderWidth | string | - | 헤더 테두리 두께 |
borderColor | string | - | 헤더 테두리 색상 |
fullSize | boolean | false | 전체 화면 확장 |
인라인 편집 Props
| Prop | Type | Default | 설명 |
|---|---|---|---|
inlineEdit | boolean | false | 인라인 편집 도구모음 표시 |
showAdd | boolean | false | 추가 버튼 표시 |
showEdit | boolean | false | 수정 버튼 표시 |
showDelete | boolean | false | 삭제 버튼 표시 |
showSave | boolean | false | 저장 버튼 표시 |
addMode | boolean | false | 추가 모드 활성 |
editMode | boolean | false | 수정 모드 활성 |
deleteMode | boolean | false | 삭제 모드 활성 |
onAdd | () => void | - | 추가 버튼 클릭 |
onEdit | () => void | - | 수정 버튼 클릭 |
onDeleteMode | () => void | - | 삭제 모드 진입 |
onDelete | () => void | - | 삭제 실행 |
onSave | () => void | - | 저장 실행 |
onCancel | () => void | - | 편집 취소 |
무한 스크롤 Props
| Prop | Type | Default | 설명 |
|---|---|---|---|
infiniteScroll | boolean | false | 무한 스크롤 활성화 |
onLoadMore | () => void | - | 스크롤 끝 도달 시 콜백 |
infiniteScrollDisabled | boolean | false | 추가 로딩 일시 중단 |
List/Grid 패스스루 Props
Grid 및 List 컴포넌트의 모든 props를 직접 전달합니다. 자세한 내용은 Grid 문서 및 List 문서를 참조하세요.
ToolbarList.Col
검색 폼 격자 안에 컨트롤을 배치하는 열 컴포넌트입니다.
| Prop | Type | Default | 설명 |
|---|---|---|---|
span | number | 24 | 차지할 컬럼 수 |
offset | number | 0 | 시작 전 건너뛸 컬럼 |
hidden | boolean | false | 숨김 처리 |
ToolbarGrid와의 차이점
| 기능 | ToolbarGrid | ToolbarList |
|---|---|---|
| 내부 컴포넌트 | Grid (읽기 전용) | List (Grid + InlineEdit + InfiniteScroll) |
| 인라인 편집 | ❌ | ✅ |
| 무한 스크롤 | ❌ | ✅ |
| 합계 행 | ❌ | ✅ (showSummary) |
| readOnly 범위 | 검색 폼만 | 검색 폼 + 인라인 편집 |
접근성
- Collapsible trigger에
aria-expanded자동 노출 collapseDisabled시aria-disabled설정- 검색 폼 영역에
role="search"적용 readOnly시 검색 폼에aria-readonly설정
Last updated on