레퍼런스

GanttProps

컴포넌트가 받는 모든 prop과 타입, 기본값

GanttProps는 ReactGanttChart가 받는 prop 전체예요.

import { ReactGanttChart, type GanttProps } from '@jaeungkim/gantt-chart';

모든 prop은 생략할 수 있어요. 아래 표에 나오는 타입은 모두 패키지 루트에서 내보내요. Dayjs, ReactNode, React.MouseEvent만 예외예요. 기본값 열에는 컴포넌트가 쓰는 대체 값이 들어가요. 없음은 대체 값이 없다는 뜻이고 그 prop이 켜는 기능도 꺼진 채로 있어요.

데이터

prop타입기본값설명
tasksTask[][]작업 배열이고 내용 기준으로 적용해요. 내용이 같은 새 배열은 무시해요. 작업 데이터 참고.
onTasksChange(updatedTasks: Task[]) => void없음편집이 확정될 때마다 배열 전체와 함께 호출돼요. 작업 편집 참고.

레이아웃과 크기

prop타입기본값설명
heightnumber | string600차트 높이예요. px 숫자나 CSS 길이를 넘기세요. 빠른 시작 참고.
widthnumber | string"100%"차트 너비예요. px 숫자나 CSS 길이를 넘기세요. 빠른 시작 참고.
classNamestring없음컨테이너의 gantt-container 클래스 뒤에 붙어요. 테마 참고.

작업 목록

prop타입기본값설명
showTaskListbooleanfalse작업 이름을 나열하는 왼쪽 패널을 보여줘요. 작업 목록과 계층 참고.
showRowNumbersbooleanfalse각 행의 sequence를 이름 앞 좁은 열에 표시해요. 작업 목록과 계층 참고.

계층

prop타입기본값설명
hierarchybooleanfalseparentId로 깊이와 요약 행을 계산해요. 작업 목록과 계층 참고.
collapsedIdsstring[]없음제어 모드의 접힘 집합이에요. 생략하면 차트가 자체 목록을 관리해요. 작업 목록과 계층 참고.
defaultCollapsedIdsstring[][]비제어 모드의 초기값이고 마운트할 때 한 번만 읽어요. 작업 목록과 계층 참고.
onCollapsedChange(collapsedIds: string[]) => void없음제어 여부와 상관없이 접기 토글마다 호출돼요. 작업 목록과 계층 참고.

타임라인과 범위

prop타입기본값설명
defaultScaleGanttScaleKey"month"차트를 만들 때 한 번 읽는 초기 배율이에요. 타임라인 참고.
onScaleChange(scale: GanttScaleKey) => void없음어디에서 바꿨든 배율이 확정될 때마다 호출돼요. 타임라인 참고.
visibleStartstring없음타임라인 시작을 이 ISO 날짜에 고정해요. 생략하면 범위가 작업에 맞춰져요. 타임라인 참고.
visibleEndstring없음타임라인 끝을 이 ISO 날짜에 고정해요. 생략하면 범위가 작업에 맞춰져요. 타임라인 참고.
showNonWorkingDaysbooleantrue비근무일을 음영 처리하고 휴일 이름을 보여줘요. 타임라인 참고.
workingWeekdaysnumber[][1, 2, 3, 4, 5]근무하는 UTC 요일 번호이고 0이 일요일이에요. 기본값은 월요일부터 금요일이에요. 배열은 참조로 비교해요. 타임라인 참고.
holidays(string | Holiday)[]없음workingWeekdays 위에 더하는 비근무일이고 YYYY-MM-DD 문자열이나 Holiday 객체로 넘겨요. 생략하면 주 단위 규칙만 남아요. 배열은 참조로 비교해요. 타임라인 참고.
onRangeChange(range: GanttDateRange) => void없음렌더링된 범위가 바뀔 때마다 호출돼요. 타임라인 참고.

줌과 스크롤

prop타입기본값설명
zoomOnWheelbooleanfalseCtrl/Cmd + 휠로 배율을 순서대로 바꿔요. 타임라인 참고.
infiniteScrollbooleanfalse어느 쪽 끝에든 가까워지면 렌더링 범위를 늘려요. 타임라인 참고.
initialScrollTo"today" | string없음타임라인이 처음 렌더링된 뒤 한 번만 스크롤해요. 명령형 API 참고.
autoScrollOnDragbooleantrue뷰포트 가장자리에서 막대를 끌면 타임라인이 스크롤돼요. 작업 편집 참고.

편집 권한

