willba-component-library 0.2.21 → 0.2.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/FilterCalendar/FilterCalendar.d.ts +1 -1
- package/lib/components/FilterCalendar/hooks/useFilterCalendar.d.ts +3 -1
- package/lib/core/components/calendar/CalendarTypes.d.ts +3 -0
- package/lib/core/utils/parseDate.d.ts +2 -1
- package/lib/index.d.ts +4 -1
- package/lib/index.esm.js +94 -30
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +94 -30
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +94 -30
- 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 +9 -1
- package/src/components/FilterCalendar/hooks/useFilterCalendar.ts +19 -10
- package/src/core/components/calendar/Calendar.css +6 -0
- package/src/core/components/calendar/Calendar.tsx +85 -8
- package/src/core/components/calendar/CalendarTypes.ts +3 -0
- package/src/core/utils/parseDate.tsx +10 -2
- package/src/locales/en/common.json +2 -2
- package/src/locales/fi/common.json +4 -4
- 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
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
type Props = {
|
|
2
2
|
date?: Date;
|
|
3
3
|
dateFormat?: string;
|
|
4
|
+
language?: string;
|
|
4
5
|
};
|
|
5
|
-
export declare const parseDate: ({ date, dateFormat }: Props) => string | null;
|
|
6
|
+
export declare const parseDate: ({ date, dateFormat, language, }: Props) => string | null;
|
|
6
7
|
export {};
|
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
|
@@ -2849,8 +2849,8 @@ var checkOut$1 = "check-out";
|
|
|
2849
2849
|
var search$1 = "Search";
|
|
2850
2850
|
var apply$1 = "Apply";
|
|
2851
2851
|
var clearDates$1 = "Clear dates";
|
|
2852
|
-
var noCheckIn$1 = "
|
|
2853
|
-
var noCheckOut$1 = "
|
|
2852
|
+
var noCheckIn$1 = "Room not available";
|
|
2853
|
+
var noCheckOut$1 = "Check-out not available";
|
|
2854
2854
|
var enCommon = {
|
|
2855
2855
|
night: night$1,
|
|
2856
2856
|
nights: nights$1,
|
|
@@ -2864,7 +2864,7 @@ var enCommon = {
|
|
|
2864
2864
|
};
|
|
2865
2865
|
|
|
2866
2866
|
var calendar = {
|
|
2867
|
-
label: "
|
|
2867
|
+
label: "Päivät",
|
|
2868
2868
|
roomsLabelPlaceholder: "Lisää check-in ja check-out",
|
|
2869
2869
|
eventsLabelPlaceholder: "Lisää aikaväli",
|
|
2870
2870
|
startDate: "Alku",
|
|
@@ -2904,10 +2904,10 @@ var nights = "yötä";
|
|
|
2904
2904
|
var checkIn = "check-in";
|
|
2905
2905
|
var checkOut = "check-out";
|
|
2906
2906
|
var search = "Hae";
|
|
2907
|
-
var apply = "
|
|
2908
|
-
var clearDates = "
|
|
2909
|
-
var noCheckIn = "
|
|
2910
|
-
var noCheckOut = "
|
|
2907
|
+
var apply = "Aseta";
|
|
2908
|
+
var clearDates = "Tyhjennä";
|
|
2909
|
+
var noCheckIn = "Huone ei saatavilla";
|
|
2910
|
+
var noCheckOut = "Uloskirjaus ei saatavilla";
|
|
2911
2911
|
var fiCommon = {
|
|
2912
2912
|
night: night,
|
|
2913
2913
|
nights: nights,
|
|
@@ -10786,12 +10786,12 @@ var reactResponsiveExports = reactResponsive.exports;
|
|
|
10786
10786
|
var css_248z$9 = ".rdp {\n --rdp-cell-size: 40px;\n --rdp-caption-font-size: 18px;\n --rdp-accent-color: #0000ff;\n --rdp-background-color: #e7edff;\n --rdp-accent-color-dark: #3003e1;\n --rdp-background-color-dark: #180270;\n --rdp-outline: 2px solid var(--rdp-accent-color); /* Outline border for focused elements */\n --rdp-outline-selected: 3px solid var(--rdp-accent-color); /* Outline border for focused _and_ selected elements */\n\n margin: 1em;\n}\n\n/* Hide elements for devices that are not screen readers */\n.rdp-vhidden {\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n background: transparent;\n border: 0;\n -moz-appearance: none;\n -webkit-appearance: none;\n appearance: none;\n position: absolute !important;\n top: 0;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n overflow: hidden !important;\n clip: rect(1px, 1px, 1px, 1px) !important;\n border: 0 !important;\n}\n\n/* Buttons */\n.rdp-button_reset {\n appearance: none;\n position: relative;\n margin: 0;\n padding: 0;\n cursor: default;\n color: inherit;\n background: none;\n font: inherit;\n\n -moz-appearance: none;\n -webkit-appearance: none;\n}\n\n.rdp-button_reset:focus-visible {\n /* Make sure to reset outline only when :focus-visible is supported */\n outline: none;\n}\n\n.rdp-button {\n border: 2px solid transparent;\n}\n\n.rdp-button[disabled]:not(.rdp-day_selected) {\n opacity: 0.25;\n}\n\n.rdp-button:not([disabled]) {\n cursor: pointer;\n}\n\n.rdp-button:focus-visible:not([disabled]) {\n color: inherit;\n background-color: var(--rdp-background-color);\n border: var(--rdp-outline);\n}\n\n.rdp-button:hover:not([disabled]):not(.rdp-day_selected) {\n background-color: var(--rdp-background-color);\n}\n\n.rdp-months {\n display: flex;\n}\n\n.rdp-month {\n margin: 0 1em;\n}\n\n.rdp-month:first-child {\n margin-left: 0;\n}\n\n.rdp-month:last-child {\n margin-right: 0;\n}\n\n.rdp-table {\n margin: 0;\n max-width: calc(var(--rdp-cell-size) * 7);\n border-collapse: collapse;\n}\n\n.rdp-with_weeknumber .rdp-table {\n max-width: calc(var(--rdp-cell-size) * 8);\n border-collapse: collapse;\n}\n\n.rdp-caption {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0;\n text-align: left;\n}\n\n.rdp-multiple_months .rdp-caption {\n position: relative;\n display: block;\n text-align: center;\n}\n\n.rdp-caption_dropdowns {\n position: relative;\n display: inline-flex;\n}\n\n.rdp-caption_label {\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n margin: 0;\n padding: 0 0.25em;\n white-space: nowrap;\n color: currentColor;\n border: 0;\n border: 2px solid transparent;\n font-family: inherit;\n font-size: var(--rdp-caption-font-size);\n font-weight: bold;\n}\n\n.rdp-nav {\n white-space: nowrap;\n}\n\n.rdp-multiple_months .rdp-caption_start .rdp-nav {\n position: absolute;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n}\n\n.rdp-multiple_months .rdp-caption_end .rdp-nav {\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n}\n\n.rdp-nav_button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--rdp-cell-size);\n height: var(--rdp-cell-size);\n padding: 0.25em;\n border-radius: 100%;\n}\n\n/* ---------- */\n/* Dropdowns */\n/* ---------- */\n\n.rdp-dropdown_year,\n.rdp-dropdown_month {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.rdp-dropdown {\n appearance: none;\n position: absolute;\n z-index: 2;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n margin: 0;\n padding: 0;\n cursor: inherit;\n opacity: 0;\n border: none;\n background-color: transparent;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n.rdp-dropdown[disabled] {\n opacity: unset;\n color: unset;\n}\n\n.rdp-dropdown:focus-visible:not([disabled]) + .rdp-caption_label {\n background-color: var(--rdp-background-color);\n border: var(--rdp-outline);\n border-radius: 6px;\n}\n\n.rdp-dropdown_icon {\n margin: 0 0 0 5px;\n}\n\n.rdp-head {\n border: 0;\n}\n\n.rdp-head_row,\n.rdp-row {\n height: 100%;\n}\n\n.rdp-head_cell {\n vertical-align: middle;\n font-size: 0.75em;\n font-weight: 700;\n text-align: center;\n height: 100%;\n height: var(--rdp-cell-size);\n padding: 0;\n text-transform: uppercase;\n}\n\n.rdp-tbody {\n border: 0;\n}\n\n.rdp-tfoot {\n margin: 0.5em;\n}\n\n.rdp-cell {\n width: var(--rdp-cell-size);\n height: 100%;\n height: var(--rdp-cell-size);\n padding: 0;\n text-align: center;\n}\n\n.rdp-weeknumber {\n font-size: 0.75em;\n}\n\n.rdp-weeknumber,\n.rdp-day {\n display: flex;\n overflow: hidden;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: var(--rdp-cell-size);\n max-width: var(--rdp-cell-size);\n height: var(--rdp-cell-size);\n margin: 0;\n border: 2px solid transparent;\n border-radius: 100%;\n}\n\n.rdp-day_today:not(.rdp-day_outside) {\n font-weight: bold;\n}\n\n.rdp-day_selected,\n.rdp-day_selected:focus-visible,\n.rdp-day_selected:hover {\n color: white;\n opacity: 1;\n background-color: var(--rdp-accent-color);\n}\n\n.rdp-day_outside {\n opacity: 0.5;\n}\n\n.rdp-day_selected:focus-visible {\n /* Since the background is the same use again the outline */\n outline: var(--rdp-outline);\n outline-offset: 2px;\n z-index: 1;\n}\n\n.rdp:not([dir='rtl']) .rdp-day_range_start:not(.rdp-day_range_end) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.rdp:not([dir='rtl']) .rdp-day_range_end:not(.rdp-day_range_start) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.rdp[dir='rtl'] .rdp-day_range_start:not(.rdp-day_range_end) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.rdp[dir='rtl'] .rdp-day_range_end:not(.rdp-day_range_start) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.rdp-day_range_end.rdp-day_range_start {\n border-radius: 100%;\n}\n\n.rdp-day_range_middle {\n border-radius: 0;\n}";
|
|
10787
10787
|
styleInject(css_248z$9);
|
|
10788
10788
|
|
|
10789
|
-
var css_248z$8 = ".will-calendar-filter-container {\n display: flex;\n justify-content: center;\n user-select: none;\n}\n\n/* Calendar overrides */\n\n\n.will-calendar-filter-container .DayPicker {\n font-size: 25px; /* Adjust this value to make the DayPicker bigger */\n}\n\n.will-calendar-filter-container .rdp-month {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 70px;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 70px;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav {\n border: 1px solid var(--will-primary);\n border-radius: 50%;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav svg {\n color: var(--will-primary);\n}\n\n\n.will-calendar-filter-container .rdp-month .rdp-caption {\n position: initial;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-caption > .rdp-caption_label,\n.will-calendar-filter-container .rdp-table .rdp-head {\n opacity: .6;\n}\n\n.will-calendar-filter-container .rdp-button_reset.rdp-button.rdp-day.rdp-day_selected {\n background-color: var(--will-primary);\n opacity: 1;\n}\n\n.will-calendar-filter-container .my-today:not(.rdp-day_selected) { \n font-weight: 700;\n opacity: 1;\n color: var(--will-primary);\n}\n\n.will-calendar-filter-container .rdp-cell {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-cell button {\n font-weight: 500;\n}\n\n.will-calendar-filter-container .rdp-cell button.booked {\n font-weight: 400;\n cursor: not-allowed;\n}\n\n.will-calendar-filter-container .rdp-cell .rdp-button[disabled] {\n opacity: 0.5;\n}\n\n@media (max-width: 960px) {\n .will-calendar-filter-container .rdp-month .rdp-nav {\n border: none;\n border-radius: initial;\n }\n\n .will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 10px;\n }\n \n .will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 10px;\n }\n}\n\n/* Tooltip */\n.will-root .will-calendar-filter-container .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out {\n position: absolute;\n top: -42px;\n transform: translateX(calc(-50% + 20px));\n display: none;\n white-space: nowrap;\n z-index: 2;\n}\n.will-root .will-calendar-filter-container .will-calendar-tooltip > div,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out> div {\n background-color: white;\n position: relative;\n padding: 5px 10px;\n border: 1px solid var(--will-primary);\n border-radius: 5px;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-tooltip::before,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out::before {\n content: \"\";\n width: 10px;\n height: 10px;\n border: 1px solid var(--will-primary);\n position: absolute;\n bottom: -4px;\n left:calc(50% - 5.555px);\n rotate: 45deg;\n z-index: 0;\n background-color: var(--will-white);\n}\n\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip-check-out {\n display: block;\n}\n\n/* Loading spinner */\n\n.will-root .will-calendar-filter-container .rdp-months {\n position: relative;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-spinner {\n position: absolute;\n top:0;\n bottom:0;\n left: 0;\n right: 0;\n background-color: var(--will-white-transparent);\n z-index: 3;\n display: none;\n justify-content: center;\n align-items: center;\n font-weight: 600;\n}\n\n\n";
|
|
10789
|
+
var css_248z$8 = ".will-calendar-filter-container {\n display: flex;\n justify-content: center;\n user-select: none;\n}\n\n/* Calendar overrides */\n\n\n.will-calendar-filter-container .DayPicker {\n font-size: 25px; /* Adjust this value to make the DayPicker bigger */\n}\n\n.will-calendar-filter-container .rdp-month {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 70px;\n}\n\n.will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 70px;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav {\n border: 1px solid var(--will-primary);\n border-radius: 50%;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-nav svg {\n color: var(--will-primary);\n}\n\n\n.will-calendar-filter-container .rdp-month .rdp-caption {\n position: initial;\n}\n\n.will-calendar-filter-container .rdp-month .rdp-caption > .rdp-caption_label,\n.will-calendar-filter-container .rdp-table .rdp-head {\n opacity: .6;\n}\n\n.will-calendar-filter-container .rdp-button_reset.rdp-button.rdp-day.rdp-day_selected {\n background-color: var(--will-primary);\n opacity: 1;\n}\n\n.will-calendar-filter-container .my-today:not(.rdp-day_selected) { \n font-weight: 700;\n opacity: 1;\n color: var(--will-primary);\n}\n\n.will-calendar-filter-container .rdp-cell {\n position: relative;\n}\n\n.will-calendar-filter-container .rdp-cell button {\n font-weight: 500;\n}\n\n.will-calendar-filter-container .rdp-cell button.booked {\n font-weight: 400;\n cursor: not-allowed;\n}\n\n.will-calendar-filter-container .rdp-cell .rdp-button[disabled] {\n opacity: 0.5;\n}\n\n@media (max-width: 960px) {\n .will-calendar-filter-container .rdp-month .rdp-nav {\n border: none;\n border-radius: initial;\n }\n\n .will-calendar-filter-container .rdp-month.rdp-caption_start {\n padding-left: 10px;\n }\n \n .will-calendar-filter-container .rdp-month.rdp-caption_end {\n padding-right: 10px;\n }\n}\n\n/* Tooltip */\n.will-root .will-calendar-filter-container .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out {\n position: absolute;\n top: -42px;\n transform: translateX(calc(-50% + 20px));\n display: none;\n white-space: nowrap;\n z-index: 2;\n}\n.will-root .will-calendar-filter-container .will-calendar-tooltip > div,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out> div {\n background-color: white;\n position: relative;\n padding: 5px 10px;\n border: 1px solid var(--will-primary);\n border-radius: 5px;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-tooltip::before,\n.will-root .will-calendar-filter-container .will-calendar-tooltip-check-out::before {\n content: \"\";\n width: 10px;\n height: 10px;\n border: 1px solid var(--will-primary);\n position: absolute;\n bottom: -4px;\n left:calc(50% - 5.555px);\n rotate: 45deg;\n z-index: 0;\n background-color: var(--will-white);\n}\n\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip,\n.will-root .will-calendar-filter-container .rdp-cell:hover .will-calendar-tooltip-check-out {\n display: block;\n}\n\n/* Loading spinner */\n\n.will-root .will-calendar-filter-container .rdp-months {\n position: relative;\n}\n\n.will-root .will-calendar-filter-container .will-calendar-spinner {\n position: absolute;\n top:0;\n bottom:0;\n left: 0;\n right: 0;\n background-color: var(--will-white-transparent);\n z-index: 3;\n display: none;\n justify-content: center;\n align-items: center;\n font-weight: 600;\n}\n\n/* No active selection */\n\n.will-root .will-calendar-filter-container .no-active-selection {\n background-color: lightgrey;\n}\n\n\n";
|
|
10790
10790
|
styleInject(css_248z$8);
|
|
10791
10791
|
|
|
10792
10792
|
var Calendar = forwardRef(function (_a, ref) {
|
|
10793
10793
|
var _b;
|
|
10794
|
-
var selectedPath = _a.selectedPath, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, language = _a.language, disableCalendarDates = _a.disableCalendarDates, requestDates = _a.requestDates, disabledDates = _a.disabledDates, setDisabledDates = _a.setDisabledDates, updateCalendar = _a.updateCalendar, setUpdateCalendar = _a.setUpdateCalendar, loadingData = _a.loadingData;
|
|
10794
|
+
var selectedPath = _a.selectedPath, calendarRange = _a.calendarRange, setCalendarRange = _a.setCalendarRange, language = _a.language, disableCalendarDates = _a.disableCalendarDates, requestDates = _a.requestDates, disabledDates = _a.disabledDates, setDisabledDates = _a.setDisabledDates, updateCalendar = _a.updateCalendar, setUpdateCalendar = _a.setUpdateCalendar, loadingData = _a.loadingData, initialCalendarRange = _a.initialCalendarRange, showFeedback = _a.showFeedback;
|
|
10795
10795
|
// Translations
|
|
10796
10796
|
var t = useTranslation('common').t;
|
|
10797
10797
|
var isTablet = reactResponsiveExports.useMediaQuery({ maxWidth: 960 });
|
|
@@ -10813,7 +10813,7 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10813
10813
|
}, [disableCalendarDates, calendarRange]);
|
|
10814
10814
|
// Handle tooltip
|
|
10815
10815
|
useEffect(function () {
|
|
10816
|
-
if (typeof document === 'undefined')
|
|
10816
|
+
if (typeof document === 'undefined' || !showFeedback)
|
|
10817
10817
|
return;
|
|
10818
10818
|
var calendarTooltip = document.querySelector('.will-calendar-tooltip');
|
|
10819
10819
|
var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
|
|
@@ -10859,6 +10859,25 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10859
10859
|
loadingSpinner.style.display = 'none';
|
|
10860
10860
|
}
|
|
10861
10861
|
}, [loadingData]);
|
|
10862
|
+
// Handle overlapping availableDates.lastCheckOut and disabledDates.start
|
|
10863
|
+
useEffect(function () {
|
|
10864
|
+
var _a, _b;
|
|
10865
|
+
if (disableCalendarDates) {
|
|
10866
|
+
var dateFormat_1 = 'dd-MM-yyyy';
|
|
10867
|
+
var availableDateMap_1 = new Map();
|
|
10868
|
+
(_a = disableCalendarDates.availableDates) === null || _a === void 0 ? void 0 : _a.forEach(function (available) {
|
|
10869
|
+
availableDateMap_1.set(format(available.lastCheckOut, dateFormat_1), available);
|
|
10870
|
+
});
|
|
10871
|
+
var updatedDisabledDates = (_b = disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.map(function (dateRange) {
|
|
10872
|
+
var formattedFromDate = format(dateRange.from, dateFormat_1);
|
|
10873
|
+
if (availableDateMap_1.has(formattedFromDate)) {
|
|
10874
|
+
return __assign$2(__assign$2({}, dateRange), { from: addDays(dateRange.from, 1) });
|
|
10875
|
+
}
|
|
10876
|
+
return dateRange;
|
|
10877
|
+
});
|
|
10878
|
+
disableCalendarDates.disabledDates = updatedDisabledDates;
|
|
10879
|
+
}
|
|
10880
|
+
}, [disableCalendarDates]);
|
|
10862
10881
|
// Handle disable dates by page
|
|
10863
10882
|
var disabledDatesByPage = handleDisabledDatesByPage({
|
|
10864
10883
|
today: today,
|
|
@@ -10879,6 +10898,7 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10879
10898
|
today: 'my-today',
|
|
10880
10899
|
booked: 'booked',
|
|
10881
10900
|
disabledAfterCheckIn: 'disabled-after-check-in',
|
|
10901
|
+
noActiveSelection: 'no-active-selection',
|
|
10882
10902
|
}, captionLayout: "dropdown-buttons", defaultMonth: selectedStartDate ||
|
|
10883
10903
|
(((_b = disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) === null || _b === void 0 ? void 0 : _b.length)
|
|
10884
10904
|
? disableCalendarDates.disabledDates[0].from
|
|
@@ -10899,6 +10919,9 @@ var Calendar = forwardRef(function (_a, ref) {
|
|
|
10899
10919
|
disabledAfterCheckIn: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
|
|
10900
10920
|
? [{ after: calendarRange.from }]
|
|
10901
10921
|
: [],
|
|
10922
|
+
noActiveSelection: !calendarRange
|
|
10923
|
+
? initialCalendarRange || []
|
|
10924
|
+
: [],
|
|
10902
10925
|
} }),
|
|
10903
10926
|
React__default__default.createElement("div", { className: 'will-calendar-tooltip' },
|
|
10904
10927
|
React__default__default.createElement("div", null, t('noCheckIn'))),
|
|
@@ -10926,14 +10949,23 @@ var handleSelectedCheckIn = function (_a) {
|
|
|
10926
10949
|
format((range === null || range === void 0 ? void 0 : range.from) || 1, dateFormat);
|
|
10927
10950
|
})
|
|
10928
10951
|
: null;
|
|
10929
|
-
if (rangeFrom &&
|
|
10930
|
-
// rangeFrom !== calendarTo &&
|
|
10931
|
-
checkOutRange &&
|
|
10932
|
-
setDisabledDates) {
|
|
10952
|
+
if (rangeFrom && checkOutRange && setDisabledDates) {
|
|
10933
10953
|
var checkIn = addDays(checkOutRange.checkIn, 1);
|
|
10934
10954
|
var firstCheckOut = addDays(checkOutRange.firstCheckOut, -1);
|
|
10935
10955
|
var noDatesRange = format(checkIn, dateFormat) ===
|
|
10936
10956
|
format(checkOutRange.firstCheckOut, dateFormat);
|
|
10957
|
+
// Handle overlapping availableDates.lastCheckOut and disabledDates.start
|
|
10958
|
+
// const filteredDisabledCalendarDates =
|
|
10959
|
+
// disableCalendarDates?.disabledDates?.map((dateRange) => {
|
|
10960
|
+
// if (
|
|
10961
|
+
// dateRange.from &&
|
|
10962
|
+
// format(dateRange.from, dateFormat) ===
|
|
10963
|
+
// format(checkOutRange.lastCheckOut, dateFormat)
|
|
10964
|
+
// ) {
|
|
10965
|
+
// return { ...dateRange, from: addDays(checkOutRange.lastCheckOut, 1) }
|
|
10966
|
+
// }
|
|
10967
|
+
// return dateRange
|
|
10968
|
+
// })
|
|
10937
10969
|
setDisabledDates(__spreadArray$1(__spreadArray$1([], __read(((disableCalendarDates === null || disableCalendarDates === void 0 ? void 0 : disableCalendarDates.disabledDates) || [])), false), [
|
|
10938
10970
|
{
|
|
10939
10971
|
from: noDatesRange ? undefined : checkIn,
|
|
@@ -10976,6 +11008,31 @@ var handleDisabledDatesByPage = function (_a) {
|
|
|
10976
11008
|
]
|
|
10977
11009
|
: [];
|
|
10978
11010
|
};
|
|
11011
|
+
// const handleOverlappingDates = ({
|
|
11012
|
+
// disableCalendarDates,
|
|
11013
|
+
// }: {
|
|
11014
|
+
// disableCalendarDates?: DisableCalendarDates
|
|
11015
|
+
// }): DisableCalendarDates | undefined => {
|
|
11016
|
+
// if (!disableCalendarDates) return undefined
|
|
11017
|
+
// const dateFormat = 'dd-MM-yyyy'
|
|
11018
|
+
// disableCalendarDates.disabledDates = disableCalendarDates.disabledDates?.map(
|
|
11019
|
+
// (dateRange) => {
|
|
11020
|
+
// const overlappingDate = disableCalendarDates.availableDates?.find(
|
|
11021
|
+
// (available) =>
|
|
11022
|
+
// format(available.lastCheckOut, dateFormat) ===
|
|
11023
|
+
// format(dateRange.from, dateFormat)
|
|
11024
|
+
// )
|
|
11025
|
+
// if (overlappingDate) {
|
|
11026
|
+
// return {
|
|
11027
|
+
// ...dateRange,
|
|
11028
|
+
// from: addDays(dateRange.from, 1),
|
|
11029
|
+
// }
|
|
11030
|
+
// }
|
|
11031
|
+
// return dateRange
|
|
11032
|
+
// }
|
|
11033
|
+
// )
|
|
11034
|
+
// return disableCalendarDates
|
|
11035
|
+
// }
|
|
10979
11036
|
|
|
10980
11037
|
var parseDates = function (_a) {
|
|
10981
11038
|
var calendarRange = _a.calendarRange;
|
|
@@ -10985,8 +11042,10 @@ var parseDates = function (_a) {
|
|
|
10985
11042
|
};
|
|
10986
11043
|
|
|
10987
11044
|
var parseDate = function (_a) {
|
|
10988
|
-
var date = _a.date, _b = _a.dateFormat, dateFormat = _b === void 0 ? 'dd.MM.yyyy' : _b;
|
|
10989
|
-
return date
|
|
11045
|
+
var date = _a.date, _b = _a.dateFormat, dateFormat = _b === void 0 ? 'dd.MM.yyyy' : _b, language = _a.language;
|
|
11046
|
+
return date
|
|
11047
|
+
? format(date, dateFormat, { locale: language === 'en' ? enUS : fi })
|
|
11048
|
+
: null;
|
|
10990
11049
|
};
|
|
10991
11050
|
|
|
10992
11051
|
var nightsCount = function (_a) {
|
|
@@ -11361,10 +11420,11 @@ var AGE_CATEGORIES_FALLBACK = [
|
|
|
11361
11420
|
var REDIRECT_URL_FALLBACK = 'http://localhost:3000/';
|
|
11362
11421
|
|
|
11363
11422
|
var useFilterCalendar = function (_a) {
|
|
11364
|
-
var onSubmit = _a.onSubmit, setToggleCalendar = _a.setToggleCalendar;
|
|
11423
|
+
var onSubmit = _a.onSubmit, setToggleCalendar = _a.setToggleCalendar, noActiveSelection = _a.noActiveSelection;
|
|
11365
11424
|
var _b = __read(useState(), 2), calendarRange = _b[0], setCalendarRange = _b[1];
|
|
11366
|
-
var _c = __read(useState(
|
|
11367
|
-
var _d = __read(useState(
|
|
11425
|
+
var _c = __read(useState(), 2), initialCalendarRange = _c[0], setInitialCalendarRange = _c[1];
|
|
11426
|
+
var _d = __read(useState([]), 2), disabledDates = _d[0], setDisabledDates = _d[1];
|
|
11427
|
+
var _e = __read(useState(false), 2), updateCalendar = _e[0], setUpdateCalendar = _e[1];
|
|
11368
11428
|
useEffect(function () {
|
|
11369
11429
|
if (typeof window === 'undefined')
|
|
11370
11430
|
return;
|
|
@@ -11372,16 +11432,17 @@ var useFilterCalendar = function (_a) {
|
|
|
11372
11432
|
var startDateParam = urlSearchParams.get('startDate');
|
|
11373
11433
|
var endDateParam = urlSearchParams.get('endDate');
|
|
11374
11434
|
if (startDateParam && endDateParam) {
|
|
11375
|
-
|
|
11376
|
-
|
|
11377
|
-
|
|
11378
|
-
|
|
11435
|
+
noActiveSelection
|
|
11436
|
+
? setInitialCalendarRange({
|
|
11437
|
+
from: new Date(startDateParam),
|
|
11438
|
+
to: new Date(endDateParam),
|
|
11439
|
+
})
|
|
11440
|
+
: setCalendarRange({
|
|
11441
|
+
from: new Date(startDateParam),
|
|
11442
|
+
to: new Date(endDateParam),
|
|
11443
|
+
});
|
|
11379
11444
|
}
|
|
11380
11445
|
}, []);
|
|
11381
|
-
// TODO - handle the onSubmit on calendar open
|
|
11382
|
-
// useEffect(() => {
|
|
11383
|
-
// onSubmit(calendarRange)
|
|
11384
|
-
// }, [])
|
|
11385
11446
|
var handleSubmit = function () {
|
|
11386
11447
|
setToggleCalendar(false);
|
|
11387
11448
|
return onSubmit(calendarRange);
|
|
@@ -11399,6 +11460,7 @@ var useFilterCalendar = function (_a) {
|
|
|
11399
11460
|
calendarRange: calendarRange,
|
|
11400
11461
|
disabledDates: disabledDates,
|
|
11401
11462
|
updateCalendar: updateCalendar,
|
|
11463
|
+
initialCalendarRange: initialCalendarRange,
|
|
11402
11464
|
};
|
|
11403
11465
|
};
|
|
11404
11466
|
|
|
@@ -11406,12 +11468,12 @@ var css_248z = ".will-root .will-calendar-wrapper {\n box-shadow: var(--will-
|
|
|
11406
11468
|
styleInject(css_248z);
|
|
11407
11469
|
|
|
11408
11470
|
function FilterCalendar(_a) {
|
|
11409
|
-
var calendarOffset = _a.calendarOffset, language = _a.language, palette = _a.palette, onSubmit = _a.onSubmit, disableCalendarDates = _a.disableCalendarDates, toggleCalendar = _a.toggleCalendar, loadingData = _a.loadingData, setToggleCalendar = _a.setToggleCalendar, requestDates = _a.requestDates;
|
|
11471
|
+
var calendarOffset = _a.calendarOffset, language = _a.language, palette = _a.palette, onSubmit = _a.onSubmit, disableCalendarDates = _a.disableCalendarDates, toggleCalendar = _a.toggleCalendar, loadingData = _a.loadingData, setToggleCalendar = _a.setToggleCalendar, requestDates = _a.requestDates, showFeedback = _a.showFeedback, noActiveSelection = _a.noActiveSelection;
|
|
11410
11472
|
var themePalette = useTheme({ palette: palette });
|
|
11411
11473
|
// Translations
|
|
11412
11474
|
useUpdateTranslations({ language: language });
|
|
11413
11475
|
var t = useTranslation().t;
|
|
11414
|
-
var _b = useFilterCalendar({ onSubmit: onSubmit, setToggleCalendar: setToggleCalendar }), handleSubmit = _b.handleSubmit, setCalendarRange = _b.setCalendarRange, handleClearDates = _b.handleClearDates, calendarRange = _b.calendarRange, disabledDates = _b.disabledDates, setDisabledDates = _b.setDisabledDates, updateCalendar = _b.updateCalendar, setUpdateCalendar = _b.setUpdateCalendar;
|
|
11476
|
+
var _b = useFilterCalendar({ onSubmit: onSubmit, setToggleCalendar: setToggleCalendar, noActiveSelection: noActiveSelection }), handleSubmit = _b.handleSubmit, setCalendarRange = _b.setCalendarRange, handleClearDates = _b.handleClearDates, calendarRange = _b.calendarRange, disabledDates = _b.disabledDates, setDisabledDates = _b.setDisabledDates, updateCalendar = _b.updateCalendar, setUpdateCalendar = _b.setUpdateCalendar, initialCalendarRange = _b.initialCalendarRange;
|
|
11415
11477
|
// Display component after fully loaded
|
|
11416
11478
|
useAwaitRender();
|
|
11417
11479
|
// Handle close filter section
|
|
@@ -11424,18 +11486,20 @@ function FilterCalendar(_a) {
|
|
|
11424
11486
|
React__default__default.createElement("h2", null, t('filterBar:calendar.title')),
|
|
11425
11487
|
React__default__default.createElement(CloseButton, { handleClose: function () { return setToggleCalendar(false); } })),
|
|
11426
11488
|
React__default__default.createElement("div", { className: "will-calendar-main" },
|
|
11427
|
-
React__default__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, setDisabledDates: setDisabledDates, updateCalendar: updateCalendar, setUpdateCalendar: setUpdateCalendar, loadingData: loadingData })),
|
|
11489
|
+
React__default__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, setDisabledDates: setDisabledDates, updateCalendar: updateCalendar, setUpdateCalendar: setUpdateCalendar, loadingData: loadingData, initialCalendarRange: initialCalendarRange, showFeedback: showFeedback, noActiveSelection: noActiveSelection })),
|
|
11428
11490
|
React__default__default.createElement("div", { className: "will-calendar-footer" },
|
|
11429
11491
|
React__default__default.createElement("div", { className: "will-calendar-footer-dates" },
|
|
11430
11492
|
React__default__default.createElement("div", null,
|
|
11431
11493
|
React__default__default.createElement("span", null, parseDate({
|
|
11432
11494
|
date: calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from,
|
|
11433
11495
|
dateFormat: 'EEEEEE d.M.yyyy',
|
|
11496
|
+
language: language,
|
|
11434
11497
|
}) || t('common:checkIn')),
|
|
11435
11498
|
React__default__default.createElement("span", { className: "will-calendar-footer-dates-separator" }, "-"),
|
|
11436
11499
|
React__default__default.createElement("span", null, parseDate({
|
|
11437
11500
|
date: calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to,
|
|
11438
11501
|
dateFormat: 'EEEEEE d.M.yyyy',
|
|
11502
|
+
language: language,
|
|
11439
11503
|
}) || t('common:checkOut'))),
|
|
11440
11504
|
!!nights && (React__default__default.createElement("span", null, "".concat(nights, " ").concat(t("common:".concat(nights > 1 ? 'nights' : 'night')))))),
|
|
11441
11505
|
React__default__default.createElement("div", { className: "will-calendar-footer-actions" },
|