willba-component-library 0.1.46 → 0.1.48

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,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Palette } from '../../themes/useTheme';
3
3
  import '../../themes/Default.css';
4
- import { AgeCategoryType } from './FilterBarTypes';
4
+ import { AgeCategoryType, Filters } from './FilterBarTypes';
5
5
  import './FilterBar.css';
6
6
  export type FilterBarProps = {
7
7
  vendor?: string;
@@ -10,5 +10,6 @@ export type FilterBarProps = {
10
10
  redirectUrl?: string;
11
11
  palette?: Palette;
12
12
  currentViewApply?: string;
13
+ onSubmit?: (val: Filters) => void;
13
14
  };
14
- export default function FilterBar({ language, ageCategories, redirectUrl, palette, currentViewApply, }: FilterBarProps): React.JSX.Element;
15
+ export default function FilterBar({ language, ageCategories, redirectUrl, palette, currentViewApply, onSubmit, }: FilterBarProps): React.JSX.Element;
@@ -1,17 +1,28 @@
1
- export interface AgeCategoryCount {
1
+ export type AgeCategoryCount = {
2
2
  [categoryId: string]: number;
3
- }
4
- export interface AgeCategoryType {
3
+ };
4
+ export type AgeCategoryType = {
5
5
  id: string;
6
6
  name: string;
7
7
  minVal: number;
8
8
  sortOrder: number;
9
- }
10
- export interface GuestsCountPropsType {
9
+ };
10
+ export type GuestsCountPropsType = {
11
11
  label: string;
12
12
  id: number;
13
13
  updateGuestsCount: (arg1: string, arg2: number) => void;
14
14
  count: number;
15
15
  minVal: number;
16
16
  sortOrder: number;
17
+ };
18
+ export declare enum FilterSections {
19
+ CALENDAR = "calendar",
20
+ GUESTS = "guests",
21
+ CATEGORIES = "categories"
22
+ }
23
+ export type Filters = {
24
+ [key: string]: string | number;
25
+ };
26
+ export declare enum ViewApply {
27
+ ROOMS = "roomFilters"
17
28
  }
@@ -1,3 +1,10 @@
1
1
  import React from 'react';
2
2
  import './SelectButton.css';
3
- export declare const SelectButton: ({ label, onClick, style, description }: any) => React.JSX.Element;
3
+ type Props = {
4
+ label: string;
5
+ onClick: () => void;
6
+ description: string;
7
+ active?: boolean;
8
+ };
9
+ export declare const SelectButton: ({ active, label, onClick, description, }: Props) => React.JSX.Element;
10
+ export {};
@@ -1,23 +1,24 @@
1
1
  /// <reference types="react" />
2
2
  import { DateRange } from 'react-day-picker';
3
- import { AgeCategoryCount, AgeCategoryType } from '../FilterBarTypes';
3
+ import { AgeCategoryCount, AgeCategoryType, Filters } from '../FilterBarTypes';
4
4
  type Props = {
5
5
  redirectUrl?: string;
6
6
  currentViewApply?: string;
7
7
  ageCategories?: AgeCategoryType[];
8
+ onSubmit?: (val: Filters) => void;
8
9
  };
9
- export declare const useFilterBar: ({ redirectUrl, currentViewApply, ageCategories, }: Props) => {
10
- selectedFilter: number | boolean;
10
+ export declare const useFilterBar: ({ redirectUrl, currentViewApply, ageCategories, onSubmit, }: Props) => {
11
+ selectedFilter: string | boolean;
11
12
  ageCategoryCounts: AgeCategoryCount;
12
13
  categories: number;
13
14
  calendarRange: DateRange | undefined;
14
15
  selectedPath: string;
15
16
  setCalendarRange: import("react").Dispatch<import("react").SetStateAction<DateRange | undefined>>;
16
- setSelectedFilter: import("react").Dispatch<import("react").SetStateAction<number | boolean>>;
17
+ setSelectedFilter: import("react").Dispatch<import("react").SetStateAction<string | boolean>>;
17
18
  setAgeCategoryCounts: import("react").Dispatch<import("react").SetStateAction<AgeCategoryCount>>;
18
19
  setCategories: import("react").Dispatch<import("react").SetStateAction<number>>;
19
- handleSelectedFilter: (id: number | boolean) => void;
20
- handleSubmit: () => string;
20
+ handleSelectedFilter: (id: string | boolean) => void;
21
+ handleSubmit: () => string | void;
21
22
  updateGuestsCount: (id: string, newCount: number) => void;
22
23
  handleResetFilters: () => void;
23
24
  setSelectedPath: import("react").Dispatch<import("react").SetStateAction<string>>;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  type Props = {
3
- selectedFilter: number | boolean;
3
+ selectedFilter: string | boolean;
4
4
  };
5
5
  export declare const useScrollInToView: ({ selectedFilter }: Props) => {
6
6
  isMobile: boolean;
@@ -1 +1,2 @@
1
- export { default } from "./FilterBar";
1
+ export { default } from './FilterBar';
2
+ export * from './FilterBarTypes';
package/lib/index.d.ts CHANGED
@@ -32,12 +32,15 @@ interface Palette {
32
32
  secondary: string;
33
33
  }
34
34
 
35
- interface AgeCategoryType {
35
+ type AgeCategoryType = {
36
36
  id: string;
37
37
  name: string;
38
38
  minVal: number;
39
39
  sortOrder: number;
40
- }
40
+ };
41
+ type Filters = {
42
+ [key: string]: string | number;
43
+ };
41
44
 
42
45
  type FilterBarProps = {
43
46
  vendor?: string;
@@ -46,7 +49,8 @@ type FilterBarProps = {
46
49
  redirectUrl?: string;
47
50
  palette?: Palette;
48
51
  currentViewApply?: string;
52
+ onSubmit?: (val: Filters) => void;
49
53
  };
50
- declare function FilterBar({ language, ageCategories, redirectUrl, palette, currentViewApply, }: FilterBarProps): React.JSX.Element;
54
+ declare function FilterBar({ language, ageCategories, redirectUrl, palette, currentViewApply, onSubmit, }: FilterBarProps): React.JSX.Element;
51
55
 
52
56
  export { Button, FilterBar };
package/lib/index.esm.js CHANGED
@@ -429,6 +429,18 @@ function useTranslation(ns) {
429
429
  });
430
430
  }
431
431
 
432
+ function useTheme(_a) {
433
+ var palette = _a.palette;
434
+ var themePalette = {
435
+ '--will-primary': palette === null || palette === void 0 ? void 0 : palette.primary,
436
+ '--will-secondary': palette === null || palette === void 0 ? void 0 : palette.secondary,
437
+ };
438
+ return themePalette;
439
+ }
440
+
441
+ var css_248z$b = "@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap');\n\n.will-root * {\n font-family: 'Montserrat', sans-serif;\n}\n\n.will-root {\n \n box-sizing: border-box;\n font-size: 14px;\n \n color: #1E1E1E;\n\n /* Palette */\n --will-primary: #374269;\n --will-secondary: #374269;\n --will-grey: #ABA7AF;\n --will-white: #fff;\n --will-black: #000;\n --will-onahau: #CDEEFF;\n --will-text: #5A5959;\n --will-transparent-white: rgba(255, 255, 255, 0.30);\n\n /* Confines */\n --will-box-shadow: 0px 6px 11px 0px #a7a4a480;\n\n /* Breakpoints */\n\n --will-lg: 1140px;\n --will-md: 960px;\n --will-sm: 600px;\n --will-xl: 1280px;\n --will-xs: 0px;\n}\n\n/* Typography */\n\n.will-root h1, h2, h3, h4, h5, h6 {\n font-weight: 700;\n} \n\n.will-root p, h1, h2, h3, h4, h5, h6, span {\n margin: 0;\n padding: 0;\n}";
442
+ styleInject(css_248z$b);
443
+
432
444
  function _typeof(o) {
433
445
  "@babel/helpers - typeof";
434
446
 
@@ -3869,18 +3881,6 @@ function setYear(dirtyDate, dirtyYear) {
3869
3881
  return date;
3870
3882
  }
3871
3883
 
3872
- function useTheme(_a) {
3873
- var palette = _a.palette;
3874
- var themePalette = {
3875
- '--will-primary': palette === null || palette === void 0 ? void 0 : palette.primary,
3876
- '--will-secondary': palette === null || palette === void 0 ? void 0 : palette.secondary,
3877
- };
3878
- return themePalette;
3879
- }
3880
-
3881
- var css_248z$b = "@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap');\n\n.will-root * {\n font-family: 'Montserrat', sans-serif;\n}\n\n.will-root {\n \n box-sizing: border-box;\n font-size: 14px;\n \n color: #1E1E1E;\n\n /* Palette */\n --will-primary: #374269;\n --will-secondary: #374269;\n --will-grey: #ABA7AF;\n --will-white: #fff;\n --will-black: #000;\n --will-onahau: #CDEEFF;\n --will-text: #5A5959;\n --will-transparent-white: rgba(255, 255, 255, 0.30);\n\n /* Confines */\n --will-box-shadow: 0px 6px 11px 0px #a7a4a480;\n\n /* Breakpoints */\n\n --will-lg: 1140px;\n --will-md: 960px;\n --will-sm: 600px;\n --will-xl: 1280px;\n --will-xs: 0px;\n}\n\n/* Typography */\n\n.will-root h1, h2, h3, h4, h5, h6 {\n font-weight: 700;\n} \n\n.will-root p, h1, h2, h3, h4, h5, h6, span {\n margin: 0;\n padding: 0;\n}";
3882
- styleInject(css_248z$b);
3883
-
3884
3884
  var parseDates = function (_a) {
3885
3885
  var calendarRange = _a.calendarRange;
3886
3886
  return (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) && (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.from)
@@ -3900,8 +3900,19 @@ var parseGuests = function (_a) {
3900
3900
  }, '');
3901
3901
  };
3902
3902
 
3903
+ var FilterSections;
3904
+ (function (FilterSections) {
3905
+ FilterSections["CALENDAR"] = "calendar";
3906
+ FilterSections["GUESTS"] = "guests";
3907
+ FilterSections["CATEGORIES"] = "categories";
3908
+ })(FilterSections || (FilterSections = {}));
3909
+ var ViewApply;
3910
+ (function (ViewApply) {
3911
+ ViewApply["ROOMS"] = "roomFilters";
3912
+ })(ViewApply || (ViewApply = {}));
3913
+
3903
3914
  var useFilterBar = function (_a) {
3904
- var redirectUrl = _a.redirectUrl, currentViewApply = _a.currentViewApply, ageCategories = _a.ageCategories;
3915
+ var redirectUrl = _a.redirectUrl, currentViewApply = _a.currentViewApply, ageCategories = _a.ageCategories, onSubmit = _a.onSubmit;
3905
3916
  var _b = __read(useState('/events'), 2), selectedPath = _b[0], setSelectedPath = _b[1];
3906
3917
  var _c = __read(useState(false), 2), selectedFilter = _c[0], setSelectedFilter = _c[1];
3907
3918
  var _d = __read(useState(), 2), calendarRange = _d[0], setCalendarRange = _d[1];
@@ -4002,6 +4013,14 @@ var useFilterBar = function (_a) {
4002
4013
  var baseUrl = window.location.origin + window.location.pathname;
4003
4014
  var updatedUrl = "".concat(baseUrl, "?").concat(updatedParams.toString());
4004
4015
  handleSelectedFilter(false);
4016
+ if (onSubmit) {
4017
+ var updatedParamsObject_1 = {};
4018
+ updatedParams.forEach(function (value, key) {
4019
+ updatedParamsObject_1[key] = value;
4020
+ });
4021
+ console.log('sdasdasdsad', updatedParamsObject_1);
4022
+ return onSubmit(updatedParamsObject_1);
4023
+ }
4005
4024
  return (window.location.href = updatedUrl);
4006
4025
  }
4007
4026
  else {
@@ -4022,7 +4041,9 @@ var useFilterBar = function (_a) {
4022
4041
  finally { if (e_3) throw e_3.error; }
4023
4042
  }
4024
4043
  handleSelectedFilter(false);
4025
- return (window.location.href = "".concat(redirectUrl, "/").concat(selectedPath).concat(querySearchParams ? "?".concat(querySearchParams.toString()) : ''));
4044
+ return onSubmit
4045
+ ? onSubmit(newParams)
4046
+ : (window.location.href = "".concat(redirectUrl, "/").concat(selectedPath).concat(querySearchParams ? "?".concat(querySearchParams.toString()) : ''));
4026
4047
  }
4027
4048
  };
4028
4049
  var handleResetFilters = function () {
@@ -4071,7 +4092,7 @@ var useScrollInToView = function (_a) {
4071
4092
  var _b = __read(useState(true), 2), isMobile = _b[0], setIsMobile = _b[1];
4072
4093
  var targetFilterBarRef = useRef(null);
4073
4094
  useEffect(function () {
4074
- if (window !== undefined && window.innerWidth > 960) {
4095
+ if (typeof window !== 'undefined' && window.innerWidth > 960) {
4075
4096
  setIsMobile(false);
4076
4097
  return;
4077
4098
  }
@@ -6555,16 +6576,16 @@ var CloseButton = function (_a) {
6555
6576
  React__default__default.createElement(IoIosCloseCircleOutline, null)));
6556
6577
  };
6557
6578
 
6558
- var css_248z$9 = ".will-filter-bar-select-button {\n width: 100%;\n height: auto;\n background-color: transparent;\n border: none;\n padding: 0 20px;\n border-radius: 20px;\n cursor: pointer;\n font-size: 14px;\n text-align: initial;\n}\n\n\n\n.will-filter-bar-select-button .select-button-wrapper {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n \n}\n\n.will-filter-bar-select-button .select-button-wrapper > div {\n display: grid\n}\n\n.will-filter-bar-select-button .select-button-description {\n font-weight: 400;\n opacity: 0.4;\n \n \n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n@media (max-width: 960px) {\n .will-filter-bar-select-button {\n padding: 15px 0;\n }\n\n .will-filter-bar-select-button:first-child {\n padding: 0 0 15px 0;\n }\n\n .will-filter-bar-select-button .select-button-wrapper {\n justify-content: center;\n text-align: center;\n }\n\n .will-filter-bar-select-button .select-button-description {\n white-space: wrap;\n }\n\n .will-filter-bar-select-button .select-button-divider {\n display: none\n }\n}\n\n\n";
6579
+ var css_248z$9 = ".will-filter-bar-select-button {\n width: 100%;\n height: auto;\n background-color: transparent;\n border: none;\n padding: 0 20px;\n border-radius: 20px;\n cursor: pointer;\n font-size: 14px;\n text-align: initial;\n}\n\n.will-filter-bar-select-button .select-button-wrapper {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n \n}\n\n.will-filter-bar-select-button .select-button-wrapper > div {\n display: grid\n}\n\n.will-filter-bar-select-button .select-button-label {\n font-weight: 500;\n}\n\n.will-filter-bar-select-button .select-button-description {\n font-weight: 400;\n opacity: 0.8;\n \n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .will-filter-bar-select-button .select-button-label.active,\n .will-filter-bar-select-button .select-button-description.active {\n font-weight: 600;\n }\n\n@media (max-width: 960px) {\n .will-filter-bar-select-button {\n padding: 15px 0;\n }\n\n .will-filter-bar-select-button:first-child {\n padding: 0 0 15px 0;\n }\n\n .will-filter-bar-select-button .select-button-wrapper {\n justify-content: center;\n text-align: center;\n }\n\n .will-filter-bar-select-button .select-button-description {\n white-space: wrap;\n }\n\n .will-filter-bar-select-button .select-button-divider {\n display: none\n }\n}\n\n\n";
6559
6580
  styleInject(css_248z$9);
6560
6581
 
6561
6582
  var SelectButton = function (_a) {
6562
- var label = _a.label, onClick = _a.onClick, style = _a.style, description = _a.description;
6563
- return (React__default__default.createElement("button", { className: "will-filter-bar-select-button", onClick: onClick, style: style },
6583
+ var active = _a.active, label = _a.label, onClick = _a.onClick, description = _a.description;
6584
+ return (React__default__default.createElement("button", { className: "will-filter-bar-select-button", onClick: onClick },
6564
6585
  React__default__default.createElement("span", { className: "select-button-wrapper" },
6565
6586
  React__default__default.createElement("div", null,
6566
- React__default__default.createElement("p", { className: "select-button-label" }, label),
6567
- React__default__default.createElement("p", { className: "select-button-description" }, description)))));
6587
+ React__default__default.createElement("p", { className: "select-button-label ".concat(active ? 'active' : '') }, label),
6588
+ React__default__default.createElement("p", { className: "select-button-description ".concat(active ? 'active' : '') }, description)))));
6568
6589
  };
6569
6590
 
6570
6591
  // THIS FILE IS AUTO GENERATED
@@ -10666,16 +10687,21 @@ var css_248z = ".will-root {\n z-index: 999;\n width: 100%;\n max-height: 100
10666
10687
  styleInject(css_248z);
10667
10688
 
10668
10689
  function FilterBar(_a) {
10669
- 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;
10690
+ 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;
10670
10691
  var themePalette = useTheme({ palette: palette });
10671
10692
  // Translations
10672
10693
  useUpdateTranslations({ language: language });
10673
10694
  var t = useTranslation('filterBar').t;
10674
10695
  // Filters
10675
- var _d = useFilterBar({ redirectUrl: redirectUrl, currentViewApply: currentViewApply, ageCategories: ageCategories }), 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;
10676
- // Default selected tab
10696
+ var _d = useFilterBar({
10697
+ redirectUrl: redirectUrl,
10698
+ currentViewApply: currentViewApply,
10699
+ ageCategories: ageCategories,
10700
+ onSubmit: onSubmit,
10701
+ }), 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;
10702
+ // Default selected tab when tabs are hidden
10677
10703
  useEffect(function () {
10678
- if (currentViewApply === 'roomFilters') {
10704
+ if (currentViewApply === ViewApply.ROOMS) {
10679
10705
  setSelectedPath('/rooms');
10680
10706
  }
10681
10707
  }, []);
@@ -10683,6 +10709,7 @@ function FilterBar(_a) {
10683
10709
  var _e = useScrollInToView({ selectedFilter: selectedFilter }), isMobile = _e.isMobile, targetFilterBarRef = _e.targetFilterBarRef;
10684
10710
  // Handle close filter section
10685
10711
  var filtersRef = useCloseFilterSection({ handleSelectedFilter: handleSelectedFilter }).filtersRef;
10712
+ // Parsed data for filter section description
10686
10713
  var parsedDates = parseDates({ calendarRange: calendarRange });
10687
10714
  var parsedGuests = parseGuests({ ageCategoryCounts: ageCategoryCounts, ageCategories: ageCategories });
10688
10715
  return (React__default__default.createElement("div", { className: "will-root", style: themePalette },
@@ -10694,21 +10721,18 @@ function FilterBar(_a) {
10694
10721
  ? parsedDates
10695
10722
  : selectedPath === '/rooms'
10696
10723
  ? t('calendar.roomsLabelPlaceholder')
10697
- : t('calendar.eventsLabelPlaceholder'), onClick: function () { return handleSelectedFilter(1); }, style: fontWeightBold(selectedFilter === 1), date: (calendarRange === null || calendarRange === void 0 ? void 0 : calendarRange.to) ? format(calendarRange.to, 'dd.MM.yyyy') : null }),
10724
+ : t('calendar.eventsLabelPlaceholder'), onClick: function () { return handleSelectedFilter(FilterSections.CALENDAR); }, active: selectedFilter === FilterSections.CALENDAR }),
10698
10725
  selectedPath === '/rooms' && (React__default__default.createElement(React__default__default.Fragment, null,
10699
10726
  React__default__default.createElement(Divider, null),
10700
- React__default__default.createElement(SelectButton, { label: t('guests.label'), description: parsedGuests ? parsedGuests : t('guests.labelPlaceholder'), onClick: function () { return handleSelectedFilter(2); }, style: fontWeightBold(selectedFilter === 2) }))),
10727
+ React__default__default.createElement(SelectButton, { label: t('guests.label'), description: parsedGuests ? parsedGuests : t('guests.labelPlaceholder'), onClick: function () { return handleSelectedFilter(FilterSections.GUESTS); }, active: selectedFilter === FilterSections.GUESTS }))),
10701
10728
  React__default__default.createElement(SubmitButton, { onClick: handleSubmit })),
10702
10729
  selectedFilter && (React__default__default.createElement("div", { className: "will-filter-bar-container", style: currentViewApply && !isMobile ? { top: 66 } : {} },
10703
10730
  React__default__default.createElement(CloseButton, { handleClose: function () { return handleSelectedFilter(false); } }),
10704
- selectedFilter === 1 && (React__default__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, ref: filtersRef })),
10705
- selectedFilter === 2 && (React__default__default.createElement(Guests, { updateGuestsCount: updateGuestsCount, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, ref: filtersRef })),
10706
- selectedFilter === 3 && (React__default__default.createElement(Categories, { categories: categories, setCategories: setCategories }))))));
10731
+ selectedFilter === FilterSections.CALENDAR && (React__default__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, ref: filtersRef })),
10732
+ selectedFilter === FilterSections.GUESTS && (React__default__default.createElement(Guests, { updateGuestsCount: updateGuestsCount, ageCategories: ageCategories, ageCategoryCounts: ageCategoryCounts, ref: filtersRef })),
10733
+ selectedFilter === FilterSections.CATEGORIES && (React__default__default.createElement(Categories, { categories: categories, setCategories: setCategories }))))));
10707
10734
  }
10708
10735
  ////////////
10709
- var fontWeightBold = function (input) {
10710
- return { fontWeight: input ? 'bold' : 'initial' };
10711
- };
10712
10736
  var AGE_CATEGORIES_FALLBACK = [
10713
10737
  {
10714
10738
  id: '1',