willba-component-library 0.2.53 → 0.2.54

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/lib/index.umd.js CHANGED
@@ -6312,6 +6312,34 @@
6312
6312
  return date.getTime() < dateToCompare.getTime();
6313
6313
  }
6314
6314
 
6315
+ /**
6316
+ * @name isEqual
6317
+ * @category Common Helpers
6318
+ * @summary Are the given dates equal?
6319
+ *
6320
+ * @description
6321
+ * Are the given dates equal?
6322
+ *
6323
+ * @param {Date|Number} dateLeft - the first date to compare
6324
+ * @param {Date|Number} dateRight - the second date to compare
6325
+ * @returns {Boolean} the dates are equal
6326
+ * @throws {TypeError} 2 arguments required
6327
+ *
6328
+ * @example
6329
+ * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?
6330
+ * const result = isEqual(
6331
+ * new Date(2014, 6, 2, 6, 30, 45, 0),
6332
+ * new Date(2014, 6, 2, 6, 30, 45, 500)
6333
+ * )
6334
+ * //=> false
6335
+ */
6336
+ function isEqual(dirtyLeftDate, dirtyRightDate) {
6337
+ requiredArgs(2, arguments);
6338
+ var dateLeft = toDate(dirtyLeftDate);
6339
+ var dateRight = toDate(dirtyRightDate);
6340
+ return dateLeft.getTime() === dateRight.getTime();
6341
+ }
6342
+
6315
6343
  /**
6316
6344
  * @name isSameMonth
6317
6345
  * @category Month Helpers
@@ -10827,7 +10855,7 @@
10827
10855
 
10828
10856
  var Calendar = React__default.forwardRef(function (_a, ref) {
10829
10857
  var _b;
10830
- var selectedPath = _a.selectedPath, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, language = _a.language, disableCalendarDates = _a.disableCalendarDates, requestDates = _a.requestDates, disabledDates = _a.disabledDates, setDisabledDates = _a.setDisabledDates, updateCalendarMonthNavigation = _a.updateCalendarMonthNavigation, setUpdateCalendarMonthNavigation = _a.setUpdateCalendarMonthNavigation, updateCalendarDefaultMoth = _a.updateCalendarDefaultMoth, loadingData = _a.loadingData, initialCalendarRange = _a.initialCalendarRange, showFeedback = _a.showFeedback, palette = _a.palette;
10858
+ var selectedPath = _a.selectedPath, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, language = _a.language, disableCalendarDates = _a.disableCalendarDates, requestDates = _a.requestDates, disabledDates = _a.disabledDates, setDisabledDates = _a.setDisabledDates, updateCalendarMonthNavigation = _a.updateCalendarMonthNavigation, setUpdateCalendarMonthNavigation = _a.setUpdateCalendarMonthNavigation, updateCalendarDefaultMoth = _a.updateCalendarDefaultMoth, loadingData = _a.loadingData, initialCalendarRange = _a.initialCalendarRange, showFeedback = _a.showFeedback, palette = _a.palette, setOverlappingDates = _a.setOverlappingDates;
10831
10859
  // Translations
10832
10860
  var t = useTranslation('common').t;
10833
10861
  var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
@@ -10968,6 +10996,7 @@
10968
10996
  setDisabledDates: setDisabledDates,
10969
10997
  calendarRange: calendarRange,
10970
10998
  overlappingDate: overlappingDate,
10999
+ setOverlappingDates: setOverlappingDates,
10971
11000
  });
10972
11001
  }, captionLayout: "dropdown-buttons", defaultMonth: (initialCalendarRange === null || initialCalendarRange === void 0 ? void 0 : initialCalendarRange.from) ||
10973
11002
  selectedStartDate ||
@@ -11032,8 +11061,8 @@
11032
11061
  });
11033
11062
  /////////
11034
11063
  var handleSelectedCheckIn = function (_a) {
11035
- var _b;
11036
- var range = _a.range, newDisableCalendarDates = _a.newDisableCalendarDates, setCalendarRange = _a.setCalendarRange, setDisabledDates = _a.setDisabledDates, calendarRange = _a.calendarRange, overlappingDate = _a.overlappingDate;
11064
+ var _b, _c, _d;
11065
+ var range = _a.range, newDisableCalendarDates = _a.newDisableCalendarDates, setCalendarRange = _a.setCalendarRange, setDisabledDates = _a.setDisabledDates, calendarRange = _a.calendarRange, overlappingDate = _a.overlappingDate, setOverlappingDates = _a.setOverlappingDates;
11037
11066
  // Calendar dates select logic
11038
11067
  var dateFormat = 'dd-MM-yyyy';
11039
11068
  var rangeFrom = (range === null || range === void 0 ? void 0 : range.from) ? format(range.from, dateFormat) : null;
@@ -11050,6 +11079,25 @@
11050
11079
  format((range === null || range === void 0 ? void 0 : range.from) || 1, dateFormat);
11051
11080
  })
11052
11081
  : null;
11082
+ // Case: Set the calendar range only if it overlaps with the previously selected dates.
11083
+ // The selection must remain continuous, meaning no gaps between days are allowed.
11084
+ // Whether selecting forwards or backwards from the initially chosen dates,
11085
+ // the new range must be directly adjacent to or overlap with the current selection.
11086
+ var selectedDates = (newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.selectedDates) || null;
11087
+ var rowRangeFrom = range === null || range === void 0 ? void 0 : range.from;
11088
+ var rowRangeTo = range === null || range === void 0 ? void 0 : range.to;
11089
+ var selectedDatesFrom = ((_c = newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.selectedDates) === null || _c === void 0 ? void 0 : _c.from) || null;
11090
+ var selectedDatesTo = ((_d = newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.selectedDates) === null || _d === void 0 ? void 0 : _d.to) || null;
11091
+ // Checking if rowRangeFrom is equal to or before selectedDatesTo
11092
+ var startIsEqualOrBeforeSelectedEnd = rowRangeFrom && selectedDatesFrom && selectedDatesTo
11093
+ ? isBefore(startOfDay(rowRangeFrom), startOfDay(selectedDatesTo)) ||
11094
+ isEqual(startOfDay(rowRangeFrom), startOfDay(selectedDatesTo))
11095
+ : null;
11096
+ // Checking if rowRangeTo is equal to or after selectedDatesFrom
11097
+ var endIsEqualOrAfterSelectedStart = rowRangeTo && selectedDatesFrom && selectedDatesTo
11098
+ ? isAfter(startOfDay(rowRangeTo), startOfDay(selectedDatesFrom)) ||
11099
+ isEqual(startOfDay(rowRangeTo), startOfDay(selectedDatesFrom))
11100
+ : null;
11053
11101
  if (rangeFrom && checkOutRange && setDisabledDates) {
11054
11102
  var checkIn = addDays(checkOutRange.checkIn, 1);
11055
11103
  var firstCheckOut = addDays(checkOutRange.firstCheckOut, -1);
@@ -11063,7 +11111,13 @@
11063
11111
  { after: checkOutRange === null || checkOutRange === void 0 ? void 0 : checkOutRange.lastCheckOut },
11064
11112
  ], false));
11065
11113
  }
11066
- if ((rangeTo && rangeFrom && rangeFrom === rangeTo) ||
11114
+ setOverlappingDates(false);
11115
+ if ((selectedDates && !startIsEqualOrBeforeSelectedEnd) ||
11116
+ (selectedDates && (range === null || range === void 0 ? void 0 : range.to) && !endIsEqualOrAfterSelectedStart)) {
11117
+ setCalendarRange(undefined);
11118
+ setOverlappingDates(true);
11119
+ }
11120
+ else if ((rangeTo && rangeFrom && rangeFrom === rangeTo) ||
11067
11121
  (!rangeTo && !rangeFrom) ||
11068
11122
  overlappingDateFrom) {
11069
11123
  setCalendarRange(undefined);
@@ -11256,7 +11310,7 @@
11256
11310
  finally { if (e_2) throw e_2.error; }
11257
11311
  }
11258
11312
  handleSelectedFilter(false);
11259
- if (onSubmit) {
11313
+ if (onSubmit && selectedPath === Pages.ROOMS) {
11260
11314
  onSubmit(newParams);
11261
11315
  }
11262
11316
  else {
@@ -11497,6 +11551,7 @@
11497
11551
  var _d = __read(React__default.useState([]), 2), disabledDates = _d[0], setDisabledDates = _d[1];
11498
11552
  var _e = __read(React__default.useState(false), 2), updateCalendarMonthNavigation = _e[0], setUpdateCalendarMonthNavigation = _e[1];
11499
11553
  var _f = __read(React__default.useState(0), 2), updateCalendarDefaultMoth = _f[0], setUpdateCalendarDefaultMoth = _f[1];
11554
+ var _g = __read(React__default.useState(false), 2), overlappingDates = _g[0], setOverlappingDates = _g[1];
11500
11555
  React__default.useEffect(function () {
11501
11556
  if (typeof window === 'undefined')
11502
11557
  return;
@@ -11539,10 +11594,12 @@
11539
11594
  updateCalendarMonthNavigation: updateCalendarMonthNavigation,
11540
11595
  updateCalendarDefaultMoth: updateCalendarDefaultMoth,
11541
11596
  initialCalendarRange: initialCalendarRange,
11597
+ overlappingDates: overlappingDates,
11598
+ setOverlappingDates: setOverlappingDates,
11542
11599
  };
11543
11600
  };
11544
11601
 
11545
- var css_248z = ".will-root .will-calendar-wrapper {\n box-shadow: var(--will-box-shadow-dark);\n border-radius: 20px;\n background-color: var(--will-white);\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-header,\n.will-root .will-calendar-wrapper .will-calendar-main,\n.will-root .will-calendar-wrapper .will-calendar-footer {\n padding: 20px;\n}\n\n/* Header */\n\n.will-root .will-calendar-wrapper .will-calendar-header {\n display: flex;\n justify-content: space-between;\n border-bottom: 1px solid var(--will-grey);\n align-items: center;\n}\n\n/* Footer */\n\n.will-root .will-calendar-wrapper .will-calendar-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-top: 1px solid var(--will-grey);\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates > div {\n margin-bottom: 5px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates-separator {\n margin: 0 15px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates .will-calendar-footer-booked {\n display: flex;\n min-height: 20.5px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n\n\n@media (max-width: 960px) {\n .will-root .will-calendar-wrapper {\n width: -webkit-fill-available;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-header,\n .will-root .will-calendar-wrapper .will-calendar-main,\n .will-root .will-calendar-wrapper .will-calendar-footer {\n padding: 20px 10px;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer {\n flex-direction: column;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-dates {\n margin-bottom: 12px;\n text-align: center;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-dates .will-calendar-footer-booked {\n justify-content: center;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions {\n flex-direction: column;\n width: 100%;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions button{\n width: 100%;\n }\n }\n\n/**/\n\n.will-root .will-calendar-wrapper .will-calendar-header .will-filter-bar-close-button {\n position: initial;\n}";
11602
+ var css_248z = ".will-root .will-calendar-wrapper {\n box-shadow: var(--will-box-shadow-dark);\n border-radius: 20px;\n background-color: var(--will-white);\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-header,\n.will-root .will-calendar-wrapper .will-calendar-main,\n.will-root .will-calendar-wrapper .will-calendar-footer {\n padding: 20px;\n}\n\n/* Header */\n\n.will-root .will-calendar-wrapper .will-calendar-header {\n border-bottom: 1px solid var(--will-grey);\n}\n\n.will-root .will-calendar-wrapper .will-calendar-header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n/* Footer */\n\n.will-root .will-calendar-wrapper .will-calendar-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-top: 1px solid var(--will-grey);\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates > div {\n margin-bottom: 5px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates-separator {\n margin: 0 15px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates .will-calendar-footer-booked {\n display: flex;\n min-height: 20.5px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n\n\n@media (max-width: 960px) {\n .will-root .will-calendar-wrapper {\n width: -webkit-fill-available;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-header,\n .will-root .will-calendar-wrapper .will-calendar-main,\n .will-root .will-calendar-wrapper .will-calendar-footer {\n padding: 20px 10px;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer {\n flex-direction: column;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-dates {\n margin-bottom: 12px;\n text-align: center;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-dates .will-calendar-footer-booked {\n justify-content: center;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions {\n flex-direction: column;\n width: 100%;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions button{\n width: 100%;\n }\n }\n\n/**/\n\n.will-root .will-calendar-wrapper .will-calendar-header .will-filter-bar-close-button {\n position: initial;\n}";
11546
11603
  styleInject(css_248z);
11547
11604
 
11548
11605
  function FilterCalendar(_a) {
@@ -11556,7 +11613,7 @@
11556
11613
  setToggleCalendar: setToggleCalendar,
11557
11614
  noActiveSelection: noActiveSelection,
11558
11615
  toggleCalendar: toggleCalendar,
11559
- }), handleSubmit = _b.handleSubmit, setCalendarRange = _b.setCalendarRange, handleClearDates = _b.handleClearDates, calendarRange = _b.calendarRange, disabledDates = _b.disabledDates, setDisabledDates = _b.setDisabledDates, updateCalendarMonthNavigation = _b.updateCalendarMonthNavigation, updateCalendarDefaultMoth = _b.updateCalendarDefaultMoth, setUpdateCalendarMonthNavigation = _b.setUpdateCalendarMonthNavigation, initialCalendarRange = _b.initialCalendarRange;
11616
+ }), handleSubmit = _b.handleSubmit, setCalendarRange = _b.setCalendarRange, handleClearDates = _b.handleClearDates, calendarRange = _b.calendarRange, disabledDates = _b.disabledDates, setDisabledDates = _b.setDisabledDates, updateCalendarMonthNavigation = _b.updateCalendarMonthNavigation, updateCalendarDefaultMoth = _b.updateCalendarDefaultMoth, setUpdateCalendarMonthNavigation = _b.setUpdateCalendarMonthNavigation, initialCalendarRange = _b.initialCalendarRange, overlappingDates = _b.overlappingDates, setOverlappingDates = _b.setOverlappingDates;
11560
11617
  // Display component after fully loaded
11561
11618
  useAwaitRender();
11562
11619
  // Handle close filter section
@@ -11568,10 +11625,12 @@
11568
11625
  });
11569
11626
  return (React__default.createElement("div", { className: "will-root", style: themePalette }, toggleCalendar && (React__default.createElement("div", { className: "will-calendar-wrapper", ref: filtersRef },
11570
11627
  React__default.createElement("div", { className: "will-calendar-header" },
11571
- React__default.createElement("h2", null, t('filterBar:calendar.title')),
11572
- React__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
11628
+ React__default.createElement("div", { className: "will-calendar-header-row" },
11629
+ React__default.createElement("h2", null, t('filterBar:calendar.title')),
11630
+ React__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
11631
+ overlappingDates && React__default.createElement("div", null, "Chose other dates")),
11573
11632
  React__default.createElement("div", { className: "will-calendar-main" },
11574
- React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, setDisabledDates: setDisabledDates, updateCalendarMonthNavigation: updateCalendarMonthNavigation, setUpdateCalendarMonthNavigation: setUpdateCalendarMonthNavigation, updateCalendarDefaultMoth: updateCalendarDefaultMoth, loadingData: loadingData, initialCalendarRange: initialCalendarRange, showFeedback: showFeedback, noActiveSelection: noActiveSelection, palette: palette })),
11633
+ React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, setDisabledDates: setDisabledDates, updateCalendarMonthNavigation: updateCalendarMonthNavigation, setUpdateCalendarMonthNavigation: setUpdateCalendarMonthNavigation, updateCalendarDefaultMoth: updateCalendarDefaultMoth, loadingData: loadingData, initialCalendarRange: initialCalendarRange, showFeedback: showFeedback, noActiveSelection: noActiveSelection, palette: palette, setOverlappingDates: setOverlappingDates })),
11575
11634
  React__default.createElement("div", { className: "will-calendar-footer" },
11576
11635
  React__default.createElement("div", { className: "will-calendar-footer-dates" },
11577
11636
  React__default.createElement("div", null,