UNPKG

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

149 lines (142 loc) 6.64 kB
"use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _dayjs = _interopRequireDefault(require("dayjs")); var _weekOfYear = _interopRequireDefault(require("dayjs/plugin/weekOfYear")); var _default2 = require("../config/default"); var _isSameOrAfter = _interopRequireDefault(require("dayjs/plugin/isSameOrAfter")); var _isSameOrBefore = _interopRequireDefault(require("dayjs/plugin/isSameOrBefore")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } _dayjs["default"].extend(_isSameOrAfter["default"]); _dayjs["default"].extend(_isSameOrBefore["default"]); _dayjs["default"].extend(_weekOfYear["default"]); function HeaderView(_ref) { var schedulerData = _ref.schedulerData, nonAgendaCellHeaderTemplateResolver = _ref.nonAgendaCellHeaderTemplateResolver; var headers = schedulerData.headers, config = schedulerData.config, localeDayjs = schedulerData.localeDayjs; var headerHeight = schedulerData.getTableHeaderHeight(); var cellWidth = schedulerData.getContentCellWidth(); // 🏆 Memoized headers Map (O(1) lookups) var headerMap = (0, _react.useMemo)(function () { return new Map(headers.map(function (header) { return [localeDayjs(header.time).format("YYYY-MM-DD"), header]; })); }, [headers]); var start = localeDayjs(new Date(headers[0].time)); var end = localeDayjs(new Date(headers[headers.length - 1].time)); // 🏆 Memoized Weeks Array var weeks = (0, _react.useMemo)(function () { var result = []; var currentStart = start.startOf("week"); var finalDate = end.endOf("week"); // So we include the last full/partial week while (currentStart.isSameOrBefore(finalDate, "day")) { result.push({ weekNumber: currentStart.week(), startDate: currentStart.startOf("week"), endDate: currentStart.endOf("week") }); currentStart = currentStart.add(1, "week"); } return result; }, [start, end]); // 🏆 Memoized Months Array var months = (0, _react.useMemo)(function () { var result = []; var currentMonth = start.startOf("month"); var finalMonth = end.endOf("month"); // Ensure we go to the end of the last visible month while (currentMonth.isSameOrBefore(finalMonth, "month")) { result.push({ monthYear: currentMonth.format("MMMM YYYY"), startDate: currentMonth.startOf("month"), endDate: currentMonth.endOf("month") }); currentMonth = currentMonth.add(1, "month"); } return result; }, [start, end]); // Render functions var renderMonthRow = function renderMonthRow() { return /*#__PURE__*/_react["default"].createElement("tr", { style: { height: headerHeight / 3 } }, months.map(function (month) { var colSpan = headers.filter(function (header) { var date = (0, _dayjs["default"])(header.time); return date.isSameOrAfter(month.startDate, "day") && date.isSameOrBefore(month.endDate, "day"); }).length; if (colSpan > 5) { return /*#__PURE__*/_react["default"].createElement("th", { key: month.monthYear, title: month.monthYear, colSpan: colSpan, className: "header-month" }, month.monthYear); } return null; })); }; var renderWeekRow = function renderWeekRow() { return /*#__PURE__*/_react["default"].createElement("tr", { style: { height: headerHeight / 3 } }, weeks.map(function (week) { var colSpan = headers.filter(function (header) { var date = localeDayjs(header.time); return date.isSameOrAfter(week.startDate, "day") && date.isSameOrBefore(week.endDate, "day"); }).length; if (colSpan > 0) { return /*#__PURE__*/_react["default"].createElement("th", { key: week.weekNumber + "-" + week.startDate.format("YYYY-MM-DD"), title: "Week ".concat(week.weekNumber), colSpan: colSpan, className: "header-week" }, "Week ", week.weekNumber); } return null; })); }; var renderDateRow = function renderDateRow() { var dateHeaders = []; var currentDay = start.clone().startOf("day"); while (currentDay.isBefore(end, "day")) { var dateString = currentDay.format("YYYY-MM-DD"); var headerItem = headerMap.get(dateString); // O(1) lookup var date = headerItem ? localeDayjs(headerItem.time).format("D") : ""; dateHeaders.push(/*#__PURE__*/_react["default"].createElement("th", { key: dateString, title: date, className: "header-date", style: { width: cellWidth } }, date)); currentDay = currentDay.add(1, "day"); } return /*#__PURE__*/_react["default"].createElement("tr", { style: { height: headerHeight / 3 } }, dateHeaders); }; return /*#__PURE__*/_react["default"].createElement("thead", null, renderMonthRow(), renderWeekRow(), renderDateRow()); } HeaderView.propTypes = { schedulerData: _propTypes["default"].object.isRequired, nonAgendaCellHeaderTemplateResolver: _propTypes["default"].func }; HeaderView.defaultProps = { nonAgendaCellHeaderTemplateResolver: null }; var _default = exports["default"] = HeaderView; //# sourceMappingURL=HeaderView.js.map