prop타입기본값설명
readOnlybooleanfalse모든 작업의 모든 제스처를 막아요. 작업 편집 참고.
allowMoveboolean!readOnly막대 이동을 허용하고 readOnly보다 우선해요. 작업 편집 참고.
allowResizeboolean!readOnly막대 크기 조절을 허용하고 readOnly보다 우선해요. 작업 편집 참고.
allowProgressChangeboolean!readOnly진행률 핸들 드래그를 허용하고 readOnly보다 우선해요. 작업 편집 참고.
allowTaskCreateboolean!readOnlyAdd task 버튼과 addTask(), 그린 구간으로 새 작업 초안을 만들도록 허용해요. 작업 생성 참고.
allowReorderbooleanfalse작업 목록 행을 끌어 다른 자리나 다른 부모로 옮기도록 허용해요. 행 순서 바꾸기 참고.
minDatestring없음막대를 끌어 놓을 수 있는 가장 이른 ISO 날짜예요. 작업 편집 참고.
maxDatestring없음막대를 끌어 놓을 수 있는 가장 늦은 ISO 날짜예요. 작업 편집 참고.

의존성

prop타입기본값설명
allowLinkCreateboolean!readOnly막대 사이에 의존성을 그리도록 허용해요. 의존성 참고.
allowLinkDeleteboolean!readOnly의존성 화살표를 선택해 지우도록 허용해요. 의존성 참고.
onDependencyCreate(change: GanttDependencyChange) => boolean | void없음그린 링크가 적용되기 전에 실행돼요. false를 반환하면 거부해요. 의존성 참고.
onDependencyDelete(change: GanttDependencyChange) => boolean | void없음화살표가 지워지기 전에 실행돼요. false를 반환하면 그대로 둬요. 의존성 참고.

근무일 달력

prop타입기본값설명
workingCalendarbooleanfalse드래그 결과를 비근무일 뒤 근무일로 옮겨요. 근무일 달력 참고.

렌더링

prop타입기본값설명
showTooltipbooleantrue툴팁과 진행률 드래그의 % 표시를 보여줘요. 드래그 중 눈금 행에 표시되는 날짜는 영향을 받지 않아요. 스타일링 참고.

이벤트

prop타입기본값설명
onTaskClick(task: TaskTransformed, event: React.MouseEvent) => void없음막대나 행을 클릭할 때 호출되고 드래그 뒤에는 호출되지 않아요. 이벤트 참고.
onTaskDoubleClick(task: TaskTransformed, event: React.MouseEvent) => void없음더블 클릭할 때 호출돼요. 이벤트 참고.
onTaskSelect(task: TaskTransformed | null) => void없음선택이 바뀔 때 호출되고 빈 타임라인을 클릭하면 null을 받아요. 이벤트 참고.
selectableboolean없음클릭 선택과 강조 표시를 켜요. 생략하면 onTaskSelect와 상세 패널을 따라가요. 이벤트 참고.
onTaskCreate(draft: GanttTaskDraft) => void없음Add task 버튼과 addTask(), 그린 구간에서 초안과 함께 호출돼요. 작업 생성 참고.
onTaskMove(change: GanttTaskMoveChange) => boolean | void없음행 이동이 적용되기 전에 실행돼요. false를 반환하면 거부해요. 행 순서 바꾸기 참고.

상세 패널

prop타입기본값설명
renderDetailGanttDetailRenderer없음고정 패널의 본문을 바꾸고 패널을 켜요. 생략하면 내장 본문을 써요. 상세 패널과 상세 렌더러 참고.
showDetailbooleanrenderDetail !== undefined타임라인 오른쪽에 붙는 패널을 보여줘요. 상세 패널 참고.
detailTaskIdstring | null없음제어 모드로 열 작업이고 null이면 닫혀요. 생략하면 차트가 직접 관리해요. 상세 패널 참고.
onDetailChange(task: TaskTransformed | null) => void없음제어 여부와 상관없이 열고 닫을 때마다 호출돼요. 상세 패널 참고.

로케일과 테마

prop타입기본값설명
localestring없음모든 날짜 라벨에 쓰는 BCP 47 태그예요. 생략하면 내장 영어 라벨을 써요. 로케일과 날짜 형식 참고.
formatsGanttFormatOverrides없음배율별 tick과 header, tooltip 라벨을 덮어써요. 생략하면 로케일의 라벨을 써요. 로케일과 날짜 형식 참고.
firstDayOfWeeknumber없음0(일요일)부터 6(토요일)까지 넘겨 week 배율의 상단 헤더를 주 단위로 묶어요. 생략하면 주 단위 묶음이 꺼져요. 로케일과 날짜 형식 참고.
themeGanttTheme없음'light', 'dark', 'system' 중 하나예요. 생략하면 호스트 페이지의 color-scheme이 결정해요. 테마 참고.

