willba-component-library 0.2.15 → 0.2.16
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/FilterBar/FilterBar.d.ts +1 -1
- package/lib/components/FilterBar/FilterBarTypes.d.ts +2 -2
- package/lib/components/FilterCalendar/FilterCalendar.d.ts +1 -1
- package/lib/components/FilterCalendar/hooks/useFilterCalendar.d.ts +5 -1
- package/lib/core/components/calendar/CalendarTypes.d.ts +22 -5
- package/lib/index.d.ts +30 -13
- package/lib/index.esm.js +213 -69
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +213 -69
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +213 -69
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FilterBar/FilterBar.stories.tsx +11 -3
- package/src/components/FilterBar/FilterBar.tsx +2 -2
- package/src/components/FilterBar/FilterBarTypes.ts +2 -2
- package/src/components/FilterCalendar/FilterCalendar.stories.tsx +861 -20
- package/src/components/FilterCalendar/FilterCalendar.tsx +24 -6
- package/src/components/FilterCalendar/hooks/useFilterCalendar.ts +29 -3
- package/src/core/components/calendar/Calendar.css +50 -8
- package/src/core/components/calendar/Calendar.tsx +233 -81
- package/src/core/components/calendar/CalendarTypes.ts +20 -5
- package/src/locales/en/common.json +5 -1
- package/src/locales/en/filterBar.json +1 -1
- package/src/locales/fi/common.json +5 -1
- package/src/themes/Default.css +1 -0
package/lib/index.js
CHANGED
|
@@ -544,7 +544,7 @@ function useTheme(_a) {
|
|
|
544
544
|
return themePalette;
|
|
545
545
|
}
|
|
546
546
|
|
|
547
|
-
var css_248z$c = "@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap');\n\n.will-root * {\n font-family: 'Montserrat', sans-serif;\n}\n\n.will-root {\n \n box-sizing: border-box;\n font-size: 14px;\n \n color: #1E1E1E;\n \n /* Palette */\n --will-primary: #374269;\n --will-secondary: #374269;\n --will-grey: #ABA7AF;\n --will-white: #fff;\n --will-black: #000;\n --will-onahau: #CDEEFF;\n --will-text: #5A5959;\n --will-charcoal-blue: #384265;\n --will-transparent-white: rgba(255, 255, 255, 0.30);\n --will-transparent-black: rgba(171, 167, 175, 0.30);\n\n /* Confines */\n --will-box-shadow-dark: 0px 2px 12px 2px #a1a1a180;\n --will-box-shadow-light: 0px 2px 12px 2px #bcb9b980;\n\n /* Breakpoints */\n\n --will-lg: 1140px;\n --will-md: 960px;\n --will-sm: 600px;\n --will-xl: 1280px;\n --will-xs: 0px;\n}\n\n/* Typography */\n\n.will-root h1, h2, h3, h4, h5, h6 {\n font-weight: 700;\n} \n\n.will-root p, h1, h2, h3, h4, h5, h6, span {\n margin: 0;\n padding: 0;\n}\n\n\n/* Integration fixes */\n\n.will-root p {\n margin: 0 !important;\n}\n\n.will-root button {\n line-height: normal !important;\n}\n";
|
|
547
|
+
var css_248z$c = "@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap');\n\n.will-root * {\n font-family: 'Montserrat', sans-serif;\n}\n\n.will-root {\n \n box-sizing: border-box;\n font-size: 14px;\n \n color: #1E1E1E;\n \n /* Palette */\n --will-primary: #374269;\n --will-secondary: #374269;\n --will-grey: #ABA7AF;\n --will-white: #fff;\n --will-white-transparent: #ffffffcf;\n --will-black: #000;\n --will-onahau: #CDEEFF;\n --will-text: #5A5959;\n --will-charcoal-blue: #384265;\n --will-transparent-white: rgba(255, 255, 255, 0.30);\n --will-transparent-black: rgba(171, 167, 175, 0.30);\n\n /* Confines */\n --will-box-shadow-dark: 0px 2px 12px 2px #a1a1a180;\n --will-box-shadow-light: 0px 2px 12px 2px #bcb9b980;\n\n /* Breakpoints */\n\n --will-lg: 1140px;\n --will-md: 960px;\n --will-sm: 600px;\n --will-xl: 1280px;\n --will-xs: 0px;\n}\n\n/* Typography */\n\n.will-root h1, h2, h3, h4, h5, h6 {\n font-weight: 700;\n} \n\n.will-root p, h1, h2, h3, h4, h5, h6, span {\n margin: 0;\n padding: 0;\n}\n\n\n/* Integration fixes */\n\n.will-root p {\n margin: 0 !important;\n}\n\n.will-root button {\n line-height: normal !important;\n}\n";
|
|
548
548
|
styleInject(css_248z$c);
|
|
549
549
|
|
|
550
550
|
var useAwaitRender = function () {
|
|
@@ -2829,7 +2829,7 @@ instance.loadNamespaces;
|
|
|
2829
2829
|
instance.loadLanguages;
|
|
2830
2830
|
|
|
2831
2831
|
var calendar$1 = {
|
|
2832
|
-
label: "
|
|
2832
|
+
label: "Dates",
|
|
2833
2833
|
roomsLabelPlaceholder: "Add check-in and check-out",
|
|
2834
2834
|
eventsLabelPlaceholder: "Add search dates",
|
|
2835
2835
|
startDate: "Start date",
|
|
@@ -2867,12 +2867,20 @@ var nights$1 = "nights";
|
|
|
2867
2867
|
var checkIn$1 = "check-in";
|
|
2868
2868
|
var checkOut$1 = "check-out";
|
|
2869
2869
|
var search$1 = "Search";
|
|
2870
|
+
var apply$1 = "Apply";
|
|
2871
|
+
var clearDates$1 = "Clear dates";
|
|
2872
|
+
var noCheckIn$1 = "No check-in";
|
|
2873
|
+
var noCheckOut$1 = "No check-out";
|
|
2870
2874
|
var enCommon = {
|
|
2871
2875
|
night: night$1,
|
|
2872
2876
|
nights: nights$1,
|
|
2873
2877
|
checkIn: checkIn$1,
|
|
2874
2878
|
checkOut: checkOut$1,
|
|
2875
|
-
search: search$1
|
|
2879
|
+
search: search$1,
|
|
2880
|
+
apply: apply$1,
|
|
2881
|
+
clearDates: clearDates$1,
|
|
2882
|
+
noCheckIn: noCheckIn$1,
|
|
2883
|
+
noCheckOut: noCheckOut$1
|
|
2876
2884
|
};
|
|
2877
2885
|
|
|
2878
2886
|
var calendar = {
|
|
@@ -2916,12 +2924,20 @@ var nights = "yötä";
|
|
|
2916
2924
|
var checkIn = "check-in";
|
|
2917
2925
|
var checkOut = "check-out";
|
|
2918
2926
|
var search = "Hae";
|
|
2927
|
+
var apply = "Apply";
|
|
2928
|
+
var clearDates = "Clear dates";
|
|
2929
|
+
var noCheckIn = "No check-in";
|
|
2930
|
+
var noCheckOut = "No check-out";
|
|
2919
2931
|
var fiCommon = {
|
|
2920
2932
|
night: night,
|
|
2921
2933
|
nights: nights,
|
|
2922
2934
|
checkIn: checkIn,
|
|
2923
2935
|
checkOut: checkOut,
|
|
2924
|
-
search: search
|
|
2936
|
+
search: search,
|
|
2937
|
+
apply: apply,
|
|
2938
|
+
clearDates: clearDates,
|
|
2939
|
+
noCheckIn: noCheckIn,
|
|
2940
|
+
noCheckOut: noCheckOut
|
|
2925
2941
|
};
|
|
2926
2942
|
|
|
2927
2943
|
var urlParams = typeof window !== 'undefined'
|
|
@@ -10790,85 +10806,190 @@ var reactResponsiveExports = reactResponsive.exports;
|
|
|
10790
10806
|
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}";
|
|
10791
10807
|
styleInject(css_248z$9);
|
|
10792
10808
|
|
|
10793
|
-
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
|
|
10809
|
+
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";
|
|
10794
10810
|
styleInject(css_248z$8);
|
|
10795
10811
|
|
|
10796
10812
|
var Calendar = React__default.forwardRef(function (_a, ref) {
|
|
10797
10813
|
var _b;
|
|
10798
|
-
var calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange,
|
|
10814
|
+
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;
|
|
10799
10815
|
// Translations
|
|
10800
|
-
var t = useTranslation('
|
|
10816
|
+
var t = useTranslation('common').t;
|
|
10801
10817
|
var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
|
|
10818
|
+
var today = startOfDay(new Date());
|
|
10819
|
+
var selectedStartDate = calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from;
|
|
10802
10820
|
React__default.useEffect(function () {
|
|
10803
10821
|
if (!calendarRange)
|
|
10804
10822
|
setCalendarRange(undefined);
|
|
10805
10823
|
}, []);
|
|
10806
|
-
|
|
10807
|
-
|
|
10808
|
-
|
|
10809
|
-
|
|
10810
|
-
|
|
10811
|
-
|
|
10812
|
-
|
|
10813
|
-
|
|
10814
|
-
|
|
10815
|
-
|
|
10816
|
-
|
|
10817
|
-
|
|
10818
|
-
|
|
10819
|
-
|
|
10820
|
-
|
|
10821
|
-
|
|
10822
|
-
|
|
10823
|
-
|
|
10824
|
-
return isAfter(date.from, (range === null || range === void 0 ? void 0 : range.from) || 1) &&
|
|
10825
|
-
isBefore(date.from, (range === null || range === void 0 ? void 0 : range.to) || 1);
|
|
10826
|
-
});
|
|
10827
|
-
var handleTooltip = function (type) {
|
|
10828
|
-
var calendarButton = e.currentTarget;
|
|
10829
|
-
var calendarTooltip = document.querySelector('.will-calendar-tooltip');
|
|
10830
|
-
if (calendarButton && calendarTooltip) {
|
|
10831
|
-
if (type) {
|
|
10832
|
-
calendarButton.appendChild(calendarTooltip);
|
|
10833
|
-
calendarTooltip.style.display = 'block';
|
|
10834
|
-
calendarButton.style.overflow = 'visible';
|
|
10835
|
-
calendarButton.style.position = 'relative';
|
|
10836
|
-
}
|
|
10837
|
-
else {
|
|
10838
|
-
calendarTooltip.style.display = 'none';
|
|
10839
|
-
}
|
|
10840
|
-
}
|
|
10841
|
-
};
|
|
10842
|
-
if (isNextDayDisabled) {
|
|
10843
|
-
setOpenTooltip('next');
|
|
10844
|
-
handleTooltip('next');
|
|
10845
|
-
setCalendarRange(undefined);
|
|
10824
|
+
// Handle tooltip
|
|
10825
|
+
React__default.useEffect(function () {
|
|
10826
|
+
if (typeof document === 'undefined')
|
|
10827
|
+
return;
|
|
10828
|
+
var calendarTooltip = document.querySelector('.will-calendar-tooltip');
|
|
10829
|
+
var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
|
|
10830
|
+
var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
|
|
10831
|
+
var calendarButtons = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
|
|
10832
|
+
var calendarButtonsCheckOut = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
|
|
10833
|
+
var calendarMonthContainer = document.querySelector('.will-filter-bar-calendar .rdp-months');
|
|
10834
|
+
var tooltipClones = [];
|
|
10835
|
+
var tooltipClonesCheckOut = [];
|
|
10836
|
+
if (calendarTooltip && calendarButtons.length > 0) {
|
|
10837
|
+
calendarButtons.forEach(function (element) {
|
|
10838
|
+
var tooltipClone = calendarTooltip.cloneNode(true);
|
|
10839
|
+
element.appendChild(tooltipClone);
|
|
10840
|
+
tooltipClones.push(tooltipClone);
|
|
10841
|
+
});
|
|
10846
10842
|
}
|
|
10847
|
-
|
|
10848
|
-
|
|
10849
|
-
|
|
10850
|
-
|
|
10843
|
+
if (calendarTooltipCheckOut && calendarButtonsCheckOut.length > 0) {
|
|
10844
|
+
calendarButtonsCheckOut.forEach(function (element) {
|
|
10845
|
+
var tooltipClone = calendarTooltipCheckOut.cloneNode(true);
|
|
10846
|
+
element.appendChild(tooltipClone);
|
|
10847
|
+
tooltipClonesCheckOut.push(tooltipClone);
|
|
10848
|
+
});
|
|
10849
|
+
}
|
|
10850
|
+
if (loadingSpinner && calendarMonthContainer) {
|
|
10851
|
+
calendarMonthContainer.appendChild(loadingSpinner);
|
|
10852
|
+
}
|
|
10853
|
+
return function () {
|
|
10854
|
+
tooltipClones.forEach(function (clone) { return clone.remove(); });
|
|
10855
|
+
tooltipClonesCheckOut.forEach(function (clone) { return clone.remove(); });
|
|
10856
|
+
};
|
|
10857
|
+
}, [calendarRange, updateCalendar]);
|
|
10858
|
+
// Handle loading spinner
|
|
10859
|
+
React__default.useEffect(function () {
|
|
10860
|
+
if (typeof document === 'undefined')
|
|
10861
|
+
return;
|
|
10862
|
+
var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
|
|
10863
|
+
if (loadingData) {
|
|
10864
|
+
if (loadingSpinner)
|
|
10865
|
+
loadingSpinner.style.display = 'flex';
|
|
10851
10866
|
}
|
|
10852
10867
|
else {
|
|
10853
|
-
|
|
10854
|
-
|
|
10855
|
-
handleTooltip('');
|
|
10868
|
+
if (loadingSpinner)
|
|
10869
|
+
loadingSpinner.style.display = 'none';
|
|
10856
10870
|
}
|
|
10857
|
-
};
|
|
10871
|
+
}, [loadingData]);
|
|
10872
|
+
// Handle disable dates by page
|
|
10873
|
+
var disabledDatesByPage = handleDisabledDatesByPage({
|
|
10874
|
+
today: today,
|
|
10875
|
+
selectedPath: selectedPath,
|
|
10876
|
+
disableCalendarDates: disableCalendarDates,
|
|
10877
|
+
});
|
|
10858
10878
|
return (React__default.createElement("div", { className: "will-filter-bar-calendar", ref: ref },
|
|
10859
10879
|
React__default.createElement("div", { className: "will-calendar-filter-container" },
|
|
10860
10880
|
React__default.createElement(DayPicker, { id: "will-calendar", mode: "range", locale: language === 'en' ? enUS : fi, numberOfMonths: !isTablet ? 2 : 1, weekStartsOn: 1, selected: calendarRange, onSelect: function (range, days, activeModifiers, e) {
|
|
10861
|
-
return
|
|
10881
|
+
return handleSelectedCheckIn({
|
|
10882
|
+
range: range,
|
|
10883
|
+
e: e,
|
|
10884
|
+
disableCalendarDates: disableCalendarDates,
|
|
10885
|
+
setCalendarRange: setCalendarRange,
|
|
10886
|
+
setDisabledDates: setDisabledDates,
|
|
10887
|
+
calendarRange: calendarRange,
|
|
10888
|
+
});
|
|
10862
10889
|
}, modifiersClassNames: {
|
|
10863
10890
|
today: 'my-today',
|
|
10864
|
-
|
|
10865
|
-
|
|
10866
|
-
}, captionLayout: "dropdown-buttons", defaultMonth: selectedStartDate ||
|
|
10891
|
+
booked: 'booked',
|
|
10892
|
+
disabledAfterCheckIn: 'disabled-after-check-in',
|
|
10893
|
+
}, captionLayout: "dropdown-buttons", defaultMonth: selectedStartDate ||
|
|
10894
|
+
(((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
|
|
10895
|
+
? disableCalendarDates.disabledDates[0].from
|
|
10896
|
+
: today), disabled: disabledDatesByPage.length
|
|
10897
|
+
? disabledDatesByPage
|
|
10898
|
+
: (disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.length)
|
|
10899
|
+
? disabledDates
|
|
10900
|
+
: (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) || [], fromMonth: today, onMonthChange: function (val) {
|
|
10901
|
+
requestDates && setUpdateCalendar
|
|
10902
|
+
? (requestDates(val), setUpdateCalendar(function (prev) { return !prev; }))
|
|
10903
|
+
: null;
|
|
10904
|
+
}, modifiers: {
|
|
10905
|
+
booked: disabledDatesByPage.length
|
|
10906
|
+
? disabledDatesByPage
|
|
10907
|
+
: (disabledDates === null || disabledDates === void 0 ? void 0 : disabledDates.length)
|
|
10908
|
+
? disabledDates
|
|
10909
|
+
: (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) || [],
|
|
10910
|
+
disabledAfterCheckIn: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
|
|
10911
|
+
? [{ after: calendarRange.from }]
|
|
10912
|
+
: [],
|
|
10913
|
+
} }),
|
|
10867
10914
|
React__default.createElement("div", { className: 'will-calendar-tooltip' },
|
|
10868
|
-
React__default.createElement("div", null,
|
|
10869
|
-
|
|
10870
|
-
|
|
10915
|
+
React__default.createElement("div", null, t('noCheckIn'))),
|
|
10916
|
+
React__default.createElement("div", { className: 'will-calendar-tooltip-check-out' },
|
|
10917
|
+
React__default.createElement("div", null, t('noCheckOut'))),
|
|
10918
|
+
React__default.createElement("div", { className: 'will-calendar-spinner' }, "Loading..."))));
|
|
10871
10919
|
});
|
|
10920
|
+
/////////
|
|
10921
|
+
var handleSelectedCheckIn = function (_a) {
|
|
10922
|
+
var _b;
|
|
10923
|
+
var range = _a.range; _a.e; var disableCalendarDates = _a.disableCalendarDates, setCalendarRange = _a.setCalendarRange, setDisabledDates = _a.setDisabledDates, calendarRange = _a.calendarRange;
|
|
10924
|
+
// Calendar dates select logic
|
|
10925
|
+
var dateFormat = 'dd-MM-yyyy';
|
|
10926
|
+
var rangeFrom = (range === null || range === void 0 ? void 0 : range.from) ? format(range.from, dateFormat) : null;
|
|
10927
|
+
var rangeTo = (range === null || range === void 0 ? void 0 : range.to) ? format(range.to, dateFormat) : null;
|
|
10928
|
+
var calendarFrom = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
|
|
10929
|
+
? format(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from, dateFormat)
|
|
10930
|
+
: null;
|
|
10931
|
+
var calendarTo = (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to)
|
|
10932
|
+
? format(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to, dateFormat)
|
|
10933
|
+
: null;
|
|
10934
|
+
var checkOutRange = ((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.availableDates) === null || _b === void 0 ? void 0 : _b.length)
|
|
10935
|
+
? disableCalendarDates.availableDates.find(function (checkInDate) {
|
|
10936
|
+
return format(checkInDate.checkIn || 1, dateFormat) ===
|
|
10937
|
+
format((range === null || range === void 0 ? void 0 : range.from) || 1, dateFormat);
|
|
10938
|
+
})
|
|
10939
|
+
: null;
|
|
10940
|
+
if (rangeFrom &&
|
|
10941
|
+
rangeFrom !== calendarTo &&
|
|
10942
|
+
checkOutRange &&
|
|
10943
|
+
setDisabledDates) {
|
|
10944
|
+
var checkIn = addDays(checkOutRange.checkIn, 1);
|
|
10945
|
+
var firstCheckOut = addDays(checkOutRange.firstCheckOut, -1);
|
|
10946
|
+
var noDatesRange = format(checkIn, dateFormat) ===
|
|
10947
|
+
format(checkOutRange.firstCheckOut, dateFormat);
|
|
10948
|
+
setDisabledDates(__spreadArray$1(__spreadArray$1([], __read(((disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) || [])), false), [
|
|
10949
|
+
{
|
|
10950
|
+
from: noDatesRange ? undefined : checkIn,
|
|
10951
|
+
to: noDatesRange ? undefined : firstCheckOut,
|
|
10952
|
+
},
|
|
10953
|
+
{ after: checkOutRange === null || checkOutRange === void 0 ? void 0 : checkOutRange.lastCheckOut },
|
|
10954
|
+
], false));
|
|
10955
|
+
}
|
|
10956
|
+
if (rangeFrom && rangeFrom === calendarTo) {
|
|
10957
|
+
return;
|
|
10958
|
+
}
|
|
10959
|
+
else if ((rangeTo && rangeFrom && rangeFrom === rangeTo) ||
|
|
10960
|
+
(!rangeTo && !rangeFrom)) {
|
|
10961
|
+
setCalendarRange(undefined);
|
|
10962
|
+
setDisabledDates && setDisabledDates([]);
|
|
10963
|
+
}
|
|
10964
|
+
else if (calendarFrom && rangeFrom && rangeFrom !== calendarFrom) {
|
|
10965
|
+
setCalendarRange({
|
|
10966
|
+
from: range === null || range === void 0 ? void 0 : range.from,
|
|
10967
|
+
to: undefined,
|
|
10968
|
+
});
|
|
10969
|
+
}
|
|
10970
|
+
else {
|
|
10971
|
+
setCalendarRange(range);
|
|
10972
|
+
}
|
|
10973
|
+
};
|
|
10974
|
+
var handleDisabledDatesByPage = function (_a) {
|
|
10975
|
+
var _b, _c, _d;
|
|
10976
|
+
var disableCalendarDates = _a.disableCalendarDates, selectedPath = _a.selectedPath, today = _a.today;
|
|
10977
|
+
var daysToOffsetCalendar = (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDatesByPage) && selectedPath
|
|
10978
|
+
? [
|
|
10979
|
+
(_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDatesByPage) === null || _b === void 0 ? void 0 : _b.find(function (item) { return selectedPath === item.page; }),
|
|
10980
|
+
]
|
|
10981
|
+
: [];
|
|
10982
|
+
return daysToOffsetCalendar.length
|
|
10983
|
+
? [
|
|
10984
|
+
{
|
|
10985
|
+
from: addDays(today, daysToOffsetCalendar.length && ((_c = daysToOffsetCalendar[0]) === null || _c === void 0 ? void 0 : _c.offset)
|
|
10986
|
+
? (_d = daysToOffsetCalendar[0]) === null || _d === void 0 ? void 0 : _d.offset
|
|
10987
|
+
: -2),
|
|
10988
|
+
to: addDays(today, -100),
|
|
10989
|
+
},
|
|
10990
|
+
]
|
|
10991
|
+
: [];
|
|
10992
|
+
};
|
|
10872
10993
|
|
|
10873
10994
|
var parseDates = function (_a) {
|
|
10874
10995
|
var calendarRange = _a.calendarRange;
|
|
@@ -11185,7 +11306,7 @@ var css_248z$1 = ".will-root {\n z-index: 999;\n width: fit-content;\n min-wi
|
|
|
11185
11306
|
styleInject(css_248z$1);
|
|
11186
11307
|
|
|
11187
11308
|
function FilterBar(_a) {
|
|
11188
|
-
var language = _a.language, _b = _a.ageCategories, ageCategories = _b === void 0 ? AGE_CATEGORIES_FALLBACK : _b, _c = _a.redirectUrl, redirectUrl = _c === void 0 ? REDIRECT_URL_FALLBACK : _c, palette = _a.palette, onSubmit = _a.onSubmit, fullWidth = _a.fullWidth,
|
|
11309
|
+
var language = _a.language, _b = _a.ageCategories, ageCategories = _b === void 0 ? AGE_CATEGORIES_FALLBACK : _b, _c = _a.redirectUrl, redirectUrl = _c === void 0 ? REDIRECT_URL_FALLBACK : _c, palette = _a.palette, onSubmit = _a.onSubmit, fullWidth = _a.fullWidth, disableCalendarDates = _a.disableCalendarDates, mode = _a.mode, tabs = _a.tabs;
|
|
11189
11310
|
var themePalette = useTheme({ palette: palette });
|
|
11190
11311
|
// Translations
|
|
11191
11312
|
useUpdateTranslations({ language: language });
|
|
@@ -11232,7 +11353,7 @@ function FilterBar(_a) {
|
|
|
11232
11353
|
React__default.createElement(SubmitButton, { onClick: handleSubmit, startIcon: React__default.createElement(FaSearch, null), label: t('common:search') })),
|
|
11233
11354
|
selectedFilter && (React__default.createElement("div", { className: "will-filter-bar-container ".concat(mode || 'light'), style: (!tabs || tabs.length < 2) && !isMobile ? { top: 66 } : {} },
|
|
11234
11355
|
React__default.createElement(CloseButton, { handleClose: function () { return handleSelectedFilter(false); } }),
|
|
11235
|
-
selectedFilter === FilterSections.CALENDAR && (React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, ref: filtersRef,
|
|
11356
|
+
selectedFilter === FilterSections.CALENDAR && (React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, ref: filtersRef, disableCalendarDates: disableCalendarDates, selectedPath: selectedPath, language: language })),
|
|
11236
11357
|
selectedFilter === FilterSections.GUESTS && (React__default.createElement(Guests, { updateGuestsCount: updateGuestsCount, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, ref: filtersRef })),
|
|
11237
11358
|
selectedFilter === FilterSections.CATEGORIES && (React__default.createElement(Categories, { categories: categories, setCategories: setCategories }))))));
|
|
11238
11359
|
}
|
|
@@ -11256,18 +11377,41 @@ var REDIRECT_URL_FALLBACK = 'http://localhost:3000/';
|
|
|
11256
11377
|
var useFilterCalendar = function (_a) {
|
|
11257
11378
|
var onSubmit = _a.onSubmit, setToggleCalendar = _a.setToggleCalendar;
|
|
11258
11379
|
var _b = __read(React__default.useState(), 2), calendarRange = _b[0], setCalendarRange = _b[1];
|
|
11380
|
+
var _c = __read(React__default.useState([]), 2), disabledDates = _c[0], setDisabledDates = _c[1];
|
|
11381
|
+
var _d = __read(React__default.useState(false), 2), updateCalendar = _d[0], setUpdateCalendar = _d[1];
|
|
11382
|
+
React__default.useEffect(function () {
|
|
11383
|
+
if (typeof window === 'undefined')
|
|
11384
|
+
return;
|
|
11385
|
+
var urlSearchParams = new URLSearchParams(window.location.search);
|
|
11386
|
+
var startDateParam = urlSearchParams.get('startDate');
|
|
11387
|
+
var endDateParam = urlSearchParams.get('endDate');
|
|
11388
|
+
if (startDateParam && endDateParam) {
|
|
11389
|
+
setCalendarRange({
|
|
11390
|
+
from: new Date(startDateParam),
|
|
11391
|
+
to: new Date(endDateParam),
|
|
11392
|
+
});
|
|
11393
|
+
}
|
|
11394
|
+
}, []);
|
|
11395
|
+
React__default.useEffect(function () {
|
|
11396
|
+
onSubmit(calendarRange);
|
|
11397
|
+
}, []);
|
|
11259
11398
|
var handleSubmit = function () {
|
|
11260
11399
|
setToggleCalendar(false);
|
|
11261
11400
|
return onSubmit(calendarRange);
|
|
11262
11401
|
};
|
|
11263
11402
|
var handleClearDates = function () {
|
|
11403
|
+
setDisabledDates([]);
|
|
11264
11404
|
setCalendarRange(undefined);
|
|
11265
11405
|
};
|
|
11266
11406
|
return {
|
|
11267
11407
|
handleSubmit: handleSubmit,
|
|
11268
11408
|
handleClearDates: handleClearDates,
|
|
11269
11409
|
setCalendarRange: setCalendarRange,
|
|
11410
|
+
setDisabledDates: setDisabledDates,
|
|
11411
|
+
setUpdateCalendar: setUpdateCalendar,
|
|
11270
11412
|
calendarRange: calendarRange,
|
|
11413
|
+
disabledDates: disabledDates,
|
|
11414
|
+
updateCalendar: updateCalendar,
|
|
11271
11415
|
};
|
|
11272
11416
|
};
|
|
11273
11417
|
|
|
@@ -11275,12 +11419,12 @@ var css_248z = ".will-root .will-calendar-wrapper {\n box-shadow: var(--will-
|
|
|
11275
11419
|
styleInject(css_248z);
|
|
11276
11420
|
|
|
11277
11421
|
function FilterCalendar(_a) {
|
|
11278
|
-
var calendarOffset = _a.calendarOffset, language = _a.language, palette = _a.palette, onSubmit = _a.onSubmit,
|
|
11422
|
+
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;
|
|
11279
11423
|
var themePalette = useTheme({ palette: palette });
|
|
11280
11424
|
// Translations
|
|
11281
11425
|
useUpdateTranslations({ language: language });
|
|
11282
11426
|
var t = useTranslation().t;
|
|
11283
|
-
var _b = useFilterCalendar({ onSubmit: onSubmit, setToggleCalendar: setToggleCalendar }), handleSubmit = _b.handleSubmit, setCalendarRange = _b.setCalendarRange, handleClearDates = _b.handleClearDates, calendarRange = _b.calendarRange;
|
|
11427
|
+
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;
|
|
11284
11428
|
// Display component after fully loaded
|
|
11285
11429
|
useAwaitRender();
|
|
11286
11430
|
// Handle close filter section
|
|
@@ -11293,7 +11437,7 @@ function FilterCalendar(_a) {
|
|
|
11293
11437
|
React__default.createElement("h2", null, t('filterBar:calendar.title')),
|
|
11294
11438
|
React__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
|
|
11295
11439
|
React__default.createElement("div", { className: "will-calendar-main" },
|
|
11296
|
-
React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language,
|
|
11440
|
+
React__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 })),
|
|
11297
11441
|
React__default.createElement("div", { className: "will-calendar-footer" },
|
|
11298
11442
|
React__default.createElement("div", { className: "will-calendar-footer-dates" },
|
|
11299
11443
|
React__default.createElement("div", null,
|
|
@@ -11308,8 +11452,8 @@ function FilterCalendar(_a) {
|
|
|
11308
11452
|
}) || t('common:checkOut'))),
|
|
11309
11453
|
!!nights && (React__default.createElement("span", null, "".concat(nights, " ").concat(t("common:".concat(nights > 1 ? 'nights' : 'night')))))),
|
|
11310
11454
|
React__default.createElement("div", { className: "will-calendar-footer-actions" },
|
|
11311
|
-
React__default.createElement(SubmitButton, { onClick: handleClearDates, disabled: !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from), label:
|
|
11312
|
-
React__default.createElement(SubmitButton, { onClick: handleSubmit, label: t("common:
|
|
11455
|
+
React__default.createElement(SubmitButton, { onClick: handleClearDates, disabled: !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from), label: t("common:clearDates") }),
|
|
11456
|
+
React__default.createElement(SubmitButton, { onClick: handleSubmit, label: t("common:apply"), disabled: !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) || !(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) })))))));
|
|
11313
11457
|
}
|
|
11314
11458
|
|
|
11315
11459
|
exports.Button = Button$1;
|