willba-component-library 0.1.75 → 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.
@@ -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, currentViewApply, onSubmit, fullWidth, calendarOffset, mode, defaultTab, }: FilterBarProps): React.JSX.Element | null;
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, Pages } from '../FilterBarTypes';
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
- defaultTab?: string;
8
+ tabs?: Tab[];
10
9
  };
11
- export declare const useFilterBar: ({ redirectUrl, currentViewApply, ageCategories, onSubmit, defaultTab, }: Props) => {
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: Pages;
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<Pages>>;
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, currentViewApply, onSubmit, fullWidth, calendarOffset, mode, defaultTab, }: FilterBarProps): React.JSX.Element | null;
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, currentViewApply = _a.currentViewApply, ageCategories = _a.ageCategories, onSubmit = _a.onSubmit, defaultTab = _a.defaultTab;
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,10 +3969,11 @@ var useFilterBar = function (_a) {
3973
3969
  // Handle default selected tab
3974
3970
  if (typeof window === 'undefined')
3975
3971
  return;
3976
- 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 ||
3977
3974
  window.location.pathname.includes(Pages.EVENTS)
3978
3975
  ? Pages.EVENTS
3979
- : defaultTab === Pages.ROOMS ||
3976
+ : (defaultTab === null || defaultTab === void 0 ? void 0 : defaultTab.path) === Pages.ROOMS ||
3980
3977
  window.location.pathname.includes(Pages.ROOMS)
3981
3978
  ? Pages.ROOMS
3982
3979
  : Pages.EVENTS;
@@ -4004,7 +4001,7 @@ var useFilterBar = function (_a) {
4004
4001
  ageCategories: ageCategories,
4005
4002
  }),
4006
4003
  };
4007
- if (currentViewApply) {
4004
+ if ((tabs === null || tabs === void 0 ? void 0 : tabs.length) === 1) {
4008
4005
  var currentSearchParams = new URLSearchParams(window.location.search);
4009
4006
  var updatedParams = new URLSearchParams();
4010
4007
  try {
@@ -11109,7 +11106,7 @@ var css_248z = ".will-root {\n z-index: 999;\n width: fit-content;\n min-widt
11109
11106
  styleInject(css_248z);
11110
11107
 
11111
11108
  function FilterBar(_a) {
11112
- 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, currentViewApply = _a.currentViewApply, onSubmit = _a.onSubmit, fullWidth = _a.fullWidth, calendarOffset = _a.calendarOffset, mode = _a.mode, defaultTab = _a.defaultTab;
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;
11113
11110
  var themePalette = useTheme({ palette: palette });
11114
11111
  // Translations
11115
11112
  useUpdateTranslations({ language: language });
@@ -11117,17 +11114,10 @@ function FilterBar(_a) {
11117
11114
  // Filters
11118
11115
  var _d = useFilterBar({
11119
11116
  redirectUrl: redirectUrl,
11120
- currentViewApply: currentViewApply,
11121
11117
  ageCategories: ageCategories,
11122
11118
  onSubmit: onSubmit,
11123
- defaultTab: defaultTab,
11119
+ tabs: tabs,
11124
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;
11125
- // Default selected tab when tabs are hidden
11126
- useEffect(function () {
11127
- if (currentViewApply === ViewApply.ROOMS) {
11128
- setSelectedPath(Pages.ROOMS);
11129
- }
11130
- }, []);
11131
11121
  // Scroll in to view
11132
11122
  var _e = useScrollInToView({ selectedFilter: selectedFilter }), isMobile = _e.isMobile, targetFilterBarRef = _e.targetFilterBarRef;
11133
11123
  // Handle close filter section
@@ -11150,14 +11140,14 @@ function FilterBar(_a) {
11150
11140
  guestsLabel: t('guests.guestsLabel'),
11151
11141
  });
11152
11142
  return (React__default__default.createElement("div", { className: "will-root ".concat(fullWidth ? 'is-full-width' : ''), style: themePalette },
11153
- !currentViewApply && (React__default__default.createElement("div", { className: "will-filter-bar-tabs", ref: !currentViewApply ? targetFilterBarRef : null },
11154
- React__default__default.createElement(TabButton, { label: t('tabs.events'), onClick: function () {
11155
- setSelectedPath(Pages.EVENTS), handleResetFilters();
11156
- }, active: selectedPath === Pages.EVENTS, mode: mode }),
11157
- React__default__default.createElement(TabButton, { label: t('tabs.rooms'), onClick: function () {
11158
- setSelectedPath(Pages.ROOMS), handleResetFilters();
11159
- }, active: selectedPath === Pages.ROOMS, mode: mode }))),
11160
- React__default__default.createElement("div", { className: "will-filter-bar-header ".concat(mode || 'dark'), ref: currentViewApply ? targetFilterBarRef : null },
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 },
11161
11151
  React__default__default.createElement(SelectButton, { label: t('calendar.label'), description: parsedDates
11162
11152
  ? parsedDates
11163
11153
  : selectedPath === Pages.ROOMS
@@ -11167,7 +11157,7 @@ function FilterBar(_a) {
11167
11157
  React__default__default.createElement(Divider, null),
11168
11158
  React__default__default.createElement(SelectButton, { label: t('guests.label'), description: parsedGuests.content, onClick: function () { return handleSelectedFilter(FilterSections.GUESTS); }, active: !!parsedGuests.data.total }))),
11169
11159
  React__default__default.createElement(SubmitButton, { onClick: handleSubmit })),
11170
- selectedFilter && (React__default__default.createElement("div", { className: "will-filter-bar-container ".concat(mode || 'dark'), style: currentViewApply && !isMobile ? { top: 66 } : {} },
11160
+ selectedFilter && (React__default__default.createElement("div", { className: "will-filter-bar-container ".concat(mode || 'dark'), style: tabs && tabs.length === 1 && !isMobile ? { top: 66 } : {} },
11171
11161
  React__default__default.createElement(CloseButton, { handleClose: function () { return handleSelectedFilter(false); } }),
11172
11162
  selectedFilter === FilterSections.CALENDAR && (React__default__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, ref: filtersRef, calendarOffset: calendarOffset, selectedPath: selectedPath, locale: language })),
11173
11163
  selectedFilter === FilterSections.GUESTS && (React__default__default.createElement(Guests, { updateGuestsCount: updateGuestsCount, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, ref: filtersRef })),