willba-component-library 0.2.52 → 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.
@@ -17,5 +17,7 @@ export declare const useFilterCalendar: ({ onSubmit, setToggleCalendar, noActive
17
17
  updateCalendarMonthNavigation: boolean;
18
18
  updateCalendarDefaultMoth: number;
19
19
  initialCalendarRange: DateRange | undefined;
20
+ overlappingDates: boolean;
21
+ setOverlappingDates: import("react").Dispatch<import("react").SetStateAction<boolean>>;
20
22
  };
21
23
  export {};
@@ -17,6 +17,10 @@ export type DisableCalendarDates = {
17
17
  page: string;
18
18
  offset: number;
19
19
  }[];
20
+ selectedDates?: {
21
+ to: Date;
22
+ from: Date;
23
+ };
20
24
  };
21
25
  export type CalendarTypes = {
22
26
  calendarRange?: DateRange | undefined;
@@ -36,4 +40,5 @@ export type CalendarTypes = {
36
40
  updateCalendarMonthNavigation?: boolean;
37
41
  setUpdateCalendarMonthNavigation?: (arg: (prev: boolean) => boolean) => void;
38
42
  updateCalendarDefaultMoth?: number;
43
+ setOverlappingDates: (arg: boolean) => void;
39
44
  };
@@ -0,0 +1 @@
1
+ export declare const handleOverlappingDates: () => void;
package/lib/index.d.ts CHANGED
@@ -50,6 +50,10 @@ type DisableCalendarDates = {
50
50
  page: string;
51
51
  offset: number;
52
52
  }[];
53
+ selectedDates?: {
54
+ to: Date;
55
+ from: Date;
56
+ };
53
57
  };
