@tap-payments/os-micro-frontend-shared 0.1.261-test.3 → 0.1.261-test.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/Error/Error.d.ts +1 -1
- package/build/components/Inputs/CountriesDropDown/CountriesDropdown.d.ts +4 -5
- package/build/components/Inputs/CountriesDropDown/CountriesDropdown.js +3 -3
- package/build/components/StatusBar/StatusBar.js +4 -3
- package/build/components/StatusBar/type.d.ts +1 -1
- package/build/components/TableHeader/FiltersRow.d.ts +1 -1
- package/build/components/TableHeader/FiltersRow.js +19 -4
- package/build/components/TableHeader/FiltersRowWrapper.d.ts +5 -0
- package/build/components/TableHeader/FiltersRowWrapper.js +18 -0
- package/build/components/TableHeader/TableHeader.d.ts +5 -4
- package/build/components/TableHeader/TableHeader.js +21 -6
- package/build/components/TableHeader/TableHeaderWrapper.d.ts +5 -0
- package/build/components/TableHeader/TableHeaderWrapper.js +18 -0
- package/build/components/TableHeader/TableView/ColumnItem.d.ts +14 -0
- package/build/components/TableHeader/TableView/ColumnItem.js +29 -0
- package/build/components/TableHeader/TableView/CustomViews.d.ts +5 -0
- package/build/components/TableHeader/TableView/CustomViews.js +21 -0
- package/build/components/TableHeader/TableView/DefaultViews.d.ts +13 -0
- package/build/components/TableHeader/TableView/DefaultViews.js +22 -0
- package/build/components/TableHeader/TableView/TableView.d.ts +12 -0
- package/build/components/TableHeader/TableView/TableView.js +55 -0
- package/build/components/TableHeader/TableView/hooks/index.d.ts +3 -0
- package/build/components/TableHeader/TableView/hooks/index.js +3 -0
- package/build/components/TableHeader/TableView/hooks/useColumnItem.d.ts +21 -0
- package/build/components/TableHeader/TableView/hooks/useColumnItem.js +29 -0
- package/build/components/TableHeader/TableView/hooks/useSubMenu.d.ts +10 -0
- package/build/components/TableHeader/TableView/hooks/useSubMenu.js +31 -0
- package/build/components/TableHeader/TableView/hooks/useViewColumns.d.ts +13 -0
- package/build/components/TableHeader/TableView/hooks/useViewColumns.js +45 -0
- package/build/components/TableHeader/TableView/index.d.ts +3 -0
- package/build/components/TableHeader/TableView/index.js +3 -0
- package/build/components/TableHeader/TableView/style.d.ts +24 -0
- package/build/components/TableHeader/TableView/style.js +102 -0
- package/build/components/TableHeader/TableView/type.d.ts +10 -0
- package/build/components/TableHeader/TableView/type.js +1 -0
- package/build/components/TableHeader/data.d.ts +5 -0
- package/build/components/TableHeader/data.js +7 -0
- package/build/components/TableHeader/index.d.ts +6 -2
- package/build/components/TableHeader/index.js +6 -2
- package/build/components/TableHeader/style.d.ts +1 -1
- package/build/components/TableHeader/style.js +1 -1
- package/build/components/TableHeader/type.d.ts +19 -10
- package/build/components/TableHeader/type.js +0 -7
- package/build/components/index.d.ts +1 -1
- package/build/components/index.js +1 -1
- package/build/types/tsUtils.d.ts +1 -0
- package/package.json +18 -19
- package/build/components/Customer/CustomerDropdown/CustomerDropdown.d.ts +0 -8
- package/build/components/Customer/CustomerDropdown/CustomerDropdown.js +0 -39
- package/build/components/Customer/CustomerDropdown/index.d.ts +0 -1
- package/build/components/Customer/CustomerDropdown/index.js +0 -1
- package/build/components/Customer/CustomerDropdown/style.d.ts +0 -10
- package/build/components/Customer/CustomerDropdown/style.js +0 -30
- package/build/components/Customer/CustomerForms/EmailForm.d.ts +0 -12
- package/build/components/Customer/CustomerForms/EmailForm.js +0 -76
- package/build/components/Customer/CustomerForms/FullInfo.d.ts +0 -13
- package/build/components/Customer/CustomerForms/FullInfo.js +0 -72
- package/build/components/Customer/CustomerForms/FullInfoForm.d.ts +0 -12
- package/build/components/Customer/CustomerForms/FullInfoForm.js +0 -74
- package/build/components/Customer/CustomerForms/PhoneNumberForm.d.ts +0 -12
- package/build/components/Customer/CustomerForms/PhoneNumberForm.js +0 -71
- package/build/components/Customer/CustomerForms/index.d.ts +0 -9
- package/build/components/Customer/CustomerForms/index.js +0 -9
- package/build/components/Customer/CustomerForms/style.d.ts +0 -25
- package/build/components/Customer/CustomerForms/style.js +0 -71
- package/build/components/Customer/CustomerForms/validation.d.ts +0 -30
- package/build/components/Customer/CustomerForms/validation.js +0 -42
- package/build/components/Customer/index.d.ts +0 -1
- package/build/components/Customer/index.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { BoxProps } from '@mui/material/Box';
|
|
3
|
-
|
|
3
|
+
interface ErrorI extends BoxProps {
|
|
4
4
|
error: string;
|
|
5
5
|
}
|
|
6
6
|
declare function Error({ error, ...props }: ErrorI): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { Country } from '../../../types/index.js';
|
|
3
|
-
|
|
3
|
+
declare function CountriesCode({ defaultCountry, value: selectedCountry, onChangeCountry, required, countries, isFetching, }: {
|
|
4
4
|
value?: Partial<Country>;
|
|
5
5
|
defaultCountry?: string;
|
|
6
6
|
onChangeCountry?: (country: Country) => void;
|
|
7
7
|
required?: boolean;
|
|
8
8
|
countries: Country[];
|
|
9
|
-
|
|
10
|
-
};
|
|
11
|
-
declare
|
|
12
|
-
declare const _default: import("react").MemoExoticComponent<typeof CountriesDropdown>;
|
|
9
|
+
isFetching: boolean;
|
|
10
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
declare const _default: import("react").MemoExoticComponent<typeof CountriesCode>;
|
|
13
12
|
export default _default;
|
|
@@ -6,7 +6,7 @@ import Popper from '@mui/material/Popper';
|
|
|
6
6
|
import Skeleton from '@mui/material/Skeleton';
|
|
7
7
|
import { downArrowIcon, searchIcon } from '../../../constants/index.js';
|
|
8
8
|
import { CountryStyled, CountriesWrapper, CountriesList, InputStyled, CountryButton, Required } from './style';
|
|
9
|
-
function
|
|
9
|
+
function CountriesCode({ defaultCountry, value: selectedCountry, onChangeCountry, required, countries = [], isFetching = false, }) {
|
|
10
10
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
11
11
|
const [filteredCountries, setFilteredCountries] = useState([]);
|
|
12
12
|
const [searchValue, setSearchValue] = useState();
|
|
@@ -45,7 +45,7 @@ function CountriesDropdown({ defaultCountry, value: selectedCountry, onChangeCou
|
|
|
45
45
|
}
|
|
46
46
|
setFilteredCountries(countries.filter((country) => country.idd_prefix.toString().startsWith(value.toString())));
|
|
47
47
|
};
|
|
48
|
-
if (
|
|
48
|
+
if (isFetching) {
|
|
49
49
|
return _jsx(Skeleton, { variant: "rectangular", width: 56.5, height: 20, sx: { borderRadius: '4px' } });
|
|
50
50
|
}
|
|
51
51
|
return (_jsx(ClickAwayListener, Object.assign({ onClickAway: closeDropdown }, { children: _jsxs(Box, Object.assign({ "data-testid": "CountriesCode", sx: { position: 'relative' } }, { children: [_jsxs(CountryButton, Object.assign({ type: "button", onClick: openDropdown, sx: {
|
|
@@ -56,4 +56,4 @@ function CountriesDropdown({ defaultCountry, value: selectedCountry, onChangeCou
|
|
|
56
56
|
selectNewCode(country);
|
|
57
57
|
} }, { children: [country.logo ? _jsx("img", { src: country.logo, alt: "c", className: "logo" }) : _jsx(Skeleton, { variant: "rectangular", className: "logo" }), _jsx("span", { children: `+${country.idd_prefix}` })] }), `country-code-${country.countryId}`))) })] })) }))] })) })));
|
|
58
58
|
}
|
|
59
|
-
export default memo(
|
|
59
|
+
export default memo(CountriesCode);
|
|
@@ -35,10 +35,11 @@ function StatusBar({ isFilteredIdsShown, availableStatuses, status, onStatusChan
|
|
|
35
35
|
}
|
|
36
36
|
}, buttonSx: buttonSx })));
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
if (!statusItems)
|
|
38
|
+
if (!s.status)
|
|
40
39
|
return null;
|
|
41
|
-
const
|
|
40
|
+
const statusItems = s.status;
|
|
41
|
+
const formattedStatuses = (statusItems.filter(Boolean).map((item) => (typeof item === 'string' ? { value: item } : item)) ||
|
|
42
|
+
[]);
|
|
42
43
|
const hasMatchingDropdownStatus = !!status && formattedStatuses.some((item) => (item === null || item === void 0 ? void 0 : item.value) === status);
|
|
43
44
|
const variant = hasMatchingDropdownStatus ? 'active' : 'inActive';
|
|
44
45
|
const selectedStatus = hasMatchingDropdownStatus ? status : (_b = formattedStatuses[0]) === null || _b === void 0 ? void 0 : _b.value;
|
|
@@ -6,7 +6,7 @@ export type DetailedStatusItem<T> = {
|
|
|
6
6
|
icon?: React.ReactNode;
|
|
7
7
|
};
|
|
8
8
|
export type AvailableStatus<T extends TableHeaderStatus | TableHeaderStatus[] = undefined> = StatusButtonProps & {
|
|
9
|
-
status?: T | DetailedStatusItem<T>[];
|
|
9
|
+
status?: T | T[] | DetailedStatusItem<T>[];
|
|
10
10
|
render?: <IStatus extends T>(controls: {
|
|
11
11
|
status: IStatus;
|
|
12
12
|
onChange: (selected?: T) => void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { FilterRowProps } from './type';
|
|
2
|
-
export
|
|
2
|
+
export default function FiltersRow({ date, calendarMode, onDateChange, onCalendarModeSwitch, tableReportsComponent, tableFilterComponent, isReportsButtonVisible, onViewChange, onSearchChange, onToggleViewButtonClick, rightActions, leftActions, setTableViews, tableViews, resetTableViews, onToggleTextButtonClick, isTextShown, calendarGroupBy, onCalendarGroupChange, maxDateRange, searchPlaceholder, isAcceptance, tableMode, timezone, browserTimezone, defaultCountryTimezone, onChangeTimezone, segmentCountries, }: FilterRowProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,20 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from 'react';
|
|
3
|
+
import { SearchButton, StyledButton, Icon, RangeCalender } from '../index.js';
|
|
4
|
+
import { longWordsIcon, viewIcon, sheetViewIcon } from '../../constants/index.js';
|
|
5
|
+
import FiltersRowWrapper from './FiltersRowWrapper';
|
|
6
|
+
import TableView from './TableView';
|
|
7
|
+
export default function FiltersRow({ date, calendarMode, onDateChange, onCalendarModeSwitch, tableReportsComponent, tableFilterComponent, isReportsButtonVisible, onViewChange, onSearchChange, onToggleViewButtonClick, rightActions, leftActions, setTableViews, tableViews, resetTableViews, onToggleTextButtonClick, isTextShown, calendarGroupBy, onCalendarGroupChange, maxDateRange = 31, searchPlaceholder, isAcceptance, tableMode, timezone, browserTimezone, defaultCountryTimezone, onChangeTimezone, segmentCountries, }) {
|
|
8
|
+
const [isViewVisible, setIsViewVisible] = useState(false);
|
|
9
|
+
const timezoneCountriesCodes = useMemo(() => segmentCountries.map(({ code }) => code), [segmentCountries]);
|
|
10
|
+
const textViewButton = useMemo(() => (_jsx(StyledButton, Object.assign({ hasImageFilter: false, "data-testid": "FiltersRow_TextViewButton", onClick: onToggleTextButtonClick, isActive: isTextShown }, { children: _jsx(Icon, { src: tableMode === 'sheet' ? sheetViewIcon : longWordsIcon, alt: "text-mode", sx: {
|
|
11
|
+
width: 14,
|
|
12
|
+
height: 14,
|
|
13
|
+
} }) }))), [isTextShown, onToggleTextButtonClick, tableMode]);
|
|
14
|
+
return (_jsxs(FiltersRowWrapper, { children: [leftActions && !isViewVisible && leftActions, !isViewVisible && (_jsxs(_Fragment, { children: [onSearchChange && _jsx(SearchButton, { onSearchChange: onSearchChange, placeholder: searchPlaceholder }), tableFilterComponent, onToggleTextButtonClick && !isAcceptance && textViewButton, date && (_jsx(RangeCalender, { defaultDate: date, onDateChange: (newDate) => {
|
|
15
|
+
const [startDate, endDate] = newDate;
|
|
16
|
+
if (startDate && endDate) {
|
|
17
|
+
onDateChange === null || onDateChange === void 0 ? void 0 : onDateChange([startDate, endDate]);
|
|
18
|
+
}
|
|
19
|
+
}, mode: calendarMode, onCalendarModeSwitch: onCalendarModeSwitch, maxDateRange: maxDateRange, groupBy: calendarGroupBy, onCalendarGroupChange: onCalendarGroupChange, browserTimezone: browserTimezone, defaultCountryTimezone: defaultCountryTimezone, timezone: timezone, onChangeTimezone: onChangeTimezone, timezoneCountriesCodes: timezoneCountriesCodes })), isReportsButtonVisible && tableReportsComponent, onToggleTextButtonClick && isAcceptance && textViewButton] })), onToggleViewButtonClick && (_jsx(StyledButton, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })), onViewChange && (_jsx(TableView, { onViewChange: onViewChange, setIsViewVisible: setIsViewVisible, tableViews: tableViews, setTableViews: setTableViews, resetTableViews: resetTableViews })), rightActions && !isViewVisible && rightActions] }));
|
|
5
20
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import type { BoxProps } from '@mui/material/Box';
|
|
3
|
+
export type FiltersRowWrapperProps<T extends React.ElementType = 'aside'> = PropsWithChildren<BoxProps<T>>;
|
|
4
|
+
declare const FiltersRowWrapper: <T extends import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> = "aside">(props: Readonly<FiltersRowWrapperProps<T>>) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export default FiltersRowWrapper;
|
|
@@ -0,0 +1,18 @@
|
|
|
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 { FiltersRowContainer } from './style';
|
|
14
|
+
const FiltersRowWrapper = (props) => {
|
|
15
|
+
const { children, component = 'aside' } = props, rest = __rest(props, ["children", "component"]);
|
|
16
|
+
return (_jsx(FiltersRowContainer, Object.assign({ component: component, "data-testid": "FiltersRow" }, rest, { children: children })));
|
|
17
|
+
};
|
|
18
|
+
export default FiltersRowWrapper;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
declare
|
|
4
|
-
|
|
1
|
+
import type { TableHeaderProps } from './type';
|
|
2
|
+
import { type TableHeaderStatus } from '../../types/index.js';
|
|
3
|
+
export declare function TableHeader<IStatus extends TableHeaderStatus | TableHeaderStatus[] = undefined>({ date, status, availableStatuses, showMaximizedView, title, calendarMode, tableReportsComponent, tableFilterComponent, onStatusChange, onViewChange, onDateChange, onCalendarModeSwitch, filteredIds, onCancelFilteredIdsClick, isFilteredIdsShown, cardNumber, leftActions, rightActions, isReportsButtonVisible, onSearchChange, onToggleViewButtonClick, leftComponent, tableViews, setTableViews, resetTableViews, onToggleTextButtonClick, isTextShown, calendarGroupBy, onCalendarGroupChange, children, maxDateRange, isAcceptance, startComponent, searchPlaceholder, tableMode, timezone, browserTimezone, defaultCountryTimezone, onChangeTimezone, segmentCountries, ...StatusBarProps }: TableHeaderProps<IStatus>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare const _default: typeof TableHeader;
|
|
5
|
+
export default _default;
|
|
@@ -1,7 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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;
|
|
6
11
|
};
|
|
7
|
-
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { memo } from 'react';
|
|
14
|
+
import { FilteredIds, StatusBar, TableHeaderWrapper } from '../index.js';
|
|
15
|
+
import FiltersRow from './FiltersRow';
|
|
16
|
+
import { StatusButtonsContainer, TitleContainer, TableHeaderTitle, TableHeaderRow } from './style';
|
|
17
|
+
export function TableHeader(_a) {
|
|
18
|
+
var { date, status, availableStatuses, showMaximizedView, title, calendarMode, tableReportsComponent, tableFilterComponent, onStatusChange, onViewChange, onDateChange, onCalendarModeSwitch, filteredIds, onCancelFilteredIdsClick, isFilteredIdsShown, cardNumber, leftActions, rightActions, isReportsButtonVisible, onSearchChange, onToggleViewButtonClick, leftComponent, tableViews, setTableViews, resetTableViews, onToggleTextButtonClick, isTextShown, calendarGroupBy, onCalendarGroupChange, children, maxDateRange, isAcceptance, startComponent, searchPlaceholder, tableMode, timezone, browserTimezone, defaultCountryTimezone, onChangeTimezone, segmentCountries = [] } = _a, StatusBarProps = __rest(_a, ["date", "status", "availableStatuses", "showMaximizedView", "title", "calendarMode", "tableReportsComponent", "tableFilterComponent", "onStatusChange", "onViewChange", "onDateChange", "onCalendarModeSwitch", "filteredIds", "onCancelFilteredIdsClick", "isFilteredIdsShown", "cardNumber", "leftActions", "rightActions", "isReportsButtonVisible", "onSearchChange", "onToggleViewButtonClick", "leftComponent", "tableViews", "setTableViews", "resetTableViews", "onToggleTextButtonClick", "isTextShown", "calendarGroupBy", "onCalendarGroupChange", "children", "maxDateRange", "isAcceptance", "startComponent", "searchPlaceholder", "tableMode", "timezone", "browserTimezone", "defaultCountryTimezone", "onChangeTimezone", "segmentCountries"]);
|
|
19
|
+
const filtersRow = (_jsx(FiltersRow, { date: date, calendarMode: calendarMode, onDateChange: onDateChange, onCalendarModeSwitch: onCalendarModeSwitch, tableReportsComponent: tableReportsComponent, tableFilterComponent: tableFilterComponent, onViewChange: onViewChange, leftActions: leftActions, rightActions: rightActions, onSearchChange: onSearchChange, onToggleViewButtonClick: onToggleViewButtonClick, isReportsButtonVisible: isReportsButtonVisible, tableViews: tableViews, setTableViews: setTableViews, resetTableViews: resetTableViews, onToggleTextButtonClick: onToggleTextButtonClick, tableMode: tableMode, isTextShown: isTextShown, onCalendarGroupChange: onCalendarGroupChange, calendarGroupBy: calendarGroupBy, maxDateRange: maxDateRange, isAcceptance: isAcceptance, searchPlaceholder: searchPlaceholder, timezone: timezone, browserTimezone: browserTimezone, defaultCountryTimezone: defaultCountryTimezone, onChangeTimezone: onChangeTimezone, segmentCountries: segmentCountries }));
|
|
20
|
+
return (_jsxs(TableHeaderWrapper, { children: [showMaximizedView && (_jsxs(TitleContainer, { children: [_jsx("span", { children: !!title && _jsx(TableHeaderTitle, { children: title }) }), filtersRow] }, "TitleContainer")), _jsxs(TableHeaderRow, Object.assign({ as: "section" }, { children: [_jsxs(StatusButtonsContainer, Object.assign({ as: "aside" }, { children: [startComponent, _jsx(StatusBar, Object.assign({ status: status, availableStatuses: availableStatuses, onStatusChange: onStatusChange, isFilteredIdsShown: isFilteredIdsShown }, StatusBarProps)), leftComponent, isFilteredIdsShown && (_jsx(FilteredIds, { cardNumber: cardNumber, Ids: filteredIds, isShown: isFilteredIdsShown, onCancelClick: onCancelFilteredIdsClick }, "FilteredIds"))] })), !showMaximizedView && filtersRow] }), "FiltersWrapper"), children] }));
|
|
21
|
+
}
|
|
22
|
+
export default memo(TableHeader);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import type { BoxProps } from '@mui/material/Box';
|
|
3
|
+
export type TableHeaderWrapperProps<T extends React.ElementType = 'header'> = PropsWithChildren<BoxProps<T>>;
|
|
4
|
+
declare const TableHeaderWrapper: <T extends import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> = "header">(props: TableHeaderWrapperProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export default TableHeaderWrapper;
|
|
@@ -0,0 +1,18 @@
|
|
|
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 { TableHeaderContainer } from './style';
|
|
14
|
+
const TableHeaderWrapper = (props) => {
|
|
15
|
+
const { children, component = 'header' } = props, rest = __rest(props, ["children", "component"]);
|
|
16
|
+
return (_jsx(TableHeaderContainer, Object.assign({ component: component, "data-testid": "TableHeader" }, rest, { children: children })));
|
|
17
|
+
};
|
|
18
|
+
export default TableHeaderWrapper;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ColumnViewProps } from '../../../types/index.js';
|
|
3
|
+
interface ColumnItemProps {
|
|
4
|
+
column: ColumnViewProps;
|
|
5
|
+
index: number;
|
|
6
|
+
openSubMenuName: string | null;
|
|
7
|
+
subMenuAnchorEl: HTMLElement | null;
|
|
8
|
+
toggleColumnSelection: (columnName: string) => void;
|
|
9
|
+
toggleSubmenuItem: (columnName: string, submenuItemName: string) => void;
|
|
10
|
+
handleSubMenuOpen: (event: React.MouseEvent<HTMLElement>, name: string) => void;
|
|
11
|
+
handleSubMenuClose: () => void;
|
|
12
|
+
}
|
|
13
|
+
declare function ColumnItem({ column, index, openSubMenuName, subMenuAnchorEl, toggleColumnSelection, toggleSubmenuItem, handleSubMenuOpen, handleSubMenuClose, }: ColumnItemProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export default ColumnItem;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import startCase from 'lodash/startCase';
|
|
4
|
+
import Box from '@mui/material/Box';
|
|
5
|
+
import { useTheme } from '@mui/material/styles';
|
|
6
|
+
import { Menu, MenuItem } from '../../index.js';
|
|
7
|
+
import { rightArrow } from '../../../constants/index.js';
|
|
8
|
+
import { useColumnItem } from './hooks';
|
|
9
|
+
function ColumnItem({ column, index, openSubMenuName, subMenuAnchorEl, toggleColumnSelection, toggleSubmenuItem, handleSubMenuOpen, handleSubMenuClose, }) {
|
|
10
|
+
var _a;
|
|
11
|
+
const { t } = useTranslation();
|
|
12
|
+
const theme = useTheme();
|
|
13
|
+
const { isIndeterminate, hasSubmenuItems, isSubmenuOpen, isFirstItem, handleColumnClick, handleMouseEnter, handleMouseLeave } = useColumnItem({
|
|
14
|
+
column,
|
|
15
|
+
index,
|
|
16
|
+
openSubMenuName,
|
|
17
|
+
toggleColumnSelection,
|
|
18
|
+
handleSubMenuOpen,
|
|
19
|
+
handleSubMenuClose,
|
|
20
|
+
});
|
|
21
|
+
const getDisplayLabel = (label) => {
|
|
22
|
+
var _a;
|
|
23
|
+
if (!label)
|
|
24
|
+
return '';
|
|
25
|
+
return (_a = t(label)) !== null && _a !== void 0 ? _a : startCase(label);
|
|
26
|
+
};
|
|
27
|
+
return (_jsxs(Box, Object.assign({ sx: Object.assign({ borderTop: `1px solid ${theme.palette.divider}` }, (isFirstItem && { borderTop: 'none', height: 33 })) }, { children: [_jsxs(MenuItem, Object.assign({ isIndeterminate: isIndeterminate, isSelected: column.selected, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onClick: handleColumnClick }, { children: [_jsx(Box, Object.assign({ sx: { flex: 1 } }, { children: getDisplayLabel(column.label) })), hasSubmenuItems && _jsx("img", { src: rightArrow, className: "arrow-icon", alt: "arrow" })] })), hasSubmenuItems && (_jsx(Menu, Object.assign({ open: isSubmenuOpen, anchorEl: subMenuAnchorEl, placement: "right-start", onMouseEnter: () => { }, onMouseLeave: handleSubMenuClose }, { children: (_a = column.menuItems) === null || _a === void 0 ? void 0 : _a.map((submenuItem) => (_jsx(MenuItem, Object.assign({ isSelected: submenuItem.selected, onClick: () => toggleSubmenuItem(column.name, submenuItem.name) }, { children: getDisplayLabel(submenuItem.label) }), submenuItem.name))) })))] }), column.name));
|
|
28
|
+
}
|
|
29
|
+
export default ColumnItem;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { CustomViewsProps } from './type';
|
|
3
|
+
declare function CustomViews({ open, onSelect, setTableViews, tableViews, anchorEl, onClose }: Readonly<CustomViewsProps>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare const _default: import("react").MemoExoticComponent<typeof CustomViews>;
|
|
5
|
+
export default _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useMemo } from 'react';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { Reorder } from 'framer-motion';
|
|
5
|
+
import { CustomBackdrop, Menu } from '../../index.js';
|
|
6
|
+
import { downArrowIcon } from '../../../constants/index.js';
|
|
7
|
+
import { ButtonStyled, ListStyled, DropdownStyled } from './style';
|
|
8
|
+
import { useSubMenu, useViewColumns } from './hooks';
|
|
9
|
+
import ColumnItem from './ColumnItem';
|
|
10
|
+
function CustomViews({ open, onSelect, setTableViews, tableViews, anchorEl, onClose }) {
|
|
11
|
+
const { t } = useTranslation();
|
|
12
|
+
const columns = useMemo(() => tableViews || [], [tableViews]);
|
|
13
|
+
const columnNames = useMemo(() => columns.map((column) => column.name), [columns]);
|
|
14
|
+
const { reorderColumns, toggleColumnSelection, toggleSubmenuItem } = useViewColumns({
|
|
15
|
+
columns,
|
|
16
|
+
setTableViews,
|
|
17
|
+
});
|
|
18
|
+
const { subMenuAnchorEl, openSubMenuName, handleSubMenuClose, handleSubMenuOpen, handleMenuScroll } = useSubMenu(open, onClose);
|
|
19
|
+
return (_jsxs(DropdownStyled, Object.assign({ "data-testid": "TableView_CustomViews" }, { children: [_jsxs(ButtonStyled, Object.assign({ "data-testid": "TableView_CustomViews_Button", onClick: onSelect }, { children: [_jsx("div", { children: t('columns') }), _jsx("img", { src: downArrowIcon, alt: "arrow", style: Object.assign({}, (Boolean(open) && { transform: 'rotate(180deg)' })) })] })), _jsxs(Menu, Object.assign({ open: open, anchorEl: anchorEl, "data-testid": "TableView_CustomViews_Popper", sx: { padding: 0, marginTop: '8px', borderRadius: 1 } }, { children: [open && _jsx(CustomBackdrop, { onClick: onClose }), _jsx(ListStyled, Object.assign({ component: "article", "data-testid": "TableView_CustomViews_List" }, { children: _jsx(Reorder.Group, Object.assign({ as: "div", axis: "y", onReorder: reorderColumns, values: columnNames, style: { maxHeight: 500, overflowY: 'auto' }, onScroll: handleMenuScroll }, { children: columns.map((column, index) => (_jsx(ColumnItem, { column: column, index: index, openSubMenuName: openSubMenuName, subMenuAnchorEl: subMenuAnchorEl, toggleColumnSelection: toggleColumnSelection, toggleSubmenuItem: toggleSubmenuItem, handleSubMenuOpen: handleSubMenuOpen, handleSubMenuClose: handleSubMenuClose }, column.name))) })) }))] }))] })));
|
|
20
|
+
}
|
|
21
|
+
export default memo(CustomViews);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ViewOption } from '../type';
|
|
3
|
+
interface DefaultViewsProps {
|
|
4
|
+
open: boolean;
|
|
5
|
+
selectedViewInfo: ViewOption;
|
|
6
|
+
setSelectedViewInfo: (selectedView: ViewOption) => void;
|
|
7
|
+
onSelect: (e: React.MouseEvent<HTMLDivElement>) => void;
|
|
8
|
+
setViews?: (views: string[]) => void;
|
|
9
|
+
anchorEl: Element | null;
|
|
10
|
+
}
|
|
11
|
+
declare function DefaultViews({ open, selectedViewInfo, setSelectedViewInfo, onSelect, setViews, anchorEl }: Readonly<DefaultViewsProps>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
declare const _default: React.MemoExoticComponent<typeof DefaultViews>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import Popper from '@mui/material/Popper';
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
|
+
import { downArrowIcon, checkIcon } from '../../../constants/index.js';
|
|
6
|
+
import { ButtonStyled, ListStyled, DropdownStyled, MenuItem, Space, SpaceAfter } from './style';
|
|
7
|
+
import { dummyViewList } from '../data';
|
|
8
|
+
function DefaultViews({ open, selectedViewInfo, setSelectedViewInfo, onSelect, setViews, anchorEl }) {
|
|
9
|
+
const { t } = useTranslation();
|
|
10
|
+
return (_jsxs(DropdownStyled, Object.assign({ "data-testid": "TableView_DefaultViews" }, { children: [_jsxs(ButtonStyled, Object.assign({ onClick: (e) => {
|
|
11
|
+
onSelect(e);
|
|
12
|
+
} }, { children: [_jsx("div", { children: selectedViewInfo.label }), _jsx("img", { src: downArrowIcon, alt: "arrow", style: Object.assign({}, (Boolean(open) && { transform: 'rotate(180deg)' })) })] })), _jsx(Popper, Object.assign({ open: open, anchorEl: anchorEl, placement: "bottom-start" }, { children: _jsxs(ListStyled, { children: [dummyViewList.map((item) => (_jsxs(MenuItem, Object.assign({ onClick: () => {
|
|
13
|
+
setSelectedViewInfo(item);
|
|
14
|
+
setViews === null || setViews === void 0 ? void 0 : setViews(item.columns);
|
|
15
|
+
} }, { children: [item.id === selectedViewInfo.id ? _jsx("img", { className: "check-icon", src: checkIcon, alt: "arrow" }) : _jsx(Space, {}), _jsx("span", { children: item.label }), _jsx(SpaceAfter, {})] }), item.id))), _jsxs(MenuItem, Object.assign({ sx: {
|
|
16
|
+
border: 'none',
|
|
17
|
+
}, onClick: (e) => {
|
|
18
|
+
e.stopPropagation();
|
|
19
|
+
setSelectedViewInfo({ label: 'Custom view', id: 'custom' });
|
|
20
|
+
} }, { children: [selectedViewInfo.id === 'custom' ? _jsx("img", { className: "check-icon", src: checkIcon, alt: "arrow" }) : _jsx(Space, {}), _jsx("span", { children: t('createCustomView') }), _jsx(SpaceAfter, {})] }))] }) }))] })));
|
|
21
|
+
}
|
|
22
|
+
export default React.memo(DefaultViews);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { TableHeaderProps } from '../type';
|
|
3
|
+
interface TableViewProps {
|
|
4
|
+
onViewChange?: TableHeaderProps['onViewChange'];
|
|
5
|
+
setIsViewVisible: (visible: boolean) => void;
|
|
6
|
+
setTableViews: TableHeaderProps['setTableViews'];
|
|
7
|
+
tableViews: TableHeaderProps['tableViews'];
|
|
8
|
+
resetTableViews: TableHeaderProps['resetTableViews'];
|
|
9
|
+
}
|
|
10
|
+
declare function TableView({ onViewChange, setIsViewVisible, setTableViews, tableViews, resetTableViews }: Readonly<TableViewProps>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
declare const _default: import("react").MemoExoticComponent<typeof TableView>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useState } from 'react';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import ClickAwayListener from '@mui/material/ClickAwayListener';
|
|
5
|
+
import { Icon, StyledButton } from '../../index.js';
|
|
6
|
+
import { closeXIcon, viewIcon } from '../../../constants/index.js';
|
|
7
|
+
import CustomViews from './CustomViews';
|
|
8
|
+
import DefaultViews from './DefaultViews';
|
|
9
|
+
import { ButtonStyled, ViewWrapper } from './style';
|
|
10
|
+
function TableView({ onViewChange, setIsViewVisible, setTableViews, tableViews, resetTableViews }) {
|
|
11
|
+
const [anchorViewEl, setAnchorViewEl] = useState(null);
|
|
12
|
+
const [defaultViewEl, setDefaultViewElement] = useState(null);
|
|
13
|
+
const [customViewEl, setCustomViewElement] = useState(null);
|
|
14
|
+
const [selectedViewInfo, setSelectedViewInfo] = useState({
|
|
15
|
+
id: 'default',
|
|
16
|
+
label: 'Default',
|
|
17
|
+
});
|
|
18
|
+
const { t } = useTranslation();
|
|
19
|
+
const onViewButtonClick = (event) => {
|
|
20
|
+
onViewChange === null || onViewChange === void 0 ? void 0 : onViewChange();
|
|
21
|
+
setAnchorViewEl(event.currentTarget);
|
|
22
|
+
setIsViewVisible(true);
|
|
23
|
+
};
|
|
24
|
+
const closeViewDropdown = () => {
|
|
25
|
+
setDefaultViewElement(null);
|
|
26
|
+
setCustomViewElement(null);
|
|
27
|
+
};
|
|
28
|
+
const onClose = () => {
|
|
29
|
+
setAnchorViewEl(null);
|
|
30
|
+
setIsViewVisible(false);
|
|
31
|
+
// to be removed
|
|
32
|
+
setSelectedViewInfo({ label: 'Default', id: 'default' });
|
|
33
|
+
};
|
|
34
|
+
const handleSelectedViewInfo = (selected) => {
|
|
35
|
+
setSelectedViewInfo(selected);
|
|
36
|
+
closeViewDropdown();
|
|
37
|
+
};
|
|
38
|
+
if (!anchorViewEl) {
|
|
39
|
+
return (_jsx(StyledButton, Object.assign({ title: t('tableView'), "data-testid": "TableView_no_anchorViewEl", onClick: onViewButtonClick }, { children: _jsx(Icon, { src: viewIcon, alt: "view", sx: { width: 14, height: 14 } }) })));
|
|
40
|
+
}
|
|
41
|
+
return (_jsx(ClickAwayListener, Object.assign({ onClickAway: closeViewDropdown }, { children: _jsxs(ViewWrapper, Object.assign({ "data-testid": "TableView" }, { children: [selectedViewInfo.id === 'custom' && (_jsx(CustomViews, { tableViews: tableViews, setTableViews: setTableViews, anchorEl: customViewEl, open: Boolean(customViewEl), onSelect: (e) => {
|
|
42
|
+
setCustomViewElement(customViewEl ? null : e.currentTarget);
|
|
43
|
+
setDefaultViewElement(null);
|
|
44
|
+
}, onClose: () => {
|
|
45
|
+
setCustomViewElement(null);
|
|
46
|
+
} })), _jsx(DefaultViews, { open: Boolean(defaultViewEl), anchorEl: defaultViewEl, setSelectedViewInfo: (view) => {
|
|
47
|
+
handleSelectedViewInfo(view);
|
|
48
|
+
}, selectedViewInfo: selectedViewInfo, onSelect: (e) => {
|
|
49
|
+
setDefaultViewElement(defaultViewEl ? null : e.currentTarget);
|
|
50
|
+
setCustomViewElement(null);
|
|
51
|
+
}, setViews: (views) => {
|
|
52
|
+
resetTableViews === null || resetTableViews === void 0 ? void 0 : resetTableViews({ id: views[0], label: views[0] });
|
|
53
|
+
} }), _jsx(ButtonStyled, Object.assign({ sx: { width: 30, justifyContent: 'center' }, onClick: onClose }, { children: _jsx("img", { src: closeXIcon, alt: "close" }) }))] })) })));
|
|
54
|
+
}
|
|
55
|
+
export default memo(TableView);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { ColumnViewProps } from '../../../../types/index.js';
|
|
3
|
+
interface UseColumnItemProps {
|
|
4
|
+
column: ColumnViewProps;
|
|
5
|
+
index: number;
|
|
6
|
+
openSubMenuName: string | null;
|
|
7
|
+
toggleColumnSelection: (columnName: string) => void;
|
|
8
|
+
handleSubMenuOpen: (event: React.MouseEvent<HTMLElement>, name: string) => void;
|
|
9
|
+
handleSubMenuClose: () => void;
|
|
10
|
+
}
|
|
11
|
+
interface UseColumnItemReturn {
|
|
12
|
+
isIndeterminate: boolean;
|
|
13
|
+
hasSubmenuItems?: boolean;
|
|
14
|
+
isSubmenuOpen: boolean;
|
|
15
|
+
isFirstItem: boolean;
|
|
16
|
+
handleColumnClick: () => void;
|
|
17
|
+
handleMouseEnter: (event: React.MouseEvent<HTMLElement>) => void;
|
|
18
|
+
handleMouseLeave: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function useColumnItem({ column, index, openSubMenuName, toggleColumnSelection, handleSubMenuOpen, handleSubMenuClose, }: UseColumnItemProps): UseColumnItemReturn;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useCallback, useMemo } from 'react';
|
|
2
|
+
export function useColumnItem({ column, index, openSubMenuName, toggleColumnSelection, handleSubMenuOpen, handleSubMenuClose, }) {
|
|
3
|
+
const hasSubmenuItems = column.menuItems && column.menuItems.length > 0;
|
|
4
|
+
const isSubmenuOpen = openSubMenuName === column.name;
|
|
5
|
+
const isFirstItem = index === 0;
|
|
6
|
+
const isIndeterminate = useMemo(() => { var _a, _b; return Boolean(column.selected && ((_a = column.menuItems) === null || _a === void 0 ? void 0 : _a.some((item) => item.selected)) && !((_b = column.menuItems) === null || _b === void 0 ? void 0 : _b.every((item) => item.selected))); }, [column.selected, column.menuItems]);
|
|
7
|
+
const handleColumnClick = useCallback(() => {
|
|
8
|
+
toggleColumnSelection(column.name);
|
|
9
|
+
}, [toggleColumnSelection, column.name]);
|
|
10
|
+
const handleMouseEnter = useCallback((event) => {
|
|
11
|
+
if (hasSubmenuItems) {
|
|
12
|
+
handleSubMenuOpen(event, column.name);
|
|
13
|
+
}
|
|
14
|
+
}, [hasSubmenuItems, handleSubMenuOpen, column.name]);
|
|
15
|
+
const handleMouseLeave = useCallback(() => {
|
|
16
|
+
if (!hasSubmenuItems) {
|
|
17
|
+
handleSubMenuClose();
|
|
18
|
+
}
|
|
19
|
+
}, [hasSubmenuItems, handleSubMenuClose]);
|
|
20
|
+
return {
|
|
21
|
+
isIndeterminate,
|
|
22
|
+
hasSubmenuItems,
|
|
23
|
+
isSubmenuOpen,
|
|
24
|
+
isFirstItem,
|
|
25
|
+
handleColumnClick,
|
|
26
|
+
handleMouseEnter,
|
|
27
|
+
handleMouseLeave,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface UseSubMenuReturn {
|
|
3
|
+
subMenuAnchorEl: HTMLElement | null;
|
|
4
|
+
openSubMenuName: string | null;
|
|
5
|
+
handleSubMenuClose: () => void;
|
|
6
|
+
handleSubMenuOpen: (event: React.MouseEvent<HTMLElement>, name: string) => void;
|
|
7
|
+
handleMenuScroll: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function useSubMenu(isMainMenuOpen: boolean, onMainMenuClose?: () => void): UseSubMenuReturn;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
2
|
+
export function useSubMenu(isMainMenuOpen, onMainMenuClose) {
|
|
3
|
+
const [subMenuAnchorEl, setSubMenuAnchorEl] = useState(null);
|
|
4
|
+
const [openSubMenuName, setOpenSubMenuName] = useState(null);
|
|
5
|
+
const handleSubMenuClose = useCallback(() => {
|
|
6
|
+
setSubMenuAnchorEl(null);
|
|
7
|
+
setOpenSubMenuName(null);
|
|
8
|
+
}, []);
|
|
9
|
+
const handleSubMenuOpen = useCallback((event, name) => {
|
|
10
|
+
setSubMenuAnchorEl(event.currentTarget);
|
|
11
|
+
setOpenSubMenuName(name);
|
|
12
|
+
}, []);
|
|
13
|
+
const handleMenuScroll = useCallback(() => {
|
|
14
|
+
if (openSubMenuName) {
|
|
15
|
+
handleSubMenuClose();
|
|
16
|
+
}
|
|
17
|
+
}, [openSubMenuName, handleSubMenuClose]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!isMainMenuOpen) {
|
|
20
|
+
handleSubMenuClose();
|
|
21
|
+
onMainMenuClose === null || onMainMenuClose === void 0 ? void 0 : onMainMenuClose();
|
|
22
|
+
}
|
|
23
|
+
}, [isMainMenuOpen, onMainMenuClose, handleSubMenuClose]);
|
|
24
|
+
return {
|
|
25
|
+
subMenuAnchorEl,
|
|
26
|
+
openSubMenuName,
|
|
27
|
+
handleSubMenuClose,
|
|
28
|
+
handleSubMenuOpen,
|
|
29
|
+
handleMenuScroll,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ColumnViewProps } from '../../../../types/index.js';
|
|
2
|
+
import type { TableHeaderProps } from '../../type';
|
|
3
|
+
interface UseViewColumnsProps {
|
|
4
|
+
columns: ColumnViewProps[];
|
|
5
|
+
setTableViews?: TableHeaderProps['setTableViews'];
|
|
6
|
+
}
|
|
7
|
+
interface UseViewColumnsReturn {
|
|
8
|
+
reorderColumns: (reorderedColumnNames: string[]) => void;
|
|
9
|
+
toggleColumnSelection: (columnName: string) => void;
|
|
10
|
+
toggleSubmenuItem: (columnName: string, submenuItemName: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function useViewColumns({ columns, setTableViews }: UseViewColumnsProps): UseViewColumnsReturn;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
export function useViewColumns({ columns, setTableViews }) {
|
|
3
|
+
const reorderColumns = useCallback((reorderedColumnNames) => {
|
|
4
|
+
const reorderedColumns = reorderedColumnNames
|
|
5
|
+
.map((name) => columns.find((column) => column.name === name))
|
|
6
|
+
.filter((column) => Boolean(column));
|
|
7
|
+
setTableViews === null || setTableViews === void 0 ? void 0 : setTableViews(reorderedColumns);
|
|
8
|
+
}, [columns, setTableViews]);
|
|
9
|
+
const toggleColumnSelection = useCallback((columnName) => {
|
|
10
|
+
const updatedColumns = columns.map((column) => {
|
|
11
|
+
var _a;
|
|
12
|
+
if (column.name !== columnName)
|
|
13
|
+
return column;
|
|
14
|
+
const hasSubmenuItems = column.menuItems && column.menuItems.length > 0;
|
|
15
|
+
const newSelected = !column.selected;
|
|
16
|
+
if (!hasSubmenuItems) {
|
|
17
|
+
return Object.assign(Object.assign({}, column), { selected: newSelected });
|
|
18
|
+
}
|
|
19
|
+
const updatedMenuItems = (_a = column.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => (Object.assign(Object.assign({}, item), { selected: newSelected })));
|
|
20
|
+
return Object.assign(Object.assign({}, column), { selected: newSelected, menuItems: updatedMenuItems });
|
|
21
|
+
});
|
|
22
|
+
setTableViews === null || setTableViews === void 0 ? void 0 : setTableViews(updatedColumns);
|
|
23
|
+
}, [columns, setTableViews]);
|
|
24
|
+
const toggleSubmenuItem = useCallback((columnName, submenuItemName) => {
|
|
25
|
+
const updatedColumns = columns.map((column) => {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
if (column.name !== columnName)
|
|
28
|
+
return column;
|
|
29
|
+
const updatedMenuItems = (_a = column.menuItems) === null || _a === void 0 ? void 0 : _a.map((item) => {
|
|
30
|
+
if (item.name === submenuItemName) {
|
|
31
|
+
return Object.assign(Object.assign({}, item), { selected: !item.selected });
|
|
32
|
+
}
|
|
33
|
+
return item;
|
|
34
|
+
});
|
|
35
|
+
const hasSelectedChildren = (_b = updatedMenuItems === null || updatedMenuItems === void 0 ? void 0 : updatedMenuItems.some((item) => item.selected)) !== null && _b !== void 0 ? _b : false;
|
|
36
|
+
return Object.assign(Object.assign({}, column), { menuItems: updatedMenuItems, selected: hasSelectedChildren });
|
|
37
|
+
});
|
|
38
|
+
setTableViews === null || setTableViews === void 0 ? void 0 : setTableViews(updatedColumns);
|
|
39
|
+
}, [columns, setTableViews]);
|
|
40
|
+
return {
|
|
41
|
+
reorderColumns,
|
|
42
|
+
toggleColumnSelection,
|
|
43
|
+
toggleSubmenuItem,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const ButtonStyled: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").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").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
|
|
5
|
+
export declare const ViewWrapper: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
6
|
+
ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
7
|
+
}, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
|
|
8
|
+
export declare const ListStyled: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
9
|
+
ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
10
|
+
}, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
|
|
11
|
+
export declare const DropdownStyled: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
12
|
+
ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
13
|
+
}, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
|
|
14
|
+
export declare const MenuItem: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
15
|
+
ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
16
|
+
}, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
|
|
17
|
+
addColumnViewEl?: boolean | undefined;
|
|
18
|
+
}, {}, {}>;
|
|
19
|
+
export declare const Space: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
20
|
+
ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
21
|
+
}, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
|
|
22
|
+
export declare const SpaceAfter: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
23
|
+
ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
24
|
+
}, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
|