Kanban
드래그 앤 드롭을 지원하는 칸반 보드 컴포넌트
개요
KanbanBoard 컴포넌트는 flat tasks 배열과 groupBy 속성을 사용하여 태스크를 컬럼별로 자동 분류하는 칸반 보드입니다. @atlaskit/pragmatic-drag-and-drop 기반의 카드/컬럼 드래그 앤 드롭, 커스텀 카드 렌더링, 카드/컬럼 추가 등을 지원합니다.
주요 특징
- ✅ 카드 드래그 앤 드롭: 카드를 다른 컬럼으로 이동
- ✅ 컬럼 드래그 앤 드롭: 컬럼 순서 변경
- ✅ 커스텀 카드 렌더링:
renderCardprop으로 자유로운 카드 UI - ✅ 드래그 핸들:
DragHandleProps로 핸들 기반 드래그 - ✅ 카드/컬럼 추가:
showAddCard,showAddColumn지원 - ✅ 동적 그룹핑:
groupBy에 문자열 키 또는 함수 전달 - ✅ 디자인 토큰: 테마 커스터마이징 지원
기본 상태
기본 카드 렌더링(renderCard 미지정)을 사용하는 칸반 보드입니다. task의 title 또는 id가 카드에 표시됩니다.
Preview
To Do2
캠페인 기획서 작성
고객 세그먼트 분석
In Progress3
여름 캠페인 콘텐츠
A/B 테스트 설정
이메일 템플릿 디자인
In Review1
VIP 혜택 카피라이팅
Completed2
6월 성과 리포트
신규 세그먼트 생성
드래그 앤 드롭 / 커스텀 카드 / 카드·컬럼 추가
카드 드래그(핸들 기반), 컬럼 드래그, 커스텀 renderCard, 카드/컬럼 추가 버튼, 컬럼 메뉴를 모두 포함하는 인터랙티브 보드입니다.
Preview
To Do2
캠페인 기획서 작성High
2024-07-15김
고객 세그먼트 분석Normal
2024-07-18이
In Progress3
여름 캠페인 콘텐츠High
2024-07-12박
A/B 테스트 설정Normal
2024-07-14김
이메일 템플릿 디자인Low
2024-07-16최
In Review1
VIP 혜택 카피라이팅High
2024-07-15이
Completed2
6월 성과 리포트Normal
2024-07-08박
신규 세그먼트 생성Low
2024-07-05이
빈 보드
태스크가 없는 빈 보드입니다. 각 컬럼에 “Drop here” placeholder가 표시됩니다.
Preview
To Do0
Drop here
In Progress0
Drop here
Done0
Drop here
동적 그룹핑 (groupBy)
groupBy에 다른 키를 전달하여 우선순위별 등 다양한 기준으로 그룹핑할 수 있습니다.
Preview
High Priority3
캠페인 기획서 작성High
2024-07-15김
여름 캠페인 콘텐츠High
2024-07-12박
VIP 혜택 카피라이팅High
2024-07-15이
Normal Priority3
고객 세그먼트 분석Normal
2024-07-18이
A/B 테스트 설정Normal
2024-07-14김
6월 성과 리포트Normal
2024-07-08박
Low Priority2
이메일 템플릿 디자인Low
2024-07-16최
신규 세그먼트 생성Low
2024-07-05이
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
columns | KanbanColumnDef[] | - | 컬럼 정의 배열 |
tasks | TTask[] | - | 태스크 배열 (flat) |
groupBy | string | ((task: TTask) => string) | - | 태스크를 컬럼에 분류하는 키/함수 |
itemKey | string | ((task: TTask) => string) | "id" | 태스크 고유 키 |
renderCard | (task, columnId, dragHandleProps) => ReactNode | 기본 카드 | 커스텀 카드 렌더링 함수 |
draggable | boolean | true | 카드 드래그 활성화 |
columnDraggable | boolean | true | 컬럼 드래그 활성화 |
showAddCard | boolean | true | 카드 추가 버튼 표시 |
addCardLabel | string | "Add Task" | 카드 추가 버튼 라벨 |
showAddColumn | boolean | false | 컬럼 추가 버튼 표시 |
addColumnLabel | string | "Add Column" | 컬럼 추가 버튼 라벨 |
Events
| Event | Type | Description |
|---|---|---|
onTaskClick | (task: TTask, columnId: string) => void | 태스크 클릭 시 |
onTaskAdd | (columnId: string) => void | 카드 추가 클릭 시 |
onTaskMove | (result: KanbanDropResult) => void | 카드 드래그 완료 시 |
onColumnMenuClick | (columnId: string) => void | 컬럼 메뉴 클릭 시 |
onColumnAdd | () => void | 컬럼 추가 클릭 시 |
onColumnMove | (result: KanbanColumnMoveResult) => void | 컬럼 드래그 완료 시 |
KanbanColumnDef
| Prop | Type | Description |
|---|---|---|
id | string | 컬럼 고유 ID |
title | string | 컬럼 제목 |
color | string | 컬럼 색상 (dot) |
KanbanDropResult
| Prop | Type | Description |
|---|---|---|
taskId | string | 이동된 태스크 ID |
sourceColumnId | string | 출발 컬럼 ID |
targetColumnId | string | 도착 컬럼 ID |
targetIndex | number | 도착 위치 인덱스 |
KanbanColumnMoveResult
| Prop | Type | Description |
|---|---|---|
columnId | string | 이동된 컬럼 ID |
sourceIndex | number | 출발 위치 인덱스 |
targetIndex | number | 도착 위치 인덱스 |
접근성
권장 사항
- ✅ 카드에 의미 있는 텍스트 콘텐츠 제공
- ✅ 드래그 핸들에 시각적 아이콘 사용 (GripVertical 등)
- ❌ 드래그만으로 기능 제공하지 않기 (키보드 대안 고려)
Last updated on