willba-component-library 0.2.23 → 0.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.esm.js +94 -100
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +93 -99
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +93 -99
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/core/components/calendar/Calendar.css +24 -6
- package/src/core/components/calendar/Calendar.tsx +123 -115
- package/src/locales/en/common.json +2 -1
- package/src/locales/fi/common.json +2 -1
package/lib/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React__default from 'react';
|
|
2
|
-
import React__default__default, { useState, createContext, useContext, useRef, useEffect, forwardRef } from 'react';
|
|
2
|
+
import React__default__default, { useState, createContext, useContext, useRef, useEffect, forwardRef, useMemo } from 'react';
|
|
3
3
|
|
|
4
4
|
/******************************************************************************
|
|
5
5
|
Copyright (c) Microsoft Corporation.
|
|
@@ -2851,6 +2851,7 @@ var apply$1 = "Apply";
|
|
|
2851
2851
|
var clearDates$1 = "Clear dates";
|
|
2852
2852
|
var noCheckIn$1 = "Room not available";
|
|
2853
2853
|
var noCheckOut$1 = "Check-out not available";
|
|
2854
|
+
var checkOutOnly$1 = "Check-out only";
|
|
2854
2855
|
var enCommon = {
|
|
2855
2856
|
night: night$1,
|
|
2856
2857
|
nights: nights$1,
|
|
@@ -2860,7 +2861,8 @@ var enCommon = {
|
|
|
2860
2861
|
apply: apply$1,
|
|
2861
2862
|
clearDates: clearDates$1,
|
|
2862
2863
|
noCheckIn: noCheckIn$1,
|
|
2863
|
-
noCheckOut: noCheckOut$1
|
|
2864
|
+
noCheckOut: noCheckOut$1,
|
|
2865
|
+
checkOutOnly: checkOutOnly$1
|
|
2864
2866
|
};
|
|
2865
2867
|
|
|
2866
2868
|
var calendar = {
|
|
@@ -2908,6 +2910,7 @@ var apply = "Aseta";
|
|
|
2908
2910
|
var clearDates = "Tyhjennä";
|
|
2909
2911
|
var noCheckIn = "Huone ei saatavilla";
|
|
2910
2912
|
var noCheckOut = "Uloskirjaus ei saatavilla";
|
|
2913
|
+
var checkOutOnly = "Vain uloskirjaus";
|
|
2911
2914
|
var fiCommon = {
|
|
2912
2915
|
night: night,
|
|
2913
2916
|
nights: nights,
|
|
@@ -2917,7 +2920,8 @@ var fiCommon = {
|
|
|
2917
2920
|
apply: apply,
|
|
2918
2921
|
clearDates: clearDates,
|
|
2919
2922
|
noCheckIn: noCheckIn,
|
|
2920
|
-
noCheckOut: noCheckOut
|
|
2923
|
+
noCheckOut: noCheckOut,
|
|
2924
|
+
checkOutOnly: checkOutOnly
|
|
2921
2925
|
};
|
|
2922
2926
|
|
|
2923
2927
|
var urlParams = typeof window !== 'undefined'
|
|
@@ -10786,7 +10790,7 @@ var reactResponsiveExports = reactResponsive.exports;
|
|
|
10786
10790
|
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
10791
|
styleInject(css_248z$9);
|
|
10788
10792
|
|
|
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:
|
|
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.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.will-root .will-calendar-filter-container .will-calendar-tooltip-overlapping-date {\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.will-root .will-calendar-filter-container .will-calendar-tooltip-overlapping-date > 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.will-root .will-calendar-filter-container .will-calendar-tooltip-overlapping-date::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.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip-overlapping-date {\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 .rdp-day_selected.rdp-day_range_start.no-active-selection,\n.will-root .will-calendar-filter-container .rdp-day_selected.rdp-day_range_middle.no-active-selection,\n.will-root .will-calendar-filter-container .rdp-day_selected.rdp-day_range_end.no-active-selection {\n background-color: var(--will-grey);\n}\n\n/* Overlapping date */\n\n.will-root .will-calendar-filter-container .overlapping-date {\n user-select: none;\n pointer-events: none;\n \n}\n\n.will-root .will-calendar-filter-container .overlapping-date:hover {\n cursor: not-allowed;\n}\n\n\n";
|
|
10790
10794
|
styleInject(css_248z$8);
|
|
10791
10795
|
|
|
10792
10796
|
var Calendar = forwardRef(function (_a, ref) {
|
|
@@ -10797,54 +10801,6 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10797
10801
|
var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
|
|
10798
10802
|
var today = startOfDay(new Date());
|
|
10799
10803
|
var selectedStartDate = calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from;
|
|
10800
|
-
useEffect(function () {
|
|
10801
|
-
if (!calendarRange) {
|
|
10802
|
-
setCalendarRange(undefined);
|
|
10803
|
-
}
|
|
10804
|
-
else if (calendarRange.from && calendarRange.to) {
|
|
10805
|
-
handleSelectedCheckIn({
|
|
10806
|
-
range: calendarRange,
|
|
10807
|
-
disableCalendarDates: disableCalendarDates,
|
|
10808
|
-
setCalendarRange: setCalendarRange,
|
|
10809
|
-
setDisabledDates: setDisabledDates,
|
|
10810
|
-
calendarRange: calendarRange,
|
|
10811
|
-
});
|
|
10812
|
-
}
|
|
10813
|
-
}, [disableCalendarDates, calendarRange]);
|
|
10814
|
-
// Handle tooltip
|
|
10815
|
-
useEffect(function () {
|
|
10816
|
-
if (typeof document === 'undefined' || !showFeedback)
|
|
10817
|
-
return;
|
|
10818
|
-
var calendarTooltip = document.querySelector('.will-calendar-tooltip');
|
|
10819
|
-
var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
|
|
10820
|
-
var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
|
|
10821
|
-
var calendarButtons = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
|
|
10822
|
-
var calendarButtonsCheckOut = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
|
|
10823
|
-
var calendarMonthContainer = document.querySelector('.will-filter-bar-calendar .rdp-months');
|
|
10824
|
-
var tooltipClones = [];
|
|
10825
|
-
var tooltipClonesCheckOut = [];
|
|
10826
|
-
if (calendarTooltip && calendarButtons.length > 0) {
|
|
10827
|
-
calendarButtons.forEach(function (element) {
|
|
10828
|
-
var tooltipClone = calendarTooltip.cloneNode(true);
|
|
10829
|
-
element.appendChild(tooltipClone);
|
|
10830
|
-
tooltipClones.push(tooltipClone);
|
|
10831
|
-
});
|
|
10832
|
-
}
|
|
10833
|
-
if (calendarTooltipCheckOut && calendarButtonsCheckOut.length > 0) {
|
|
10834
|
-
calendarButtonsCheckOut.forEach(function (element) {
|
|
10835
|
-
var tooltipClone = calendarTooltipCheckOut.cloneNode(true);
|
|
10836
|
-
element.appendChild(tooltipClone);
|
|
10837
|
-
tooltipClonesCheckOut.push(tooltipClone);
|
|
10838
|
-
});
|
|
10839
|
-
}
|
|
10840
|
-
if (loadingSpinner && calendarMonthContainer) {
|
|
10841
|
-
calendarMonthContainer.appendChild(loadingSpinner);
|
|
10842
|
-
}
|
|
10843
|
-
return function () {
|
|
10844
|
-
tooltipClones.forEach(function (clone) { return clone.remove(); });
|
|
10845
|
-
tooltipClonesCheckOut.forEach(function (clone) { return clone.remove(); });
|
|
10846
|
-
};
|
|
10847
|
-
}, [calendarRange, updateCalendar]);
|
|
10848
10804
|
// Handle loading spinner
|
|
10849
10805
|
useEffect(function () {
|
|
10850
10806
|
if (typeof document === 'undefined')
|
|
@@ -10860,9 +10816,10 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10860
10816
|
}
|
|
10861
10817
|
}, [loadingData]);
|
|
10862
10818
|
// Handle overlapping availableDates.lastCheckOut and disabledDates.start
|
|
10863
|
-
|
|
10819
|
+
var _c = __read(useState(undefined), 2), overlappingDate = _c[0], setOverlappingDate = _c[1];
|
|
10820
|
+
useMemo(function () {
|
|
10864
10821
|
var _a, _b;
|
|
10865
|
-
if (disableCalendarDates) {
|
|
10822
|
+
if (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.availableDates) {
|
|
10866
10823
|
var dateFormat_1 = 'dd-MM-yyyy';
|
|
10867
10824
|
var availableDateMap_1 = new Map();
|
|
10868
10825
|
(_a = disableCalendarDates.availableDates) === null || _a === void 0 ? void 0 : _a.forEach(function (available) {
|
|
@@ -10871,6 +10828,7 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10871
10828
|
var updatedDisabledDates = (_b = disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.map(function (dateRange) {
|
|
10872
10829
|
var formattedFromDate = format(dateRange.from, dateFormat_1);
|
|
10873
10830
|
if (availableDateMap_1.has(formattedFromDate)) {
|
|
10831
|
+
setOverlappingDate(dateRange);
|
|
10874
10832
|
return __assign$2(__assign$2({}, dateRange), { from: addDays(dateRange.from, 1) });
|
|
10875
10833
|
}
|
|
10876
10834
|
return dateRange;
|
|
@@ -10884,6 +10842,55 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10884
10842
|
selectedPath: selectedPath,
|
|
10885
10843
|
disableCalendarDates: disableCalendarDates,
|
|
10886
10844
|
});
|
|
10845
|
+
// Handle tooltip
|
|
10846
|
+
useEffect(function () {
|
|
10847
|
+
if (typeof document === 'undefined' || !showFeedback)
|
|
10848
|
+
return;
|
|
10849
|
+
var calendarTooltip = document.querySelector('.will-calendar-tooltip');
|
|
10850
|
+
var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
|
|
10851
|
+
var calendarTooltipOverlappingDate = document.querySelector('.will-calendar-tooltip-overlapping-date');
|
|
10852
|
+
var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
|
|
10853
|
+
var calendarButtons = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
|
|
10854
|
+
var calendarButtonsCheckOut = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
|
|
10855
|
+
var calendarMonthContainer = document.querySelector('.will-filter-bar-calendar .rdp-months');
|
|
10856
|
+
var calendarOverlappingDate = document.querySelector('.will-filter-bar-calendar .rdp-cell:has(.overlapping-date)');
|
|
10857
|
+
var appendedOverlappingDateTooltip = document.querySelector('.will-filter-bar-calendar .rdp-cell .will-calendar-tooltip-overlapping-date');
|
|
10858
|
+
var tooltipClones = [];
|
|
10859
|
+
var tooltipClonesCheckOut = [];
|
|
10860
|
+
if (calendarTooltip && calendarButtons.length > 0) {
|
|
10861
|
+
calendarButtons.forEach(function (element) {
|
|
10862
|
+
var tooltipClone = calendarTooltip.cloneNode(true);
|
|
10863
|
+
element.appendChild(tooltipClone);
|
|
10864
|
+
tooltipClones.push(tooltipClone);
|
|
10865
|
+
});
|
|
10866
|
+
}
|
|
10867
|
+
if (calendarTooltipCheckOut && calendarButtonsCheckOut.length > 0) {
|
|
10868
|
+
calendarButtonsCheckOut.forEach(function (element) {
|
|
10869
|
+
var tooltipClone = calendarTooltipCheckOut.cloneNode(true);
|
|
10870
|
+
element.appendChild(tooltipClone);
|
|
10871
|
+
tooltipClonesCheckOut.push(tooltipClone);
|
|
10872
|
+
});
|
|
10873
|
+
}
|
|
10874
|
+
if (loadingSpinner && calendarMonthContainer) {
|
|
10875
|
+
calendarMonthContainer.appendChild(loadingSpinner);
|
|
10876
|
+
}
|
|
10877
|
+
if (calendarOverlappingDate &&
|
|
10878
|
+
calendarTooltipOverlappingDate &&
|
|
10879
|
+
!appendedOverlappingDateTooltip &&
|
|
10880
|
+
!calendarRange) {
|
|
10881
|
+
calendarOverlappingDate.appendChild(calendarTooltipOverlappingDate);
|
|
10882
|
+
}
|
|
10883
|
+
else if (calendarRange && appendedOverlappingDateTooltip) {
|
|
10884
|
+
appendedOverlappingDateTooltip.style.visibility = 'hidden';
|
|
10885
|
+
}
|
|
10886
|
+
else if (!calendarRange && appendedOverlappingDateTooltip) {
|
|
10887
|
+
appendedOverlappingDateTooltip.style.visibility = 'visible';
|
|
10888
|
+
}
|
|
10889
|
+
return function () {
|
|
10890
|
+
tooltipClones.forEach(function (clone) { return clone.remove(); });
|
|
10891
|
+
tooltipClonesCheckOut.forEach(function (clone) { return clone.remove(); });
|
|
10892
|
+
};
|
|
10893
|
+
}, [calendarRange, updateCalendar, overlappingDate]);
|
|
10887
10894
|
return (React__default__default.createElement("div", { className: "will-filter-bar-calendar", ref: ref },
|
|
10888
10895
|
React__default__default.createElement("div", { className: "will-calendar-filter-container" },
|
|
10889
10896
|
React__default__default.createElement(DayPicker, { id: "will-calendar", mode: "range", locale: language === 'en' ? enUS : fi, numberOfMonths: !isTablet ? 2 : 1, weekStartsOn: 1, selected: calendarRange, onSelect: function (range) {
|
|
@@ -10893,12 +10900,8 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10893
10900
|
setCalendarRange: setCalendarRange,
|
|
10894
10901
|
setDisabledDates: setDisabledDates,
|
|
10895
10902
|
calendarRange: calendarRange,
|
|
10903
|
+
overlappingDate: overlappingDate,
|
|
10896
10904
|
});
|
|
10897
|
-
}, modifiersClassNames: {
|
|
10898
|
-
today: 'my-today',
|
|
10899
|
-
booked: 'booked',
|
|
10900
|
-
disabledAfterCheckIn: 'disabled-after-check-in',
|
|
10901
|
-
noActiveSelection: 'no-active-selection',
|
|
10902
10905
|
}, captionLayout: "dropdown-buttons", defaultMonth: selectedStartDate ||
|
|
10903
10906
|
(((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
|
|
10904
10907
|
? disableCalendarDates.disabledDates[0].from
|
|
@@ -10910,6 +10913,14 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10910
10913
|
requestDates && setUpdateCalendar
|
|
10911
10914
|
? (requestDates(val), setUpdateCalendar(function (prev) { return !prev; }))
|
|
10912
10915
|
: null;
|
|
10916
|
+
}, modifiersClassNames: {
|
|
10917
|
+
today: 'my-today',
|
|
10918
|
+
booked: 'booked',
|
|
10919
|
+
disabledAfterCheckIn: 'disabled-after-check-in',
|
|
10920
|
+
overlappingDate: 'overlapping-date',
|
|
10921
|
+
noActiveSelectionStart: 'rdp-day_selected rdp-day_range_start no-active-selection ',
|
|
10922
|
+
noActiveSelectionMid: 'rdp-day_selected rdp-day_range_middle no-active-selection',
|
|
10923
|
+
noActiveSelectionEnd: 'rdp-day_selected rdp-day_range_end no-active-selection',
|
|
10913
10924
|
}, modifiers: {
|
|
10914
10925
|
booked: disabledDatesByPage.length
|
|
10915
10926
|
? disabledDatesByPage
|
|
@@ -10919,20 +10930,36 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10919
10930
|
disabledAfterCheckIn: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
|
|
10920
10931
|
? [{ after: calendarRange.from }]
|
|
10921
10932
|
: [],
|
|
10922
|
-
|
|
10923
|
-
? initialCalendarRange || []
|
|
10933
|
+
noActiveSelectionStart: !calendarRange
|
|
10934
|
+
? (initialCalendarRange === null || initialCalendarRange === void 0 ? void 0 : initialCalendarRange.from) || []
|
|
10935
|
+
: [],
|
|
10936
|
+
noActiveSelectionMid: !calendarRange &&
|
|
10937
|
+
(initialCalendarRange === null || initialCalendarRange === void 0 ? void 0 : initialCalendarRange.from) &&
|
|
10938
|
+
(initialCalendarRange === null || initialCalendarRange === void 0 ? void 0 : initialCalendarRange.to)
|
|
10939
|
+
? [
|
|
10940
|
+
{
|
|
10941
|
+
after: initialCalendarRange === null || initialCalendarRange === void 0 ? void 0 : initialCalendarRange.from,
|
|
10942
|
+
before: initialCalendarRange === null || initialCalendarRange === void 0 ? void 0 : initialCalendarRange.to,
|
|
10943
|
+
},
|
|
10944
|
+
]
|
|
10924
10945
|
: [],
|
|
10946
|
+
noActiveSelectionEnd: !calendarRange
|
|
10947
|
+
? (initialCalendarRange === null || initialCalendarRange === void 0 ? void 0 : initialCalendarRange.to) || []
|
|
10948
|
+
: [],
|
|
10949
|
+
overlappingDate: (!(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) && (overlappingDate === null || overlappingDate === void 0 ? void 0 : overlappingDate.from)) || [],
|
|
10925
10950
|
} }),
|
|
10926
10951
|
React__default__default.createElement("div", { className: 'will-calendar-tooltip' },
|
|
10927
10952
|
React__default__default.createElement("div", null, t('noCheckIn'))),
|
|
10928
10953
|
React__default__default.createElement("div", { className: 'will-calendar-tooltip-check-out' },
|
|
10929
10954
|
React__default__default.createElement("div", null, t('noCheckOut'))),
|
|
10955
|
+
React__default__default.createElement("div", { className: 'will-calendar-tooltip-overlapping-date' },
|
|
10956
|
+
React__default__default.createElement("div", null, t('checkOutOnly'))),
|
|
10930
10957
|
React__default__default.createElement("div", { className: 'will-calendar-spinner' }, "Loading..."))));
|
|
10931
10958
|
});
|
|
10932
10959
|
/////////
|
|
10933
10960
|
var handleSelectedCheckIn = function (_a) {
|
|
10934
10961
|
var _b;
|
|
10935
|
-
var range = _a.range, disableCalendarDates = _a.disableCalendarDates, setCalendarRange = _a.setCalendarRange, setDisabledDates = _a.setDisabledDates, calendarRange = _a.calendarRange;
|
|
10962
|
+
var range = _a.range, disableCalendarDates = _a.disableCalendarDates, setCalendarRange = _a.setCalendarRange, setDisabledDates = _a.setDisabledDates, calendarRange = _a.calendarRange, overlappingDate = _a.overlappingDate;
|
|
10936
10963
|
// Calendar dates select logic
|
|
10937
10964
|
var dateFormat = 'dd-MM-yyyy';
|
|
10938
10965
|
var rangeFrom = (range === null || range === void 0 ? void 0 : range.from) ? format(range.from, dateFormat) : null;
|
|
@@ -10943,6 +10970,9 @@ var handleSelectedCheckIn = function (_a) {
|
|
|
10943
10970
|
(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to)
|
|
10944
10971
|
? format(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to, dateFormat)
|
|
10945
10972
|
: null;
|
|
10973
|
+
var overlappingDateFrom = (overlappingDate === null || overlappingDate === void 0 ? void 0 : overlappingDate.from)
|
|
10974
|
+
? format(overlappingDate.from, dateFormat)
|
|
10975
|
+
: null;
|
|
10946
10976
|
var checkOutRange = ((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.availableDates) === null || _b === void 0 ? void 0 : _b.length)
|
|
10947
10977
|
? disableCalendarDates.availableDates.find(function (checkInDate) {
|
|
10948
10978
|
return format(checkInDate.checkIn || 1, dateFormat) ===
|
|
@@ -10954,18 +10984,6 @@ var handleSelectedCheckIn = function (_a) {
|
|
|
10954
10984
|
var firstCheckOut = addDays(checkOutRange.firstCheckOut, -1);
|
|
10955
10985
|
var noDatesRange = format(checkIn, dateFormat) ===
|
|
10956
10986
|
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
|
-
// })
|
|
10969
10987
|
setDisabledDates(__spreadArray$1(__spreadArray$1([], __read(((disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) || [])), false), [
|
|
10970
10988
|
{
|
|
10971
10989
|
from: noDatesRange ? undefined : checkIn,
|
|
@@ -10975,7 +10993,8 @@ var handleSelectedCheckIn = function (_a) {
|
|
|
10975
10993
|
], false));
|
|
10976
10994
|
}
|
|
10977
10995
|
if ((rangeTo && rangeFrom && rangeFrom === rangeTo) ||
|
|
10978
|
-
(!rangeTo && !rangeFrom)
|
|
10996
|
+
(!rangeTo && !rangeFrom) ||
|
|
10997
|
+
rangeFrom === overlappingDateFrom) {
|
|
10979
10998
|
setCalendarRange(undefined);
|
|
10980
10999
|
setDisabledDates && setDisabledDates([]);
|
|
10981
11000
|
}
|
|
@@ -11008,31 +11027,6 @@ var handleDisabledDatesByPage = function (_a) {
|
|
|
11008
11027
|
]
|
|
11009
11028
|
: [];
|
|
11010
11029
|
};
|
|
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
|
-
// }
|
|
11036
11030
|
|
|
11037
11031
|
var parseDates = function (_a) {
|
|
11038
11032
|
var calendarRange = _a.calendarRange;
|