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.
@@ -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,11 +3969,11 @@ var useFilterBar = function (_a) {
3973
3969
  // Handle default selected tab
3974
3970
  if (typeof window === 'undefined')
3975
3971
  return;
3976
- console.log(defaultTab);
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 (currentViewApply) {
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, 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;
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
- defaultTab: defaultTab,
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
- !currentViewApply && (React__default__default.createElement("div", { className: "will-filter-bar-tabs", ref: !currentViewApply ? targetFilterBarRef : null },
11155
- React__default__default.createElement(TabButton, { label: t('tabs.events'), onClick: function () {
11156
- setSelectedPath(Pages.EVENTS), handleResetFilters();
11157
- }, active: selectedPath === Pages.EVENTS, mode: mode }),
11158
- React__default__default.createElement(TabButton, { label: t('tabs.rooms'), onClick: function () {
11159
- setSelectedPath(Pages.ROOMS), handleResetFilters();
11160
- }, active: selectedPath === Pages.ROOMS, mode: mode }))),
11161
- 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 },
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: 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 } : {} },
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 })),