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
JavaScript
;
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