54
58
  type CalendarTypes = {
55
59
  calendarRange?: DateRange | undefined;
@@ -69,6 +73,7 @@ type CalendarTypes = {
69
73
  updateCalendarMonthNavigation?: boolean;
70
74
  setUpdateCalendarMonthNavigation?: (arg: (prev: boolean) => boolean) => void;
71
75
  updateCalendarDefaultMoth?: number;
76
+ setOverlappingDates: (arg: boolean) => void;
72
77
  };
73
78
 
74
79
  type FilterBarProps = {
package/lib/index.esm.js CHANGED
@@ -6290,6 +6290,34 @@ function isBefore(dirtyDate, dirtyDateToCompare) {
6290
6290
  return date.getTime() < dateToCompare.getTime();
6291
6291
  }
6292
6292
 
6293
+ /**
6294
+ * @name isEqual
6295
+ * @category Common Helpers
6296
+ * @summary Are the given dates equal?
6297
+ *
6298
+ * @description
6299
+ * Are the given dates equal?
6300
+ *
6301
+ * @param {Date|Number} dateLeft - the first date to compare
6302
+ * @param {Date|Number} dateRight - the second date to compare
6303
+ * @returns {Boolean} the dates are equal
6304
+ * @throws {TypeError} 2 arguments required
6305
+ *
6306
+ * @example
6307
+ * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?
6308
+ * const result = isEqual(
6309
+ * new Date(2014, 6, 2, 6, 30, 45, 0),
6310
+ * new Date(2014, 6, 2, 6, 30, 45, 500)
6311
+ * )
6312
+ * //=> false
6313
+ */
6314
+ function isEqual(dirtyLeftDate, dirtyRightDate) {
6315
+ requiredArgs(2, arguments);
6316
+ var dateLeft = toDate(dirtyLeftDate);
6317
+ var dateRight = toDate(dirtyRightDate);
6318
+ return dateLeft.getTime() === dateRight.getTime();
6319
+ }
6320
+
6293
6321
  /**
6294
6322
  * @name isSameMonth
6295
6323
  * @category Month Helpers
@@ -10805,7 +10833,7 @@ styleInject(css_248z$8);
10805
10833
 
10806
10834
  var Calendar = forwardRef(function (_a, ref) {
10807
10835
  var _b;
10808
- 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;
10836
+ 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;
10809
10837
  // Translations
10810
10838
  var t = useTranslation('common').t;
10811
10839
  var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
@@ -10946,6 +10974,7 @@ var Calendar = forwardRef(function (_a, ref) {
10946
10974
  setDisabledDates: setDisabledDates,
10947
10975
  calendarRange: calendarRange,
10948
10976
  overlappingDate: overlappingDate,
10977
+ setOverlappingDates: setOverlappingDates,
10949
10978
  });
10950
10979
  }, captionLayout: "dropdown-buttons", defaultMonth: (initialCalendarRange === null || initialCalendarRange === void 0 ? void 0 : initialCalendarRange.from) ||
10951
10980
  selectedStartDate ||
@@ -11010,8 +11039,8 @@ var Calendar = forwardRef(function (_a, ref) {
11010
11039
  });
11011
11040
  /////////
11012
11041
  var handleSelectedCheckIn = function (_a) {
11013
- var _b;
11014
- var range = _a.range, newDisableCalendarDates = _a.newDisableCalendarDates, setCalendarRange = _a.setCalendarRange, setDisabledDates = _a.setDisabledDates, calendarRange = _a.calendarRange, overlappingDate = _a.overlappingDate;
11042
+ var _b, _c, _d;
11043
+ var range = _a.range, newDisableCalendarDates = _a.newDisableCalendarDates, setCalendarRange = _a.setCalendarRange, setDisabledDates = _a.setDisabledDates, calendarRange = _a.calendarRange, overlappingDate = _a.overlappingDate, setOverlappingDates = _a.setOverlappingDates;
11015
11044
  // Calendar dates select logic
11016
11045
  var dateFormat = 'dd-MM-yyyy';
11017
11046
  var rangeFrom = (range === null || range === void 0 ? void 0 : range.from) ? format(range.from, dateFormat) : null;
@@ -11028,6 +11057,25 @@ var handleSelectedCheckIn = function (_a) {
11028
11057
  format((range === null || range === void 0 ? void 0 : range.from) || 1, dateFormat);
11029
11058
  })
11030
11059
  : null;
11060
+ // Case: Set the calendar range only if it overlaps with the previously selected dates.
11061
+ // The selection must remain continuous, meaning no gaps between days are allowed.
11062
+ // Whether selecting forwards or backwards from the initially chosen dates,
11063
+ // the new range must be directly adjacent to or overlap with the current selection.
11064
+ var selectedDates = (newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.selectedDates) || null;
11065
+ var rowRangeFrom = range === null || range === void 0 ? void 0 : range.from;
11066
+ var rowRangeTo = range === null || range === void 0 ? void 0 : range.to;
11067
+ var selectedDatesFrom = ((_c = newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.selectedDates) === null || _c === void 0 ? void 0 : _c.from) || null;
11068
+ var selectedDatesTo = ((_d = newDisableCalendarDates === null || newDisableCalendarDates === void 0 ? void 0 : newDisableCalendarDates.selectedDates) === null || _d === void 0 ? void 0 : _d.to) || null;
11069
+ // Checking if rowRangeFrom is equal to or before selectedDatesTo
11070
+ var startIsEqualOrBeforeSelectedEnd = rowRangeFrom && selectedDatesFrom && selectedDatesTo
11071
+ ? isBefore(startOfDay(rowRangeFrom), startOfDay(selectedDatesTo)) ||
11072
+ isEqual(startOfDay(rowRangeFrom), startOfDay(selectedDatesTo))
11073
+ : null;
11074
+ // Checking if rowRangeTo is equal to or after selectedDatesFrom
11075
+ var endIsEqualOrAfterSelectedStart = rowRangeTo && selectedDatesFrom && selectedDatesTo
11076
+ ? isAfter(startOfDay(rowRangeTo), startOfDay(selectedDatesFrom)) ||
11077
+ isEqual(startOfDay(rowRangeTo), startOfDay(selectedDatesFrom))
11078
+ : null;
11031
11079
  if (rangeFrom && checkOutRange && setDisabledDates) {
11032
11080
  var checkIn = addDays(checkOutRange.checkIn, 1);
11033
11081
  var firstCheckOut = addDays(checkOutRange.firstCheckOut, -1);
@@ -11041,7 +11089,13 @@ var handleSelectedCheckIn = function (_a) {
11041
11089
  { after: checkOutRange === null || checkOutRange === void 0 ? void 0 : checkOutRange.lastCheckOut },
11042
11090
  ], false));
11043
11091
  }
11044
- if ((rangeTo && rangeFrom && rangeFrom === rangeTo) ||
11092
+ setOverlappingDates(false);
11093
+ if ((selectedDates && !startIsEqualOrBeforeSelectedEnd) ||
11094
+ (selectedDates && (range === null || range === void 0 ? void 0 : range.to) && !endIsEqualOrAfterSelectedStart)) {
11095
+ setCalendarRange(undefined);
11096
+ setOverlappingDates(true);
11097
+ }
11098
+ else if ((rangeTo && rangeFrom && rangeFrom === rangeTo) ||
11045
11099
  (!rangeTo && !rangeFrom) ||
11046
11100
  overlappingDateFrom) {
11047
11101
  setCalendarRange(undefined);
@@ -11234,8 +11288,7 @@ var useFilterBar = function (_a) {
11234
11288
  finally { if (e_2) throw e_2.error; }
11235
11289
  }
11236
11290
  handleSelectedFilter(false);
11237
- console.log(onSubmit ? 'true' : 'false');
11238
- if (onSubmit) {
11291
+ if (onSubmit && selectedPath === Pages.ROOMS) {
11239
11292
  onSubmit(newParams);
11240
11293
  }
11241
11294
  else {
@@ -11476,6 +11529,7 @@ var useFilterCalendar = function (_a) {
11476
11529
  var _d = __read(useState([]), 2), disabledDates = _d[0], setDisabledDates = _d[1];
11477
11530
  var _e = __read(useState(false), 2), updateCalendarMonthNavigation = _e[0], setUpdateCalendarMonthNavigation = _e[1];
11478
11531
  var _f = __read(useState(0), 2), updateCalendarDefaultMoth = _f[0], setUpdateCalendarDefaultMoth = _f[1];
11532
+ var _g = __read(useState(false), 2), overlappingDates = _g[0], setOverlappingDates = _g[1];
11479
11533
  useEffect(function () {
11480
11534
  if (typeof window === 'undefined')
11481
11535
  return;
@@ -11518,10 +11572,12 @@ var useFilterCalendar = function (_a) {
11518
11572
  updateCalendarMonthNavigation: updateCalendarMonthNavigation,
11519
11573
  updateCalendarDefaultMoth: updateCalendarDefaultMoth,
11520
11574
  initialCalendarRange: initialCalendarRange,
11575
+ overlappingDates: overlappingDates,
11576
+ setOverlappingDates: setOverlappingDates,
11521
11577
  };
11522
11578
  };
11523
11579
 
11524
- 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}";
11580
+ 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}";
11525
11581
  styleInject(css_248z);
11526
11582
 
11527
11583
  function FilterCalendar(_a) {
@@ -11535,7 +11591,7 @@ function FilterCalendar(_a) {
11535
11591
  setToggleCalendar: setToggleCalendar,
11536
11592
  noActiveSelection: noActiveSelection,
11537
11593
  toggleCalendar: toggleCalendar,
11538
- }), 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;
11594
+ }), 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;
11539
11595
  // Display component after fully loaded
11540
11596
  useAwaitRender();
11541
11597
  // Handle close filter section
@@ -11547,10 +11603,12 @@ function FilterCalendar(_a) {
11547
11603
  });
11548
11604
  return (React__default__default.createElement("div", { className: "will-root", style: themePalette }, toggleCalendar && (React__default__default.createElement("div", { className: "will-calendar-wrapper", ref: filtersRef },
11549
11605
  React__default__default.createElement("div", { className: "will-calendar-header" },
11550
- React__default__default.createElement("h2", null, t('filterBar:calendar.title')),
11551
- React__default__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
11606
+ React__default__default.createElement("div", { className: "will-calendar-header-row" },
11607
+ React__default__default.createElement("h2", null, t('filterBar:calendar.title')),
11608
+ React__default__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
11609
+ overlappingDates && React__default__default.createElement("div", null, "Chose other dates")),
11552
11610
  React__default__default.createElement("div", { className: "will-calendar-main" },
11553
- React__default__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 })),
11611
+ React__default__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 })),
11554
11612
  React__default__default.createElement("div", { className: "will-calendar-footer" },
11555
11613
  React__default__default.createElement("div", { className: "will-calendar-footer-dates" },
11556
11614
  React__default__default.createElement("div", null,