willba-component-library 0.2.22 → 0.2.24

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.
@@ -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
@@ -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,11 +2861,12 @@ 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 = {
2867
- label: "Ajankohta",
2869
+ label: "Päivät",
2868
2870
  roomsLabelPlaceholder: "Lisää check-in ja check-out",
2869
2871
  eventsLabelPlaceholder: "Lisää aikaväli",
2870
2872
  startDate: "Alku",
@@ -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,41 +10790,71 @@ 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\n";
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 .no-active-selection {\n background-color: var(--will-onahau);\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) {
10793
10797
  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;
10798
+ 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
10799
  // Translations
10796
10800
  var t = useTranslation('common').t;
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;
10804
+ // Handle loading spinner
10800
10805
  useEffect(function () {
10801
- if (!calendarRange) {
10802
- setCalendarRange(undefined);
10806
+ if (typeof document === 'undefined')
10807
+ return;
10808
+ var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
10809
+ if (loadingData) {
10810
+ if (loadingSpinner)
10811
+ loadingSpinner.style.display = 'flex';
10803
10812
  }
10804
- else if (calendarRange.from && calendarRange.to) {
10805
- handleSelectedCheckIn({
10806
- range: calendarRange,
10807
- disableCalendarDates: disableCalendarDates,
10808
- setCalendarRange: setCalendarRange,
10809
- setDisabledDates: setDisabledDates,
10810
- calendarRange: calendarRange,
10813
+ else {
10814
+ if (loadingSpinner)
10815
+ loadingSpinner.style.display = 'none';
10816
+ }
10817
+ }, [loadingData]);
10818
+ // Handle overlapping availableDates.lastCheckOut and disabledDates.start
10819
+ var _c = __read(useState(undefined), 2), overlappingDate = _c[0], setOverlappingDate = _c[1];
10820
+ useMemo(function () {
10821
+ var _a, _b;
10822
+ if (disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.availableDates) {
10823
+ var dateFormat_1 = 'dd-MM-yyyy';
10824
+ var availableDateMap_1 = new Map();
10825
+ (_a = disableCalendarDates.availableDates) === null || _a === void 0 ? void 0 : _a.forEach(function (available) {
10826
+ availableDateMap_1.set(format(available.lastCheckOut, dateFormat_1), available);
10811
10827
  });
10828
+ var updatedDisabledDates = (_b = disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.map(function (dateRange) {
10829
+ var formattedFromDate = format(dateRange.from, dateFormat_1);
10830
+ if (availableDateMap_1.has(formattedFromDate)) {
10831
+ setOverlappingDate(dateRange);
10832
+ return __assign$2(__assign$2({}, dateRange), { from: addDays(dateRange.from, 1) });
10833
+ }
10834
+ return dateRange;
10835
+ });
10836
+ disableCalendarDates.disabledDates = updatedDisabledDates;
10812
10837
  }
10813
- }, [disableCalendarDates, calendarRange]);
10838
+ }, [disableCalendarDates]);
10839
+ // Handle disable dates by page
10840
+ var disabledDatesByPage = handleDisabledDatesByPage({
10841
+ today: today,
10842
+ selectedPath: selectedPath,
10843
+ disableCalendarDates: disableCalendarDates,
10844
+ });
10814
10845
  // Handle tooltip
10815
10846
  useEffect(function () {
10816
- if (typeof document === 'undefined')
10847
+ if (typeof document === 'undefined' || !showFeedback)
10817
10848
  return;
10818
10849
  var calendarTooltip = document.querySelector('.will-calendar-tooltip');
10819
10850
  var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
10851
+ var calendarTooltipOverlappingDate = document.querySelector('.will-calendar-tooltip-overlapping-date');
10820
10852
  var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
10821
10853
  var calendarButtons = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
10822
10854
  var calendarButtonsCheckOut = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
10823
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');
10824
10858
  var tooltipClones = [];
10825
10859
  var tooltipClonesCheckOut = [];
10826
10860
  if (calendarTooltip && calendarButtons.length > 0) {
@@ -10840,31 +10874,23 @@ var Calendar = forwardRef(function (_a, ref) {
10840
10874
  if (loadingSpinner && calendarMonthContainer) {
10841
10875
  calendarMonthContainer.appendChild(loadingSpinner);
10842
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
+ }
10843
10889
  return function () {
10844
10890
  tooltipClones.forEach(function (clone) { return clone.remove(); });
10845
10891
  tooltipClonesCheckOut.forEach(function (clone) { return clone.remove(); });
10846
10892
  };
10847
- }, [calendarRange, updateCalendar]);
10848
- // Handle loading spinner
10849
- useEffect(function () {
10850
- if (typeof document === 'undefined')
10851
- return;
10852
- var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
10853
- if (loadingData) {
10854
- if (loadingSpinner)
10855
- loadingSpinner.style.display = 'flex';
10856
- }
10857
- else {
10858
- if (loadingSpinner)
10859
- loadingSpinner.style.display = 'none';
10860
- }
10861
- }, [loadingData]);
10862
- // Handle disable dates by page
10863
- var disabledDatesByPage = handleDisabledDatesByPage({
10864
- today: today,
10865
- selectedPath: selectedPath,
10866
- disableCalendarDates: disableCalendarDates,
10867
- });
10893
+ }, [calendarRange, updateCalendar, overlappingDate]);
10868
10894
  return (React__default__default.createElement("div", { className: "will-filter-bar-calendar", ref: ref },
10869
10895
  React__default__default.createElement("div", { className: "will-calendar-filter-container" },
10870
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) {
@@ -10879,6 +10905,8 @@ var Calendar = forwardRef(function (_a, ref) {
10879
10905
  today: 'my-today',
10880
10906
  booked: 'booked',
10881
10907
  disabledAfterCheckIn: 'disabled-after-check-in',
10908
+ noActiveSelection: 'no-active-selection',
10909
+ overlappingDate: 'overlapping-date',
10882
10910
  }, captionLayout: "dropdown-buttons", defaultMonth: selectedStartDate ||
10883
10911
  (((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
10884
10912
  ? disableCalendarDates.disabledDates[0].from
@@ -10899,11 +10927,17 @@ var Calendar = forwardRef(function (_a, ref) {
10899
10927
  disabledAfterCheckIn: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
10900
10928
  ? [{ after: calendarRange.from }]
10901
10929
  : [],
10930
+ noActiveSelection: !calendarRange
10931
+ ? initialCalendarRange || []
10932
+ : [],
10933
+ overlappingDate: (!(calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from) && (overlappingDate === null || overlappingDate === void 0 ? void 0 : overlappingDate.from)) || [],
10902
10934
  } }),
10903
10935
  React__default__default.createElement("div", { className: 'will-calendar-tooltip' },
10904
10936
  React__default__default.createElement("div", null, t('noCheckIn'))),
10905
10937
  React__default__default.createElement("div", { className: 'will-calendar-tooltip-check-out' },
10906
10938
  React__default__default.createElement("div", null, t('noCheckOut'))),
10939
+ React__default__default.createElement("div", { className: 'will-calendar-tooltip-overlapping-date' },
10940
+ React__default__default.createElement("div", null, t('checkOutOnly'))),
10907
10941
  React__default__default.createElement("div", { className: 'will-calendar-spinner' }, "Loading..."))));
10908
10942
  });
10909
10943
  /////////
@@ -10926,10 +10960,7 @@ var handleSelectedCheckIn = function (_a) {
10926
10960
  format((range === null || range === void 0 ? void 0 : range.from) || 1, dateFormat);
10927
10961
  })
10928
10962
  : null;
10929
- if (rangeFrom &&
10930
- // rangeFrom !== calendarTo &&
10931
- checkOutRange &&
10932
- setDisabledDates) {
10963
+ if (rangeFrom && checkOutRange && setDisabledDates) {
10933
10964
  var checkIn = addDays(checkOutRange.checkIn, 1);
10934
10965
  var firstCheckOut = addDays(checkOutRange.firstCheckOut, -1);
10935
10966
  var noDatesRange = format(checkIn, dateFormat) ===
@@ -11363,10 +11394,11 @@ var AGE_CATEGORIES_FALLBACK = [
11363
11394
  var REDIRECT_URL_FALLBACK = 'http://localhost:3000/';
11364
11395
 
11365
11396
  var useFilterCalendar = function (_a) {
11366
- var onSubmit = _a.onSubmit, setToggleCalendar = _a.setToggleCalendar;
11397
+ var onSubmit = _a.onSubmit, setToggleCalendar = _a.setToggleCalendar, noActiveSelection = _a.noActiveSelection;
11367
11398
  var _b = __read(useState(), 2), calendarRange = _b[0], setCalendarRange = _b[1];
11368
- var _c = __read(useState([]), 2), disabledDates = _c[0], setDisabledDates = _c[1];
11369
- var _d = __read(useState(false), 2), updateCalendar = _d[0], setUpdateCalendar = _d[1];
11399
+ var _c = __read(useState(), 2), initialCalendarRange = _c[0], setInitialCalendarRange = _c[1];
11400
+ var _d = __read(useState([]), 2), disabledDates = _d[0], setDisabledDates = _d[1];
11401
+ var _e = __read(useState(false), 2), updateCalendar = _e[0], setUpdateCalendar = _e[1];
11370
11402
  useEffect(function () {
11371
11403
  if (typeof window === 'undefined')
11372
11404
  return;
@@ -11374,10 +11406,15 @@ var useFilterCalendar = function (_a) {
11374
11406
  var startDateParam = urlSearchParams.get('startDate');
11375
11407
  var endDateParam = urlSearchParams.get('endDate');
11376
11408
  if (startDateParam && endDateParam) {
11377
- setCalendarRange({
11378
- from: new Date(startDateParam),
11379
- to: new Date(endDateParam),
11380
- });
11409
+ noActiveSelection
11410
+ ? setInitialCalendarRange({
11411
+ from: new Date(startDateParam),
11412
+ to: new Date(endDateParam),
11413
+ })
11414
+ : setCalendarRange({
11415
+ from: new Date(startDateParam),
11416
+ to: new Date(endDateParam),
11417
+ });
11381
11418
  }
11382
11419
  }, []);
11383
11420
  var handleSubmit = function () {
@@ -11397,6 +11434,7 @@ var useFilterCalendar = function (_a) {
11397
11434
  calendarRange: calendarRange,
11398
11435
  disabledDates: disabledDates,
11399
11436
  updateCalendar: updateCalendar,
11437
+ initialCalendarRange: initialCalendarRange,
11400
11438
  };
11401
11439
  };
11402
11440
 
@@ -11404,12 +11442,12 @@ var css_248z = ".will-root .will-calendar-wrapper {\n box-shadow: var(--will-
11404
11442
  styleInject(css_248z);
11405
11443
 
11406
11444
  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;
11445
+ 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
11446
  var themePalette = useTheme({ palette: palette });
11409
11447
  // Translations
11410
11448
  useUpdateTranslations({ language: language });
11411
11449
  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;
11450
+ 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
11451
  // Display component after fully loaded
11414
11452
  useAwaitRender();
11415
11453
  // Handle close filter section
@@ -11422,7 +11460,7 @@ function FilterCalendar(_a) {
11422
11460
  React__default__default.createElement("h2", null, t('filterBar:calendar.title')),
11423
11461
  React__default__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
11424
11462
  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 })),
11463
+ 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
11464
  React__default__default.createElement("div", { className: "will-calendar-footer" },
11427
11465
  React__default__default.createElement("div", { className: "will-calendar-footer-dates" },
11428
11466
  React__default__default.createElement("div", null,