@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.6 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 Ae=require("react"),l=require("prop-types"),r=require("./utils/index.js"),g=require("@progress/kendo-react-common"),Me=require("./context/SchedulerContext.js"),_=require("./hooks/useControlledState.js"),ae=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"),v=require("@progress/kendo-react-buttons"),m=require("./messages/index.js"),Ne=require("./components/header/navigation/NavigationDatePicker.js"),Pe=require("./components/header/view-selector/ViewSelectorList.js"),We=require("./components/footer/bussiness-hours/BussinessHours.js"),M=require("./views/day/DayView.js"),re=require("./package-metadata.js"),T=require("@progress/kendo-svg-icons"),H=require("./constants/index.js"),ne=require("./views/agenda/AgendaView.js"),le=require("./views/month/MonthView.js"),oe=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 I in t)if(I!=="default"){const V=Object.getOwnPropertyDescriptor(t,I);Object.defineProperty(E,I,V.get?V:{enumerable:!0,get:()=>t[I]})}}return E.default=t,Object.freeze(E)}const n=_e(Ae),He="{0:D}",ze="{0:d}",Be="application",p=new Map;p.set(ne.AgendaView,ne.agendaViewDefaultProps);p.set(M.DayView,M.dayViewDefaultProps);p.set(le.MonthView,le.monthViewDefaultProps);p.set(oe.WeekView,oe.weekViewDefaultProps);p.set(se.WorkWeekView,se.workWeekDefaultProps);p.set(ce.TimelineView,ce.timeLineViewDefaultProps);const z=n.forwardRef((t,E)=>{var Y,ee,te;const I=!g.validatePackage(re.packageMetadata,{component:"Scheduler"}),V=g.getLicenseMessage(re.packageMetadata),{timezone:q,onDataChange:O}=t,f=n.useRef(null),b=n.useRef(null);n.useImperativeHandle(b,()=>({props:t,element:f.current})),n.useImperativeHandle(E,()=>b.current);const F=g.useRtl(f),L=ae.useInternationalization(),A=ae.useLocalization(),{fields:a}=n.useMemo(()=>r.getModelFields(t.modelFields),[t.modelFields]),[w,D]=_.useControlledState(t.defaultDate||h.defaultDate,t.date,t.onDateChange),C=n.Children.toArray(t.children||[]).map(e=>{var s;return n.isValidElement(e)?n.cloneElement(e,{...p.get(e.type),...(s=e.props)!=null?s:{}}):e}),de=n.cloneElement(n.createElement(M.DayView,null),p.get(M.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,k=((Y=t.data)!=null?Y:h.data)||h.data,ue=r.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:w,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},y=n.useCallback(({created:e=[],updated:s=[],deleted:u=[]})=>{if(O){const o={created:e,updated:s,deleted:u};O.call(void 0,o)}},[O]),$=n.useCallback(e=>{const s=[e.dataItem];y({created:s})},[y]),K=n.useCallback(e=>{const s=[],u=[];if(e.series)if(Array.isArray(e.dataItem))e.dataItem.forEach(o=>{const c=g.clone(r.findMaster(e.dataItem,a,k)),d=g.clone(o);r.setField(d,a.originalStart,r.getField(c,a.originalStart)),r.setField(d,a.recurrenceId,r.getField(c,a.recurrenceId)),r.setField(d,a.recurrenceExceptions,r.getField(c,a.recurrenceExceptions)),u.push(d)});else{const o=g.clone(r.findMaster(e.dataItem,a,k)),c=g.clone(e.dataItem);r.setField(c,a.originalStart,r.getField(o,a.originalStart)),r.setField(c,a.recurrenceId,r.getField(o,a.recurrenceId)),r.setField(c,a.recurrenceExceptions,r.getField(o,a.recurrenceExceptions)),u.push(c)}else if(Array.isArray(e.dataItem))e.dataItem.forEach(o=>{const c=r.getField(o,a.recurrenceRule)!==null&&r.getField(o,a.recurrenceRule)!==void 0;if(r.getField(o,a.recurrenceId)!==null&&r.getField(o,a.recurrenceId)!==void 0&&c){const S=g.clone(r.findMaster(o,a,k)),W=r.getField(o,a.originalStart),Ve=r.getField(S,a.recurrenceExceptions)||[];r.setField(S,a.recurrenceExceptions,[...Ve,W]),r.setField(o,a.recurrenceRule,null),u.push(S),s.push(o)}else u.push(o)});else{const o=r.getField(e.dataItem,a.recurrenceRule)!==null&&r.getField(e.dataItem,a.recurrenceRule)!==void 0;if(r.getField(e.dataItem,a.recurrenceId)!==null&&r.getField(e.dataItem,a.recurrenceId)!==void 0&&o){const d=g.clone(r.findMaster(e.dataItem,a,k)),S=r.getField(e.dataItem,a.originalStart),W=r.getField(d,a.recurrenceExceptions)||[];r.setField(d,a.recurrenceExceptions,[...W,S]),r.setField(e.dataItem,a.recurrenceRule,null),u.push(d),s.push(e.dataItem)}else u.push(e.dataItem)}y({updated:u,created:s})},[y,a,k]),Z=n.useCallback(e=>{const s=[],u=[];if(e.series){const o=g.clone(r.findMaster(e.dataItem,a,k)),c=g.clone(e.dataItem);r.setField(c,a.originalStart,r.getField(o,a.originalStart)),r.setField(c,a.recurrenceId,r.getField(o,a.recurrenceId)),r.setField(c,a.recurrenceRule,r.getField(o,a.recurrenceRule)),r.setField(c,a.recurrenceExceptions,r.getField(o,a.recurrenceExceptions)),u.push(c)}else if(!(r.getField(e.dataItem,a.recurrenceRule)!==null&&r.getField(e.dataItem,a.recurrenceRule)!==void 0))u.push(e.dataItem);else{const c=g.clone(r.findMaster(e.dataItem,a,k)),d=r.getField(e.dataItem,a.originalStart),S=r.getField(c,a.recurrenceExceptions)||[];r.setField(c,a.recurrenceExceptions,[...S,d]),r.setField(e.dataItem,a.recurrenceRule,null),s.push(c)}y({updated:s,deleted:u})},[y,a,k]),J=n.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=n.useCallback((e,s)=>{j(e,{...s,target:b.current})},[j,b]),we=n.useCallback((e,s)=>{D(e,{...s,target:b.current})},[D,b]),ke=n.useCallback(e=>{e.value&&D(e.value,{...e,target:b.current,nativeEvent:e.nativeEvent})},[D,b]),be=n.useCallback(e=>{var c,d;e.preventDefault();const s=(d=(c=i.props.step)!=null?c:i.props.numberOfDays)!=null?d:1,o=s>27?R.addMonths(w,Math.round(s/27)):R.addDays(w,s);D(o,e)},[w,D,i.props.numberOfDays,i.props.step]),pe=n.useCallback(e=>{var c,d;e.preventDefault();const s=(d=(c=i.props.step)!=null?c:i.props.numberOfDays)!=null?d:1,o=s>27?R.addMonths(w,-Math.round(s/27)):R.addDays(w,-s);D(o,e)},[w,D,i.props.numberOfDays,i.props.step]),Fe=n.useCallback(e=>{e.preventDefault();const s=R.ZonedDate.fromLocalDate(new Date,q);D(new Date(s.getTime()),e)},[D,q]),Se=n.useCallback(()=>{U(!x)},[U,x]),Ie=n.useCallback(()=>{f.current&&(f.current.style.boxShadow="0 0.5px 0.5px 0.5px rgba(0, 0, 0, .12)")},[f]),ye=n.useCallback(()=>{f.current&&(f.current.style.boxShadow="")},[f]),ve=n.useMemo(()=>{var e;return{...t.style,height:(e=t.height)!=null?e:h.height}},[t.height,t.style]),Ee=n.useMemo(()=>g.classNames({"k-rtl":t.rtl!==void 0?t.rtl:F==="rtl"},"k-scheduler",t.className),[t.className,t.rtl,F]),N=A.toLanguageString(m.today,m.messages[m.today]),Q=A.toLanguageString(m.previousTitle,m.messages[m.previousTitle]),X=A.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,[P,Te]=n.useState(null);return n.createElement(Me.SchedulerContext,{element:f,props:t,views:C,fields:a,groups:ue,dateRange:fe,orientation:ge,dateFormat:{dateFormat:me,shortDateFormat:he},date:[w,we],activeView:[B,De],selection:[P,Te],data:[k,J]},n.createElement("div",{ref:f,id:t.id,style:ve,className:Ee,tabIndex:(ee=t.tabIndex)!=null?ee:h.tabIndex,dir:F,role:t.role||Be,"aria-label":t.ariaLabel,"aria-labelledby":t.ariaLabelledby,"aria-activedescendant":P&&P.props.id||void 0,onFocus:Ie,onBlur:ye},n.createElement(Ce,null,n.createElement(Re,null,n.createElement(v.ButtonGroup,{className:"k-scheduler-navigation"},n.createElement(v.Button,{role:"button",tabIndex:-1,title:N,"aria-label":N,onClick:Fe},N),n.createElement(v.Button,{role:"button",tabIndex:-1,icon:F==="rtl"?"caret-alt-right":"caret-alt-left",svgIcon:F==="rtl"?T.caretAltRightIcon:T.caretAltLeftIcon,title:Q,"aria-label":Q,onClick:pe}),n.createElement(v.Button,{role:"button",tabIndex:-1,icon:F==="rtl"?"caret-alt-left":"caret-alt-right",svgIcon:F==="rtl"?T.caretAltLeftIcon:T.caretAltRightIcon,title:X,"aria-label":X,onClick:be}))),n.createElement(Ne.NavigationDatePicker,{value:w,onChange:ke}),n.createElement(v.ToolbarSpacer,null),n.createElement(Pe.ViewSelectorList,null)),i&&n.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}),n.createElement(xe,null,G&&G<24*60&&n.createElement(We.BusinessHours,null,n.createElement(v.Button,{tabIndex:-1,onClick:Se,icon:"clock",svgIcon:T.clockIcon},A.toLanguageString(x?m.showFullDay:m.showWorkDay,m.messages[x?m.showFullDay:m.showWorkDay])))),I&&n.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:l.array,editable:l.oneOfType([l.bool,l.shape({add:l.bool,drag:l.bool,edit:l.bool,remove:l.bool,resize:l.bool})]),view:l.string,defaultView:l.string,date:l.any,defaultDate:l.any,rtl:l.bool,height:l.oneOfType([l.number,l.string]),children:l.any,timezone:l.string,group:l.any,resources:l.any,modelFields:l.shape({id:l.string,start:l.string,startTimezone:l.string,end:l.string,endTimezone:l.string,isAllDay:l.string,title:l.string,description:l.string,recurrenceRule:l.string,recurrenceId:l.string,recurrenceException:l.string})};z.displayName="KendoReactScheduler";exports.Scheduler=z;exports.schedulerDefaultProps=h;