UNPKG

@josmangarsal/pragmatic-scheduler

Version:
173 lines (172 loc) 9.48 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Scheduler = exports.SchedulerContext = void 0; var jsx_runtime_1 = require("@emotion/react/jsx-runtime"); var react_1 = __importStar(require("react")); require("react-grid-layout/css/styles.css"); require("react-resizable/css/styles.css"); var material_1 = require("@mui/material"); var date_fns_1 = require("date-fns"); var defaults_1 = require("../constants/defaults"); var useDateToDivisions_1 = require("../hooks/useDateToDivisions"); var TimelineView_1 = require("../views/TimelineView"); var noop_1 = __importDefault(require("lodash/noop")); exports.SchedulerContext = react_1.default.createContext({ activeDate: new Date(), days: [], resources: [], events: [], config: defaults_1.defaultConfig, calendarBounds: { start: new Date(), end: new Date(), range: 0, totalDivisions: 0 }, resizingEvent: null, setResizingEvent: noop_1.default, }); var Container = (0, material_1.styled)(material_1.Box)(function () { return ({ display: 'flex', flexDirection: 'column', }); }); var Scheduler = function (_a) { var activeDate = _a.activeDate, _b = _a.divisionDetails, divisionDetails = _b === void 0 ? defaults_1.defaultDivisionDetails : _b, resources = _a.resources, events = _a.events, _c = _a.config, config = _c === void 0 ? defaults_1.defaultConfig : _c, onEventChange = _a.onEventChange, HeaderRow = _a.HeaderRow, ResourceCell = _a.ResourceCell, ResourceHeader = _a.ResourceHeader, UnassignedHeader = _a.UnassignedHeader, UnAssignedBoxProps = _a.UnAssignedBoxProps, GridCell = _a.GridCell, EventTile = _a.EventTile, extendFrom = _a.extendFrom, extendTo = _a.extendTo, extendWithScroll = _a.extendWithScroll, changeDates = _a.changeDates, ExtendLeftIconButton = _a.ExtendLeftIconButton, ExtendRightIconButton = _a.ExtendRightIconButton, ScrollLeftIconButton = _a.ScrollLeftIconButton, ScrollRightIconButton = _a.ScrollRightIconButton, firstDayProp = _a.firstDay, lastDayProp = _a.lastDay, _d = _a.goNow, goNow = _d === void 0 ? false : _d, _e = _a.lockNow, lockNow = _e === void 0 ? false : _e, GoNowIconButton = _a.GoNowIconButton, LockNowIconButton = _a.LockNowIconButton, _f = _a.dndCreatingEvent, dndCreatingEvent = _f === void 0 ? false : _f; var dateToDivisions = (0, useDateToDivisions_1.useDateToDivisions)().dateToDivisions; var _g = __read(react_1.default.useState(null), 2), resizingEvent = _g[0], setResizingEvent = _g[1]; var firstDay = (0, react_1.useMemo)(function () { var _a; return firstDayProp !== null && firstDayProp !== void 0 ? firstDayProp : (0, date_fns_1.startOfDay)((0, date_fns_1.addDays)(activeDate, -1 * ((_a = config.previousDaysToDisplay) !== null && _a !== void 0 ? _a : 0))); }, [activeDate, config.previousDaysToDisplay, firstDayProp]); var lastDay = (0, react_1.useMemo)(function () { return lastDayProp !== null && lastDayProp !== void 0 ? lastDayProp : (0, date_fns_1.endOfDay)((0, date_fns_1.addDays)(firstDay, config.daysToDisplay)); }, [lastDayProp, firstDay, config.daysToDisplay]); var days = (0, react_1.useMemo)(function () { var date = new Date(firstDay); var days = []; while (date <= lastDay) { days.push(dateToDivisions(date, divisionDetails)); date.setDate(date.getDate() + 1); } return days; }, [dateToDivisions, divisionDetails, firstDay, lastDay]); var range = (0, react_1.useMemo)(function () { return lastDay.getTime() - firstDay.getTime(); }, [firstDay, lastDay]); var totalDivisions = (0, react_1.useMemo)(function () { return days.reduce(function (acc, day) { return acc + day.divisions.length; }, 0); }, [days]); var daysWithDivisionsOrder = (0, react_1.useMemo)(function () { var e_1, _a; var daysWithDivisionsOrder = []; var order = 0; try { for (var days_1 = __values(days), days_1_1 = days_1.next(); !days_1_1.done; days_1_1 = days_1.next()) { var day = days_1_1.value; var divisions = day.divisions.map(function (division) { return (__assign(__assign({}, division), { order: order++ })); }); daysWithDivisionsOrder.push(__assign(__assign({}, day), { divisions: divisions })); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (days_1_1 && !days_1_1.done && (_a = days_1.return)) _a.call(days_1); } finally { if (e_1) throw e_1.error; } } return daysWithDivisionsOrder; }, [days]); var filteredEvents = (0, react_1.useMemo)(function () { return events.filter(function (event) { var eventDay = days.find(function (day) { return (0, date_fns_1.isSameDay)(day.date, event.startTime); }); if (eventDay) { return ((event.startTime >= eventDay.date && event.startTime <= eventDay.dateEnd) || (event.endTime >= eventDay.date && event.endTime <= eventDay.dateEnd)); } return ((event.startTime >= firstDay && event.startTime <= lastDay) || (event.endTime >= firstDay && event.endTime <= lastDay)); }); }, [days, events, firstDay, lastDay]); return ((0, jsx_runtime_1.jsx)(exports.SchedulerContext.Provider, __assign({ value: { activeDate: activeDate, resources: resources, days: daysWithDivisionsOrder, events: filteredEvents, config: config, calendarBounds: { start: firstDay, end: lastDay, range: range, totalDivisions: totalDivisions }, onEventChange: onEventChange, HeaderRow: HeaderRow, ResourceCell: ResourceCell, ResourceHeader: ResourceHeader, UnassignedHeader: UnassignedHeader, UnAssignedBoxProps: UnAssignedBoxProps, GridCell: GridCell, EventTile: EventTile, extendFrom: extendFrom, extendTo: extendTo, changeDates: changeDates, extendWithScroll: extendWithScroll, ExtendLeftIconButton: ExtendLeftIconButton, ExtendRightIconButton: ExtendRightIconButton, ScrollLeftIconButton: ScrollLeftIconButton, ScrollRightIconButton: ScrollRightIconButton, goNow: goNow, lockNow: lockNow, GoNowIconButton: GoNowIconButton, LockNowIconButton: LockNowIconButton, resizingEvent: resizingEvent, setResizingEvent: setResizingEvent, dndCreatingEvent: dndCreatingEvent, } }, { children: (0, jsx_runtime_1.jsx)(Container, { children: (0, jsx_runtime_1.jsx)(TimelineView_1.TimelineView, {}) }) }))); }; exports.Scheduler = Scheduler;