UNPKG

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