@farango/calendar_library
Version:
The **Event Calendar** is a simple and responsive React component that displays a **monthly calendar** with support for events. This component is built with React and SCSS and can be easily integrated into your React applications.
169 lines (164 loc) • 9.58 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = EventCalendar;
var _react = _interopRequireWildcard(require("react"));
var _dayjs = _interopRequireDefault(require("dayjs"));
var _CalendarGrid = require("./CalendarGrid");
require("./CalendarGrid.scss");
var _MonthlyCellRender = require("./cellRender/MonthlyCellRender");
var _WeeklyCellRender = require("./cellRender/WeeklyCellRender");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
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 && {}.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; }
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); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var defaultStyles = {
colorActualDay: '#fff',
colorFontTitle: '#000',
colorFontButtons: '#000',
colorFontNameDays: '#000',
colorFontDays: '#000',
sizeFontAppoinment: '0.85rem',
sizeFontButtons: '1rem',
sizeFontNameDays: '0.85rem',
sizeFontDays: '0.9rem',
bgHeader: '#f9fafb',
bgDaysNames: '#f0f0f0',
bgCells: '#fff',
bgActualDay: '#000',
eventTitleSpacing: '0.1rem',
eventTimeColor: '#686767',
eventTitleColor: '#000'
};
function EventCalendar(_ref) {
var _ref$eventsData = _ref.eventsData,
eventsData = _ref$eventsData === void 0 ? [] : _ref$eventsData,
_ref$styles = _ref.styles,
styles = _ref$styles === void 0 ? defaultStyles : _ref$styles,
_ref$title = _ref.title,
title = _ref$title === void 0 ? 'Event Calendar' : _ref$title,
_ref$titleButton = _ref.titleButton,
titleButton = _ref$titleButton === void 0 ? 'Add Event' : _ref$titleButton,
_ref$onSelectedEvent = _ref.onSelectedEvent,
onSelectedEvent = _ref$onSelectedEvent === void 0 ? function () {} : _ref$onSelectedEvent,
_ref$addEvent = _ref.addEvent,
addEvent = _ref$addEvent === void 0 ? function () {} : _ref$addEvent,
_ref$visibilityOption = _ref.visibilityOptions,
visibilityOptions = _ref$visibilityOption === void 0 ? {} : _ref$visibilityOption,
_ref$onDailyEvent = _ref.onDailyEvent,
onDailyEvent = _ref$onDailyEvent === void 0 ? function () {} : _ref$onDailyEvent;
// Destructure and provide default values from styles
var _styles$colorActualDa = styles.colorActualDay,
colorActualDay = _styles$colorActualDa === void 0 ? '' : _styles$colorActualDa,
_styles$colorFontTitl = styles.colorFontTitle,
colorFontTitle = _styles$colorFontTitl === void 0 ? '' : _styles$colorFontTitl,
_styles$colorFontButt = styles.colorFontButtons,
colorFontButtons = _styles$colorFontButt === void 0 ? '' : _styles$colorFontButt,
_styles$colorFontName = styles.colorFontNameDays,
colorFontNameDays = _styles$colorFontName === void 0 ? '' : _styles$colorFontName,
_styles$colorFontDays = styles.colorFontDays,
colorFontDays = _styles$colorFontDays === void 0 ? '' : _styles$colorFontDays,
_styles$sizeFontAppoi = styles.sizeFontAppointment,
sizeFontAppointment = _styles$sizeFontAppoi === void 0 ? '' : _styles$sizeFontAppoi,
_styles$sizeFontButto = styles.sizeFontButtons,
sizeFontButtons = _styles$sizeFontButto === void 0 ? '' : _styles$sizeFontButto,
_styles$sizeFontNameD = styles.sizeFontNameDays,
sizeFontNameDays = _styles$sizeFontNameD === void 0 ? '' : _styles$sizeFontNameD,
_styles$sizeFontDays = styles.sizeFontDays,
sizeFontDays = _styles$sizeFontDays === void 0 ? '' : _styles$sizeFontDays,
_styles$bgHeader = styles.bgHeader,
bgHeader = _styles$bgHeader === void 0 ? '' : _styles$bgHeader,
_styles$bgDaysNames = styles.bgDaysNames,
bgDaysNames = _styles$bgDaysNames === void 0 ? '' : _styles$bgDaysNames,
_styles$bgCells = styles.bgCells,
bgCells = _styles$bgCells === void 0 ? '' : _styles$bgCells,
_styles$bgActualDay = styles.bgActualDay,
bgActualDay = _styles$bgActualDay === void 0 ? '' : _styles$bgActualDay,
_styles$eventTitleSpa = styles.eventTitleSpacing,
eventTitleSpacing = _styles$eventTitleSpa === void 0 ? '' : _styles$eventTitleSpa,
_styles$eventTimeColo = styles.eventTimeColor,
eventTimeColor = _styles$eventTimeColo === void 0 ? '' : _styles$eventTimeColo,
_styles$eventTitleCol = styles.eventTitleColor,
eventTitleColor = _styles$eventTitleCol === void 0 ? '' : _styles$eventTitleCol,
_styles$eventNumberBa = styles.eventNumberBackground,
eventNumberBackground = _styles$eventNumberBa === void 0 ? '' : _styles$eventNumberBa;
var defaultVisibilityOptions = {
todayButton: true,
dropdownFilter: true,
addEventButton: true,
header: true,
daysNames: true,
filters: {
yearly: true,
monthly: true,
weekly: true,
daily: true
}
};
// Deep merge custom visibilityOptions with defaultVisibilityOptions
var mergedVisibilityOptions = _objectSpread(_objectSpread(_objectSpread({}, defaultVisibilityOptions), visibilityOptions), {}, {
// Overwrite top-level keys
filters: _objectSpread(_objectSpread({}, defaultVisibilityOptions.filters), visibilityOptions.filters)
});
// Create custom CSS variables for styling
var customStyles = _defineProperty(_defineProperty(_defineProperty({
'--current-day-bg': bgActualDay,
'--current-day-color': colorActualDay,
'--event-title-color': colorFontTitle,
'--event-title-font-size': sizeFontAppointment,
'--button-color': colorFontButtons,
'--button-font-size': sizeFontButtons,
'--name-days-font-color': colorFontNameDays,
'--name-days-font-size': sizeFontNameDays,
'--days-font-color': colorFontDays,
'--days-font-size': sizeFontDays,
'--calendar-header-bg': bgHeader,
'--days-names-bg': bgDaysNames,
'--calendar-cells-bg': bgCells,
'--event-title-spacing,': eventTitleSpacing
}, "--event-title-color", eventTitleColor), '--background-number-events', eventNumberBackground), '--event-time-color', eventTimeColor);
// Select event handler
var handleSelectEvent = function handleSelectEvent(day) {
var formattedDate = (0, _dayjs["default"])(day).format('YYYY-MM-DD');
var event = eventsData.find(function (event) {
return event.date === formattedDate;
}) || null;
onSelectedEvent(event);
};
// Renders each cell of the calendar
var montlyRenderCell = function montlyRenderCell(day) {
return /*#__PURE__*/_react["default"].createElement(_MonthlyCellRender.MonthlyCellRender, {
day: day,
eventsData: eventsData,
onSelect: handleSelectEvent
});
};
var weeklyRenderCell = function weeklyRenderCell(day, interval) {
return /*#__PURE__*/_react["default"].createElement(_WeeklyCellRender.WeeklyCellRender, {
day: day,
interval: interval,
eventsData: eventsData,
onSelect: handleSelectEvent,
className: "weekly"
});
};
return /*#__PURE__*/_react["default"].createElement("div", {
className: "p-6",
style: customStyles
}, /*#__PURE__*/_react["default"].createElement("h2", {
className: "text-2xl font-bold mb-4"
}, title), /*#__PURE__*/_react["default"].createElement(_CalendarGrid.CalendarGrid, {
montlyRenderCell: montlyRenderCell,
weeklyRenderCell: weeklyRenderCell,
titleButton: titleButton,
onAddEventClicked: addEvent,
visibilityOptions: mergedVisibilityOptions,
onDailyEvent: onDailyEvent
}));
}