big-scheduler
Version:
Big scheduler is a powerful and intuitive scheduler and resource planning solution built with React. Seamlessly integrate this modern browser-compatible component into your applications to effectively manage time, appointments, and resources. With drag-a
111 lines (110 loc) • 6.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useDndSource = void 0;
var _reactDnd = require("react-dnd");
var _default = require("../config/default");
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // useDndSource.js
var useDndSource = exports.useDndSource = function useDndSource(resolveDragObjFunc) {
var dndType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _default.DnDTypes.EVENT;
var _useDrag = (0, _reactDnd.useDrag)(function () {
return {
type: dndType,
item: function item(props) {
var item = resolveDragObjFunc(props);
if (!item) {
console.error('beginDrag returned null or undefined.');
}
return item;
},
end: function end(item, monitor) {
if (!monitor.didDrop()) return;
var _monitor$getItem = monitor.getItem(),
moveEvent = _monitor$getItem.moveEvent,
newEvent = _monitor$getItem.newEvent,
schedulerData = _monitor$getItem.schedulerData;
var events = schedulerData.events,
config = schedulerData.config,
viewType = schedulerData.viewType,
localeDayjs = schedulerData.localeDayjs;
var dropResult = monitor.getDropResult();
var slotId = dropResult.slotId,
slotName = dropResult.slotName,
newStart = dropResult.start,
newEnd = dropResult.end,
initialStart = dropResult.initialStart;
var action = 'New';
var isEvent = monitor.getItemType() === _default.DnDTypes.EVENT;
if (isEvent) {
var event = item;
if (config.relativeMove) {
newStart = localeDayjs(event.start).add(localeDayjs(newStart).diff(localeDayjs(new Date(initialStart))), 'ms').format(_default.DATETIME_FORMAT);
} else if (viewType !== _default.ViewType.Day) {
var tmpDayjs = localeDayjs(newStart);
newStart = localeDayjs(event.start).year(tmpDayjs.year()).month(tmpDayjs.month()).date(tmpDayjs.date()).format(_default.DATETIME_FORMAT);
}
newEnd = localeDayjs(newStart).add(localeDayjs(event.end).diff(localeDayjs(event.start)), 'ms').format(_default.DATETIME_FORMAT);
if (config.crossResourceMove === false) {
slotId = schedulerData._getEventSlotId(item);
slotName = undefined;
var slot = schedulerData.getSlotById(slotId);
if (slot) slotName = slot.name;
}
action = 'Move';
}
var hasConflict = false;
if (config.checkConflict) {
var start = localeDayjs(newStart);
var _end = localeDayjs(newEnd);
events.forEach(function (e) {
if (schedulerData._getEventSlotId(e) === slotId && (!isEvent || e.id !== item.id)) {
var eStart = localeDayjs(e.start);
var eEnd = localeDayjs(e.end);
if (start >= eStart && start < eEnd || _end > eStart && _end <= eEnd || eStart >= start && eStart < _end || eEnd > start && eEnd <= _end) hasConflict = true;
}
});
}
if (hasConflict) {
var _monitor$getItem2 = monitor.getItem(),
conflictOccurred = _monitor$getItem2.conflictOccurred;
if (conflictOccurred !== undefined) {
conflictOccurred(schedulerData, action, item, monitor.getItemType(), slotId, slotName, newStart, newEnd);
} else {
console.log('Conflict occurred, set conflictOccurred func in Scheduler to handle it');
}
} else if (isEvent) {
if (moveEvent !== undefined) {
moveEvent(schedulerData, item, slotId, slotName, newStart, newEnd);
}
} else if (newEvent !== undefined) newEvent(schedulerData, slotId, slotName, newStart, newEnd, monitor.getItemType(), item);
},
canDrag: function canDrag(props) {
var schedulerData = props.schedulerData,
resourceEvents = props.resourceEvents;
var item = resolveDragObjFunc(props);
if (schedulerData._isResizing()) return false;
var config = schedulerData.config;
return config.movable && (resourceEvents === undefined || !resourceEvents.groupOnly) && (item.movable === undefined || item.movable !== false);
},
collect: function collect(monitor) {
return {
isDragging: monitor.isDragging()
};
}
};
}, [resolveDragObjFunc, dndType]),
_useDrag2 = _slicedToArray(_useDrag, 2),
isDragging = _useDrag2[0].isDragging,
dragRef = _useDrag2[1];
return {
isDragging: isDragging,
dragRef: dragRef
};
};
//# sourceMappingURL=DndSouceFunctional.js.map