Skip to Content

Schedule

일정 관리를 위한 캘린더 컴포넌트


개요

Schedule은 FullCalendar를 기반으로 Day/Week/WorkWeek/Month/Agenda 뷰, 드래그 & 리사이즈, Collapse 래핑, 카테고리 색상 등을 지원하는 일정 관리 컴포넌트입니다.

주요 특징

  • 다양한 뷰: Day, Week, WorkWeek, Month, Agenda(목록) 뷰 지원
  • 드래그 & 리사이즈: 이벤트 드래그 이동 및 시간 조절
  • Collapse 래핑: title prop으로 접기/펼치기 UI 제공
  • 카테고리 색상: categoryColors로 이벤트 배경색 일괄 설정
  • 읽기 전용: readOnly prop으로 편집 차단
  • 네비게이션: 이전/다음/오늘 버튼 및 날짜 제어
  • 로케일: 한국어/영어 날짜 레이블 지원

기본 사용

events를 전달하면 주간 뷰로 일정이 표시됩니다.

July 2026 Week 3

뷰 모드

views prop으로 표시할 뷰를 지정하고, currentView로 현재 뷰를 제어합니다.

July 2026 Week 3
설명
day하루 일정
week주간 일정
workWeek업무주 (월~금)
month월간 일정
agenda목록 형태 (7일)

드래그 & 리사이즈

allowDragAndDrop, allowResizing으로 이벤트 이동 및 시간 조절을 활성화합니다.

July 2026 Week 3

Collapse 래핑

title prop을 지정하면 Collapsible로 래핑됩니다.

July 2026 Week 3

카테고리 색상

categoryColors로 이벤트의 categoryField 값에 따라 배경색을 일괄 지정합니다.

July 2026 Week 3

API Reference

Props

PropTypeDefaultDescription
eventsScheduleEvent[][]일정 이벤트 데이터
currentViewScheduleViewMode"week"현재 보기 모드
onViewChange(mode: ScheduleViewMode) => void-보기 모드 변경 핸들러
viewsScheduleViewMode[]["day","week","month"]사용 가능한 뷰 목록
currentDateDate-현재 표시 날짜 (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-드래그/리사이즈 완료 핸들러
allowDragAndDropbooleanfalse드래그 앤 드롭 허용
allowResizingbooleanfalse이벤트 크기 조절 허용
readOnlybooleanfalse읽기 전용 모드
dateFormatstring"yyyy-MM-dd"날짜 표시 형식
timezonestring브라우저 기본IANA 타임존 문자열
localestring"ko"로케일 (날짜 레이블용)
categoryColorsScheduleCategoryColor[][]카테고리별 색상 매핑
titlestring-Collapse 헤더 제목 (지정 시 Collapsible 래핑)
collapsedbooleanfalse접힘 상태 (Controlled)
onCollapseChange(collapsed: boolean) => void-접힘 상태 변경 핸들러
collapseDisabledbooleanfalse접기 잠금
visiblebooleantrue표시 여부 (false → 렌더 안 함)
heightstring | number"650px"캘린더 높이
fullSizebooleanfalse전체 화면 표시 (height 무시)
loadingbooleanfalse로딩 상태 표시
classNamestring-컨테이너 CSS 클래스
styleCSSProperties-인라인 스타일
childrenReactNode-툴바 등 추가 콘텐츠 (Collapse 헤더 영역)

ScheduleViewMode

type ScheduleViewMode = "day" | "week" | "workWeek" | "month" | "agenda"

ScheduleEvent

FieldTypeRequiredDescription
idstring | number이벤트 고유 식별자
titlestring이벤트 제목
startDate | string시작 시간
endDate | string-종료 시간
isAllDayboolean-종일 이벤트 여부
categorystring-이벤트 카테고리
categoryFieldstring-categoryColors 매핑에 사용할 카테고리 값
colorstring-이벤트 텍스트 색상
backgroundColorstring-이벤트 배경색
borderColorstring-이벤트 테두리 색상
isReadOnlyboolean-개별 이벤트 읽기 전용
isPrivateboolean-비공개 이벤트 여부
bodystring-이벤트 본문 (메모)
locationstring-이벤트 장소
calendarIdstring-캘린더 ID (그룹 구분)
rawRecord<string, unknown>-원본 데이터 (커스텀 필드)

ScheduleCategoryColor

FieldTypeRequiredDescription
valuestring카테고리 필드값
colorstring배경색 (hex)

ScheduleDateSelectData

FieldTypeDescription
startDate선택 시작 시간
endDate선택 종료 시간
isAllDayboolean종일 영역 여부

ScheduleEventChangeData

FieldTypeDescription
eventScheduleEvent변경된 이벤트 객체
changes{ start?: Date; end?: Date }변경된 시간 정보

접근성

권장 사항

  • ✅ Foundation FullCalendar 내부에서 role="grid" 시맨틱 자동 적용
  • ✅ 네비게이션 버튼에 aria-label 제공 (이전, 다음, 오늘)
  • ✅ 이벤트 요소에 포커스 및 키보드 접근 가능
  • ✅ 로딩 시 aria-busy="true" 자동 적용
  • ❌ 색상만으로 카테고리를 구분하지 말고 title/body에 카테고리 정보를 포함할 것을 권장

관련 컴포넌트

Last updated on