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) 4.14 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 u=require("@progress/kendo-react-common"),w=require("react"),h=require("../../hooks/useControlledState.js"),a=require("../../utils/index.js"),_=require("../../constants/index.js"),x=require("../../context/SchedulerViewContext.js"),C=require("../../context/SchedulerContext.js");function O(e){const A=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const d in e)if(d!=="default"){const i=Object.getOwnPropertyDescriptor(e,d);Object.defineProperty(A,d,i.get?i:{enumerable:!0,get:()=>e[d]})}}return A.default=e,Object.freeze(A)}const T=O(w);var F=(e=>(e.set="DRAG_ITEM_SET",e.start="DRAG_ITEM_START",e.drag="DRAG_ITEM_DRAG",e.complete="DRAG_ITEM_COMPLETE",e.completeOccurrence="DRAG_ITEM_COMPLETE_OCCURRENCE",e.completeSeries="DRAG_ITEM_COMPLETE_SERIES",e.reset="DRAG_ITEM_RESET",e.dragSelected="DRAG_ITEM_DRAG_SELECTED",e))(F||{});const k=(e,A)=>{const d=T.useRef(0),i=T.useRef(0),R=T.useRef(0),b=T.useRef(null),[n,c]=h.useControlledState(...A),[G]=x.useSchedulerViewSelectedItemsContext(),s=C.useSchedulerFieldsContext(),g=C.useSchedulerGroupsContext();return[n,c,l=>{switch(l.type){case"DRAG_ITEM_SET":{c(l.payload);break}case"DRAG_ITEM_RESET":{c(null);break}case"DRAG_ITEM_DRAG_SELECTED":{if(Math.abs(i.current-l.payload.x)<10&&Math.abs(R.current-l.payload.y)<10)return;const t=a.slotDive(l.payload.x,l.payload.y,7);if(!t||t===b.current)return;const r=u.clone(e.dataItem),o=t.getAttribute("data-slot-start"),y=t.getAttribute("data-slot-allday")==="true";if(!e.ignoreIsAllDay&&y!==e.isAllDay)return;const m=new Date(a.getField(r,s.start)),D=Number(o)-m.getTime(),M=G.map(E=>{if(!E.current)return null;const I=u.clone(E.current.props.dataItem),f=new Date(E.current.props.start.getTime()+D),S=new Date(E.current.props.end.getTime()+D);return a.setField(I,s.start,f),a.setField(I,s.end,S),I}).filter(Boolean);b.current=t,c([...M]);break}case"DRAG_ITEM_START":{const t=l.payload.x,r=l.payload.y;i.current=t,R.current=r;const o=a.slotDive(t,r,7);if(!o)return;const y=u.clone(e.dataItem),m=o.getAttribute("data-slot-start"),D=a.getField(y,s.start);if(m===null)return;d.current=Number(m)-new Date(D).getTime();break}case"DRAG_ITEM_DRAG":{if(Math.abs(i.current-l.payload.x)<10&&Math.abs(R.current-l.payload.y)<10)return;const t=a.slotDive(l.payload.x,l.payload.y,7);if(!t||t===b.current)return;const r=u.clone(e.dataItem),o=t.getAttribute("data-slot-start"),y=t.getAttribute("data-slot-group"),m=t.getAttribute("data-slot-allday")==="true";if(!e.ignoreIsAllDay&&m!==e.isAllDay)return;const D=new Date(a.getField(r,s.start)),E=new Date(a.getField(r,s.end)).getTime()-D.getTime(),I=new Date(Number(o)-Number(d.current)),f=new Date(Number(o)-Number(d.current)+E),S=g.find(p=>p.index===Number(y));a.setField(r,s.start,I),a.setField(r,s.end,f),S&&g.length>1&&S.resources.forEach(p=>{p.multiple||a.setField(r,p.field,p[p.valueField])}),b.current=t,r&&c(r);break}case"DRAG_ITEM_COMPLETE":{c(null),e.onDataAction&&n&&e.onDataAction.call(void 0,{type:_.DATA_ACTION.update,series:!1,dataItem:n});break}case"DRAG_ITEM_COMPLETE_OCCURRENCE":{const t=Array.isArray(n)?n.slice():u.clone(n);c(null),e.onDataAction&&n&&e.onDataAction.call(void 0,{type:_.DATA_ACTION.update,series:!1,dataItem:t});break}case"DRAG_ITEM_COMPLETE_SERIES":{let t;if(Array.isArray(n))t=n.map(r=>{const o=u.clone(r);return a.setField(o,s.start,a.getField(r,s.start)),a.setField(o,s.end,a.getField(r,s.end)),o});else{const r=u.clone(n);a.setField(r,s.start,a.getField(n,s.start)),a.setField(r,s.end,a.getField(n,s.end)),t=r}c(null),e.onDataAction&&t&&e.onDataAction.call(void 0,{type:_.DATA_ACTION.update,series:!0,dataItem:t});break}default:c(n);break}}]};exports.DRAG_ITEM_ACTION=F;exports.useDragItem=k;