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.
- package/lib/components/FilterCalendar/FilterCalendar.d.ts +1 -1
- package/lib/components/FilterCalendar/hooks/useFilterCalendar.d.ts +3 -1
- package/lib/core/components/calendar/CalendarTypes.d.ts +3 -0
- package/lib/index.d.ts +4 -1
- package/lib/index.esm.js +90 -52
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +89 -51
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +89 -51
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FilterCalendar/FilterCalendar.stories.tsx +9 -836
- package/src/components/FilterCalendar/FilterCalendar.tsx +7 -1
- package/src/components/FilterCalendar/hooks/useFilterCalendar.ts +19 -5
- package/src/core/components/calendar/Calendar.css +26 -4
- package/src/core/components/calendar/Calendar.tsx +96 -39
- package/src/core/components/calendar/CalendarTypes.ts +3 -0
- package/src/locales/en/common.json +2 -1
- package/src/locales/fi/common.json +2 -1
- package/src/locales/fi/filterBar.json +1 -1
|
@@ -2,4 +2,4 @@ import React from 'react';
|
|
|
2
2
|
import '../../themes/Default.css';
|
|
3
3
|
import { FilterCalendarTypes } from './FilterCalendarTypes';
|
|
4
4
|
import './FilterCalendar.css';
|
|
5
|
-
export default function FilterCalendar({ calendarOffset, language, palette, onSubmit, disableCalendarDates, toggleCalendar, loadingData, setToggleCalendar, requestDates, }: FilterCalendarTypes): React.JSX.Element;
|
|
5
|
+
export default function FilterCalendar({ calendarOffset, language, palette, onSubmit, disableCalendarDates, toggleCalendar, loadingData, setToggleCalendar, requestDates, showFeedback, noActiveSelection, }: FilterCalendarTypes): React.JSX.Element;
|
|
@@ -3,8 +3,9 @@ import { DateRange, Matcher } from 'react-day-picker';
|
|
|
3
3
|
type Props = {
|
|
4
4
|
onSubmit: (val: any) => void;
|
|
5
5
|
setToggleCalendar: (val: boolean) => void;
|
|
6
|
+
noActiveSelection?: boolean;
|
|
6
7
|
};
|
|
7
|
-
export declare const useFilterCalendar: ({ onSubmit, setToggleCalendar }: Props) => {
|
|
8
|
+
export declare const useFilterCalendar: ({ onSubmit, setToggleCalendar, noActiveSelection, }: Props) => {
|
|
8
9
|
handleSubmit: () => void;
|
|
9
10
|
handleClearDates: () => void;
|
|
10
11
|
setCalendarRange: import("react").Dispatch<import("react").SetStateAction<DateRange | undefined>>;
|
|
@@ -13,5 +14,6 @@ export declare const useFilterCalendar: ({ onSubmit, setToggleCalendar }: Props)
|
|
|
13
14
|
calendarRange: DateRange | undefined;
|
|
14
15
|
disabledDates: Matcher[];
|
|
15
16
|
updateCalendar: boolean;
|
|
17
|
+
initialCalendarRange: DateRange | undefined;
|
|
16
18
|
};
|
|
17
19
|
export {};
|
|
@@ -30,4 +30,7 @@ export type CalendarTypes = {
|
|
|
30
30
|
updateCalendar?: boolean;
|
|
31
31
|
setUpdateCalendar?: (arg: (prev: boolean) => boolean) => void;
|
|
32
32
|
loadingData?: boolean;
|
|
33
|
+
initialCalendarRange?: DateRange | undefined;
|
|
34
|
+
showFeedback?: boolean;
|
|
35
|
+
noActiveSelection?: boolean;
|
|
33
36
|
};
|
package/lib/index.d.ts
CHANGED
|
@@ -59,6 +59,9 @@ type CalendarTypes = {
|
|
|
59
59
|
updateCalendar?: boolean;
|
|
60
60
|
setUpdateCalendar?: (arg: (prev: boolean) => boolean) => void;
|
|
61
61
|
loadingData?: boolean;
|
|
62
|
+
initialCalendarRange?: DateRange | undefined;
|
|
63
|
+
showFeedback?: boolean;
|
|
64
|
+
noActiveSelection?: boolean;
|
|
62
65
|
};
|
|
63
66
|
|
|
64
67
|
type Palette = {
|
|
@@ -108,6 +111,6 @@ interface FilterCalendarTypes extends Partial<CalendarTypes> {
|
|
|
108
111
|
setToggleCalendar: (val: boolean) => void;
|
|
109
112
|
}
|
|
110
113
|
|
|
111
|
-
declare function FilterCalendar({ calendarOffset, language, palette, onSubmit, disableCalendarDates, toggleCalendar, loadingData, setToggleCalendar, requestDates, }: FilterCalendarTypes): React.JSX.Element;
|
|
114
|
+
declare function FilterCalendar({ calendarOffset, language, palette, onSubmit, disableCalendarDates, toggleCalendar, loadingData, setToggleCalendar, requestDates, showFeedback, noActiveSelection, }: FilterCalendarTypes): React.JSX.Element;
|
|
112
115
|
|
|
113
116
|
export { Button, FilterBar, FilterCalendar, FilterCalendarTypes, Tab };
|
package/lib/index.esm.js
CHANGED
|
@@ -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: "
|
|
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 (
|
|
10802
|
-
|
|
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
|
|
10805
|
-
|
|
10806
|
-
|
|
10807
|
-
|
|
10808
|
-
|
|
10809
|
-
|
|
10810
|
-
|
|
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
|
|
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(
|
|
11369
|
-
var _d = __read(useState(
|
|
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
|
-
|
|
11378
|
-
|
|
11379
|
-
|
|
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,
|