@bigbinary/neeto-molecules 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,6 +16,7 @@ https://neeto-molecules.neeto.com/
16
16
  - [CopyToClipboardButton](./docs/components.md#copytoclipboardbutton)
17
17
  - [CustomDomainDashboard](./docs/components.md#customdomainDashboard)
18
18
  - [CustomDomain](./docs/components.md#customdomain)
19
+ - [CalendarView](./docs/components.md#calendarview)
19
20
  - [DateFormat/TimeFormat](./docs/components.md#dateformattimeformat)
20
21
  - [DateRangeFilter](./docs/components.md#daterangefilter)
21
22
  - [DynamicVariables](./docs/components.md#dynamicvariables)
@@ -0,0 +1,610 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var dayGridPlugin = require('@fullcalendar/daygrid');
5
+ var interactionPlugin = require('@fullcalendar/interaction');
6
+ var FullCalendar = require('@fullcalendar/react');
7
+ var timeGridPlugin = require('@fullcalendar/timegrid');
8
+ var dayjs = require('dayjs');
9
+ var pure = require('@bigbinary/neeto-commons-frontend/pure');
10
+ var neetoui = require('@bigbinary/neetoui');
11
+ var reactI18next = require('react-i18next');
12
+ var ramda = require('ramda');
13
+ var neetoIcons = require('@bigbinary/neeto-icons');
14
+ var ManageColumns = require('@bigbinary/neeto-molecules/Columns');
15
+ var neetoFiltersFrontend = require('@bigbinary/neeto-filters-frontend');
16
+ var i18next = require('i18next');
17
+
18
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
+
20
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
+ var dayGridPlugin__default = /*#__PURE__*/_interopDefaultLegacy(dayGridPlugin);
22
+ var interactionPlugin__default = /*#__PURE__*/_interopDefaultLegacy(interactionPlugin);
23
+ var FullCalendar__default = /*#__PURE__*/_interopDefaultLegacy(FullCalendar);
24
+ var timeGridPlugin__default = /*#__PURE__*/_interopDefaultLegacy(timeGridPlugin);
25
+ var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
26
+ var ManageColumns__default = /*#__PURE__*/_interopDefaultLegacy(ManageColumns);
27
+
28
+ function _extends() {
29
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
30
+ for (var i = 1; i < arguments.length; i++) {
31
+ var source = arguments[i];
32
+ for (var key in source) {
33
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
34
+ target[key] = source[key];
35
+ }
36
+ }
37
+ }
38
+ return target;
39
+ };
40
+ return _extends.apply(this, arguments);
41
+ }
42
+
43
+ function _typeof(obj) {
44
+ "@babel/helpers - typeof";
45
+
46
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
47
+ return typeof obj;
48
+ } : function (obj) {
49
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
50
+ }, _typeof(obj);
51
+ }
52
+
53
+ function _toPrimitive(input, hint) {
54
+ if (_typeof(input) !== "object" || input === null) return input;
55
+ var prim = input[Symbol.toPrimitive];
56
+ if (prim !== undefined) {
57
+ var res = prim.call(input, hint || "default");
58
+ if (_typeof(res) !== "object") return res;
59
+ throw new TypeError("@@toPrimitive must return a primitive value.");
60
+ }
61
+ return (hint === "string" ? String : Number)(input);
62
+ }
63
+
64
+ function _toPropertyKey(arg) {
65
+ var key = _toPrimitive(arg, "string");
66
+ return _typeof(key) === "symbol" ? key : String(key);
67
+ }
68
+
69
+ function _defineProperty(obj, key, value) {
70
+ key = _toPropertyKey(key);
71
+ if (key in obj) {
72
+ Object.defineProperty(obj, key, {
73
+ value: value,
74
+ enumerable: true,
75
+ configurable: true,
76
+ writable: true
77
+ });
78
+ } else {
79
+ obj[key] = value;
80
+ }
81
+ return obj;
82
+ }
83
+
84
+ function _arrayWithHoles(arr) {
85
+ if (Array.isArray(arr)) return arr;
86
+ }
87
+
88
+ function _iterableToArrayLimit(arr, i) {
89
+ var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
90
+ if (null != _i) {
91
+ var _s,
92
+ _e,
93
+ _x,
94
+ _r,
95
+ _arr = [],
96
+ _n = !0,
97
+ _d = !1;
98
+ try {
99
+ if (_x = (_i = _i.call(arr)).next, 0 === i) {
100
+ if (Object(_i) !== _i) return;
101
+ _n = !1;
102
+ } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
103
+ } catch (err) {
104
+ _d = !0, _e = err;
105
+ } finally {
106
+ try {
107
+ if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return;
108
+ } finally {
109
+ if (_d) throw _e;
110
+ }
111
+ }
112
+ return _arr;
113
+ }
114
+ }
115
+
116
+ function _arrayLikeToArray(arr, len) {
117
+ if (len == null || len > arr.length) len = arr.length;
118
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
119
+ return arr2;
120
+ }
121
+
122
+ function _unsupportedIterableToArray(o, minLen) {
123
+ if (!o) return;
124
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
125
+ var n = Object.prototype.toString.call(o).slice(8, -1);
126
+ if (n === "Object" && o.constructor) n = o.constructor.name;
127
+ if (n === "Map" || n === "Set") return Array.from(o);
128
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
129
+ }
130
+
131
+ function _nonIterableRest() {
132
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
133
+ }
134
+
135
+ function _slicedToArray(arr, i) {
136
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
137
+ }
138
+
139
+ function _objectWithoutPropertiesLoose(source, excluded) {
140
+ if (source == null) return {};
141
+ var target = {};
142
+ var sourceKeys = Object.keys(source);
143
+ var key, i;
144
+ for (i = 0; i < sourceKeys.length; i++) {
145
+ key = sourceKeys[i];
146
+ if (excluded.indexOf(key) >= 0) continue;
147
+ target[key] = source[key];
148
+ }
149
+ return target;
150
+ }
151
+
152
+ function _objectWithoutProperties(source, excluded) {
153
+ if (source == null) return {};
154
+ var target = _objectWithoutPropertiesLoose(source, excluded);
155
+ var key, i;
156
+ if (Object.getOwnPropertySymbols) {
157
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
158
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
159
+ key = sourceSymbolKeys[i];
160
+ if (excluded.indexOf(key) >= 0) continue;
161
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
162
+ target[key] = source[key];
163
+ }
164
+ }
165
+ return target;
166
+ }
167
+
168
+ var classnames$1 = {exports: {}};
169
+
170
+ /*!
171
+ Copyright (c) 2018 Jed Watson.
172
+ Licensed under the MIT License (MIT), see
173
+ http://jedwatson.github.io/classnames
174
+ */
175
+
176
+ (function (module) {
177
+ /* global define */
178
+
179
+ (function () {
180
+
181
+ var hasOwn = {}.hasOwnProperty;
182
+
183
+ function classNames() {
184
+ var classes = [];
185
+
186
+ for (var i = 0; i < arguments.length; i++) {
187
+ var arg = arguments[i];
188
+ if (!arg) continue;
189
+
190
+ var argType = typeof arg;
191
+
192
+ if (argType === 'string' || argType === 'number') {
193
+ classes.push(arg);
194
+ } else if (Array.isArray(arg)) {
195
+ if (arg.length) {
196
+ var inner = classNames.apply(null, arg);
197
+ if (inner) {
198
+ classes.push(inner);
199
+ }
200
+ }
201
+ } else if (argType === 'object') {
202
+ if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
203
+ classes.push(arg.toString());
204
+ continue;
205
+ }
206
+
207
+ for (var key in arg) {
208
+ if (hasOwn.call(arg, key) && arg[key]) {
209
+ classes.push(key);
210
+ }
211
+ }
212
+ }
213
+ }
214
+
215
+ return classes.join(' ');
216
+ }
217
+
218
+ if (module.exports) {
219
+ classNames.default = classNames;
220
+ module.exports = classNames;
221
+ } else {
222
+ window.classNames = classNames;
223
+ }
224
+ }());
225
+ } (classnames$1));
226
+
227
+ var classnames = classnames$1.exports;
228
+
229
+ var _excluded$3 = ["buttonProps"];
230
+ function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
231
+ function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
232
+ var Columns = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
233
+ var _ref$buttonProps = _ref.buttonProps,
234
+ buttonProps = _ref$buttonProps === void 0 ? {} : _ref$buttonProps,
235
+ props = _objectWithoutProperties(_ref, _excluded$3);
236
+ var _useTranslation = reactI18next.useTranslation(),
237
+ t = _useTranslation.t;
238
+ return /*#__PURE__*/React__default["default"].createElement("div", {
239
+ className: "neeto-molecules-subheader__columns"
240
+ }, /*#__PURE__*/React__default["default"].createElement(ManageColumns__default["default"], _extends({
241
+ buttonProps: _objectSpread$3({
242
+ icon: neetoIcons.Column,
243
+ label: null,
244
+ tooltipProps: {
245
+ content: t("neetoMolecules.columns.columns"),
246
+ position: "bottom"
247
+ },
248
+ "data-testid": "columns-button",
249
+ "data-cy": "columns-dropdown-button"
250
+ }, buttonProps)
251
+ }, _objectSpread$3(_objectSpread$3({}, props), {}, {
252
+ ref: ref
253
+ }))));
254
+ });
255
+ Columns.displayName = "Columns";
256
+
257
+ var DownloadButton = function DownloadButton(_ref) {
258
+ var count = _ref.count,
259
+ onClick = _ref.onClick,
260
+ _ref$dataCy = _ref["data-cy"],
261
+ dataCy = _ref$dataCy === void 0 ? "download-button" : _ref$dataCy;
262
+ var _useTranslation = reactI18next.useTranslation(),
263
+ t = _useTranslation.t;
264
+ return /*#__PURE__*/React__default["default"].createElement("div", {
265
+ className: "neeto-molecules-subheader__download"
266
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
267
+ "data-cy": dataCy,
268
+ "data-testid": "download-button",
269
+ icon: neetoIcons.Download,
270
+ style: "text",
271
+ tooltipProps: {
272
+ content: t("neetoMolecules.common.download"),
273
+ position: "bottom"
274
+ },
275
+ onClick: onClick
276
+ }), count && /*#__PURE__*/React__default["default"].createElement("span", {
277
+ className: "neeto-molecules-subheader__download-count"
278
+ }, count));
279
+ };
280
+
281
+ var _excluded$2 = ["buttonProps"];
282
+ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
283
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
284
+ var FilterButton = function FilterButton(_ref) {
285
+ var buttonProps = _ref.buttonProps,
286
+ props = _objectWithoutProperties(_ref, _excluded$2);
287
+ var _useTranslation = reactI18next.useTranslation(),
288
+ t = _useTranslation.t;
289
+ return /*#__PURE__*/React__default["default"].createElement("div", {
290
+ className: "neeto-molecules-subheader__filter"
291
+ }, /*#__PURE__*/React__default["default"].createElement(neetoFiltersFrontend.Filters, _extends({
292
+ buttonProps: _objectSpread$2({
293
+ "data-testid": "filter-button",
294
+ icon: neetoIcons.Filter,
295
+ style: "text",
296
+ tooltipProps: {
297
+ content: t("neetoMolecules.common.filter"),
298
+ position: "bottom"
299
+ },
300
+ label: null
301
+ }, buttonProps)
302
+ }, props)));
303
+ };
304
+
305
+ var RightBlock = function RightBlock(_ref) {
306
+ var downloadButtonProps = _ref.downloadButtonProps,
307
+ columnsButtonProps = _ref.columnsButtonProps,
308
+ filterProps = _ref.filterProps,
309
+ dataProps = _ref.dataProps;
310
+ var showIcons = pure.isNotPresent(dataProps === null || dataProps === void 0 ? void 0 : dataProps.totalCount) ? true : (dataProps === null || dataProps === void 0 ? void 0 : dataProps.totalCount) > 0;
311
+ return /*#__PURE__*/React__default["default"].createElement("div", {
312
+ "data-testid": "subheader-rightblock-buttons-container",
313
+ className: classnames("neeto-molecules-subheader__right-actions", {
314
+ hidden: ramda.not(showIcons)
315
+ })
316
+ }, downloadButtonProps && /*#__PURE__*/React__default["default"].createElement(DownloadButton, downloadButtonProps), columnsButtonProps && /*#__PURE__*/React__default["default"].createElement(Columns, columnsButtonProps), filterProps && /*#__PURE__*/React__default["default"].createElement(FilterButton, filterProps));
317
+ };
318
+
319
+ var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
320
+
321
+ var css = ":root{--neeto-molecules-sub-header-height:37px;--neeto-molecules-sub-header-bottom-margin:20px}.neeto-molecules-subheader{align-items:center;background-color:rgb(var(--neeto-ui-white));display:flex;flex-direction:row;justify-content:space-between;margin-bottom:20px;margin-bottom:var(--neeto-molecules-sub-header-bottom-margin);min-height:37px;min-height:var(--neeto-molecules-sub-header-height);width:100%}.neeto-molecules-subheader .neeto-molecules-subheader__left-wrapper{display:flex;flex-grow:1}.neeto-molecules-subheader .neeto-molecules-subheader__left-wrapper .neeto-molecules-subheader__left{align-items:center;display:flex;flex-direction:row;justify-content:flex-start}.neeto-molecules-subheader .neeto-molecules-subheader__left-wrapper .neeto-molecules-subheader__left .neeto-molecules-input__prefix{color:rgb(var(--neeto-ui-gray-400))}.neeto-molecules-subheader .neeto-molecules-subheader__right{align-items:center;display:flex;flex-direction:row;gap:12px;justify-content:flex-end}.neeto-molecules-subheader .neeto-molecules-subheader__right-actions{align-items:center;display:flex;flex-direction:row;gap:8px;justify-content:flex-end}.neeto-molecules-subheader .neeto-molecules-subheader__right-actions>:not([hidden])~:not([hidden]){border-left:thin solid rgb(var(--neeto-ui-gray-300));padding-left:8px}.neeto-molecules-subheader__download{position:relative}.neeto-molecules-subheader__download-count{align-items:center;background-color:rgb(var(--neeto-ui-primary-500));border-radius:var(--neeto-ui-rounded-full);color:rgb(var(--neeto-ui-white));display:inline-flex;font-size:10px;justify-content:center;min-height:16px;min-width:16px;position:absolute;right:-2px;text-align:center;top:-2px;z-index:1}";
322
+ n(css,{});
323
+
324
+ var SubHeader = function SubHeader(_ref) {
325
+ var _ref$className = _ref.className,
326
+ className = _ref$className === void 0 ? "" : _ref$className,
327
+ leftActionBlock = _ref.leftActionBlock,
328
+ rightActionBlock = _ref.rightActionBlock,
329
+ _ref$dataCy = _ref["data-cy"],
330
+ dataCy = _ref$dataCy === void 0 ? "subheader" : _ref$dataCy;
331
+ return /*#__PURE__*/React__default["default"].createElement("div", {
332
+ className: classnames(["neeto-molecules-subheader", className]),
333
+ "data-cy": dataCy,
334
+ "data-testid": "subheader"
335
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
336
+ className: "neeto-molecules-subheader__left-wrapper",
337
+ "data-cy": "subheader-left-wrapper"
338
+ }, leftActionBlock && /*#__PURE__*/React__default["default"].createElement("div", {
339
+ className: "neeto-molecules-subheader__left",
340
+ "data-cy": "subheader-left"
341
+ }, leftActionBlock)), rightActionBlock && /*#__PURE__*/React__default["default"].createElement("div", {
342
+ className: "neeto-molecules-subheader__right",
343
+ "data-cy": "subheader-right"
344
+ }, rightActionBlock));
345
+ };
346
+ SubHeader.RightBlock = RightBlock;
347
+
348
+ var _VIEW_OPTIONS;
349
+ var WEEKLY_VIEW = i18next.t("neetoMolecules.calendarView.weekly");
350
+ var MONTHLY_VIEW = i18next.t("neetoMolecules.calendarView.monthly");
351
+ var DAILY_VIEW = i18next.t("neetoMolecules.calendarView.daily");
352
+ var VIEW_OPTIONS = (_VIEW_OPTIONS = {}, _defineProperty(_VIEW_OPTIONS, DAILY_VIEW, {
353
+ label: DAILY_VIEW,
354
+ fullCalendarView: "timeGridDay",
355
+ picker: "day"
356
+ }), _defineProperty(_VIEW_OPTIONS, WEEKLY_VIEW, {
357
+ label: WEEKLY_VIEW,
358
+ fullCalendarView: "timeGridWeek",
359
+ picker: "week"
360
+ }), _defineProperty(_VIEW_OPTIONS, MONTHLY_VIEW, {
361
+ label: MONTHLY_VIEW,
362
+ fullCalendarView: "dayGridMonth",
363
+ picker: "month"
364
+ }), _VIEW_OPTIONS);
365
+
366
+ var getWeekString = function getWeekString(_ref) {
367
+ var date = _ref.date,
368
+ _ref$isStartOfWeek = _ref.isStartOfWeek,
369
+ isStartOfWeek = _ref$isStartOfWeek === void 0 ? true : _ref$isStartOfWeek,
370
+ _ref$showMonth = _ref.showMonth,
371
+ showMonth = _ref$showMonth === void 0 ? false : _ref$showMonth,
372
+ _ref$showYear = _ref.showYear,
373
+ showYear = _ref$showYear === void 0 ? false : _ref$showYear;
374
+ return "".concat(showMonth || isStartOfWeek ? date.format("MMM") : "", " ").concat(date.date(), " ").concat(showYear || !isStartOfWeek ? date.format("YYYY") : "");
375
+ };
376
+ var getStartOfWeek = function getStartOfWeek(date) {
377
+ return dayjs__default["default"](date).startOf("week");
378
+ };
379
+ var getEndOfWeek = function getEndOfWeek(date) {
380
+ return dayjs__default["default"](date).endOf("week");
381
+ };
382
+ var getFormattedMonthStr = function getFormattedMonthStr(date) {
383
+ return date.format("MMM YYYY");
384
+ };
385
+ var getFormattedWeekRangeStr = function getFormattedWeekRangeStr(date) {
386
+ var startOfWeek = getStartOfWeek(date);
387
+ var endOfWeek = getEndOfWeek(date);
388
+ var shouldShowMonthsSeparately = startOfWeek.month() !== endOfWeek.month();
389
+ var shouldShowYearsSeparately = startOfWeek.year() !== endOfWeek.year();
390
+ var startOfWeekStr = getWeekString({
391
+ date: startOfWeek,
392
+ showMonth: shouldShowMonthsSeparately,
393
+ showYear: shouldShowYearsSeparately
394
+ });
395
+ var endOfWeekStr = getWeekString({
396
+ date: endOfWeek,
397
+ isStartOfWeek: false,
398
+ showMonth: shouldShowMonthsSeparately,
399
+ showYear: shouldShowYearsSeparately
400
+ });
401
+ return "".concat(startOfWeekStr, " - ").concat(endOfWeekStr);
402
+ };
403
+ var getFormattedDayStr = function getFormattedDayStr(date) {
404
+ return date.format("DD MMM YYYY");
405
+ };
406
+ var getFormattedRangeStr = function getFormattedRangeStr(date, picker) {
407
+ var formatFunctions = {
408
+ month: getFormattedMonthStr,
409
+ week: getFormattedWeekRangeStr,
410
+ day: getFormattedDayStr
411
+ };
412
+ var selectedFormatter = formatFunctions[picker];
413
+ return selectedFormatter(date);
414
+ };
415
+
416
+ var _excluded$1 = ["selectedDate", "setSelectedDate", "picker"];
417
+ function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
418
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
419
+ var CustomDatePicker = function CustomDatePicker(_ref) {
420
+ var selectedDate = _ref.selectedDate,
421
+ setSelectedDate = _ref.setSelectedDate,
422
+ picker = _ref.picker,
423
+ otherProps = _objectWithoutProperties(_ref, _excluded$1);
424
+ var _useState = React.useState(false),
425
+ _useState2 = _slicedToArray(_useState, 2),
426
+ isOpen = _useState2[0],
427
+ setIsOpen = _useState2[1];
428
+ var datePickerRef = React.useRef(null);
429
+ var buttonRef = React.useRef(null);
430
+ var selectedRangeStr = getFormattedRangeStr(selectedDate, picker);
431
+ var onPrevious = function onPrevious() {
432
+ return setSelectedDate(function (selectedDate) {
433
+ return selectedDate.subtract(1, picker);
434
+ });
435
+ };
436
+ var onNext = function onNext() {
437
+ return setSelectedDate(function (selectedDate) {
438
+ return selectedDate.add(1, picker);
439
+ });
440
+ };
441
+ var onToday = function onToday() {
442
+ return setSelectedDate(dayjs__default["default"]());
443
+ };
444
+ var handleButtonMouseDown = function handleButtonMouseDown(e) {
445
+ if (buttonRef.current && buttonRef.current.contains(e.target)) {
446
+ e.stopPropagation();
447
+ if (isOpen) datePickerRef.current.focus();
448
+ }
449
+ };
450
+ return /*#__PURE__*/React__default["default"].createElement("div", {
451
+ className: "flex items-center justify-start space-x-4"
452
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
453
+ label: "Today",
454
+ style: "secondary",
455
+ onClick: onToday
456
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
457
+ className: "flex"
458
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
459
+ className: "mr-1",
460
+ icon: neetoIcons.Left,
461
+ style: "text",
462
+ onClick: onPrevious
463
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
464
+ icon: neetoIcons.Down,
465
+ ref: buttonRef,
466
+ style: "text",
467
+ onClick: function onClick() {
468
+ return setIsOpen(function (isOpen) {
469
+ return !isOpen;
470
+ });
471
+ },
472
+ onMouseDown: handleButtonMouseDown
473
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
474
+ style: "h5"
475
+ }, selectedRangeStr)), /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends({
476
+ className: "invisible w-0 px-0",
477
+ defaultValue: selectedDate,
478
+ open: isOpen,
479
+ placement: "topRight",
480
+ ref: datePickerRef,
481
+ value: selectedDate,
482
+ onChange: setSelectedDate,
483
+ onOpenChange: setIsOpen
484
+ }, _objectSpread$1({
485
+ picker: picker
486
+ }, otherProps))), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
487
+ className: "ml-1",
488
+ icon: neetoIcons.Right,
489
+ style: "text",
490
+ onClick: onNext
491
+ })));
492
+ };
493
+
494
+ var Header = function Header(_ref) {
495
+ var calendarRef = _ref.calendarRef,
496
+ selectedView = _ref.selectedView,
497
+ setSelectedView = _ref.setSelectedView,
498
+ setSelectedDate = _ref.setSelectedDate,
499
+ selectedDate = _ref.selectedDate,
500
+ calenderViewOptions = _ref.calenderViewOptions;
501
+ var Menu = neetoui.Dropdown.Menu,
502
+ MenuItem = neetoui.Dropdown.MenuItem;
503
+ var handleViewSelection = function handleViewSelection(option) {
504
+ setSelectedView(option);
505
+ calendarRef.current.calendar.changeView(option.fullCalendarView);
506
+ };
507
+ var navigateToSelectedDate = function navigateToSelectedDate() {
508
+ var _calendarRef$current, _calendarRef$current$;
509
+ return calendarRef === null || calendarRef === void 0 ? void 0 : (_calendarRef$current = calendarRef.current) === null || _calendarRef$current === void 0 ? void 0 : (_calendarRef$current$ = _calendarRef$current.calendar) === null || _calendarRef$current$ === void 0 ? void 0 : _calendarRef$current$.gotoDate(selectedDate.format("YYYY-MM-DD"));
510
+ };
511
+ React.useEffect(function () {
512
+ setTimeout(navigateToSelectedDate);
513
+ }, [selectedDate]);
514
+ return /*#__PURE__*/React__default["default"].createElement("div", {
515
+ className: "flex space-x-4"
516
+ }, /*#__PURE__*/React__default["default"].createElement(CustomDatePicker, {
517
+ getPopupContainer: ramda.prop("parentNode"),
518
+ picker: selectedView.picker,
519
+ selectedDate: selectedDate,
520
+ setSelectedDate: setSelectedDate
521
+ }), Object.keys(calenderViewOptions).length === 1 ? /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
522
+ className: "pointer-events-none",
523
+ label: calenderViewOptions[Object.keys(calenderViewOptions)[0]].label,
524
+ style: "secondary"
525
+ }) : /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
526
+ buttonProps: {
527
+ "data-testid": "calendar-view-dropdown"
528
+ },
529
+ buttonStyle: "secondary",
530
+ label: pure.capitalize(selectedView.label)
531
+ }, /*#__PURE__*/React__default["default"].createElement(Menu, null, ramda.values(calenderViewOptions).map(function (option, idx) {
532
+ return /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
533
+ isActive: selectedView === option,
534
+ key: idx,
535
+ onClick: function onClick() {
536
+ return handleViewSelection(option);
537
+ }
538
+ }, pure.capitalize(option.label));
539
+ }))));
540
+ };
541
+
542
+ var _excluded = ["viewOptions", "events", "handleDateClick", "handleEventClick", "eventClassNames", "dayCellClassNames", "dayMaxEvents", "eventMaxStack"];
543
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
544
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
545
+ var CalendarView = function CalendarView(_ref) {
546
+ var _ref$viewOptions = _ref.viewOptions,
547
+ viewOptions = _ref$viewOptions === void 0 ? VIEW_OPTIONS : _ref$viewOptions,
548
+ _ref$events = _ref.events,
549
+ events = _ref$events === void 0 ? [] : _ref$events,
550
+ _ref$handleDateClick = _ref.handleDateClick,
551
+ handleDateClick = _ref$handleDateClick === void 0 ? pure.noop : _ref$handleDateClick,
552
+ _ref$handleEventClick = _ref.handleEventClick,
553
+ handleEventClick = _ref$handleEventClick === void 0 ? pure.noop : _ref$handleEventClick,
554
+ _ref$eventClassNames = _ref.eventClassNames,
555
+ eventClassNames = _ref$eventClassNames === void 0 ? "" : _ref$eventClassNames,
556
+ _ref$dayCellClassName = _ref.dayCellClassNames,
557
+ dayCellClassNames = _ref$dayCellClassName === void 0 ? "" : _ref$dayCellClassName,
558
+ dayMaxEvents = _ref.dayMaxEvents,
559
+ eventMaxStack = _ref.eventMaxStack,
560
+ otherProps = _objectWithoutProperties(_ref, _excluded);
561
+ var calenderViewOptions = viewOptions || VIEW_OPTIONS;
562
+ var _useState = React.useState(calenderViewOptions[Object.keys(calenderViewOptions)[0]]),
563
+ _useState2 = _slicedToArray(_useState, 2),
564
+ selectedView = _useState2[0],
565
+ setSelectedView = _useState2[1];
566
+ var _useState3 = React.useState(dayjs__default["default"]()),
567
+ _useState4 = _slicedToArray(_useState3, 2),
568
+ selectedDate = _useState4[0],
569
+ setSelectedDate = _useState4[1];
570
+ var _useTranslation = reactI18next.useTranslation(),
571
+ t = _useTranslation.t;
572
+ var calendarRef = React.useRef();
573
+ return /*#__PURE__*/React__default["default"].createElement("div", {
574
+ className: "flex-col",
575
+ "data-testid": "calendar-view"
576
+ }, /*#__PURE__*/React__default["default"].createElement(SubHeader, {
577
+ leftActionBlock: /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
578
+ style: "h2"
579
+ }, selectedDate.format("MMMM, YYYY")),
580
+ rightActionBlock: /*#__PURE__*/React__default["default"].createElement(Header, {
581
+ calendarRef: calendarRef,
582
+ calenderViewOptions: calenderViewOptions,
583
+ selectedDate: selectedDate,
584
+ selectedView: selectedView,
585
+ setSelectedDate: setSelectedDate,
586
+ setSelectedView: setSelectedView
587
+ })
588
+ }), /*#__PURE__*/React__default["default"].createElement(FullCalendar__default["default"], _extends({
589
+ expandRows: true,
590
+ allDayText: t("neetoMolecules.calendarView.allDay"),
591
+ dateClick: handleDateClick,
592
+ dayHeaderClassNames: "p-2",
593
+ displayEventTime: false,
594
+ eventClick: handleEventClick,
595
+ headerToolbar: false,
596
+ height: "auto",
597
+ initialView: selectedView.fullCalendarView,
598
+ plugins: [dayGridPlugin__default["default"], timeGridPlugin__default["default"], interactionPlugin__default["default"]],
599
+ ref: calendarRef
600
+ }, _objectSpread({
601
+ dayCellClassNames: dayCellClassNames,
602
+ dayMaxEvents: dayMaxEvents,
603
+ eventClassNames: eventClassNames,
604
+ eventMaxStack: eventMaxStack,
605
+ events: events
606
+ }, otherProps))));
607
+ };
608
+
609
+ module.exports = CalendarView;
610
+ //# sourceMappingURL=CalendarView.cjs.js.map