willba-component-library 0.2.22 → 0.2.23
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/FilterCalendar.d.ts +1 -1
- package/lib/components/FilterCalendar/hooks/useFilterCalendar.d.ts +3 -1
- package/lib/core/components/calendar/CalendarTypes.d.ts +3 -0
- package/lib/index.d.ts +4 -1
- package/lib/index.esm.js +82 -18
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +82 -18
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +82 -18
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FilterCalendar/FilterCalendar.stories.tsx +9 -836
- package/src/components/FilterCalendar/FilterCalendar.tsx +7 -1
- package/src/components/FilterCalendar/hooks/useFilterCalendar.ts +19 -5
- package/src/core/components/calendar/Calendar.css +6 -0
- package/src/core/components/calendar/Calendar.tsx +85 -8
- package/src/core/components/calendar/CalendarTypes.ts +3 -0
- package/src/locales/fi/filterBar.json +1 -1
|
@@ -2,4 +2,4 @@ import React from 'react';
|
|
|
2
2
|
import '../../themes/Default.css';
|
|
3
3
|
import { FilterCalendarTypes } from './FilterCalendarTypes';
|
|
4
4
|
import './FilterCalendar.css';
|
|
5
|
-
export default function FilterCalendar({ calendarOffset, language, palette, onSubmit, disableCalendarDates, toggleCalendar, loadingData, setToggleCalendar, requestDates, }: FilterCalendarTypes): React.JSX.Element;
|
|
5
|
+
export default function FilterCalendar({ calendarOffset, language, palette, onSubmit, disableCalendarDates, toggleCalendar, loadingData, setToggleCalendar, requestDates, showFeedback, noActiveSelection, }: FilterCalendarTypes): React.JSX.Element;
|
|
@@ -3,8 +3,9 @@ import { DateRange, Matcher } from 'react-day-picker';
|
|
|
3
3
|
type Props = {
|
|
4
4
|
onSubmit: (val: any) => void;
|
|
5
5
|
setToggleCalendar: (val: boolean) => void;
|
|
6
|
+
noActiveSelection?: boolean;
|
|
6
7
|
};
|
|
7
|
-
export declare const useFilterCalendar: ({ onSubmit, setToggleCalendar }: Props) => {
|
|
8
|
+
export declare const useFilterCalendar: ({ onSubmit, setToggleCalendar, noActiveSelection, }: Props) => {
|
|
8
9
|
handleSubmit: () => void;
|
|
9
10
|
handleClearDates: () => void;
|
|
10
11
|
setCalendarRange: import("react").Dispatch<import("react").SetStateAction<DateRange | undefined>>;
|
|
@@ -13,5 +14,6 @@ export declare const useFilterCalendar: ({ onSubmit, setToggleCalendar }: Props)
|
|
|
13
14
|
calendarRange: DateRange | undefined;
|
|
14
15
|
disabledDates: Matcher[];
|
|
15
16
|
updateCalendar: boolean;
|
|
17
|
+
initialCalendarRange: DateRange | undefined;
|
|
16
18
|
};
|
|
17
19
|
export {};
|
|
@@ -30,4 +30,7 @@ export type CalendarTypes = {
|
|
|
30
30
|
updateCalendar?: boolean;
|
|
31
31
|
setUpdateCalendar?: (arg: (prev: boolean) => boolean) => void;
|
|
32
32
|
loadingData?: boolean;
|
|
33
|
+
initialCalendarRange?: DateRange | undefined;
|
|
34
|
+
showFeedback?: boolean;
|
|
35
|
+
noActiveSelection?: boolean;
|
|
33
36
|
};
|
package/lib/index.d.ts
CHANGED
|
@@ -59,6 +59,9 @@ type CalendarTypes = {
|
|
|
59
59
|
updateCalendar?: boolean;
|
|
60
60
|
setUpdateCalendar?: (arg: (prev: boolean) => boolean) => void;
|
|
61
61
|
loadingData?: boolean;
|
|
62
|
+
initialCalendarRange?: DateRange | undefined;
|
|
63
|
+
showFeedback?: boolean;
|
|
64
|
+
noActiveSelection?: boolean;
|
|
62
65
|
};
|
|
63
66
|
|
|
64
67
|
type Palette = {
|
|
@@ -108,6 +111,6 @@ interface FilterCalendarTypes extends Partial<CalendarTypes> {
|
|
|
108
111
|
setToggleCalendar: (val: boolean) => void;
|
|
109
112
|
}
|
|
110
113
|
|
|
111
|
-
declare function FilterCalendar({ calendarOffset, language, palette, onSubmit, disableCalendarDates, toggleCalendar, loadingData, setToggleCalendar, requestDates, }: FilterCalendarTypes): React.JSX.Element;
|
|
114
|
+
declare function FilterCalendar({ calendarOffset, language, palette, onSubmit, disableCalendarDates, toggleCalendar, loadingData, setToggleCalendar, requestDates, showFeedback, noActiveSelection, }: FilterCalendarTypes): React.JSX.Element;
|
|
112
115
|
|
|
113
116
|
export { Button, FilterBar, FilterCalendar, FilterCalendarTypes, Tab };
|
package/lib/index.esm.js
CHANGED
|
@@ -2864,7 +2864,7 @@ var enCommon = {
|
|
|
2864
2864
|
};
|
|
2865
2865
|
|
|
2866
2866
|
var calendar = {
|
|
2867
|
-
label: "
|
|
2867
|
+
label: "Päivät",
|
|
2868
2868
|
roomsLabelPlaceholder: "Lisää check-in ja check-out",
|
|
2869
2869
|
eventsLabelPlaceholder: "Lisää aikaväli",
|
|
2870
2870
|
startDate: "Alku",
|
|
@@ -10786,12 +10786,12 @@ var reactResponsiveExports = reactResponsive.exports;
|
|
|
10786
10786
|
var css_248z$9 = ".rdp {\n --rdp-cell-size: 40px;\n --rdp-caption-font-size: 18px;\n --rdp-accent-color: #0000ff;\n --rdp-background-color: #e7edff;\n --rdp-accent-color-dark: #3003e1;\n --rdp-background-color-dark: #180270;\n --rdp-outline: 2px solid var(--rdp-accent-color); /* Outline border for focused elements */\n --rdp-outline-selected: 3px solid var(--rdp-accent-color); /* Outline border for focused _and_ selected elements */\n\n margin: 1em;\n}\n\n/* Hide elements for devices that are not screen readers */\n.rdp-vhidden {\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n background: transparent;\n border: 0;\n -moz-appearance: none;\n -webkit-appearance: none;\n appearance: none;\n position: absolute !important;\n top: 0;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n overflow: hidden !important;\n clip: rect(1px, 1px, 1px, 1px) !important;\n border: 0 !important;\n}\n\n/* Buttons */\n.rdp-button_reset {\n appearance: none;\n position: relative;\n margin: 0;\n padding: 0;\n cursor: default;\n color: inherit;\n background: none;\n font: inherit;\n\n -moz-appearance: none;\n -webkit-appearance: none;\n}\n\n.rdp-button_reset:focus-visible {\n /* Make sure to reset outline only when :focus-visible is supported */\n outline: none;\n}\n\n.rdp-button {\n border: 2px solid transparent;\n}\n\n.rdp-button[disabled]:not(.rdp-day_selected) {\n opacity: 0.25;\n}\n\n.rdp-button:not([disabled]) {\n cursor: pointer;\n}\n\n.rdp-button:focus-visible:not([disabled]) {\n color: inherit;\n background-color: var(--rdp-background-color);\n border: var(--rdp-outline);\n}\n\n.rdp-button:hover:not([disabled]):not(.rdp-day_selected) {\n background-color: var(--rdp-background-color);\n}\n\n.rdp-months {\n display: flex;\n}\n\n.rdp-month {\n margin: 0 1em;\n}\n\n.rdp-month:first-child {\n margin-left: 0;\n}\n\n.rdp-month:last-child {\n margin-right: 0;\n}\n\n.rdp-table {\n margin: 0;\n max-width: calc(var(--rdp-cell-size) * 7);\n border-collapse: collapse;\n}\n\n.rdp-with_weeknumber .rdp-table {\n max-width: calc(var(--rdp-cell-size) * 8);\n border-collapse: collapse;\n}\n\n.rdp-caption {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0;\n text-align: left;\n}\n\n.rdp-multiple_months .rdp-caption {\n position: relative;\n display: block;\n text-align: center;\n}\n\n.rdp-caption_dropdowns {\n position: relative;\n display: inline-flex;\n}\n\n.rdp-caption_label {\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n margin: 0;\n padding: 0 0.25em;\n white-space: nowrap;\n color: currentColor;\n border: 0;\n border: 2px solid transparent;\n font-family: inherit;\n font-size: var(--rdp-caption-font-size);\n font-weight: bold;\n}\n\n.rdp-nav {\n white-space: nowrap;\n}\n\n.rdp-multiple_months .rdp-caption_start .rdp-nav {\n position: absolute;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n}\n\n.rdp-multiple_months .rdp-caption_end .rdp-nav {\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n}\n\n.rdp-nav_button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--rdp-cell-size);\n height: var(--rdp-cell-size);\n padding: 0.25em;\n border-radius: 100%;\n}\n\n/* ---------- */\n/* Dropdowns */\n/* ---------- */\n\n.rdp-dropdown_year,\n.rdp-dropdown_month {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.rdp-dropdown {\n appearance: none;\n position: absolute;\n z-index: 2;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n margin: 0;\n padding: 0;\n cursor: inherit;\n opacity: 0;\n border: none;\n background-color: transparent;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n.rdp-dropdown[disabled] {\n opacity: unset;\n color: unset;\n}\n\n.rdp-dropdown:focus-visible:not([disabled]) + .rdp-caption_label {\n background-color: var(--rdp-background-color);\n border: var(--rdp-outline);\n border-radius: 6px;\n}\n\n.rdp-dropdown_icon {\n margin: 0 0 0 5px;\n}\n\n.rdp-head {\n border: 0;\n}\n\n.rdp-head_row,\n.rdp-row {\n height: 100%;\n}\n\n.rdp-head_cell {\n vertical-align: middle;\n font-size: 0.75em;\n font-weight: 700;\n text-align: center;\n height: 100%;\n height: var(--rdp-cell-size);\n padding: 0;\n text-transform: uppercase;\n}\n\n.rdp-tbody {\n border: 0;\n}\n\n.rdp-tfoot {\n margin: 0.5em;\n}\n\n.rdp-cell {\n width: var(--rdp-cell-size);\n height: 100%;\n height: var(--rdp-cell-size);\n padding: 0;\n text-align: center;\n}\n\n.rdp-weeknumber {\n font-size: 0.75em;\n}\n\n.rdp-weeknumber,\n.rdp-day {\n display: flex;\n overflow: hidden;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--rdp-cell-size);\n max-width: var(--rdp-cell-size);\n height: var(--rdp-cell-size);\n margin: 0;\n border: 2px solid transparent;\n border-radius: 100%;\n}\n\n.rdp-day_today:not(.rdp-day_outside) {\n font-weight: bold;\n}\n\n.rdp-day_selected,\n.rdp-day_selected:focus-visible,\n.rdp-day_selected:hover {\n color: white;\n opacity: 1;\n background-color: var(--rdp-accent-color);\n}\n\n.rdp-day_outside {\n opacity: 0.5;\n}\n\n.rdp-day_selected:focus-visible {\n /* Since the background is the same use again the outline */\n outline: var(--rdp-outline);\n outline-offset: 2px;\n z-index: 1;\n}\n\n.rdp:not([dir='rtl']) .rdp-day_range_start:not(.rdp-day_range_end) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.rdp:not([dir='rtl']) .rdp-day_range_end:not(.rdp-day_range_start) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.rdp[dir='rtl'] .rdp-day_range_start:not(.rdp-day_range_end) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.rdp[dir='rtl'] .rdp-day_range_end:not(.rdp-day_range_start) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.rdp-day_range_end.rdp-day_range_start {\n border-radius: 100%;\n}\n\n.rdp-day_range_middle {\n border-radius: 0;\n}";
|
|
10787
10787
|
styleInject(css_248z$9);
|
|
10788
10788
|
|
|
10789
|
-
var css_248z$8 = ".will-calendar-filter-container {\n display: flex;\n justify-content: center;\n user-select: none;\n}\n\n/* Calendar overrides */\n\n\n.will-calendar-filter-container .DayPicker {\n font-size: 25px; /* Adjust this value to make the DayPicker bigger */\n}\n\n.will-calendar-filter-container .rdp-month {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 70px;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 70px;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav {\n border: 1px solid var(--will-primary);\n border-radius: 50%;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav svg {\n color: var(--will-primary);\n}\n\n\n.will-calendar-filter-container .rdp-month .rdp-caption {\n position: initial;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-caption > .rdp-caption_label,\n.will-calendar-filter-container .rdp-table .rdp-head {\n opacity: .6;\n}\n\n.will-calendar-filter-container .rdp-button_reset.rdp-button.rdp-day.rdp-day_selected {\n background-color: var(--will-primary);\n opacity: 1;\n}\n\n.will-calendar-filter-container .my-today:not(.rdp-day_selected) { \n font-weight: 700;\n opacity: 1;\n color: var(--will-primary);\n}\n\n.will-calendar-filter-container .rdp-cell {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-cell button {\n font-weight: 500;\n}\n\n.will-calendar-filter-container .rdp-cell button.booked {\n font-weight: 400;\n cursor: not-allowed;\n}\n\n.will-calendar-filter-container .rdp-cell .rdp-button[disabled] {\n opacity: 0.5;\n}\n\n@media (max-width: 960px) {\n .will-calendar-filter-container .rdp-month .rdp-nav {\n border: none;\n border-radius: initial;\n }\n\n .will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 10px;\n }\n \n .will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 10px;\n }\n}\n\n/* Tooltip */\n.will-root .will-calendar-filter-container .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out {\n position: absolute;\n top: -42px;\n transform: translateX(calc(-50% + 20px));\n display: none;\n white-space: nowrap;\n z-index: 2;\n}\n.will-root .will-calendar-filter-container .will-calendar-tooltip > div,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out> div {\n background-color: white;\n position: relative;\n padding: 5px 10px;\n border: 1px solid var(--will-primary);\n border-radius: 5px;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-tooltip::before,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out::before {\n content: \"\";\n width: 10px;\n height: 10px;\n border: 1px solid var(--will-primary);\n position: absolute;\n bottom: -4px;\n left:calc(50% - 5.555px);\n rotate: 45deg;\n z-index: 0;\n background-color: var(--will-white);\n}\n\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip-check-out {\n display: block;\n}\n\n/* Loading spinner */\n\n.will-root .will-calendar-filter-container .rdp-months {\n position: relative;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-spinner {\n position: absolute;\n top:0;\n bottom:0;\n left: 0;\n right: 0;\n background-color: var(--will-white-transparent);\n z-index: 3;\n display: none;\n justify-content: center;\n align-items: center;\n font-weight: 600;\n}\n\n\n";
|
|
10789
|
+
var css_248z$8 = ".will-calendar-filter-container {\n display: flex;\n justify-content: center;\n user-select: none;\n}\n\n/* Calendar overrides */\n\n\n.will-calendar-filter-container .DayPicker {\n font-size: 25px; /* Adjust this value to make the DayPicker bigger */\n}\n\n.will-calendar-filter-container .rdp-month {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 70px;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 70px;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav {\n border: 1px solid var(--will-primary);\n border-radius: 50%;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav svg {\n color: var(--will-primary);\n}\n\n\n.will-calendar-filter-container .rdp-month .rdp-caption {\n position: initial;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-caption > .rdp-caption_label,\n.will-calendar-filter-container .rdp-table .rdp-head {\n opacity: .6;\n}\n\n.will-calendar-filter-container .rdp-button_reset.rdp-button.rdp-day.rdp-day_selected {\n background-color: var(--will-primary);\n opacity: 1;\n}\n\n.will-calendar-filter-container .my-today:not(.rdp-day_selected) { \n font-weight: 700;\n opacity: 1;\n color: var(--will-primary);\n}\n\n.will-calendar-filter-container .rdp-cell {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-cell button {\n font-weight: 500;\n}\n\n.will-calendar-filter-container .rdp-cell button.booked {\n font-weight: 400;\n cursor: not-allowed;\n}\n\n.will-calendar-filter-container .rdp-cell .rdp-button[disabled] {\n opacity: 0.5;\n}\n\n@media (max-width: 960px) {\n .will-calendar-filter-container .rdp-month .rdp-nav {\n border: none;\n border-radius: initial;\n }\n\n .will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 10px;\n }\n \n .will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 10px;\n }\n}\n\n/* Tooltip */\n.will-root .will-calendar-filter-container .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out {\n position: absolute;\n top: -42px;\n transform: translateX(calc(-50% + 20px));\n display: none;\n white-space: nowrap;\n z-index: 2;\n}\n.will-root .will-calendar-filter-container .will-calendar-tooltip > div,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out> div {\n background-color: white;\n position: relative;\n padding: 5px 10px;\n border: 1px solid var(--will-primary);\n border-radius: 5px;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-tooltip::before,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out::before {\n content: \"\";\n width: 10px;\n height: 10px;\n border: 1px solid var(--will-primary);\n position: absolute;\n bottom: -4px;\n left:calc(50% - 5.555px);\n rotate: 45deg;\n z-index: 0;\n background-color: var(--will-white);\n}\n\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip-check-out {\n display: block;\n}\n\n/* Loading spinner */\n\n.will-root .will-calendar-filter-container .rdp-months {\n position: relative;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-spinner {\n position: absolute;\n top:0;\n bottom:0;\n left: 0;\n right: 0;\n background-color: var(--will-white-transparent);\n z-index: 3;\n display: none;\n justify-content: center;\n align-items: center;\n font-weight: 600;\n}\n\n/* No active selection */\n\n.will-root .will-calendar-filter-container .no-active-selection {\n background-color: lightgrey;\n}\n\n\n";
|
|
10790
10790
|
styleInject(css_248z$8);
|
|
10791
10791
|
|
|
10792
10792
|
var Calendar = forwardRef(function (_a, ref) {
|
|
10793
10793
|
var _b;
|
|
10794
|
-
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, updateCalendar = _a.updateCalendar, setUpdateCalendar = _a.setUpdateCalendar, loadingData = _a.loadingData;
|
|
10794
|
+
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, updateCalendar = _a.updateCalendar, setUpdateCalendar = _a.setUpdateCalendar, loadingData = _a.loadingData, initialCalendarRange = _a.initialCalendarRange, showFeedback = _a.showFeedback;
|
|
10795
10795
|
// Translations
|
|
10796
10796
|
var t = useTranslation('common').t;
|
|
10797
10797
|
var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
|
|
@@ -10813,7 +10813,7 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10813
10813
|
}, [disableCalendarDates, calendarRange]);
|
|
10814
10814
|
// Handle tooltip
|
|
10815
10815
|
useEffect(function () {
|
|
10816
|
-
if (typeof document === 'undefined')
|
|
10816
|
+
if (typeof document === 'undefined' || !showFeedback)
|
|
10817
10817
|
return;
|
|
10818
10818
|
var calendarTooltip = document.querySelector('.will-calendar-tooltip');
|
|
10819
10819
|
var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
|
|
@@ -10859,6 +10859,25 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10859
10859
|
loadingSpinner.style.display = 'none';
|
|
10860
10860
|
}
|
|
10861
10861
|
}, [loadingData]);
|
|
10862
|
+
// Handle overlapping availableDates.lastCheckOut and disabledDates.start
|
|
10863
|
+
useEffect(function () {
|
|
10864
|
+
var _a, _b;
|
|
10865
|
+
if (disableCalendarDates) {
|
|
10866
|
+
var dateFormat_1 = 'dd-MM-yyyy';
|
|
10867
|
+
var availableDateMap_1 = new Map();
|
|
10868
|
+
(_a = disableCalendarDates.availableDates) === null || _a === void 0 ? void 0 : _a.forEach(function (available) {
|
|
10869
|
+
availableDateMap_1.set(format(available.lastCheckOut, dateFormat_1), available);
|
|
10870
|
+
});
|
|
10871
|
+
var updatedDisabledDates = (_b = disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.map(function (dateRange) {
|
|
10872
|
+
var formattedFromDate = format(dateRange.from, dateFormat_1);
|
|
10873
|
+
if (availableDateMap_1.has(formattedFromDate)) {
|
|
10874
|
+
return __assign$2(__assign$2({}, dateRange), { from: addDays(dateRange.from, 1) });
|
|
10875
|
+
}
|
|
10876
|
+
return dateRange;
|
|
10877
|
+
});
|
|
10878
|
+
disableCalendarDates.disabledDates = updatedDisabledDates;
|
|
10879
|
+
}
|
|
10880
|
+
}, [disableCalendarDates]);
|
|
10862
10881
|
// Handle disable dates by page
|
|
10863
10882
|
var disabledDatesByPage = handleDisabledDatesByPage({
|
|
10864
10883
|
today: today,
|
|
@@ -10879,6 +10898,7 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10879
10898
|
today: 'my-today',
|
|
10880
10899
|
booked: 'booked',
|
|
10881
10900
|
disabledAfterCheckIn: 'disabled-after-check-in',
|
|
10901
|
+
noActiveSelection: 'no-active-selection',
|
|
10882
10902
|
}, captionLayout: "dropdown-buttons", defaultMonth: selectedStartDate ||
|
|
10883
10903
|
(((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
|
|
10884
10904
|
? disableCalendarDates.disabledDates[0].from
|
|
@@ -10899,6 +10919,9 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10899
10919
|
disabledAfterCheckIn: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
|
|
10900
10920
|
? [{ after: calendarRange.from }]
|
|
10901
10921
|
: [],
|
|
10922
|
+
noActiveSelection: !calendarRange
|
|
10923
|
+
? initialCalendarRange || []
|
|
10924
|
+
: [],
|
|
10902
10925
|
} }),
|
|
10903
10926
|
React__default__default.createElement("div", { className: 'will-calendar-tooltip' },
|
|
10904
10927
|
React__default__default.createElement("div", null, t('noCheckIn'))),
|
|
@@ -10926,14 +10949,23 @@ var handleSelectedCheckIn = function (_a) {
|
|
|
10926
10949
|
format((range === null || range === void 0 ? void 0 : range.from) || 1, dateFormat);
|
|
10927
10950
|
})
|
|
10928
10951
|
: null;
|
|
10929
|
-
if (rangeFrom &&
|
|
10930
|
-
// rangeFrom !== calendarTo &&
|
|
10931
|
-
checkOutRange &&
|
|
10932
|
-
setDisabledDates) {
|
|
10952
|
+
if (rangeFrom && checkOutRange && setDisabledDates) {
|
|
10933
10953
|
var checkIn = addDays(checkOutRange.checkIn, 1);
|
|
10934
10954
|
var firstCheckOut = addDays(checkOutRange.firstCheckOut, -1);
|
|
10935
10955
|
var noDatesRange = format(checkIn, dateFormat) ===
|
|
10936
10956
|
format(checkOutRange.firstCheckOut, dateFormat);
|
|
10957
|
+
// Handle overlapping availableDates.lastCheckOut and disabledDates.start
|
|
10958
|
+
// const filteredDisabledCalendarDates =
|
|
10959
|
+
// disableCalendarDates?.disabledDates?.map((dateRange) => {
|
|
10960
|
+
// if (
|
|
10961
|
+
// dateRange.from &&
|
|
10962
|
+
// format(dateRange.from, dateFormat) ===
|
|
10963
|
+
// format(checkOutRange.lastCheckOut, dateFormat)
|
|
10964
|
+
// ) {
|
|
10965
|
+
// return { ...dateRange, from: addDays(checkOutRange.lastCheckOut, 1) }
|
|
10966
|
+
// }
|
|
10967
|
+
// return dateRange
|
|
10968
|
+
// })
|
|
10937
10969
|
setDisabledDates(__spreadArray$1(__spreadArray$1([], __read(((disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) || [])), false), [
|
|
10938
10970
|
{
|
|
10939
10971
|
from: noDatesRange ? undefined : checkIn,
|
|
@@ -10976,6 +11008,31 @@ var handleDisabledDatesByPage = function (_a) {
|
|
|
10976
11008
|
]
|
|
10977
11009
|
: [];
|
|
10978
11010
|
};
|
|
11011
|
+
// const handleOverlappingDates = ({
|
|
11012
|
+
// disableCalendarDates,
|
|
11013
|
+
// }: {
|
|
11014
|
+
// disableCalendarDates?: DisableCalendarDates
|
|
11015
|
+
// }): DisableCalendarDates | undefined => {
|
|
11016
|
+
// if (!disableCalendarDates) return undefined
|
|
11017
|
+
// const dateFormat = 'dd-MM-yyyy'
|
|
11018
|
+
// disableCalendarDates.disabledDates = disableCalendarDates.disabledDates?.map(
|
|
11019
|
+
// (dateRange) => {
|
|
11020
|
+
// const overlappingDate = disableCalendarDates.availableDates?.find(
|
|
11021
|
+
// (available) =>
|
|
11022
|
+
// format(available.lastCheckOut, dateFormat) ===
|
|
11023
|
+
// format(dateRange.from, dateFormat)
|
|
11024
|
+
// )
|
|
11025
|
+
// if (overlappingDate) {
|
|
11026
|
+
// return {
|
|
11027
|
+
// ...dateRange,
|
|
11028
|
+
// from: addDays(dateRange.from, 1),
|
|
11029
|
+
// }
|
|
11030
|
+
// }
|
|
11031
|
+
// return dateRange
|
|
11032
|
+
// }
|
|
11033
|
+
// )
|
|
11034
|
+
// return disableCalendarDates
|
|
11035
|
+
// }
|
|
10979
11036
|
|
|
10980
11037
|
var parseDates = function (_a) {
|
|
10981
11038
|
var calendarRange = _a.calendarRange;
|
|
@@ -11363,10 +11420,11 @@ var AGE_CATEGORIES_FALLBACK = [
|
|
|
11363
11420
|
var REDIRECT_URL_FALLBACK = 'http://localhost:3000/';
|
|
11364
11421
|
|
|
11365
11422
|
var useFilterCalendar = function (_a) {
|
|
11366
|
-
var onSubmit = _a.onSubmit, setToggleCalendar = _a.setToggleCalendar;
|
|
11423
|
+
var onSubmit = _a.onSubmit, setToggleCalendar = _a.setToggleCalendar, noActiveSelection = _a.noActiveSelection;
|
|
11367
11424
|
var _b = __read(useState(), 2), calendarRange = _b[0], setCalendarRange = _b[1];
|
|
11368
|
-
var _c = __read(useState(
|
|
11369
|
-
var _d = __read(useState(
|
|
11425
|
+
var _c = __read(useState(), 2), initialCalendarRange = _c[0], setInitialCalendarRange = _c[1];
|
|
11426
|
+
var _d = __read(useState([]), 2), disabledDates = _d[0], setDisabledDates = _d[1];
|
|
11427
|
+
var _e = __read(useState(false), 2), updateCalendar = _e[0], setUpdateCalendar = _e[1];
|
|
11370
11428
|
useEffect(function () {
|
|
11371
11429
|
if (typeof window === 'undefined')
|
|
11372
11430
|
return;
|
|
@@ -11374,10 +11432,15 @@ var useFilterCalendar = function (_a) {
|
|
|
11374
11432
|
var startDateParam = urlSearchParams.get('startDate');
|
|
11375
11433
|
var endDateParam = urlSearchParams.get('endDate');
|
|
11376
11434
|
if (startDateParam && endDateParam) {
|
|
11377
|
-
|
|
11378
|
-
|
|
11379
|
-
|
|
11380
|
-
|
|
11435
|
+
noActiveSelection
|
|
11436
|
+
? setInitialCalendarRange({
|
|
11437
|
+
from: new Date(startDateParam),
|
|
11438
|
+
to: new Date(endDateParam),
|
|
11439
|
+
})
|
|
11440
|
+
: setCalendarRange({
|
|
11441
|
+
from: new Date(startDateParam),
|
|
11442
|
+
to: new Date(endDateParam),
|
|
11443
|
+
});
|
|
11381
11444
|
}
|
|
11382
11445
|
}, []);
|
|
11383
11446
|
var handleSubmit = function () {
|
|
@@ -11397,6 +11460,7 @@ var useFilterCalendar = function (_a) {
|
|
|
11397
11460
|
calendarRange: calendarRange,
|
|
11398
11461
|
disabledDates: disabledDates,
|
|
11399
11462
|
updateCalendar: updateCalendar,
|
|
11463
|
+
initialCalendarRange: initialCalendarRange,
|
|
11400
11464
|
};
|
|
11401
11465
|
};
|
|
11402
11466
|
|
|
@@ -11404,12 +11468,12 @@ var css_248z = ".will-root .will-calendar-wrapper {\n box-shadow: var(--will-
|
|
|
11404
11468
|
styleInject(css_248z);
|
|
11405
11469
|
|
|
11406
11470
|
function FilterCalendar(_a) {
|
|
11407
|
-
var calendarOffset = _a.calendarOffset, language = _a.language, palette = _a.palette, onSubmit = _a.onSubmit, disableCalendarDates = _a.disableCalendarDates, toggleCalendar = _a.toggleCalendar, loadingData = _a.loadingData, setToggleCalendar = _a.setToggleCalendar, requestDates = _a.requestDates;
|
|
11471
|
+
var calendarOffset = _a.calendarOffset, language = _a.language, palette = _a.palette, onSubmit = _a.onSubmit, disableCalendarDates = _a.disableCalendarDates, toggleCalendar = _a.toggleCalendar, loadingData = _a.loadingData, setToggleCalendar = _a.setToggleCalendar, requestDates = _a.requestDates, showFeedback = _a.showFeedback, noActiveSelection = _a.noActiveSelection;
|
|
11408
11472
|
var themePalette = useTheme({ palette: palette });
|
|
11409
11473
|
// Translations
|
|
11410
11474
|
useUpdateTranslations({ language: language });
|
|
11411
11475
|
var t = useTranslation().t;
|
|
11412
|
-
var _b = useFilterCalendar({ onSubmit: onSubmit, setToggleCalendar: setToggleCalendar }), handleSubmit = _b.handleSubmit, setCalendarRange = _b.setCalendarRange, handleClearDates = _b.handleClearDates, calendarRange = _b.calendarRange, disabledDates = _b.disabledDates, setDisabledDates = _b.setDisabledDates, updateCalendar = _b.updateCalendar, setUpdateCalendar = _b.setUpdateCalendar;
|
|
11476
|
+
var _b = useFilterCalendar({ onSubmit: onSubmit, setToggleCalendar: setToggleCalendar, noActiveSelection: noActiveSelection }), handleSubmit = _b.handleSubmit, setCalendarRange = _b.setCalendarRange, handleClearDates = _b.handleClearDates, calendarRange = _b.calendarRange, disabledDates = _b.disabledDates, setDisabledDates = _b.setDisabledDates, updateCalendar = _b.updateCalendar, setUpdateCalendar = _b.setUpdateCalendar, initialCalendarRange = _b.initialCalendarRange;
|
|
11413
11477
|
// Display component after fully loaded
|
|
11414
11478
|
useAwaitRender();
|
|
11415
11479
|
// Handle close filter section
|
|
@@ -11422,7 +11486,7 @@ function FilterCalendar(_a) {
|
|
|
11422
11486
|
React__default__default.createElement("h2", null, t('filterBar:calendar.title')),
|
|
11423
11487
|
React__default__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
|
|
11424
11488
|
React__default__default.createElement("div", { className: "will-calendar-main" },
|
|
11425
|
-
React__default__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, setDisabledDates: setDisabledDates, updateCalendar: updateCalendar, setUpdateCalendar: setUpdateCalendar, loadingData: loadingData })),
|
|
11489
|
+
React__default__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, setDisabledDates: setDisabledDates, updateCalendar: updateCalendar, setUpdateCalendar: setUpdateCalendar, loadingData: loadingData, initialCalendarRange: initialCalendarRange, showFeedback: showFeedback, noActiveSelection: noActiveSelection })),
|
|
11426
11490
|
React__default__default.createElement("div", { className: "will-calendar-footer" },
|
|
11427
11491
|
React__default__default.createElement("div", { className: "will-calendar-footer-dates" },
|
|
11428
11492
|
React__default__default.createElement("div", null,
|