Schedule
일정 관리를 위한 캘린더 컴포넌트
개요
Schedule은 FullCalendar를 기반으로 Day/Week/WorkWeek/Month/Agenda 뷰, 드래그 & 리사이즈, Collapse 래핑, 카테고리 색상 등을 지원하는 일정 관리 컴포넌트입니다.
주요 특징
- ✅ 다양한 뷰: Day, Week, WorkWeek, Month, Agenda(목록) 뷰 지원
- ✅ 드래그 & 리사이즈: 이벤트 드래그 이동 및 시간 조절
- ✅ Collapse 래핑: title prop으로 접기/펼치기 UI 제공
- ✅ 카테고리 색상: categoryColors로 이벤트 배경색 일괄 설정
- ✅ 읽기 전용: readOnly prop으로 편집 차단
- ✅ 네비게이션: 이전/다음/오늘 버튼 및 날짜 제어
- ✅ 로케일: 한국어/영어 날짜 레이블 지원
기본 사용
events를 전달하면 주간 뷰로 일정이 표시됩니다.
Preview
July 2026 Week 3
뷰 모드
views prop으로 표시할 뷰를 지정하고, currentView로 현재 뷰를 제어합니다.
Preview
July 2026 Week 3
| 뷰 | 설명 |
|---|---|
day | 하루 일정 |
week | 주간 일정 |
workWeek | 업무주 (월~금) |
month | 월간 일정 |
agenda | 목록 형태 (7일) |
드래그 & 리사이즈
allowDragAndDrop, allowResizing으로 이벤트 이동 및 시간 조절을 활성화합니다.
Preview
July 2026 Week 3
Collapse 래핑
title prop을 지정하면 Collapsible로 래핑됩니다.
Preview
July 2026 Week 3
카테고리 색상
categoryColors로 이벤트의 categoryField 값에 따라 배경색을 일괄 지정합니다.
Preview
July 2026 Week 3
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
events | ScheduleEvent[] | [] | 일정 이벤트 데이터 |
currentView | ScheduleViewMode | "week" | 현재 보기 모드 |
onViewChange | (mode: ScheduleViewMode) => void | - | 보기 모드 변경 핸들러 |
views | ScheduleViewMode[] | ["day","week","month"] | 사용 가능한 뷰 목록 |
currentDate | Date | - | 현재 표시 날짜 (Controlled) |
onDateChange | (date: Date) => void | - | 날짜 변경 핸들러 |
onNavigate | (date: Date, action: "prev" | "next" | "today") => void | - | 네비게이션 콜백 (이전/다음/오늘) |
onEventClick | (event: ScheduleEvent) => void | - | 이벤트 클릭 핸들러 |
onCellDoubleClick | (data: ScheduleDateSelectData) => void | - | 셀 더블클릭 핸들러 |
onContextDelete | (event: ScheduleEvent) => void | - | 이벤트 우클릭 삭제 핸들러 |
onEventChange | (data: ScheduleEventChangeData) => void | - | 드래그/리사이즈 완료 핸들러 |
allowDragAndDrop | boolean | false | 드래그 앤 드롭 허용 |
allowResizing | boolean | false | 이벤트 크기 조절 허용 |
readOnly | boolean | false | 읽기 전용 모드 |
dateFormat | string | "yyyy-MM-dd" | 날짜 표시 형식 |
timezone | string | 브라우저 기본 | IANA 타임존 문자열 |
locale | string | "ko" | 로케일 (날짜 레이블용) |
categoryColors | ScheduleCategoryColor[] | [] | 카테고리별 색상 매핑 |
title | string | - | Collapse 헤더 제목 (지정 시 Collapsible 래핑) |
collapsed | boolean | false | 접힘 상태 (Controlled) |
onCollapseChange | (collapsed: boolean) => void | - | 접힘 상태 변경 핸들러 |
collapseDisabled | boolean | false | 접기 잠금 |
visible | boolean | true | 표시 여부 (false → 렌더 안 함) |
height | string | number | "650px" | 캘린더 높이 |
fullSize | boolean | false | 전체 화면 표시 (height 무시) |
loading | boolean | false | 로딩 상태 표시 |
className | string | - | 컨테이너 CSS 클래스 |
style | CSSProperties | - | 인라인 스타일 |
children | ReactNode | - | 툴바 등 추가 콘텐츠 (Collapse 헤더 영역) |
ScheduleViewMode
type ScheduleViewMode = "day" | "week" | "workWeek" | "month" | "agenda"ScheduleEvent
| Field | Type | Required | Description |
|---|---|---|---|
id | string | number | ✅ | 이벤트 고유 식별자 |
title | string | ✅ | 이벤트 제목 |
start | Date | string | ✅ | 시작 시간 |
end | Date | string | - | 종료 시간 |
isAllDay | boolean | - | 종일 이벤트 여부 |
category | string | - | 이벤트 카테고리 |
categoryField | string | - | categoryColors 매핑에 사용할 카테고리 값 |
color | string | - | 이벤트 텍스트 색상 |
backgroundColor | string | - | 이벤트 배경색 |
borderColor | string | - | 이벤트 테두리 색상 |
isReadOnly | boolean | - | 개별 이벤트 읽기 전용 |
isPrivate | boolean | - | 비공개 이벤트 여부 |
body | string | - | 이벤트 본문 (메모) |
location | string | - | 이벤트 장소 |
calendarId | string | - | 캘린더 ID (그룹 구분) |
raw | Record<string, unknown> | - | 원본 데이터 (커스텀 필드) |
ScheduleCategoryColor
| Field | Type | Required | Description |
|---|---|---|---|
value | string | ✅ | 카테고리 필드값 |
color | string | ✅ | 배경색 (hex) |
ScheduleDateSelectData
| Field | Type | Description |
|---|---|---|
start | Date | 선택 시작 시간 |
end | Date | 선택 종료 시간 |
isAllDay | boolean | 종일 영역 여부 |
ScheduleEventChangeData
| Field | Type | Description |
|---|---|---|
event | ScheduleEvent | 변경된 이벤트 객체 |
changes | { start?: Date; end?: Date } | 변경된 시간 정보 |
접근성
권장 사항
- ✅ Foundation FullCalendar 내부에서
role="grid"시맨틱 자동 적용 - ✅ 네비게이션 버튼에
aria-label제공 (이전, 다음, 오늘) - ✅ 이벤트 요소에 포커스 및 키보드 접근 가능
- ✅ 로딩 시
aria-busy="true"자동 적용 - ❌ 색상만으로 카테고리를 구분하지 말고 title/body에 카테고리 정보를 포함할 것을 권장
관련 컴포넌트
- Foundation FullCalendar: 기반 캘린더 프리미티브
- DateTimePicker: 날짜/시간 입력 컴포넌트
Last updated on