Table
데이터를 행과 열로 표시하는 테이블 컴포넌트입니다. 정렬, 선택, 페이지네이션 등 다양한 기능을 지원합니다.
설치
Terminal
npx @msub-core/ui-cli add table
사용법
TSX
import {
Table,
TableHeader,
TableBody,
TableRow,
TableHead,
TableCell,
} from "@msub-core/ui/components/table"
function MyTable() {
return (
<Table>
<TableHeader>
<TableRow>
<TableHead>이름</TableHead>
<TableHead>이메일</TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableCell>김철수</TableCell>
<TableCell>[email protected]</TableCell>
</TableRow>
</TableBody>
</Table>
)
}Table Props
| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
| variant | "default" | "striped" | "bordered" | "default" | No | 테이블 스타일 변형 |
| size | "sm" | "default" | "lg" | "default" | No | 셀 크기 |
| hoverable | boolean | true | No | 행 호버 효과 |
| stickyHeader | boolean | false | No | 헤더 고정 |
| maxHeight | string | number | - | No | 컨테이너 최대 높이 |
기본 테이블
| 이름 | 이메일 | 역할 | 상태 |
|---|---|---|---|
| 김철수 | [email protected] | 관리자 | 활성 |
| 이영희 | [email protected] | 사용자 | 활성 |
| 박민수 | [email protected] | 사용자 | 비활성 |
| 정수진 | [email protected] | 게스트 | 활성 |
| 최동혁 | [email protected] | 사용자 | 활성 |
Striped 변형
| 이름 | 이메일 | 가입일 |
|---|---|---|
| 김철수 | [email protected] | 2024-01-15 |
| 이영희 | [email protected] | 2024-02-20 |
| 박민수 | [email protected] | 2024-03-10 |
| 정수진 | [email protected] | 2024-03-25 |
| 최동혁 | [email protected] | 2024-04-01 |
Bordered 변형
| 이름 | 이메일 | 가입일 |
|---|---|---|
| 김철수 | [email protected] | 2024-01-15 |
| 이영희 | [email protected] | 2024-02-20 |
| 박민수 | [email protected] | 2024-03-10 |
| 정수진 | [email protected] | 2024-03-25 |
| 최동혁 | [email protected] | 2024-04-01 |
크기
Small
| 이름 | 이메일 |
|---|---|
| 김철수 | [email protected] |
| 이영희 | [email protected] |
Default
| 이름 | 이메일 |
|---|---|
| 김철수 | [email protected] |
| 이영희 | [email protected] |
Large
| 이름 | 이메일 |
|---|---|
| 김철수 | [email protected] |
| 이영희 | [email protected] |
정렬 가능한 헤더
TableHead에 sortable prop을 추가하여 정렬 기능을 활성화합니다.
| 이메일 | ||
|---|---|---|
| 김철수 | [email protected] | 2024-01-15 |
| 이영희 | [email protected] | 2024-02-20 |
| 박민수 | [email protected] | 2024-03-10 |
| 정수진 | [email protected] | 2024-03-25 |
| 최동혁 | [email protected] | 2024-04-01 |
선택 가능한 행
TableCheckbox를 사용하여 행 선택 기능을 구현합니다. useRangeSelection 훅을 사용하면 Shift+클릭으로 범위 선택이 가능합니다.
| 이름 | 이메일 | 역할 | |
|---|---|---|---|
| 김철수 | [email protected] | 관리자 | |
| 이영희 | [email protected] | 사용자 | |
| 박민수 | [email protected] | 사용자 | |
| 정수진 | [email protected] | 게스트 | |
| 최동혁 | [email protected] | 사용자 |
💡 Tip: 첫 번째 행을 클릭한 후, Shift 키를 누른 채로 다른 행을 클릭하면 그 사이의 모든 행이 선택됩니다.
빈 상태
| 이름 | 이메일 | 역할 |
|---|---|---|
데이터가 없습니다 새로운 사용자를 추가해보세요. | ||
로딩 상태
| 이름 | 이메일 | 역할 |
|---|---|---|
고정 헤더
stickyHeader와 maxHeight를 사용하여 스크롤 시 헤더를 고정합니다.
| 이름 | 이메일 | 가입일 |
|---|---|---|
| 사용자 1 | [email protected] | 2024-01-01 |
| 사용자 2 | [email protected] | 2024-02-02 |
| 사용자 3 | [email protected] | 2024-03-03 |
| 사용자 4 | [email protected] | 2024-04-04 |
| 사용자 5 | [email protected] | 2024-05-05 |
| 사용자 6 | [email protected] | 2024-06-06 |
| 사용자 7 | [email protected] | 2024-07-07 |
| 사용자 8 | [email protected] | 2024-08-08 |
| 사용자 9 | [email protected] | 2024-09-09 |
| 사용자 10 | [email protected] | 2024-10-10 |
| 사용자 11 | [email protected] | 2024-11-11 |
| 사용자 12 | [email protected] | 2024-12-12 |
| 사용자 13 | [email protected] | 2024-01-13 |
| 사용자 14 | [email protected] | 2024-02-14 |
| 사용자 15 | [email protected] | 2024-03-15 |
| 사용자 16 | [email protected] | 2024-04-16 |
| 사용자 17 | [email protected] | 2024-05-17 |
| 사용자 18 | [email protected] | 2024-06-18 |
| 사용자 19 | [email protected] | 2024-07-19 |
| 사용자 20 | [email protected] | 2024-08-20 |
DataTable
DataTable은 정렬, 선택, 페이지네이션이 통합된 고수준 테이블 컴포넌트입니다.
TSX
import { DataTable, type ColumnDef } from "@msub-core/ui/components/table"
const columns: ColumnDef<User>[] = [
{ id: "name", header: "이름", accessorKey: "name", sortable: true },
{ id: "email", header: "이메일", accessorKey: "email" },
{ id: "role", header: "역할", cell: (row) => <Badge>{row.role}</Badge> },
]
function MyDataTable() {
const [selectedIds, setSelectedIds] = useState([])
const [page, setPage] = useState(1)
return (
<DataTable
columns={columns}
data={users}
selectable
selectedIds={selectedIds}
onSelectionChange={setSelectedIds}
pagination
page={page}
pageSize={10}
totalItems={users.length}
onPageChange={setPage}
/>
)
}DataTable Props
| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
| columns | ColumnDef<T>[] | - | No | 컬럼 정의 배열 |
| data | T[] | - | No | 데이터 배열 (각 항목에 id 필수) |
| loading | boolean | false | No | 로딩 상태 |
| selectable | boolean | false | No | 행 선택 기능 |
| selectedIds | (string | number)[] | - | No | 선택된 행 ID |
| onSelectionChange | (ids) => void | - | No | 선택 변경 핸들러 |
| sortColumn | string | - | No | 정렬 컬럼 ID |
| sortDirection | "asc" | "desc" | null | - | No | 정렬 방향 |
| onSortChange | (column, direction) => void | - | No | 정렬 변경 핸들러 |
| pagination | boolean | false | No | 페이지네이션 표시 |
| page | number | 1 | No | 현재 페이지 |
| pageSize | number | 10 | No | 페이지당 항목 수 |
| totalItems | number | - | No | 전체 항목 수 |
| onPageChange | (page) => void | - | No | 페이지 변경 핸들러 |
| onRowClick | (row, index) => void | - | No | 행 클릭 핸들러 |
DataTable 전체 예제
| 이메일 | 상태 | ||||
|---|---|---|---|---|---|
| 사용자 1 | [email protected] | 관리자 | 비활성 | 2024-01-01 | |
| 사용자 2 | [email protected] | 사용자 | 활성 | 2024-02-02 | |
| 사용자 3 | [email protected] | 게스트 | 활성 | 2024-03-03 | |
| 사용자 4 | [email protected] | 관리자 | 활성 | 2024-04-04 | |
| 사용자 5 | [email protected] | 사용자 | 비활성 | 2024-05-05 | |
| 사용자 6 | [email protected] | 게스트 | 활성 | 2024-06-06 | |
| 사용자 7 | [email protected] | 관리자 | 활성 | 2024-07-07 | |
| 사용자 8 | [email protected] | 사용자 | 활성 | 2024-08-08 | |
| 사용자 9 | [email protected] | 게스트 | 비활성 | 2024-09-09 | |
| 사용자 10 | [email protected] | 관리자 | 활성 | 2024-10-10 |
1-10 / 50개
표시:
1 / 5