@tap-payments/os-micro-frontend-shared 0.1.248-test.1 → 0.1.248-test.2

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.
Files changed (53) hide show
  1. package/build/components/FilterDropdown/FilterDropdown.d.ts +10 -0
  2. package/build/components/FilterDropdown/FilterDropdown.js +54 -0
  3. package/build/components/FilterDropdown/components/BrandItem/BrandItem.d.ts +12 -0
  4. package/build/components/FilterDropdown/components/BrandItem/BrandItem.js +39 -0
  5. package/build/components/FilterDropdown/components/BrandItem/index.d.ts +2 -0
  6. package/build/components/FilterDropdown/components/BrandItem/index.js +2 -0
  7. package/build/components/FilterDropdown/components/BrandItem/style.d.ts +4 -0
  8. package/build/components/FilterDropdown/components/BrandItem/style.js +9 -0
  9. package/build/components/FilterDropdown/components/CountriesItem/CountriesItem.d.ts +12 -0
  10. package/build/components/FilterDropdown/components/CountriesItem/CountriesItem.js +54 -0
  11. package/build/components/FilterDropdown/components/CountriesItem/index.d.ts +1 -0
  12. package/build/components/FilterDropdown/components/CountriesItem/index.js +1 -0
  13. package/build/components/FilterDropdown/components/CurrenciesItem/CurrenciesItem.d.ts +12 -0
  14. package/build/components/FilterDropdown/components/CurrenciesItem/CurrenciesItem.js +59 -0
  15. package/build/components/FilterDropdown/components/CurrenciesItem/index.d.ts +1 -0
  16. package/build/components/FilterDropdown/components/CurrenciesItem/index.js +1 -0
  17. package/build/components/FilterDropdown/components/FlatMerchantsListMenu/FlatMerchantsListMenu.d.ts +11 -0
  18. package/build/components/FilterDropdown/components/FlatMerchantsListMenu/FlatMerchantsListMenu.js +39 -0
  19. package/build/components/FilterDropdown/components/FlatMerchantsListMenu/index.d.ts +2 -0
  20. package/build/components/FilterDropdown/components/FlatMerchantsListMenu/index.js +2 -0
  21. package/build/components/FilterDropdown/components/FlatMerchantsListMenu/style.d.ts +12 -0
  22. package/build/components/FilterDropdown/components/FlatMerchantsListMenu/style.js +23 -0
  23. package/build/components/FilterDropdown/components/MerchantItem/MerchantItem.d.ts +13 -0
  24. package/build/components/FilterDropdown/components/MerchantItem/MerchantItem.js +46 -0
  25. package/build/components/FilterDropdown/components/MerchantItem/index.d.ts +2 -0
  26. package/build/components/FilterDropdown/components/MerchantItem/index.js +2 -0
  27. package/build/components/FilterDropdown/components/RetailersItem/RetailersItem.d.ts +14 -0
  28. package/build/components/FilterDropdown/components/RetailersItem/RetailersItem.js +70 -0
  29. package/build/components/FilterDropdown/components/RetailersItem/index.d.ts +1 -0
  30. package/build/components/FilterDropdown/components/RetailersItem/index.js +1 -0
  31. package/build/components/FilterDropdown/components/RetailersItem/style.d.ts +4 -0
  32. package/build/components/FilterDropdown/components/RetailersItem/style.js +8 -0
  33. package/build/components/FilterDropdown/components/index.d.ts +4 -0
  34. package/build/components/FilterDropdown/components/index.js +4 -0
  35. package/build/components/FilterDropdown/index.d.ts +3 -0
  36. package/build/components/FilterDropdown/index.js +3 -0
  37. package/build/components/FilterDropdown/style.d.ts +20 -0
  38. package/build/components/FilterDropdown/style.js +60 -0
  39. package/build/components/FilterDropdown/type.d.ts +4 -0
  40. package/build/components/FilterDropdown/type.js +1 -0
  41. package/build/components/MenuItem/MenuItem.d.ts +1 -1
  42. package/build/components/index.d.ts +1 -1
  43. package/build/components/index.js +1 -1
  44. package/build/types/destination.d.ts +14 -0
  45. package/build/types/index.d.ts +1 -0
  46. package/build/types/index.js +1 -0
  47. package/package.json +2 -2
  48. package/build/components/MerchantLogo/MerchantLogo.d.ts +0 -10
  49. package/build/components/MerchantLogo/MerchantLogo.js +0 -17
  50. package/build/components/MerchantLogo/index.d.ts +0 -1
  51. package/build/components/MerchantLogo/index.js +0 -1
  52. package/build/components/MerchantLogo/style.d.ts +0 -5
  53. package/build/components/MerchantLogo/style.js +0 -13
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ interface FilterDropdownProps {
3
+ children?: React.ReactNode;
4
+ onConfirm: () => void;
5
+ onCancel: () => void;
6
+ isOkayButDisabled?: boolean;
7
+ isDisabled?: boolean;
8
+ }
9
+ export default function FilterDropdown({ onConfirm, onCancel, isOkayButDisabled, children, isDisabled }: Readonly<FilterDropdownProps>): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,54 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Box from '@mui/material/Box';
3
+ import { useTranslation } from 'react-i18next';
4
+ import { useState, useEffect } from 'react';
5
+ import { ClickAwayListener } from '@mui/material';
6
+ import { darkFilterIcon } from '../../constants/index.js';
7
+ import { Menu, CustomBackdrop } from '../index.js';
8
+ import { CancelButton, FilterButton, Footer, OkayButton, TitleStyled } from './style';
9
+ export default function FilterDropdown({ onConfirm, onCancel, isOkayButDisabled, children, isDisabled }) {
10
+ const [anchorEl, setAnchorEl] = useState(null);
11
+ const open = Boolean(anchorEl);
12
+ const { t } = useTranslation();
13
+ // Lock body scroll when filter dropdown is open (Safari fix)
14
+ useEffect(() => {
15
+ if (open) {
16
+ const scrollY = window.scrollY;
17
+ document.body.style.position = 'fixed';
18
+ document.body.style.top = `-${scrollY}px`;
19
+ document.body.style.width = '100%';
20
+ document.body.style.overflow = 'hidden';
21
+ return () => {
22
+ document.body.style.position = '';
23
+ document.body.style.top = '';
24
+ document.body.style.width = '';
25
+ document.body.style.overflow = '';
26
+ window.scrollTo(0, scrollY);
27
+ };
28
+ }
29
+ }, [open]);
30
+ const onOpen = (e) => {
31
+ if (isDisabled)
32
+ return;
33
+ if (!open) {
34
+ setAnchorEl(e.currentTarget);
35
+ return;
36
+ }
37
+ onClose();
38
+ };
39
+ const onClose = () => {
40
+ setAnchorEl(null);
41
+ onCancel();
42
+ };
43
+ const handleCancel = () => {
44
+ if (!open)
45
+ return;
46
+ onCancel();
47
+ onClose();
48
+ };
49
+ const handleConfirm = () => {
50
+ onConfirm();
51
+ onClose();
52
+ };
53
+ return (_jsx(ClickAwayListener, Object.assign({ onClickAway: handleCancel }, { children: _jsxs(Box, { children: [_jsx(FilterButton, Object.assign({ isActive: open, onClick: onOpen, sx: Object.assign({}, (isDisabled && { pointerEvents: 'none', opacity: 0.5 })) }, { children: _jsx(Box, { component: "img", src: darkFilterIcon, alt: "filter" }) })), _jsxs(Menu, Object.assign({ anchorEl: anchorEl, open: open, sx: { marginTop: '8px', marginBottom: '8px', width: 193 }, placement: "bottom-end" }, { children: [_jsx(TitleStyled, Object.assign({ component: "span" }, { children: t('filterBy') })), children, _jsxs(Footer, { children: [_jsx(CancelButton, Object.assign({ onClick: handleCancel }, { children: t('cancel') })), _jsx(OkayButton, Object.assign({ disabled: isOkayButDisabled, onClick: handleConfirm }, { children: t('okay') }))] })] })), open && _jsx(CustomBackdrop, { onClick: onClose })] }) })));
54
+ }
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { MerchantItemProps } from '../MerchantItem';
3
+ import { BrandProps } from '../../type';
4
+ interface BrandItemProps extends Pick<MerchantItemProps, 'atLeastOneMerchantSelected' | 'merchantsIds'> {
5
+ brand: BrandProps;
6
+ isDisabled?: boolean;
7
+ showSearchInput?: boolean;
8
+ renderBrandLogo: (logo: string) => React.ReactNode;
9
+ onChangeMerchant?: (value: string[]) => void;
10
+ }
11
+ export default function BrandItem({ brand, merchantsIds, isDisabled, atLeastOneMerchantSelected, showSearchInput, renderBrandLogo, onChangeMerchant, }: Readonly<BrandItemProps>): import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo } from 'react';
3
+ import { MenuItem, Text } from '../../../index.js';
4
+ import { rightArrow } from '../../../../constants/index.js';
5
+ import { getNameText } from '../../../../utils/index.js';
6
+ import FlatMerchantsListMenu from '../FlatMerchantsListMenu';
7
+ import { Brand } from './style';
8
+ export default function BrandItem({ brand, merchantsIds, isDisabled, atLeastOneMerchantSelected = false, showSearchInput = false, renderBrandLogo, onChangeMerchant, }) {
9
+ var _a;
10
+ const [anchorEl, setAnchorEl] = useState(null);
11
+ const open = Boolean(anchorEl);
12
+ const onOpen = (e) => {
13
+ setAnchorEl(e.currentTarget);
14
+ };
15
+ const onClose = () => {
16
+ setAnchorEl(null);
17
+ };
18
+ const selectedBrandMerchants = useMemo(() => brand.merchants.filter((merchant) => merchantsIds.includes(merchant.legacy_id)), [merchantsIds, brand.merchants]);
19
+ const isAllBrandsSelected = useMemo(() => selectedBrandMerchants.length === brand.merchants.length, [selectedBrandMerchants.length, brand.merchants.length]);
20
+ const isSomeSelected = useMemo(() => !isAllBrandsSelected && selectedBrandMerchants.length > 0, [isAllBrandsSelected, selectedBrandMerchants]);
21
+ const onClickBrand = (e) => {
22
+ e.stopPropagation();
23
+ if (isAllBrandsSelected) {
24
+ onChangeMerchant === null || onChangeMerchant === void 0 ? void 0 : onChangeMerchant(merchantsIds.filter((merchantId) => !brand.merchants.some(({ legacy_id }) => merchantId === legacy_id)));
25
+ return;
26
+ }
27
+ if (isSomeSelected) {
28
+ const uniqueMids = [...new Set([...merchantsIds, ...selectedBrandMerchants.map(({ legacy_id }) => legacy_id)])];
29
+ onChangeMerchant === null || onChangeMerchant === void 0 ? void 0 : onChangeMerchant(uniqueMids);
30
+ return;
31
+ }
32
+ onChangeMerchant === null || onChangeMerchant === void 0 ? void 0 : onChangeMerchant([...merchantsIds, ...brand.merchants.map(({ legacy_id }) => legacy_id)]);
33
+ };
34
+ return (_jsxs(MenuItem, Object.assign({ isSelected: isAllBrandsSelected, isIndeterminate: isSomeSelected, onMouseEnter: onOpen, onMouseLeave: onClose, onClick: (e) => {
35
+ if (isDisabled)
36
+ return;
37
+ onClickBrand(e);
38
+ }, isDisabled: isDisabled, sx: Object.assign({ maxHeight: 35, minHeight: 35 }, (open && { boxShadow: '0px 0px 16px 0px #00000021' })) }, { children: [_jsxs(Brand, { children: [renderBrandLogo === null || renderBrandLogo === void 0 ? void 0 : renderBrandLogo(brand.id), _jsx(Text, Object.assign({ sx: { fontSize: '11px' } }, { children: getNameText(brand.name) }))] }), ((_a = brand.merchants) === null || _a === void 0 ? void 0 : _a.length) > 0 && _jsx("img", { src: rightArrow, alt: "arrow", style: { height: 12 } }), _jsx(FlatMerchantsListMenu, { anchorEl: anchorEl, brand: brand, merchantsIds: merchantsIds, onChangeMerchant: onChangeMerchant, atLeastOneMerchantSelected: atLeastOneMerchantSelected, showSearchInput: showSearchInput })] })));
39
+ }
@@ -0,0 +1,2 @@
1
+ import BrandItem from './BrandItem';
2
+ export default BrandItem;
@@ -0,0 +1,2 @@
1
+ import BrandItem from './BrandItem';
2
+ export default BrandItem;
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare const Brand: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
3
+ ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
4
+ }, keyof import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
@@ -0,0 +1,9 @@
1
+ import Box from '@mui/material/Box';
2
+ import { styled } from '@mui/material/styles';
3
+ export const Brand = styled(Box)(() => ({
4
+ display: 'flex',
5
+ gap: '4px',
6
+ alignItems: 'center',
7
+ flex: 1,
8
+ marginInlineEnd: '8px'
9
+ }));
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ interface CountriesItemProps {
3
+ countries: string[];
4
+ isLoading?: boolean;
5
+ countriesIds: string[];
6
+ onFilterChange?: (value: string[]) => void;
7
+ atLeastOneCountrySelected?: boolean;
8
+ hideCheckbox?: boolean;
9
+ }
10
+ declare function CountriesItem({ countriesIds, isLoading, countries, onFilterChange, atLeastOneCountrySelected, hideCheckbox, }: Readonly<CountriesItemProps>): import("react/jsx-runtime").JSX.Element;
11
+ declare const _default: import("react").MemoExoticComponent<typeof CountriesItem>;
12
+ export default _default;
@@ -0,0 +1,54 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CountryFlag, Menu, MenuItem, Text } from '../../../index.js';
3
+ import { rightArrow } from '../../../../constants/index.js';
4
+ import { getCountryNameByISO } from '../../../../utils/index.js';
5
+ import { memo, useCallback, useMemo, useState } from 'react';
6
+ import { useTranslation } from 'react-i18next';
7
+ function CountriesItem({ countriesIds = [], isLoading, countries = [], onFilterChange, atLeastOneCountrySelected = false, hideCheckbox = false, }) {
8
+ const [anchorEl, setAnchorEl] = useState(null);
9
+ const open = Boolean(anchorEl);
10
+ const { t } = useTranslation();
11
+ const onOpen = (e) => {
12
+ if (!open)
13
+ setAnchorEl(e.currentTarget);
14
+ };
15
+ const onClose = () => {
16
+ if (open)
17
+ setAnchorEl(null);
18
+ };
19
+ const isCountrySelected = useCallback((countryCode) => countriesIds === null || countriesIds === void 0 ? void 0 : countriesIds.includes(countryCode), [countriesIds]);
20
+ const isAllSelected = useMemo(() => {
21
+ if (!countries.length)
22
+ return false;
23
+ return countries.every((country) => isCountrySelected(country));
24
+ }, [countries, isCountrySelected]);
25
+ const isSomeSelected = useMemo(() => !isAllSelected && countriesIds.length > 0, [countriesIds, isAllSelected]);
26
+ const onClick = () => {
27
+ if (atLeastOneCountrySelected)
28
+ return;
29
+ if (isAllSelected) {
30
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange([]);
31
+ return;
32
+ }
33
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(countries);
34
+ };
35
+ const isLastCountryToBeDisabled = (currMid) => {
36
+ return countriesIds.length === 1 && countriesIds[0] === currMid && atLeastOneCountrySelected;
37
+ };
38
+ const onClickCountry = (e, countryCode) => {
39
+ e.stopPropagation();
40
+ if (isLastCountryToBeDisabled(countryCode))
41
+ return;
42
+ if (isCountrySelected(countryCode)) {
43
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(countriesIds.filter((country) => country !== countryCode));
44
+ return;
45
+ }
46
+ const uniqueMids = [...new Set([...countriesIds, countryCode])];
47
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(uniqueMids);
48
+ };
49
+ const isDisabled = isLoading || (countries === null || countries === void 0 ? void 0 : countries.length) <= 0 || atLeastOneCountrySelected;
50
+ return (_jsxs(MenuItem, Object.assign({ isDisabled: isDisabled, isSelected: isAllSelected, hideCheckbox: hideCheckbox, isIndeterminate: isSomeSelected, sx: Object.assign(Object.assign({ maxHeight: 35, minHeight: 35, padding: '12px 8px 12px 16px' }, (open && { boxShadow: '0px 0px 16px 0px #00000021' })), (!(countries === null || countries === void 0 ? void 0 : countries.length) && { opacity: 0.5, pointerEvents: 'none' })), onMouseEnter: onOpen, onMouseLeave: onClose, onClick: onClick }, { children: [_jsx(Text, Object.assign({ sx: { fontSize: '11px', flex: 1 } }, { children: t('walletCountry') })), (countries === null || countries === void 0 ? void 0 : countries.length) > 0 && _jsx("img", { src: rightArrow, alt: "arrow", style: { height: 12 } }), _jsx(Menu, Object.assign({ open: open, anchorEl: anchorEl, placement: "right-start", sx: { width: 200, overflow: 'auto' } }, { children: countries === null || countries === void 0 ? void 0 : countries.map((country, index) => (_jsxs(MenuItem, Object.assign({ isSelected: isCountrySelected(country), isDisabled: isLoading || isLastCountryToBeDisabled(country), onClick: (e) => {
51
+ onClickCountry(e, country);
52
+ }, sx: { maxHeight: 35, minHeight: 35 } }, { children: [_jsx(CountryFlag, { countryCode: country }), _jsx(Text, Object.assign({ sx: { fontSize: '11px !important', fontWeight: '500 !important' } }, { children: getCountryNameByISO(country) }))] }), `key-${country}-${index}`))) }))] })));
53
+ }
54
+ export default memo(CountriesItem);
@@ -0,0 +1 @@
1
+ export { default } from './CountriesItem';
@@ -0,0 +1 @@
1
+ export { default } from './CountriesItem';
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ interface CurrenciesItemProps {
3
+ currencies: string[];
4
+ isLoading?: boolean;
5
+ currenciesIds: string[];
6
+ atLeastOneCurrencySelected?: boolean;
7
+ hideCheckbox?: boolean;
8
+ onFilterChange?: (value: string[]) => void;
9
+ }
10
+ declare function CurrenciesItem({ currenciesIds, isLoading, currencies, onFilterChange, atLeastOneCurrencySelected, hideCheckbox, }: Readonly<CurrenciesItemProps>): import("react/jsx-runtime").JSX.Element;
11
+ declare const _default: import("react").MemoExoticComponent<typeof CurrenciesItem>;
12
+ export default _default;
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CountryFlag, Menu, MenuItem, Text } from '../../../index.js';
3
+ import { rightArrow, SUPPORTED_CURRENCY_DETAILS } from '../../../../constants/index.js';
4
+ import { memo, useCallback, useMemo, useState } from 'react';
5
+ import { useTranslation } from 'react-i18next';
6
+ function CurrenciesItem({ currenciesIds = [], isLoading, currencies = [], onFilterChange, atLeastOneCurrencySelected = false, hideCheckbox = false, }) {
7
+ const [anchorEl, setAnchorEl] = useState(null);
8
+ const open = Boolean(anchorEl);
9
+ const { t } = useTranslation();
10
+ const onOpen = (e) => {
11
+ if (!open)
12
+ setAnchorEl(e.currentTarget);
13
+ };
14
+ const onClose = () => {
15
+ if (open)
16
+ setAnchorEl(null);
17
+ };
18
+ const isCurrencySelected = useCallback((currencyCode) => currenciesIds === null || currenciesIds === void 0 ? void 0 : currenciesIds.includes(currencyCode), [currenciesIds]);
19
+ const isAllSelected = useMemo(() => {
20
+ if (!currencies.length)
21
+ return false;
22
+ return currencies.every((currency) => isCurrencySelected(currency));
23
+ }, [currencies, isCurrencySelected]);
24
+ const isSomeSelected = useMemo(() => !isAllSelected && currenciesIds.length > 0, [currenciesIds, isAllSelected]);
25
+ const onClick = () => {
26
+ if (atLeastOneCurrencySelected)
27
+ return;
28
+ if (isAllSelected) {
29
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange([]);
30
+ return;
31
+ }
32
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(currencies);
33
+ };
34
+ const isLastCurrencyToBeDisabled = (currMid) => {
35
+ return currenciesIds.length === 1 && currenciesIds[0] === currMid && atLeastOneCurrencySelected;
36
+ };
37
+ const onClickCurrency = (e, currencyCode) => {
38
+ e.stopPropagation();
39
+ if (isLastCurrencyToBeDisabled(currencyCode))
40
+ return;
41
+ if (isCurrencySelected(currencyCode)) {
42
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(currenciesIds.filter((currency) => currency !== currencyCode));
43
+ return;
44
+ }
45
+ const uniqueMids = [...new Set([...currenciesIds, currencyCode])];
46
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(uniqueMids);
47
+ };
48
+ const isDisabled = isLoading || (currencies === null || currencies === void 0 ? void 0 : currencies.length) <= 0 || atLeastOneCurrencySelected;
49
+ return (_jsxs(MenuItem, Object.assign({ isDisabled: isDisabled, isSelected: isAllSelected, hideCheckbox: hideCheckbox, isIndeterminate: isSomeSelected, sx: Object.assign(Object.assign({ maxHeight: 35, minHeight: 35, padding: '12px 8px 12px 16px' }, (open && { boxShadow: '0px 0px 16px 0px #00000021' })), (!(currencies === null || currencies === void 0 ? void 0 : currencies.length) && { opacity: 0.5, pointerEvents: 'none' })), onMouseEnter: onOpen, onMouseLeave: onClose, onClick: onClick }, { children: [_jsx(Text, Object.assign({ sx: { fontSize: '11px', flex: 1 } }, { children: t('currency') })), (currencies === null || currencies === void 0 ? void 0 : currencies.length) > 0 && _jsx("img", { src: rightArrow, alt: "arrow", style: { height: 12 } }), _jsx(Menu, Object.assign({ open: open, anchorEl: anchorEl, placement: "right-start", sx: { width: 200, overflow: 'auto' } }, { children: currencies === null || currencies === void 0 ? void 0 : currencies.map((currency, index) => {
50
+ var _a;
51
+ const countryCode = (_a = SUPPORTED_CURRENCY_DETAILS[currency]) === null || _a === void 0 ? void 0 : _a.country;
52
+ if (!countryCode)
53
+ return null;
54
+ return (_jsxs(MenuItem, Object.assign({ isSelected: isCurrencySelected(currency), isDisabled: isLoading || isLastCurrencyToBeDisabled(currency), onClick: (e) => {
55
+ onClickCurrency(e, currency);
56
+ }, sx: { maxHeight: 35, minHeight: 35 } }, { children: [_jsx(CountryFlag, { countryCode: SUPPORTED_CURRENCY_DETAILS[currency].country }), ' ', _jsx(Text, Object.assign({ sx: { fontSize: '11px !important', fontWeight: '500 !important' } }, { children: currency }))] }), `key-${currency}-${index}`));
57
+ }) }))] })));
58
+ }
59
+ export default memo(CurrenciesItem);
@@ -0,0 +1 @@
1
+ export { default } from './CurrenciesItem';
@@ -0,0 +1 @@
1
+ export { default } from './CurrenciesItem';
@@ -0,0 +1,11 @@
1
+ import { BrandProps } from '../../type';
2
+ type FlatMerchantsListMenuProps = {
3
+ brand: BrandProps;
4
+ merchantsIds: string[];
5
+ onChangeMerchant?: (value: string[]) => void;
6
+ atLeastOneMerchantSelected: boolean;
7
+ showSearchInput?: boolean;
8
+ anchorEl: HTMLElement | null;
9
+ };
10
+ export default function FlatMerchantsListMenu({ brand, merchantsIds, onChangeMerchant, atLeastOneMerchantSelected, showSearchInput, anchorEl, }: Readonly<FlatMerchantsListMenuProps>): import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo, useCallback } from 'react';
3
+ import { Menu, SearchListInput } from '../../../index.js';
4
+ import { MerchantMenuItemStyled, MerchantWrapper, MerchantID, MerchantName } from './style';
5
+ export default function FlatMerchantsListMenu({ brand, merchantsIds, onChangeMerchant, atLeastOneMerchantSelected = false, showSearchInput = false, anchorEl, }) {
6
+ const [searchInputValue, setSearchInputValue] = useState('');
7
+ const open = Boolean(anchorEl);
8
+ const isMerchantSelected = useCallback((merchantId) => merchantsIds.includes(merchantId), [merchantsIds]);
9
+ const onClickMerchant = (e, merchantId) => {
10
+ e.stopPropagation();
11
+ if (isMerchantSelected(merchantId)) {
12
+ onChangeMerchant === null || onChangeMerchant === void 0 ? void 0 : onChangeMerchant(merchantsIds.filter((merchant) => merchant !== merchantId));
13
+ return;
14
+ }
15
+ const uniqueMids = [...new Set([...merchantsIds, merchantId])];
16
+ onChangeMerchant === null || onChangeMerchant === void 0 ? void 0 : onChangeMerchant(uniqueMids);
17
+ };
18
+ const isLastMidToBeDisabled = (currMid) => {
19
+ return merchantsIds.length === 1 && merchantsIds[0] === currMid && atLeastOneMerchantSelected;
20
+ };
21
+ const handleSearchInputChange = (value) => {
22
+ setSearchInputValue(value);
23
+ };
24
+ const handleSearchInputReset = () => {
25
+ setSearchInputValue('');
26
+ };
27
+ const merchants = useMemo(() => { var _a; return (_a = brand.merchants) !== null && _a !== void 0 ? _a : []; }, [brand.merchants]);
28
+ const filteredMerchants = useMemo(() => {
29
+ if (!(searchInputValue === null || searchInputValue === void 0 ? void 0 : searchInputValue.trim()))
30
+ return merchants;
31
+ return merchants === null || merchants === void 0 ? void 0 : merchants.filter((merchant) => { var _a; return ((_a = merchant === null || merchant === void 0 ? void 0 : merchant.display_name) !== null && _a !== void 0 ? _a : '').toLowerCase().includes(searchInputValue.trim().toLowerCase()); });
32
+ }, [searchInputValue, merchants]);
33
+ const displayedMerchants = useMemo(() => (showSearchInput ? filteredMerchants : merchants), [filteredMerchants, merchants, showSearchInput]);
34
+ return (_jsxs(Menu, Object.assign({ open: open, anchorEl: anchorEl, placement: "right-start" }, { children: [showSearchInput && (_jsx(SearchListInput, { placeholder: "Merchants", name: "merchants", value: searchInputValue, onSearchChange: handleSearchInputChange, onSearchReset: handleSearchInputReset, sx: { px: '8px' } })), displayedMerchants === null || displayedMerchants === void 0 ? void 0 : displayedMerchants.map((merchant) => (_jsx(MerchantMenuItemStyled, Object.assign({ isDisabled: isLastMidToBeDisabled(merchant.legacy_id), isSelected: isMerchantSelected(merchant.legacy_id), onClick: (e) => {
35
+ if (isLastMidToBeDisabled(merchant.legacy_id))
36
+ return;
37
+ onClickMerchant(e, merchant.legacy_id);
38
+ }, sx: { maxHeight: 36, minHeight: 36 } }, { children: _jsxs(MerchantWrapper, { children: [_jsx(MerchantName, Object.assign({ component: "span" }, { children: merchant.display_name })), _jsx(MerchantID, Object.assign({ component: "span" }, { children: merchant.legacy_id }))] }) }), merchant === null || merchant === void 0 ? void 0 : merchant.legacy_id)))] })));
39
+ }
@@ -0,0 +1,2 @@
1
+ import FlatMerchantsListMenu from './FlatMerchantsListMenu';
2
+ export default FlatMerchantsListMenu;
@@ -0,0 +1,2 @@
1
+ import FlatMerchantsListMenu from './FlatMerchantsListMenu';
2
+ export default FlatMerchantsListMenu;
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { MenuItemProps } from '../../../MenuItem/MenuItem';
3
+ export declare const MerchantMenuItemStyled: import("@emotion/styled").StyledComponent<MenuItemProps & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
4
+ export declare const MerchantWrapper: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
5
+ ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
6
+ }, keyof import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
7
+ export declare const MerchantID: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
8
+ ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
9
+ }, keyof import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
10
+ export declare const MerchantName: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
11
+ ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
12
+ }, keyof import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
@@ -0,0 +1,23 @@
1
+ import Box from '@mui/material/Box';
2
+ import { styled, alpha } from '@mui/material/styles';
3
+ import { MenuItem } from '../../../index.js';
4
+ export const MerchantMenuItemStyled = styled(MenuItem)(() => ({
5
+ padding: '12px 16px',
6
+ border: 'none !important',
7
+ '&:hover': { boxShadow: '0px 0px 16px 0px #00000021' },
8
+ }));
9
+ export const MerchantWrapper = styled(Box)(() => ({
10
+ display: 'flex',
11
+ flexDirection: 'column',
12
+ gap: '2px',
13
+ }));
14
+ export const MerchantID = styled(Box)(({ theme }) => ({
15
+ color: alpha(theme.palette.text.primary, 0.5),
16
+ fontSize: '9px',
17
+ }));
18
+ export const MerchantName = styled(Box)(() => ({
19
+ whiteSpace: 'nowrap',
20
+ overflow: 'hidden',
21
+ textOverflow: 'ellipsis',
22
+ maxWidth: '178px',
23
+ }));
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { BrandProps } from '../../type';
3
+ export interface MerchantItemProps {
4
+ brands: BrandProps[];
5
+ isLoading: boolean;
6
+ merchantsIds: string[];
7
+ atLeastOneMerchantSelected?: boolean;
8
+ showSearchInput?: boolean;
9
+ hideCheckbox?: boolean;
10
+ onFilterChange?: (value: string[]) => void;
11
+ renderBrandLogo: (logo: string) => React.ReactNode;
12
+ }
13
+ export default function MerchantItem({ brands, isLoading, onFilterChange, merchantsIds, atLeastOneMerchantSelected, showSearchInput, hideCheckbox, renderBrandLogo, }: Readonly<MerchantItemProps>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo } from 'react';
3
+ import { useTranslation } from 'react-i18next';
4
+ import { Menu, MenuItem, Text } from '../../../index.js';
5
+ import { rightArrow } from '../../../../constants/index.js';
6
+ import BrandItem from '../BrandItem';
7
+ import FlatMerchantsListMenu from '../FlatMerchantsListMenu';
8
+ export default function MerchantItem({ brands, isLoading, onFilterChange, merchantsIds = [], atLeastOneMerchantSelected = false, showSearchInput = false, hideCheckbox = false, renderBrandLogo, }) {
9
+ const [anchorEl, setAnchorEl] = useState(null);
10
+ const open = Boolean(anchorEl);
11
+ const { t } = useTranslation();
12
+ const onOpen = (e) => {
13
+ setAnchorEl(e.currentTarget);
14
+ };
15
+ const onClose = () => {
16
+ setAnchorEl(null);
17
+ };
18
+ const isAllSelected = useMemo(() => {
19
+ if (!brands.length)
20
+ return false;
21
+ return brands.every((brand) => brand.merchants.every(({ legacy_id }) => merchantsIds.includes(legacy_id)));
22
+ }, [merchantsIds, brands, hideCheckbox]);
23
+ const isSomeSelected = useMemo(() => !isAllSelected && merchantsIds.length > 0, [merchantsIds, isAllSelected]);
24
+ // Count the number of brands that have selected merchants
25
+ const brandsWithSelectedMerchants = useMemo(() => {
26
+ return brands.filter((brand) => brand.merchants.some((merchant) => merchantsIds === null || merchantsIds === void 0 ? void 0 : merchantsIds.includes(merchant.legacy_id))).length;
27
+ }, [brands, merchantsIds]);
28
+ const onClick = () => {
29
+ if (atLeastOneMerchantSelected)
30
+ return;
31
+ if (isAllSelected) {
32
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange([]);
33
+ return;
34
+ }
35
+ const allMerchants = brands
36
+ .map((brand) => brand.merchants)
37
+ .flat()
38
+ .map(({ legacy_id }) => legacy_id);
39
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(allMerchants);
40
+ };
41
+ return (_jsxs(MenuItem, Object.assign({ isDisabled: atLeastOneMerchantSelected, isSelected: isAllSelected, hideCheckbox: hideCheckbox, isIndeterminate: isSomeSelected, sx: Object.assign(Object.assign({ maxHeight: 36, minHeight: 36, padding: '12px 8px 12px 16px' }, (open && { boxShadow: '0px 0px 16px 0px #00000021' })), ((isLoading || brands.length <= 0) && {
42
+ pointerEvents: 'none',
43
+ opacity: 0.5,
44
+ cursor: 'default',
45
+ })), onMouseEnter: onOpen, onMouseLeave: onClose, onClick: onClick }, { children: [_jsx(Text, Object.assign({ sx: { fontSize: '11px', flex: 1 } }, { children: t('merchant') })), brands.length > 0 && _jsx("img", { src: rightArrow, alt: "arrow", style: { height: 12 } }), (brands === null || brands === void 0 ? void 0 : brands.length) === 1 ? (_jsx(FlatMerchantsListMenu, { anchorEl: anchorEl, brand: brands[0], merchantsIds: merchantsIds, onChangeMerchant: onFilterChange, atLeastOneMerchantSelected: atLeastOneMerchantSelected, showSearchInput: showSearchInput })) : (_jsx(Menu, Object.assign({ open: open, anchorEl: anchorEl, placement: "right-start" }, { children: brands === null || brands === void 0 ? void 0 : brands.map((brand) => (_jsx(BrandItem, { isDisabled: brandsWithSelectedMerchants === 1 && atLeastOneMerchantSelected, brand: brand, merchantsIds: merchantsIds, onChangeMerchant: onFilterChange, atLeastOneMerchantSelected: atLeastOneMerchantSelected, showSearchInput: showSearchInput, renderBrandLogo: renderBrandLogo }, brand.id))) })))] })));
46
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from './MerchantItem';
2
+ export * from './MerchantItem';
@@ -0,0 +1,2 @@
1
+ export { default } from './MerchantItem';
2
+ export * from './MerchantItem';
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import { RetailersDestination } from 'src/types';
3
+ interface RetailersItemProps {
4
+ retailers: RetailersDestination[];
5
+ isLoading?: boolean;
6
+ retailersIds: string[];
7
+ onFilterChange?: (value: string[]) => void;
8
+ atLeastOneRetailerSelected?: boolean;
9
+ showSearchInput?: boolean;
10
+ hideCheckbox?: boolean;
11
+ }
12
+ declare function RetailersItem({ retailersIds, isLoading, retailers, onFilterChange, atLeastOneRetailerSelected, showSearchInput, hideCheckbox, }: Readonly<RetailersItemProps>): import("react/jsx-runtime").JSX.Element;
13
+ declare const _default: import("react").MemoExoticComponent<typeof RetailersItem>;
14
+ export default _default;
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Menu, MenuItem, Text, SearchListInput } from '../../../index.js';
3
+ import { rightArrow } from '../../../../constants/index.js';
4
+ import { memo, useCallback, useMemo, useState } from 'react';
5
+ import { useTranslation } from 'react-i18next';
6
+ import { RetailerName } from './style';
7
+ function RetailersItem({ retailersIds = [], isLoading, retailers = [], onFilterChange, atLeastOneRetailerSelected = false, showSearchInput = false, hideCheckbox = false, }) {
8
+ const [anchorEl, setAnchorEl] = useState(null);
9
+ const open = Boolean(anchorEl);
10
+ const { t, i18n } = useTranslation();
11
+ const [searchInputValue, setSearchInputValue] = useState('');
12
+ const onOpen = (e) => {
13
+ setAnchorEl(e.currentTarget);
14
+ };
15
+ const onClose = () => {
16
+ setAnchorEl(null);
17
+ };
18
+ const isRetailerSelected = useCallback((retailerId) => retailersIds === null || retailersIds === void 0 ? void 0 : retailersIds.includes(retailerId), [retailersIds]);
19
+ const isAllSelected = useMemo(() => {
20
+ if (!retailers.length)
21
+ return false;
22
+ return retailers.every((retailer) => isRetailerSelected(retailer.id));
23
+ }, [retailers, isRetailerSelected, hideCheckbox]);
24
+ const isSomeSelected = useMemo(() => !isAllSelected && retailersIds.length > 0, [retailersIds, isAllSelected]);
25
+ const onClick = () => {
26
+ if (atLeastOneRetailerSelected)
27
+ return;
28
+ if (isAllSelected) {
29
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange([]);
30
+ return;
31
+ }
32
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(retailers.map((brand) => brand.id));
33
+ };
34
+ const isLastRetailerToBeDisabled = (currMid) => {
35
+ return retailersIds.length === 1 && retailersIds[0] === currMid && atLeastOneRetailerSelected;
36
+ };
37
+ const onClickRetailer = (e, retailerId) => {
38
+ e.stopPropagation();
39
+ if (isLastRetailerToBeDisabled(retailerId))
40
+ return;
41
+ if (isRetailerSelected(retailerId)) {
42
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(retailersIds.filter((retailer) => retailer !== retailerId));
43
+ return;
44
+ }
45
+ const uniqueMids = [...new Set([...retailersIds, retailerId])];
46
+ onFilterChange === null || onFilterChange === void 0 ? void 0 : onFilterChange(uniqueMids);
47
+ };
48
+ const isDisabled = isLoading || (retailers === null || retailers === void 0 ? void 0 : retailers.length) <= 0 || atLeastOneRetailerSelected;
49
+ const handleSearchInputChange = (value) => {
50
+ setSearchInputValue(value);
51
+ };
52
+ const handleSearchInputReset = () => {
53
+ setSearchInputValue('');
54
+ };
55
+ const filteredRetailers = useMemo(() => {
56
+ if (!(searchInputValue === null || searchInputValue === void 0 ? void 0 : searchInputValue.trim()))
57
+ return retailers;
58
+ return retailers === null || retailers === void 0 ? void 0 : retailers.filter((retailer) => { var _a, _b, _c, _d, _e, _f; return ((_f = (_c = (_b = (_a = retailer === null || retailer === void 0 ? void 0 : retailer.brand) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b[i18n.language]) !== null && _c !== void 0 ? _c : (_e = (_d = retailer === null || retailer === void 0 ? void 0 : retailer.brand) === null || _d === void 0 ? void 0 : _d.name) === null || _e === void 0 ? void 0 : _e.en) !== null && _f !== void 0 ? _f : '').toLowerCase().includes(searchInputValue.trim().toLowerCase()); });
59
+ }, [searchInputValue, retailers, i18n.language]);
60
+ const displayedRetailers = useMemo(() => (showSearchInput ? filteredRetailers : retailers), [filteredRetailers, retailers, showSearchInput]);
61
+ return (_jsxs(MenuItem, Object.assign({ isDisabled: isDisabled,
62
+ // TODO: the checkbox ui should be controlled using a state not through the isAllSelected variable
63
+ isSelected: isAllSelected, hideCheckbox: hideCheckbox, isIndeterminate: isSomeSelected, sx: Object.assign(Object.assign({ maxHeight: 35, minHeight: 35, padding: '12px 8px 12px 16px' }, (open && { boxShadow: '0px 0px 16px 0px #00000021' })), (!(retailers === null || retailers === void 0 ? void 0 : retailers.length) && { opacity: 0.5, pointerEvents: 'none' })), onMouseEnter: onOpen, onMouseLeave: onClose, onClick: onClick }, { children: [_jsx(Text, Object.assign({ sx: { fontSize: '11px', flex: 1 } }, { children: t('retailers') })), (retailers === null || retailers === void 0 ? void 0 : retailers.length) > 0 && _jsx("img", { src: rightArrow, alt: "arrow", style: { height: 12 } }), _jsxs(Menu, Object.assign({ open: open, anchorEl: anchorEl, placement: "right-start", sx: { height: 300, width: 200, overflow: 'auto' } }, { children: [showSearchInput && (_jsx(SearchListInput, { placeholder: "Retailers", name: "retailers", value: searchInputValue, onSearchChange: handleSearchInputChange, onSearchReset: handleSearchInputReset, sx: { px: '8px' } })), displayedRetailers === null || displayedRetailers === void 0 ? void 0 : displayedRetailers.map((retailer, index) => {
64
+ var _a, _b, _c, _d, _e;
65
+ return (_jsx(MenuItem, Object.assign({ isSelected: isRetailerSelected(retailer.id), isDisabled: isLoading || isLastRetailerToBeDisabled(retailer.id), onClick: (e) => {
66
+ onClickRetailer(e, retailer.id);
67
+ }, sx: { maxHeight: 35, minHeight: 35 } }, { children: _jsx(RetailerName, { children: (_c = (_b = (_a = retailer === null || retailer === void 0 ? void 0 : retailer.brand) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b[i18n.language]) !== null && _c !== void 0 ? _c : (_e = (_d = retailer === null || retailer === void 0 ? void 0 : retailer.brand) === null || _d === void 0 ? void 0 : _d.name) === null || _e === void 0 ? void 0 : _e.en }) }), `key-${retailer === null || retailer === void 0 ? void 0 : retailer.id}-${index}`));
68
+ })] }))] })));
69
+ }
70
+ export default memo(RetailersItem);
@@ -0,0 +1 @@
1
+ export { default } from './RetailersItem';
@@ -0,0 +1 @@
1
+ export { default } from './RetailersItem';
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare const RetailerName: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
3
+ ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
4
+ }, keyof import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
@@ -0,0 +1,8 @@
1
+ import Box from '@mui/material/Box';
2
+ import { styled } from '@mui/material/styles';
3
+ export const RetailerName = styled(Box)(() => ({
4
+ whiteSpace: 'nowrap',
5
+ overflow: 'hidden',
6
+ textOverflow: 'ellipsis',
7
+ maxWidth: '164px',
8
+ }));
@@ -0,0 +1,4 @@
1
+ export { default as MerchantItem } from './MerchantItem';
2
+ export { default as RetailersItem } from './RetailersItem';
3
+ export { default as CountriesItem } from './CountriesItem';
4
+ export { default as CurrenciesItem } from './CurrenciesItem';
@@ -0,0 +1,4 @@
1
+ export { default as MerchantItem } from './MerchantItem';
2
+ export { default as RetailersItem } from './RetailersItem';
3
+ export { default as CountriesItem } from './CountriesItem';
4
+ export { default as CurrenciesItem } from './CurrenciesItem';
@@ -0,0 +1,3 @@
1
+ export { default as FilterDropdown } from './FilterDropdown';
2
+ export * from './components';
3
+ export * from './FilterDropdown';
@@ -0,0 +1,3 @@
1
+ export { default as FilterDropdown } from './FilterDropdown';
2
+ export * from './components';
3
+ export * from './FilterDropdown';
@@ -0,0 +1,20 @@
1
+ /// <reference types="react" />
2
+ export declare const FilterButton: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
3
+ ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
4
+ }, keyof import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
5
+ isActive?: boolean | undefined;
6
+ }, {}, {}>;
7
+ export declare const TitleStyled: import("@emotion/styled").StyledComponent<import("@mui/material").TypographyOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
8
+ ref?: ((instance: HTMLSpanElement | null) => void) | import("react").RefObject<HTMLSpanElement> | null | undefined;
9
+ }, "width" | "minHeight" | "height" | "bottom" | "left" | "right" | "top" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "justifyContent" | "justifyItems" | "justifySelf" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "visibility" | "whiteSpace" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "p" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "typography" | "displayPrint" | "classes" | "align" | "className" | "style" | "children" | "gutterBottom" | "noWrap" | "paragraph" | "sx" | "variant" | "variantMapping"> & {
10
+ component?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
11
+ } & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
12
+ export declare const Footer: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
13
+ ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
14
+ }, keyof import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
15
+ export declare const OkayButton: import("@emotion/styled").StyledComponent<import("@mui/material/Button").ButtonOwnProps & Omit<import("@mui/material").ButtonBaseOwnProps, "classes"> & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
16
+ ref?: ((instance: HTMLButtonElement | null) => void) | import("react").RefObject<HTMLButtonElement> | null | undefined;
17
+ }, "color" | "disabled" | "classes" | "className" | "style" | "tabIndex" | "children" | "sx" | "variant" | "size" | "fullWidth" | "href" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableElevation" | "disableFocusRipple" | "endIcon" | "startIcon"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
18
+ export declare const CancelButton: import("@emotion/styled").StyledComponent<import("@mui/material/Button").ButtonOwnProps & Omit<import("@mui/material").ButtonBaseOwnProps, "classes"> & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
19
+ ref?: ((instance: HTMLButtonElement | null) => void) | import("react").RefObject<HTMLButtonElement> | null | undefined;
20
+ }, "color" | "disabled" | "classes" | "className" | "style" | "tabIndex" | "children" | "sx" | "variant" | "size" | "fullWidth" | "href" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableElevation" | "disableFocusRipple" | "endIcon" | "startIcon"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
@@ -0,0 +1,60 @@
1
+ import Box from '@mui/material/Box';
2
+ import { styled } from '@mui/material/styles';
3
+ import Button from '@mui/material/Button';
4
+ import { Text } from '../index.js';
5
+ export const FilterButton = styled(Box, { shouldForwardProp: (props) => props !== 'isActive' })(({ theme, isActive }) => (Object.assign({ borderRadius: '4px', border: `1px solid ${theme.palette.divider}`, height: 32, width: 30, display: 'flex', alignItems: 'center', justifyContent: 'center', cursor: 'pointer', backgroundColor: theme.palette.common.white, ':hover': {
6
+ opacity: 0.7,
7
+ } }, (isActive && {
8
+ boxShadow: `0px 0px 4px 0px ${theme.palette.info.dark}80`,
9
+ border: `1px solid ${theme.palette.info.dark}`,
10
+ }))));
11
+ export const TitleStyled = styled(Text)(({ theme }) => ({
12
+ fontWeight: theme.typography.fontWeightMedium,
13
+ fontSize: theme.typography.subtitle1.fontSize,
14
+ color: theme.palette.grey[700],
15
+ paddingInlineStart: theme.spacing(2),
16
+ paddingTop: theme.spacing(1),
17
+ paddingBottom: theme.spacing(1),
18
+ paddingInlineEnd: theme.spacing(1),
19
+ borderBottom: `1px solid ${theme.palette.divider}`,
20
+ }));
21
+ export const Footer = styled(Box)(({ theme }) => ({
22
+ padding: '8px 16px',
23
+ display: 'flex',
24
+ gap: '8px',
25
+ justifyContent: 'flex-end',
26
+ backgroundColor: theme.palette.common.white,
27
+ borderTop: `1px solid ${theme.palette.divider}`,
28
+ }));
29
+ export const OkayButton = styled(Button)(({ theme }) => ({
30
+ textTransform: 'capitalize',
31
+ minWidth: 'auto',
32
+ width: 70,
33
+ borderRadius: '4px',
34
+ border: `1px solid ${theme.palette.info.dark}`,
35
+ backgroundColor: theme.palette.info.dark,
36
+ fontWeight: 700,
37
+ fontSize: '11px',
38
+ color: theme.palette.common.white,
39
+ '&:hover': {
40
+ backgroundColor: theme.palette.info.dark,
41
+ },
42
+ '&.Mui-disabled': {
43
+ color: '#fff !important',
44
+ opacity: 0.5,
45
+ },
46
+ }));
47
+ export const CancelButton = styled(Button)(({ theme }) => ({
48
+ textTransform: 'capitalize',
49
+ minWidth: 'auto',
50
+ width: 70,
51
+ borderRadius: '4px',
52
+ border: `1px solid ${theme.palette.divider}`,
53
+ backgroundColor: theme.palette.common.white,
54
+ fontWeight: 500,
55
+ fontSize: '11px',
56
+ color: theme.palette.text.primary,
57
+ '&:hover': {
58
+ background: 'transparent',
59
+ },
60
+ }));
@@ -0,0 +1,4 @@
1
+ import { Brand, Merchant } from '../../types/index.js';
2
+ export interface BrandProps extends Omit<Brand, 'entities'> {
3
+ merchants: Merchant[];
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { BoxProps } from '@mui/material/Box';
3
- interface MenuItemProps extends BoxProps {
3
+ export interface MenuItemProps extends BoxProps {
4
4
  isSelected?: boolean;
5
5
  isDisabled?: boolean;
6
6
  isIndeterminate?: boolean;
@@ -123,4 +123,4 @@ export { default as MFWidgetLoader } from './MFWidgetLoader';
123
123
  export { default as BetaBanner } from './BetaBanner';
124
124
  export * from './Autocomplete';
125
125
  export * from './BrandLogo';
126
- export * from './MerchantLogo';
126
+ export * from './FilterDropdown';
@@ -123,4 +123,4 @@ export { default as MFWidgetLoader } from './MFWidgetLoader';
123
123
  export { default as BetaBanner } from './BetaBanner';
124
124
  export * from './Autocomplete';
125
125
  export * from './BrandLogo';
126
- export * from './MerchantLogo';
126
+ export * from './FilterDropdown';
@@ -1 +1,15 @@
1
1
  export type DestinationStatus = 'PROCESSED' | 'FAILED';
2
+ export interface RetailersDestination {
3
+ id: string;
4
+ status: string;
5
+ created: number;
6
+ display_name: string;
7
+ business_entity_id: string;
8
+ wallet_id: string;
9
+ business_id: string;
10
+ brand: {
11
+ id: string;
12
+ name: Record<string, string>;
13
+ logo: string;
14
+ };
15
+ }
@@ -26,3 +26,4 @@ export * from './day';
26
26
  export * from './tsUtils';
27
27
  export * from './appEvents';
28
28
  export * from './common';
29
+ export * from './destination';
@@ -26,3 +26,4 @@ export * from './day';
26
26
  export * from './tsUtils';
27
27
  export * from './appEvents';
28
28
  export * from './common';
29
+ export * from './destination';
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@tap-payments/os-micro-frontend-shared",
3
3
  "description": "Shared components and utilities for Tap Payments micro frontends",
4
- "version": "0.1.248-test.1",
5
- "testVersion": 1,
4
+ "version": "0.1.248-test.2",
5
+ "testVersion": 2,
6
6
  "type": "module",
7
7
  "main": "build/index.js",
8
8
  "module": "build/index.js",
@@ -1,10 +0,0 @@
1
- import { SxProps } from '@mui/material';
2
- export type MerchantLogoProps = {
3
- data?: Blob;
4
- width?: number | string;
5
- height?: number | string;
6
- isError?: boolean;
7
- isLoading?: boolean;
8
- sx?: SxProps;
9
- };
10
- export default function MerchantLogo({ data, width, height, ...props }: Readonly<MerchantLogoProps>): import("react/jsx-runtime").JSX.Element;
@@ -1,17 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import { jsx as _jsx } from "react/jsx-runtime";
13
- import { BrandLogoStyled, LogoWrapper } from './style';
14
- export default function MerchantLogo(_a) {
15
- var { data, width = 51, height = 51 } = _a, props = __rest(_a, ["data", "width", "height"]);
16
- return (_jsx(LogoWrapper, Object.assign({ width: width, height: height }, { children: _jsx(BrandLogoStyled, Object.assign({ data: data, width: width, height: height }, props)) })));
17
- }
@@ -1 +0,0 @@
1
- export { default as MerchantLogo, MerchantLogoProps } from './MerchantLogo';
@@ -1 +0,0 @@
1
- export { default as MerchantLogo } from './MerchantLogo';
@@ -1,5 +0,0 @@
1
- /// <reference types="react" />
2
- export declare const BrandLogoStyled: import("@emotion/styled").StyledComponent<Readonly<import("../BrandLogo").BrandLogoProps> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
3
- export declare const LogoWrapper: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
4
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
5
- }, keyof import("@mui/system").BoxOwnProps<import("@mui/material/styles").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
@@ -1,13 +0,0 @@
1
- import Box from '@mui/material/Box';
2
- import { styled } from '@mui/material/styles';
3
- import { BrandLogo } from '../BrandLogo';
4
- export const BrandLogoStyled = styled(BrandLogo)(({ theme }) => ({
5
- filter: 'drop-shadow(0px 0px 28px rgba(0, 0, 0, 0.09))',
6
- borderRadius: '50%',
7
- backgroundColor: theme.palette.common.white,
8
- }));
9
- export const LogoWrapper = styled(Box)(() => ({
10
- display: 'flex',
11
- alignItems: 'center',
12
- justifyContent: 'center',
13
- }));