willba-component-library 0.1.74 → 0.1.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/FilterBar/FilterBar.d.ts +3 -3
- package/lib/components/FilterBar/FilterBarTypes.d.ts +12 -3
- package/lib/components/FilterBar/hooks/useFilterBar.d.ts +5 -6
- package/lib/index.d.ts +13 -2
- package/lib/index.esm.js +16 -27
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +16 -27
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +16 -27
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FilterBar/FilterBar.stories.tsx +21 -2
- package/src/components/FilterBar/FilterBar.tsx +25 -36
- package/src/components/FilterBar/FilterBarTypes.ts +13 -4
- package/src/components/FilterBar/hooks/useFilterBar.tsx +11 -9
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Palette } from '../../themes/useTheme';
|
|
3
3
|
import '../../themes/Default.css';
|
|
4
|
-
import { AgeCategoryType, CalendarOffset, Filters } from './FilterBarTypes';
|
|
4
|
+
import { AgeCategoryType, CalendarOffset, Filters, Tab } from './FilterBarTypes';
|
|
5
5
|
import './FilterBar.css';
|
|
6
6
|
export type FilterBarProps = {
|
|
7
7
|
language?: string;
|
|
8
8
|
ageCategories?: AgeCategoryType[];
|
|
9
9
|
redirectUrl?: string;
|
|
10
10
|
palette?: Palette;
|
|
11
|
-
currentViewApply?: string;
|
|
12
11
|
onSubmit?: ((val: Filters) => void) | null;
|
|
13
12
|
fullWidth?: boolean;
|
|
14
13
|
calendarOffset?: CalendarOffset;
|
|
15
14
|
mode?: string;
|
|
16
15
|
defaultTab?: string;
|
|
16
|
+
tabs?: Tab[];
|
|
17
17
|
};
|
|
18
|
-
export default function FilterBar({ language, ageCategories, redirectUrl, palette,
|
|
18
|
+
export default function FilterBar({ language, ageCategories, redirectUrl, palette, onSubmit, fullWidth, calendarOffset, mode, tabs, }: FilterBarProps): React.JSX.Element | null;
|
|
@@ -23,9 +23,6 @@ export declare enum FilterSections {
|
|
|
23
23
|
export type Filters = {
|
|
24
24
|
[key: string]: string;
|
|
25
25
|
};
|
|
26
|
-
export declare enum ViewApply {
|
|
27
|
-
ROOMS = "roomFilters"
|
|
28
|
-
}
|
|
29
26
|
export declare enum Pages {
|
|
30
27
|
ROOMS = "/rooms",
|
|
31
28
|
EVENTS = "/events"
|
|
@@ -33,3 +30,15 @@ export declare enum Pages {
|
|
|
33
30
|
export type CalendarOffset = {
|
|
34
31
|
[key: string]: number;
|
|
35
32
|
};
|
|
33
|
+
type Translations = {
|
|
34
|
+
en: string;
|
|
35
|
+
fi: string;
|
|
36
|
+
[key: string]: string;
|
|
37
|
+
};
|
|
38
|
+
export type Tab = {
|
|
39
|
+
path: string;
|
|
40
|
+
default?: boolean;
|
|
41
|
+
order: number;
|
|
42
|
+
label?: Translations;
|
|
43
|
+
};
|
|
44
|
+
export {};
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { DateRange } from 'react-day-picker';
|
|
3
|
-
import { AgeCategoryCount, AgeCategoryType, Filters,
|
|
3
|
+
import { AgeCategoryCount, AgeCategoryType, Filters, Tab } from '../FilterBarTypes';
|
|
4
4
|
type Props = {
|
|
5
5
|
redirectUrl?: string;
|
|
6
|
-
currentViewApply?: string;
|
|
7
6
|
ageCategories?: AgeCategoryType[];
|
|
8
7
|
onSubmit?: ((val: Filters) => void) | null;
|
|
9
|
-
|
|
8
|
+
tabs?: Tab[];
|
|
10
9
|
};
|
|
11
|
-
export declare const useFilterBar: ({ redirectUrl,
|
|
10
|
+
export declare const useFilterBar: ({ redirectUrl, ageCategories, onSubmit, tabs, }: Props) => {
|
|
12
11
|
selectedFilter: string | boolean;
|
|
13
12
|
ageCategoryCounts: AgeCategoryCount;
|
|
14
13
|
categories: number;
|
|
15
14
|
calendarRange: DateRange | undefined;
|
|
16
|
-
selectedPath:
|
|
15
|
+
selectedPath: string;
|
|
17
16
|
setCalendarRange: import("react").Dispatch<import("react").SetStateAction<DateRange | undefined>>;
|
|
18
17
|
setSelectedFilter: import("react").Dispatch<import("react").SetStateAction<string | boolean>>;
|
|
19
18
|
setAgeCategoryCounts: import("react").Dispatch<import("react").SetStateAction<AgeCategoryCount>>;
|
|
@@ -22,6 +21,6 @@ export declare const useFilterBar: ({ redirectUrl, currentViewApply, ageCategori
|
|
|
22
21
|
handleSubmit: () => string | void;
|
|
23
22
|
updateGuestsCount: (id: string, newCount: number) => void;
|
|
24
23
|
handleResetFilters: () => void;
|
|
25
|
-
setSelectedPath: import("react").Dispatch<import("react").SetStateAction<
|
|
24
|
+
setSelectedPath: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
26
25
|
};
|
|
27
26
|
export {};
|
package/lib/index.d.ts
CHANGED
|
@@ -44,19 +44,30 @@ type Filters = {
|
|
|
44
44
|
type CalendarOffset = {
|
|
45
45
|
[key: string]: number;
|
|
46
46
|
};
|
|
47
|
+
type Translations = {
|
|
48
|
+
en: string;
|
|
49
|
+
fi: string;
|
|
50
|
+
[key: string]: string;
|
|
51
|
+
};
|
|
52
|
+
type Tab = {
|
|
53
|
+
path: string;
|
|
54
|
+
default?: boolean;
|
|
55
|
+
order: number;
|
|
56
|
+
label?: Translations;
|
|
57
|
+
};
|
|
47
58
|
|
|
48
59
|
type FilterBarProps = {
|
|
49
60
|
language?: string;
|
|
50
61
|
ageCategories?: AgeCategoryType[];
|
|
51
62
|
redirectUrl?: string;
|
|
52
63
|
palette?: Palette;
|
|
53
|
-
currentViewApply?: string;
|
|
54
64
|
onSubmit?: ((val: Filters) => void) | null;
|
|
55
65
|
fullWidth?: boolean;
|
|
56
66
|
calendarOffset?: CalendarOffset;
|
|
57
67
|
mode?: string;
|
|
58
68
|
defaultTab?: string;
|
|
69
|
+
tabs?: Tab[];
|
|
59
70
|
};
|
|
60
|
-
declare function FilterBar({ language, ageCategories, redirectUrl, palette,
|
|
71
|
+
declare function FilterBar({ language, ageCategories, redirectUrl, palette, onSubmit, fullWidth, calendarOffset, mode, tabs, }: FilterBarProps): React.JSX.Element | null;
|
|
61
72
|
|
|
62
73
|
export { Button, FilterBar };
|
package/lib/index.esm.js
CHANGED
|
@@ -3927,10 +3927,6 @@ var FilterSections;
|
|
|
3927
3927
|
FilterSections["GUESTS"] = "guests";
|
|
3928
3928
|
FilterSections["CATEGORIES"] = "categories";
|
|
3929
3929
|
})(FilterSections || (FilterSections = {}));
|
|
3930
|
-
var ViewApply;
|
|
3931
|
-
(function (ViewApply) {
|
|
3932
|
-
ViewApply["ROOMS"] = "roomFilters";
|
|
3933
|
-
})(ViewApply || (ViewApply = {}));
|
|
3934
3930
|
var Pages;
|
|
3935
3931
|
(function (Pages) {
|
|
3936
3932
|
Pages["ROOMS"] = "/rooms";
|
|
@@ -3938,7 +3934,7 @@ var Pages;
|
|
|
3938
3934
|
})(Pages || (Pages = {}));
|
|
3939
3935
|
|
|
3940
3936
|
var useFilterBar = function (_a) {
|
|
3941
|
-
var redirectUrl = _a.redirectUrl,
|
|
3937
|
+
var redirectUrl = _a.redirectUrl, ageCategories = _a.ageCategories, onSubmit = _a.onSubmit, tabs = _a.tabs;
|
|
3942
3938
|
var _b = __read(useState(Pages.EVENTS), 2), selectedPath = _b[0], setSelectedPath = _b[1];
|
|
3943
3939
|
var _c = __read(useState(false), 2), selectedFilter = _c[0], setSelectedFilter = _c[1];
|
|
3944
3940
|
var _d = __read(useState(), 2), calendarRange = _d[0], setCalendarRange = _d[1];
|
|
@@ -3973,11 +3969,11 @@ var useFilterBar = function (_a) {
|
|
|
3973
3969
|
// Handle default selected tab
|
|
3974
3970
|
if (typeof window === 'undefined')
|
|
3975
3971
|
return;
|
|
3976
|
-
|
|
3977
|
-
var currentPath = defaultTab === Pages.EVENTS ||
|
|
3972
|
+
var defaultTab = (tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1 ? tabs[0] : tabs === null || tabs === void 0 ? void 0 : tabs.find(function (tab) { return tab.default; });
|
|
3973
|
+
var currentPath = (defaultTab === null || defaultTab === void 0 ? void 0 : defaultTab.path) === Pages.EVENTS ||
|
|
3978
3974
|
window.location.pathname.includes(Pages.EVENTS)
|
|
3979
3975
|
? Pages.EVENTS
|
|
3980
|
-
: defaultTab === Pages.ROOMS ||
|
|
3976
|
+
: (defaultTab === null || defaultTab === void 0 ? void 0 : defaultTab.path) === Pages.ROOMS ||
|
|
3981
3977
|
window.location.pathname.includes(Pages.ROOMS)
|
|
3982
3978
|
? Pages.ROOMS
|
|
3983
3979
|
: Pages.EVENTS;
|
|
@@ -4005,7 +4001,7 @@ var useFilterBar = function (_a) {
|
|
|
4005
4001
|
ageCategories: ageCategories,
|
|
4006
4002
|
}),
|
|
4007
4003
|
};
|
|
4008
|
-
if (
|
|
4004
|
+
if ((tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1) {
|
|
4009
4005
|
var currentSearchParams = new URLSearchParams(window.location.search);
|
|
4010
4006
|
var updatedParams = new URLSearchParams();
|
|
4011
4007
|
try {
|
|
@@ -11110,7 +11106,7 @@ var css_248z = ".will-root {\n z-index: 999;\n width: fit-content;\n min-widt
|
|
|
11110
11106
|
styleInject(css_248z);
|
|
11111
11107
|
|
|
11112
11108
|
function FilterBar(_a) {
|
|
11113
|
-
var language = _a.language, _b = _a.ageCategories, ageCategories = _b === void 0 ? AGE_CATEGORIES_FALLBACK : _b, _c = _a.redirectUrl, redirectUrl = _c === void 0 ? REDIRECT_URL_FALLBACK : _c, palette = _a.palette,
|
|
11109
|
+
var language = _a.language, _b = _a.ageCategories, ageCategories = _b === void 0 ? AGE_CATEGORIES_FALLBACK : _b, _c = _a.redirectUrl, redirectUrl = _c === void 0 ? REDIRECT_URL_FALLBACK : _c, palette = _a.palette, onSubmit = _a.onSubmit, fullWidth = _a.fullWidth, calendarOffset = _a.calendarOffset, mode = _a.mode, tabs = _a.tabs;
|
|
11114
11110
|
var themePalette = useTheme({ palette: palette });
|
|
11115
11111
|
// Translations
|
|
11116
11112
|
useUpdateTranslations({ language: language });
|
|
@@ -11118,17 +11114,10 @@ function FilterBar(_a) {
|
|
|
11118
11114
|
// Filters
|
|
11119
11115
|
var _d = useFilterBar({
|
|
11120
11116
|
redirectUrl: redirectUrl,
|
|
11121
|
-
currentViewApply: currentViewApply,
|
|
11122
11117
|
ageCategories: ageCategories,
|
|
11123
11118
|
onSubmit: onSubmit,
|
|
11124
|
-
|
|
11119
|
+
tabs: tabs,
|
|
11125
11120
|
}), selectedFilter = _d.selectedFilter, ageCategoryCounts = _d.ageCategoryCounts, categories = _d.categories, calendarRange = _d.calendarRange, selectedPath = _d.selectedPath, setCalendarRange = _d.setCalendarRange, setCategories = _d.setCategories, handleSelectedFilter = _d.handleSelectedFilter, handleSubmit = _d.handleSubmit, updateGuestsCount = _d.updateGuestsCount, setSelectedPath = _d.setSelectedPath, handleResetFilters = _d.handleResetFilters;
|
|
11126
|
-
// Default selected tab when tabs are hidden
|
|
11127
|
-
useEffect(function () {
|
|
11128
|
-
if (currentViewApply === ViewApply.ROOMS) {
|
|
11129
|
-
setSelectedPath(Pages.ROOMS);
|
|
11130
|
-
}
|
|
11131
|
-
}, []);
|
|
11132
11121
|
// Scroll in to view
|
|
11133
11122
|
var _e = useScrollInToView({ selectedFilter: selectedFilter }), isMobile = _e.isMobile, targetFilterBarRef = _e.targetFilterBarRef;
|
|
11134
11123
|
// Handle close filter section
|
|
@@ -11151,14 +11140,14 @@ function FilterBar(_a) {
|
|
|
11151
11140
|
guestsLabel: t('guests.guestsLabel'),
|
|
11152
11141
|
});
|
|
11153
11142
|
return (React__default__default.createElement("div", { className: "will-root ".concat(fullWidth ? 'is-full-width' : ''), style: themePalette },
|
|
11154
|
-
|
|
11155
|
-
|
|
11156
|
-
|
|
11157
|
-
|
|
11158
|
-
|
|
11159
|
-
|
|
11160
|
-
|
|
11161
|
-
React__default__default.createElement("div", { className: "will-filter-bar-header ".concat(mode || 'dark'), ref:
|
|
11143
|
+
tabs && tabs.length > 1 && (React__default__default.createElement("div", { className: "will-filter-bar-tabs", ref: targetFilterBarRef }, tabs
|
|
11144
|
+
.sort(function (a, b) { return a.order - b.order; })
|
|
11145
|
+
.map(function (tab, idx) { return (React__default__default.createElement(TabButton, { key: "tab-".concat(idx), label: tab.label && language
|
|
11146
|
+
? tab.label[language]
|
|
11147
|
+
: t("tabs.".concat(tab.path.substring(1))), onClick: function () {
|
|
11148
|
+
setSelectedPath(tab.path), handleResetFilters();
|
|
11149
|
+
}, active: selectedPath === tab.path, mode: mode })); }))),
|
|
11150
|
+
React__default__default.createElement("div", { className: "will-filter-bar-header ".concat(mode || 'dark'), ref: (tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1 ? targetFilterBarRef : null },
|
|
11162
11151
|
React__default__default.createElement(SelectButton, { label: t('calendar.label'), description: parsedDates
|
|
11163
11152
|
? parsedDates
|
|
11164
11153
|
: selectedPath === Pages.ROOMS
|
|
@@ -11168,7 +11157,7 @@ function FilterBar(_a) {
|
|
|
11168
11157
|
React__default__default.createElement(Divider, null),
|
|
11169
11158
|
React__default__default.createElement(SelectButton, { label: t('guests.label'), description: parsedGuests.content, onClick: function () { return handleSelectedFilter(FilterSections.GUESTS); }, active: !!parsedGuests.data.total }))),
|
|
11170
11159
|
React__default__default.createElement(SubmitButton, { onClick: handleSubmit })),
|
|
11171
|
-
selectedFilter && (React__default__default.createElement("div", { className: "will-filter-bar-container ".concat(mode || 'dark'), style:
|
|
11160
|
+
selectedFilter && (React__default__default.createElement("div", { className: "will-filter-bar-container ".concat(mode || 'dark'), style: tabs && tabs.length === 1 && !isMobile ? { top: 66 } : {} },
|
|
11172
11161
|
React__default__default.createElement(CloseButton, { handleClose: function () { return handleSelectedFilter(false); } }),
|
|
11173
11162
|
selectedFilter === FilterSections.CALENDAR && (React__default__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, ref: filtersRef, calendarOffset: calendarOffset, selectedPath: selectedPath, locale: language })),
|
|
11174
11163
|
selectedFilter === FilterSections.GUESTS && (React__default__default.createElement(Guests, { updateGuestsCount: updateGuestsCount, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, ref: filtersRef })),
|