@progress/kendo-react-gantt
Version:
React Gantt enables the display of self-referencing tabular data with many features. KendoReact Gantt package
9 lines (8 loc) • 8.83 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ge=require("react"),n=require("prop-types"),E=require("./utils/index.js"),Ie=require("@progress/kendo-react-intl"),He=require("./context/GanttContext.js"),y=require("./views/GanttWeekView.js"),A=require("./views/GanttDayView.js"),P=require("./views/GanttMonthView.js"),N=require("./views/GanttYearView.js"),ze=require("@progress/kendo-react-treelist"),r=require("@progress/kendo-react-common"),Ae=require("./hooks/useControlledState.js"),Pe=require("./components/toolbar/view-selector/ViewSelectorList.js"),Ne=require("./components/toolbar/view-selector/ViewSelector.js"),Oe=require("./components/toolbar/Toolbar.js"),We=require("@progress/kendo-react-buttons"),O=require("./constants/index.js"),W=require("./package-metadata.js"),Le=require("./components/toolbar/AddButton.js");function je(e){const k=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const d in e)if(d!=="default"){const h=Object.getOwnPropertyDescriptor(e,d);Object.defineProperty(k,d,h.get?h:{enumerable:!0,get:()=>e[d]})}}return k.default=e,Object.freeze(k)}const a=je(Ge),V=a.forwardRef((e,k)=>{const d=!r.validatePackage(W.packageMetadata,{component:"Gantt"}),h=r.getLicenseMessage(W.packageMetadata),{columns:L=m.columns,taskData:x=m.taskData,dependencyData:j=m.dependencyData,style:K,className:_,noRecords:B,timezone:F,rowHeight:Y=m.rowHeight,resizable:U,reorderable:$,sortable:J,sort:Q,filter:X,columnMenuFilter:Z,columnMenu:p,navigatable:ee,toolbar:q,row:ne,selectable:te}=e,C=new Map;C.set(A.GanttDayView,A.ganttDayViewDefaultProps),C.set(P.GanttMonthView,P.ganttMonthViewDefaultProps),C.set(y.GanttWeekView,y.ganttWeekViewDefaultProps),C.set(N.GanttYearView,N.ganttYearViewDefaultProps);const ae=Ie.useInternationalization(),{fields:o}=a.useMemo(()=>E.getTaskModelFields(e.taskModelFields),[e.taskModelFields]),{fields:le}=a.useMemo(()=>E.getDependencyModelFields(e.dependencyModelFields),[e.dependencyModelFields]),G=a.useCallback(E.expandedChildren(o.isExpanded,o.children),[o.isExpanded,o.children]),M=a.useRef(null),i=a.useRef(null),s=a.useRef(null),w=a.useRef(null),f=a.useRef(null),oe=a.useCallback(t=>{const c=r.getter(o.start)(t),g=r.getter(o.end)(t),T=r.getter(o.isSelected)(t);(!i.current||c<i.current)&&(i.current=c),(!s.current||g>s.current)&&(s.current=g),T&&(w.current=t)},[o.start,o.end]),b=a.useMemo(()=>(i.current=null,s.current=null,w.current=null,ze.flatData(x,G,oe)),[x,G]);(!i.current||!s.current)&&(i.current=new Date(O.DEFAULT_DATE),s.current=new Date(O.DEFAULT_DATE));const R=a.Children.toArray(e.children||[]).map(t=>{var c;return a.isValidElement(t)?a.cloneElement(t,{...C.get(t.type),...(c=t.props)!=null?c:{}}):t}),ce=a.cloneElement(a.createElement(y.GanttWeekView,null),C.get(y.GanttWeekView)),I=R.length?R[0]:ce,[H,re]=Ae.useControlledState(e.defaultView||I.props.name,e.view,e.onViewChange),u=R.find(t=>t.props.name===H)||I,ie=typeof u.props.dateRange=="function"?u.props.dateRange.call(void 0,{intl:ae,tasksStart:i.current,tasksEnd:s.current,timezone:F}):u.props.dateRange,S=a.useRef(null),[se,ue]=a.useState(0);r.useIsomorphicLayoutEffect(()=>{S.current&&ue(S.current.element.offsetHeight)},[]);const de=a.useCallback(t=>{M.current&&M.current.scrollIntoView(t)},[]),z=a.useRef(null),l=a.useRef(null);a.useImperativeHandle(l,()=>({props:e,element:z.current,scrollIntoView:de})),a.useImperativeHandle(k,()=>l.current);const Ce=a.useCallback(t=>{e.onDataStateChange&&e.onDataStateChange.call(void 0,{...t,target:l.current})},[e.onDataStateChange]),ge=a.useCallback(t=>{e.onSortChange&&e.onSortChange.call(void 0,{...t,target:l.current})},[e.onSortChange]),ke=a.useCallback(t=>{e.onKeyDown&&e.onKeyDown.call(void 0,{...t,target:l.current})},[e.onKeyDown]),fe=a.useCallback(t=>{e.onSelectionChange&&e.onSelectionChange.call(void 0,{...t,target:l.current})},[e.onSelectionChange]),me=a.useCallback(t=>{e.onHeaderSelectionChange&&e.onHeaderSelectionChange.call(void 0,{...t,target:l.current})},[e.onHeaderSelectionChange]),he=a.useCallback(t=>{e.onFilterChange&&e.onFilterChange.call(void 0,{...t,target:l.current})},[e.onFilterChange]),we=a.useCallback(t=>{e.onColumnMenuFilterChange&&e.onColumnMenuFilterChange.call(void 0,{...t,target:l.current})},[e.onColumnMenuFilterChange]),be=a.useCallback(t=>{e.onExpandChange&&e.onExpandChange.call(void 0,{...t,target:l.current})},[e.onExpandChange]),Re=a.useCallback(t=>{e.onAddClick&&e.onAddClick.call(void 0,{...t,target:l.current,selectedDataItem:w.current,slotStart:f.current&&new Date(f.current.start.getTime()),slotEnd:f.current&&new Date(f.current.end.getTime())})},[e.onAddClick]),De=a.useCallback(t=>{e.onColumnResize&&e.onColumnResize.call(void 0,{...t,target:l.current})},[e.onColumnResize]),ye=a.useCallback(t=>{e.onColumnReorder&&e.onColumnReorder.call(void 0,{...t,target:l.current})},[e.onColumnReorder]),Me=a.useCallback(t=>{e.onRowClick&&e.onRowClick.call(void 0,{...t,target:l.current})},[e.onRowClick]),Se=a.useCallback(t=>{e.onRowDoubleClick&&e.onRowDoubleClick.call(void 0,{...t,target:l.current})},[e.onRowClick]),Te=a.useCallback(t=>{e.onRowContextMenu&&e.onRowContextMenu.call(void 0,{...t,target:l.current})},[e.onRowClick]),ve=a.useCallback(t=>{e.onTaskClick&&e.onTaskClick.call(void 0,{...t,target:l.current})},[e.onTaskClick]),Ee=a.useCallback(t=>{e.onTaskDoubleClick&&e.onTaskDoubleClick.call(void 0,{...t,target:l.current})},[e.onTaskDoubleClick]),Ve=a.useCallback(t=>{e.onTaskContextMenu&&e.onTaskContextMenu.call(void 0,{...t,target:l.current})},[e.onTaskContextMenu]),xe=a.useCallback(t=>{e.onTaskRemoveClick&&e.onTaskRemoveClick.call(void 0,{...t,target:l.current})},[e.onTaskRemoveClick]),Fe=a.useCallback(t=>{if(e.onDependencyCreate){let c,g;const T=r.getter(o.id);for(let v=0;v<b.length;v++){const qe=b[v],D=T(qe.dataItem);if(String(D)===t.fromId&&(c=D),String(D)===t.toId&&(g=D),c&&g)break}e.onDependencyCreate.call(void 0,{fromId:c,toId:g,target:l.current,type:t.type})}},[e.onDependencyCreate,o,b]);return a.createElement(He.GanttContext,{dateRange:ie,taskData:b,dependencyData:j,taskModelFields:o,dependencyModelFields:le,views:R,activeView:[H,re],rowHeight:Y,toolbarHeight:se,props:{columns:L,noRecords:B,timezone:F,resizable:U,reorderable:$,sortable:J,sort:Q,filter:X,columnMenuFilter:Z,columnMenu:p,navigatable:ee,row:ne,selectable:te},events:{onDataStateChange:Ce,onSortChange:ge,onFilterChange:he,onColumnMenuFilterChange:we,onExpandChange:be,onRowClick:Me,onRowDoubleClick:Se,onRowContextMenu:Te,onColumnResize:De,onColumnReorder:ye,onDependencyCreate:e.onDependencyCreate&&Fe,onKeyDown:ke,onSelectionChange:fe,onHeaderSelectionChange:me},taskEvents:{onTaskClick:ve,onTaskDoubleClick:Ee,onTaskContextMenu:Ve,onTaskRemoveClick:e.onTaskRemoveClick&&xe}},a.createElement("div",{ref:z,role:"application",style:K,className:r.classNames("k-gantt",_)},a.createElement(Oe.Toolbar,{ref:S},q&&q.addTaskButton?a.createElement(Le.AddButton,{selectedTask:w.current,onClick:Re}):null,a.createElement(We.ToolbarSpacer,null),a.createElement(Ne.ViewSelector,null,a.createElement(Pe.ViewSelectorList,null))),u&&a.createElement(u.type,{key:u.props.name,ref:M,...u.props,firstSlotRangeRef:f}),d&&a.createElement(r.WatermarkOverlay,{message:h})))}),m={taskData:[],dependencyData:[],columns:[],rowHeight:40};V.propTypes={taskData:n.array,taskModelFields:n.shape({id:n.string,start:n.string,end:n.string,title:n.string,percentComplete:n.string,parentId:n.string,isRollup:n.string,isExpanded:n.string,children:n.string,isInEdit:n.string}),dependencyData:n.array,dependencyModelFields:n.shape({id:n.string,fromId:n.string,toId:n.string,type:n.string}),columns:n.arrayOf(n.shape({width:n.number,cell:n.any,editCell:n.any,headerCell:n.any,filter:n.any,children:n.any,field:n.string,title:n.string,sortable:n.any,expandable:n.bool,headerSelectionValue:n.bool,format:n.string,headerClassName:n.string,className:n.string,resizable:n.bool,reorderable:n.bool,minResizableWidth:n.number,orderIndex:n.number,columnMenu:n.any})),sort:n.array,filter:n.array,columnMenuFilter:n.array,columnMenu:n.any,style:n.object,className:n.string,children:n.any,timezone:n.string,defaultView:n.string,view:n.string,rowHeight:n.number,navigatable:n.bool,onViewChange:n.func,onDataStateChange:n.func,onSortChange:n.func,onFilterChange:n.func,onExpandChange:n.func,onRowClick:n.func,onColumnResize:n.func,onColumnReorder:n.func};V.displayName="KendoReactGantt";exports.Gantt=V;exports.ganttDefaultProps=m;