willba-component-library 0.2.53 → 0.2.55
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/components/FilterCalendar/hooks/useFilterCalendar.d.ts +2 -0
- package/lib/core/components/calendar/CalendarTypes.d.ts +5 -0
- package/lib/core/utils/handleOverlappingDates.d.ts +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.esm.js +70 -10
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +70 -10
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +70 -10
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FilterBar/hooks/useFilterBar.tsx +1 -1
- package/src/components/FilterCalendar/FilterCalendar.css +4 -1
- package/src/components/FilterCalendar/FilterCalendar.stories.tsx +4 -0
- package/src/components/FilterCalendar/FilterCalendar.tsx +9 -2
- package/src/components/FilterCalendar/hooks/useFilterCalendar.ts +4 -0
- package/src/core/components/calendar/Calendar.tsx +50 -1
- package/src/core/components/calendar/CalendarTypes.ts +2 -0
- package/src/core/utils/handleOverlappingDates.tsx +3 -0
|
@@ -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,14 @@ var handleSelectedCheckIn = function (_a) {
|
|
|
11041
11089
|
{ after: checkOutRange === null || checkOutRange === void 0 ? void 0 : checkOutRange.lastCheckOut },
|
|
11042
11090
|
], false));
|
|
11043
11091
|
}
|
|
11044
|
-
|
|
11092
|
+
console.log(selectedDates, startIsEqualOrBeforeSelectedEnd, endIsEqualOrAfterSelectedStart);
|
|
11093
|
+
setOverlappingDates && setOverlappingDates(false);
|
|
11094
|
+
if ((selectedDates && !startIsEqualOrBeforeSelectedEnd) ||
|
|
11095
|
+
(selectedDates && (range === null || range === void 0 ? void 0 : range.to) && !endIsEqualOrAfterSelectedStart)) {
|
|
11096
|
+
setCalendarRange(undefined);
|
|
11097
|
+
setOverlappingDates && setOverlappingDates(true);
|
|
11098
|
+
}
|
|
11099
|
+
else if ((rangeTo && rangeFrom && rangeFrom === rangeTo) ||
|
|
11045
11100
|
(!rangeTo && !rangeFrom) ||
|
|
11046
11101
|
overlappingDateFrom) {
|
|
11047
11102
|
setCalendarRange(undefined);
|
|
@@ -11234,7 +11289,7 @@ var useFilterBar = function (_a) {
|
|
|
11234
11289
|
finally { if (e_2) throw e_2.error; }
|
|
11235
11290
|
}
|
|
11236
11291
|
handleSelectedFilter(false);
|
|
11237
|
-
if (onSubmit) {
|
|
11292
|
+
if (onSubmit && selectedPath === Pages.ROOMS) {
|
|
11238
11293
|
onSubmit(newParams);
|
|
11239
11294
|
}
|
|
11240
11295
|
else {
|
|
@@ -11475,6 +11530,7 @@ var useFilterCalendar = function (_a) {
|
|
|
11475
11530
|
var _d = __read(useState([]), 2), disabledDates = _d[0], setDisabledDates = _d[1];
|
|
11476
11531
|
var _e = __read(useState(false), 2), updateCalendarMonthNavigation = _e[0], setUpdateCalendarMonthNavigation = _e[1];
|
|
11477
11532
|
var _f = __read(useState(0), 2), updateCalendarDefaultMoth = _f[0], setUpdateCalendarDefaultMoth = _f[1];
|
|
11533
|
+
var _g = __read(useState(false), 2), overlappingDates = _g[0], setOverlappingDates = _g[1];
|
|
11478
11534
|
useEffect(function () {
|
|
11479
11535
|
if (typeof window === 'undefined')
|
|
11480
11536
|
return;
|
|
@@ -11517,10 +11573,12 @@ var useFilterCalendar = function (_a) {
|
|
|
11517
11573
|
updateCalendarMonthNavigation: updateCalendarMonthNavigation,
|
|
11518
11574
|
updateCalendarDefaultMoth: updateCalendarDefaultMoth,
|
|
11519
11575
|
initialCalendarRange: initialCalendarRange,
|
|
11576
|
+
overlappingDates: overlappingDates,
|
|
11577
|
+
setOverlappingDates: setOverlappingDates,
|
|
11520
11578
|
};
|
|
11521
11579
|
};
|
|
11522
11580
|
|
|
11523
|
-
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
|
|
11581
|
+
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}";
|
|
11524
11582
|
styleInject(css_248z);
|
|
11525
11583
|
|
|
11526
11584
|
function FilterCalendar(_a) {
|
|
@@ -11534,7 +11592,7 @@ function FilterCalendar(_a) {
|
|
|
11534
11592
|
setToggleCalendar: setToggleCalendar,
|
|
11535
11593
|
noActiveSelection: noActiveSelection,
|
|
11536
11594
|
toggleCalendar: toggleCalendar,
|
|
11537
|
-
}), 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;
|
|
11595
|
+
}), 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;
|
|
11538
11596
|
// Display component after fully loaded
|
|
11539
11597
|
useAwaitRender();
|
|
11540
11598
|
// Handle close filter section
|
|
@@ -11546,10 +11604,12 @@ function FilterCalendar(_a) {
|
|
|
11546
11604
|
});
|
|
11547
11605
|
return (React__default__default.createElement("div", { className: "will-root", style: themePalette }, toggleCalendar && (React__default__default.createElement("div", { className: "will-calendar-wrapper", ref: filtersRef },
|
|
11548
11606
|
React__default__default.createElement("div", { className: "will-calendar-header" },
|
|
11549
|
-
React__default__default.createElement("
|
|
11550
|
-
|
|
11607
|
+
React__default__default.createElement("div", { className: "will-calendar-header-row" },
|
|
11608
|
+
React__default__default.createElement("h2", null, t('filterBar:calendar.title')),
|
|
11609
|
+
React__default__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
|
|
11610
|
+
overlappingDates && React__default__default.createElement("div", null, "Chose other dates")),
|
|
11551
11611
|
React__default__default.createElement("div", { className: "will-calendar-main" },
|
|
11552
|
-
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 })),
|
|
11612
|
+
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 })),
|
|
11553
11613
|
React__default__default.createElement("div", { className: "will-calendar-footer" },
|
|
11554
11614
|
React__default__default.createElement("div", { className: "will-calendar-footer-dates" },
|
|
11555
11615
|
React__default__default.createElement("div", null,
|