파생 기본값

  • selectable에는 고정된 기본값이 없어요. 생략하면 onTaskSelect를 넘긴 경우에 선택이 켜지고 상세 패널이 켜져 있을 때도 함께 켜져요. 콜백 없이 강조만 쓰려면 true를 넘기고 아예 끄려면 false를 넘기세요.
  • showDetail도 같은 방식이에요. 생략하면 renderDetail을 넘긴 경우에만 상세 패널이 켜져요. 패널을 켜면 selectable을 따로 넘기지 않는 한 행 선택도 함께 켜져요. 상세 패널 참고.
  • allowMove와 allowResize, allowProgressChange, allowTaskCreate, allowLinkCreate, allowLinkDelete의 기본값은 true가 아니라 !readOnly예요. 같은 이름의 작업별 플래그가 차트 쪽 설정보다 우선하고 작업의 readOnly는 그 둘 사이에 놓여요. GanttInteractionConfig 참고.
  • allowTaskCreate만으로는 아무것도 만들어지지 않으니 onTaskCreate도 함께 넘기세요. 없으면 버튼과 제스처가 생기지 않고 addTask()도 아무 일도 하지 않아요.
  • allowReorder의 기본값은 !readOnly가 아니라 false예요. 켜기 전까지는 행 그립이 생기지 않고 순서 바꾸기 키도 아무 일도 하지 않아요. 작업의 allowReorder가 우선하고 작업의 readOnly: true는 이 플래그를 막아요. 차트의 readOnly는 참조하지 않아요. GanttInteractionConfig 참고.
  • defaultScale은 제어 값이 아니라 초기값이에요. 차트를 만들 때 한 번만 읽어서 첫 렌더링부터 그 배율로 그려요. 그 뒤에 prop을 바꿔도 무시하고 onScaleChange도 호출되지 않아요. 저장하는 값이 없어서 다시 마운트하면 초기값에서 다시 출발해요.
  • collapsedIds와 defaultCollapsedIds는 한 값을 제어 모드와 비제어 모드로 나눈 prop이에요. collapsedIds를 넘기면 차트는 그 목록을 보여주고 자체 추적을 멈춰요. onCollapsedChange는 두 방식 모두에서 호출돼요.
  • theme에는 기본값이 없어요. 생략하면 호스트 페이지의 color-scheme을 따르고, 'system'은 OS 설정을 읽고, 'light'와 'dark'는 서버 렌더링을 포함해 어디서나 그대로 적용돼요. 해결 순서 표는 테마에 있어요.
  • visibleStart와 visibleEnd는 서로 독립이에요. 한쪽 끝을 고정하면 그쪽으로는 infiniteScroll이 범위를 늘리지 못하고 반대쪽은 계속 늘어나요.
  • workingCalendar는 workingWeekdays와 holidays로 달력을 만들어요. 이 두 prop은 showNonWorkingDays 음영을 결정하는 prop과 같아요.
  • workingWeekdays와 holidays는 내용이 아니라 참조로 비교해요. 렌더마다 새 배열을 넘기면 렌더마다 달력을 다시 만들어요.

참고

  • 작업 목록에는 열 API가 없어요. 시작 패널 너비 220px로 task.name을 보여주고 작업에 관한 나머지는 상세 패널에 넣으세요. 작업 목록과 계층 참고.
  • GanttTaskMoveChange는 onTaskMove가 받는 값이에요. 패키지 루트에서 내보내고 필드는 이 값을 만드는 moveTask와 함께 트리 헬퍼에 정리돼 있어요.
  • GanttDependencyChange와 GanttTaskDraft, GanttDateRange도 패키지 루트에서 내보내요. 필드는 각 값을 받는 콜백과 함께 의존성, 작업 생성, 타임라인에 정리돼 있어요.
  • Dayjs는 dayjs 패키지의 타입이고 ReactNode와 React.MouseEvent는 react의 타입이에요. 셋 다 이 패키지에서 다시 내보내지 않아요.
  • 차트는 툴바나 배율 선택기를 그리지 않아요. 선택기가 필요하면 호스트가 직접 그리고 ref의 setScale으로 배율을 바꾸고 onScaleChange로 상태를 맞추세요. 타임라인 참고.
  • ReactGanttChart는 스크롤과 줌, 배율 전환, 상세 패널 열고 닫기를 위한 GanttHandle 타입 ref도 받아요. GanttProps의 일부는 아니에요. GanttHandle 참고.