@progress/kendo-react-scheduler
Version:
React Scheduler brings the functionality of Outlook's Calendar to a single UI component. KendoReact Scheduler package
9 lines (8 loc) • 10.7 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2026 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 Me=require("react"),o=require("prop-types"),n=require("./utils/index.js"),g=require("@progress/kendo-react-common"),Ae=require("./context/SchedulerContext.js"),_=require("./hooks/useControlledState.js"),re=require("@progress/kendo-react-intl"),qe=require("./components/header/SchedulerHeader.js"),ie=require("./components/header/navigation/SchedulerNavigation.js"),Oe=require("./components/header/view-selector/SchedulerViewSelector.js"),R=require("@progress/kendo-date-math"),Le=require("./components/footer/SchedulerFooter.js"),y=require("@progress/kendo-react-buttons"),m=require("./messages/index.js"),Ne=require("./components/header/navigation/NavigationDatePicker.js"),We=require("./components/header/view-selector/ViewSelectorList.js"),Pe=require("./components/footer/bussiness-hours/BussinessHours.js"),A=require("./views/day/DayView.js"),ne=require("./package-metadata.js"),T=require("@progress/kendo-svg-icons"),H=require("./constants/index.js"),ae=require("./views/agenda/AgendaView.js"),oe=require("./views/month/MonthView.js"),le=require("./views/week/WeekView.js"),se=require("./views/week/WorkWeekView.js"),ce=require("./views/time/TimelineView.js");function _e(t){const E=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const S in t)if(S!=="default"){const V=Object.getOwnPropertyDescriptor(t,S);Object.defineProperty(E,S,V.get?V:{enumerable:!0,get:()=>t[S]})}}return E.default=t,Object.freeze(E)}const a=_e(Me),He="{0:D}",ze="{0:d}",Be="application",p=new Map;p.set(ae.AgendaView,ae.agendaViewDefaultProps);p.set(A.DayView,A.dayViewDefaultProps);p.set(oe.MonthView,oe.monthViewDefaultProps);p.set(le.WeekView,le.weekViewDefaultProps);p.set(se.WorkWeekView,se.workWeekDefaultProps);p.set(ce.TimelineView,ce.timeLineViewDefaultProps);const z=a.forwardRef((t,E)=>{var Y,ee,te;const S=!g.validatePackage(ne.packageMetadata,{component:"Scheduler"}),V=g.getLicenseMessage(ne.packageMetadata),{timezone:q,onDataChange:O}=t,f=a.useRef(null),w=a.useRef(null);a.useImperativeHandle(w,()=>({props:t,element:f.current})),a.useImperativeHandle(E,()=>w.current),g.useWebMcpRegister("scheduler",w,t,t.webMcp);const v=g.useRtl(f),L=re.useInternationalization(),M=re.useLocalization(),{fields:r}=a.useMemo(()=>n.getModelFields(t.modelFields),[t.modelFields]),[k,D]=_.useControlledState(t.defaultDate||h.defaultDate,t.date,t.onDateChange),C=a.Children.toArray(t.children||[]).map(e=>{var s;return a.isValidElement(e)?a.cloneElement(e,{...p.get(e.type),...(s=e.props)!=null?s:{}}):e}),de=a.cloneElement(a.createElement(A.DayView,null),p.get(A.DayView)),[B,j]=_.useControlledState(t.defaultView||C[0]&&C[0].props.name||"day",t.view,t.onViewChange),[x,U]=_.useControlledState(!0),i=C.find(e=>e.props.name===B)||C[0]||de,b=((Y=t.data)!=null?Y:h.data)||h.data,ue=n.toSchedulerGroups(t.group,t.resources),ge=t.group&&t.group.orientation?t.group.orientation:"horizontal",me=i.props.selectedDateFormat||He,he=i.props.selectedShortDateFormat||ze,G=i.props.slotDuration,fe=i.props.dateRange!==void 0?typeof i.props.dateRange=="function"?i.props.dateRange.call(void 0,{intl:L,date:k,timezone:q,numberOfDays:i.props.numberOfDays,workWeekStart:i.props.workWeekStart||L.firstDay(),workWeekEnd:i.props.workWeekEnd||(L.firstDay()+i.props.numberOfDays)%6}):i.props.dateRange:{start:h.defaultDate,end:h.defaultDate},I=a.useCallback(({created:e=[],updated:s=[],deleted:u=[]})=>{if(O){const l={created:e,updated:s,deleted:u};O.call(void 0,l)}},[O]),$=a.useCallback(e=>{const s=[e.dataItem];I({created:s})},[I]),K=a.useCallback(e=>{const s=[],u=[];if(e.series)if(Array.isArray(e.dataItem))e.dataItem.forEach(l=>{const c=g.clone(n.findMaster(e.dataItem,r,b)),d=g.clone(l);n.setField(d,r.originalStart,n.getField(c,r.originalStart)),n.setField(d,r.recurrenceId,n.getField(c,r.recurrenceId)),n.setField(d,r.recurrenceExceptions,n.getField(c,r.recurrenceExceptions)),u.push(d)});else{const l=g.clone(n.findMaster(e.dataItem,r,b)),c=g.clone(e.dataItem);n.setField(c,r.originalStart,n.getField(l,r.originalStart)),n.setField(c,r.recurrenceId,n.getField(l,r.recurrenceId)),n.setField(c,r.recurrenceExceptions,n.getField(l,r.recurrenceExceptions)),u.push(c)}else if(Array.isArray(e.dataItem))e.dataItem.forEach(l=>{const c=n.getField(l,r.recurrenceRule)!==null&&n.getField(l,r.recurrenceRule)!==void 0;if(n.getField(l,r.recurrenceId)!==null&&n.getField(l,r.recurrenceId)!==void 0&&c){const F=g.clone(n.findMaster(l,r,b)),P=n.getField(l,r.originalStart),Ve=n.getField(F,r.recurrenceExceptions)||[];n.setField(F,r.recurrenceExceptions,[...Ve,P]),n.setField(l,r.recurrenceRule,null),u.push(F),s.push(l)}else u.push(l)});else{const l=n.getField(e.dataItem,r.recurrenceRule)!==null&&n.getField(e.dataItem,r.recurrenceRule)!==void 0;if(n.getField(e.dataItem,r.recurrenceId)!==null&&n.getField(e.dataItem,r.recurrenceId)!==void 0&&l){const d=g.clone(n.findMaster(e.dataItem,r,b)),F=n.getField(e.dataItem,r.originalStart),P=n.getField(d,r.recurrenceExceptions)||[];n.setField(d,r.recurrenceExceptions,[...P,F]),n.setField(e.dataItem,r.recurrenceRule,null),u.push(d),s.push(e.dataItem)}else u.push(e.dataItem)}I({updated:u,created:s})},[I,r,b]),Z=a.useCallback(e=>{const s=[],u=[];if(e.series){const l=g.clone(n.findMaster(e.dataItem,r,b)),c=g.clone(e.dataItem);n.setField(c,r.originalStart,n.getField(l,r.originalStart)),n.setField(c,r.recurrenceId,n.getField(l,r.recurrenceId)),n.setField(c,r.recurrenceRule,n.getField(l,r.recurrenceRule)),n.setField(c,r.recurrenceExceptions,n.getField(l,r.recurrenceExceptions)),u.push(c)}else if(!(n.getField(e.dataItem,r.recurrenceRule)!==null&&n.getField(e.dataItem,r.recurrenceRule)!==void 0))u.push(e.dataItem);else{const c=g.clone(n.findMaster(e.dataItem,r,b)),d=n.getField(e.dataItem,r.originalStart),F=n.getField(c,r.recurrenceExceptions)||[];n.setField(c,r.recurrenceExceptions,[...F,d]),n.setField(e.dataItem,r.recurrenceRule,null),s.push(c)}I({updated:s,deleted:u})},[I,r,b]),J=a.useCallback(e=>{switch(e.type){case H.DATA_ACTION.create:$(e);break;case H.DATA_ACTION.update:K(e);break;case H.DATA_ACTION.remove:Z(e);break}},[$,Z,K]),De=a.useCallback((e,s)=>{j(e,{...s,target:w.current})},[j,w]),we=a.useCallback((e,s)=>{D(e,{...s,target:w.current})},[D,w]),ke=a.useCallback(e=>{e.value&&D(e.value,{...e,target:w.current,nativeEvent:e.nativeEvent})},[D,w]),be=a.useCallback(e=>{var c,d;e.preventDefault();const s=(d=(c=i.props.step)!=null?c:i.props.numberOfDays)!=null?d:1,l=s>27?R.addMonths(k,Math.round(s/27)):R.addDays(k,s);D(l,e)},[k,D,i.props.numberOfDays,i.props.step]),pe=a.useCallback(e=>{var c,d;e.preventDefault();const s=(d=(c=i.props.step)!=null?c:i.props.numberOfDays)!=null?d:1,l=s>27?R.addMonths(k,-Math.round(s/27)):R.addDays(k,-s);D(l,e)},[k,D,i.props.numberOfDays,i.props.step]),ve=a.useCallback(e=>{e.preventDefault();const s=R.ZonedDate.fromLocalDate(new Date,q);D(new Date(s.getTime()),e)},[D,q]),Fe=a.useCallback(()=>{U(!x)},[U,x]),Se=a.useCallback(()=>{f.current&&(f.current.style.boxShadow="0 0.5px 0.5px 0.5px rgba(0, 0, 0, .12)")},[f]),Ie=a.useCallback(()=>{f.current&&(f.current.style.boxShadow="")},[f]),ye=a.useMemo(()=>{var e;return{...t.style,height:(e=t.height)!=null?e:h.height}},[t.height,t.style]),Ee=a.useMemo(()=>g.classNames({"k-rtl":t.rtl!==void 0?t.rtl:v==="rtl"},"k-scheduler",t.className),[t.className,t.rtl,v]),N=M.toLanguageString(m.today,m.messages[m.today]),Q=M.toLanguageString(m.previousTitle,m.messages[m.previousTitle]),X=M.toLanguageString(m.nextTitle,m.messages[m.nextTitle]),Ce=i.props.header||t.header||h.header,xe=i.props.footer||t.footer||h.footer,Re=ie.SchedulerNavigation,[W,Te]=a.useState(null);return a.createElement(Ae.SchedulerContext,{element:f,props:t,views:C,fields:r,groups:ue,dateRange:fe,orientation:ge,dateFormat:{dateFormat:me,shortDateFormat:he},date:[k,we],activeView:[B,De],selection:[W,Te],data:[b,J]},a.createElement("div",{ref:f,id:t.id,style:ye,className:Ee,tabIndex:(ee=t.tabIndex)!=null?ee:h.tabIndex,dir:v,role:t.role||Be,"aria-label":t.ariaLabel,"aria-labelledby":t.ariaLabelledby,"aria-activedescendant":W&&W.props.id||void 0,onFocus:Se,onBlur:Ie},a.createElement(Ce,null,a.createElement(Re,null,a.createElement(y.ButtonGroup,{className:"k-scheduler-navigation"},a.createElement(y.Button,{role:"button",tabIndex:-1,title:N,"aria-label":N,onClick:ve},N),a.createElement(y.Button,{role:"button",tabIndex:-1,icon:v==="rtl"?"chevron-right":"chevron-left",svgIcon:v==="rtl"?T.chevronRightIcon:T.chevronLeftIcon,title:Q,"aria-label":Q,onClick:pe}),a.createElement(y.Button,{role:"button",tabIndex:-1,icon:v==="rtl"?"chevron-left":"chevron-right",svgIcon:v==="rtl"?T.chevronLeftIcon:T.chevronRightIcon,title:X,"aria-label":X,onClick:be}))),a.createElement(Ne.NavigationDatePicker,{value:k,onChange:ke}),a.createElement(y.ToolbarSpacer,null),a.createElement(We.ViewSelectorList,null)),i&&a.createElement(i.type,{editable:(te=t.editable)!=null?te:h.editable,key:i.props.name,item:t.item,viewItem:t.viewItem,editItem:t.editItem,task:t.task,viewTask:t.viewTask,editTask:t.viewTask,slot:t.slot,viewSlot:t.viewSlot,editSlot:t.editSlot,form:t.form,onDataAction:J,showWorkHours:x,...i.props}),a.createElement(xe,null,G&&G<1440&&a.createElement(Pe.BusinessHours,null,a.createElement(y.Button,{tabIndex:-1,onClick:Fe,icon:"clock",svgIcon:T.clockIcon},M.toLanguageString(x?m.showFullDay:m.showWorkDay,m.messages[x?m.showFullDay:m.showWorkDay])))),S&&a.createElement(g.WatermarkOverlay,{message:V})))}),h={data:[],height:600,tabIndex:-1,editable:!1,defaultDate:new Date,header:qe.SchedulerHeader,footer:Le.SchedulerFooter,navigation:ie.SchedulerNavigation,viewSelector:Oe.SchedulerViewSelector};z.propTypes={data:o.array,editable:o.oneOfType([o.bool,o.shape({add:o.bool,drag:o.bool,edit:o.bool,remove:o.bool,resize:o.bool})]),view:o.string,defaultView:o.string,date:o.any,defaultDate:o.any,rtl:o.bool,height:o.oneOfType([o.number,o.string]),children:o.any,timezone:o.string,group:o.any,resources:o.any,modelFields:o.shape({id:o.string,start:o.string,startTimezone:o.string,end:o.string,endTimezone:o.string,isAllDay:o.string,title:o.string,description:o.string,recurrenceRule:o.string,recurrenceId:o.string,recurrenceException:o.string})};z.displayName="KendoReactScheduler";exports.Scheduler=z;exports.schedulerDefaultProps=h;