@reltio/components 1.4.1738 → 1.4.1739

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 (25) hide show
  1. package/cjs/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnsSettings.d.ts +10 -18
  2. package/cjs/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnsSettings.js +3 -12
  3. package/cjs/components/BasicTableView/types/index.d.ts +7 -1
  4. package/cjs/components/BasicViewHeader/BasicViewHeader.js +1 -1
  5. package/cjs/components/ScrollableTabs/ScrollableTabs.d.ts +1 -1
  6. package/cjs/components/SearchInput/SearchInput.d.ts +1 -1
  7. package/cjs/hooks/index.d.ts +1 -0
  8. package/cjs/hooks/index.js +3 -1
  9. package/cjs/hooks/useMatchesColumnsData/helpers.d.ts +4 -0
  10. package/cjs/hooks/useMatchesColumnsData/helpers.js +56 -0
  11. package/cjs/hooks/useMatchesColumnsData/useMatchesColumnsData.d.ts +14 -0
  12. package/cjs/hooks/useMatchesColumnsData/useMatchesColumnsData.js +21 -0
  13. package/esm/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnsSettings.d.ts +10 -18
  14. package/esm/components/BasicTableView/BasicTableHeader/ColumnsSettings/ColumnsSettings.js +3 -12
  15. package/esm/components/BasicTableView/types/index.d.ts +7 -1
  16. package/esm/components/BasicViewHeader/BasicViewHeader.js +1 -1
  17. package/esm/components/ScrollableTabs/ScrollableTabs.d.ts +1 -1
  18. package/esm/components/SearchInput/SearchInput.d.ts +1 -1
  19. package/esm/hooks/index.d.ts +1 -0
  20. package/esm/hooks/index.js +1 -0
  21. package/esm/hooks/useMatchesColumnsData/helpers.d.ts +4 -0
  22. package/esm/hooks/useMatchesColumnsData/helpers.js +48 -0
  23. package/esm/hooks/useMatchesColumnsData/useMatchesColumnsData.d.ts +14 -0
  24. package/esm/hooks/useMatchesColumnsData/useMatchesColumnsData.js +17 -0
  25. package/package.json +2 -2
@@ -1,19 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { ColumnData } from '../../types';
3
+ type Props = {
4
+ columnsData: ColumnData[];
5
+ selectedColumns: string[];
6
+ onChangeColumns: (columns: string[]) => void;
7
+ title?: string;
8
+ tooltipTitle?: string;
9
+ };
10
+ declare const ColumnsSettings: ({ columnsData, selectedColumns, onChangeColumns, title, tooltipTitle }: Props) => JSX.Element;
1
11
  export default ColumnsSettings;
2
- declare function ColumnsSettings({ columnsData, selectedColumns, onChangeColumns, title, tooltipTitle }: {
3
- columnsData: any;
4
- selectedColumns: any;
5
- onChangeColumns: any;
6
- title: any;
7
- tooltipTitle: any;
8
- }): JSX.Element;
9
- declare namespace ColumnsSettings {
10
- namespace propTypes {
11
- export { ColumnsDataType as columnsData };
12
- export const selectedColumns: PropTypes.Requireable<string[]>;
13
- export const onChangeColumns: PropTypes.Requireable<(...args: any[]) => any>;
14
- export const title: PropTypes.Requireable<string>;
15
- export const tooltipTitle: PropTypes.Requireable<string>;
16
- }
17
- }
18
- import { ColumnsDataType } from '../../../../constants';
19
- import PropTypes from 'prop-types';
@@ -27,13 +27,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  var react_1 = __importStar(require("react"));
30
- var prop_types_1 = __importDefault(require("prop-types"));
31
- var constants_1 = require("../../../../constants");
30
+ var ui_i18n_1 = __importDefault(require("ui-i18n"));
31
+ var ramda_1 = require("ramda");
32
32
  var Table_1 = __importDefault(require("../../../../icons/Table"));
33
33
  var SmallIconButton_1 = require("../../../SmallIconButton");
34
- var ramda_1 = require("ramda");
35
34
  var ColumnsSettingsPopup_1 = require("./ColumnsSettingsPopup");
36
- var ui_i18n_1 = __importDefault(require("ui-i18n"));
37
35
  var columnHelpers_1 = require("./columnHelpers");
38
36
  var ColumnsSettings = function (_a) {
39
37
  var columnsData = _a.columnsData, selectedColumns = _a.selectedColumns, onChangeColumns = _a.onChangeColumns, title = _a.title, tooltipTitle = _a.tooltipTitle;
@@ -48,14 +46,7 @@ var ColumnsSettings = function (_a) {
48
46
  : (0, ramda_1.uniq)((0, ramda_1.concat)(selectedColumns, changedColumns)));
49
47
  }, [selectedColumns, onChangeColumns]);
50
48
  return (react_1.default.createElement(react_1.default.Fragment, null,
51
- react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { tooltipTitle: tooltipTitle || ui_i18n_1.default.text('Show/hide columns'), size: "L", icon: Table_1.default, onClick: openPopup }),
49
+ react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { "data-reltio-id": "reltio-columns-settings-button", tooltipTitle: tooltipTitle || ui_i18n_1.default.text('Show/hide columns'), size: "L", icon: Table_1.default, onClick: openPopup }),
52
50
  react_1.default.createElement(ColumnsSettingsPopup_1.ColumnsSettingsPopup, { onColumnClick: handleColumnClick, anchorEl: anchorEl, columnsData: columnsData, onClose: closePopup, title: title, selectedColumns: selectedColumns })));
53
51
  };
54
- ColumnsSettings.propTypes = {
55
- columnsData: constants_1.ColumnsDataType,
56
- selectedColumns: prop_types_1.default.arrayOf(prop_types_1.default.string),
57
- onChangeColumns: prop_types_1.default.func,
58
- title: prop_types_1.default.string,
59
- tooltipTitle: prop_types_1.default.string
60
- };
61
52
  exports.default = ColumnsSettings;
@@ -21,7 +21,7 @@ export type ColumnData = {
21
21
  sortable?: boolean;
22
22
  filterable?: boolean;
23
23
  resizable?: boolean;
24
- nestedPath?: string;
24
+ nestedPath?: string[];
25
25
  headCellRenderer?: React.ElementType;
26
26
  rowCellValueRenderer?: React.ElementType;
27
27
  draggable?: boolean;
@@ -32,6 +32,12 @@ export type ColumnData = {
32
32
  }>;
33
33
  [key: string]: unknown;
34
34
  };
35
+ export type GroupedColumns<TColumnData = ColumnData> = {
36
+ id: string;
37
+ label: string;
38
+ columns: TColumnData[];
39
+ };
40
+ export type GroupedColumnsData<TColumnData = ColumnData> = GroupedColumns<TColumnData> | TColumnData;
35
41
  export type CollapseContext = ReturnType<typeof useCollapsibleTableRows>['collapseContextValue'];
36
42
  export type RowId = string | number;
37
43
  export type RowValue = {
@@ -34,7 +34,7 @@ var BasicViewHeader = function (_a) {
34
34
  var _b = _a.title, title = _b === void 0 ? '' : _b, _c = _a.children, children = _c === void 0 ? null : _c, _d = _a.classes, classes = _d === void 0 ? {} : _d, otherProps = __rest(_a, ["title", "children", "classes"]);
35
35
  var styles = (0, styles_1.useStyles)();
36
36
  return (react_1.default.createElement(Toolbar_1.default, __assign({ className: classes.root, classes: { root: styles.toolbar } }, otherProps),
37
- react_1.default.createElement(Typography_1.default, { className: classes.title, classes: { root: styles.title }, variant: "h6" }, ui_i18n_1.default.text(title)),
37
+ title && (react_1.default.createElement(Typography_1.default, { className: classes.title, classes: { root: styles.title }, variant: "h6" }, ui_i18n_1.default.text(title))),
38
38
  children));
39
39
  };
40
40
  exports.default = BasicViewHeader;
@@ -8,7 +8,7 @@ export type Tab = {
8
8
  dataReltioId?: string;
9
9
  };
10
10
  type Props = Omit<TabsProps, 'onChange' | 'value' | 'scrollButtons'> & {
11
- value: string;
11
+ value: string | false;
12
12
  tabs: Tab[];
13
13
  onChange: (value: string) => void;
14
14
  tabClasses?: TabProps['classes'];
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { InputProps } from '@mui/material/Input';
3
3
  export type SearchInputProps = InputProps & {
4
4
  value?: string;
5
- autofocus: boolean;
5
+ autofocus?: boolean;
6
6
  onSearch: (value?: string) => void;
7
7
  rootRef?: React.MutableRefObject<HTMLInputElement>;
8
8
  height: number;
@@ -1,4 +1,5 @@
1
1
  export { useScrollToAttributeError } from './useScrollToAttributeError/useScrollToAttributeError';
2
+ export { useMatchesColumnsData } from './useMatchesColumnsData/useMatchesColumnsData';
2
3
  export { useActions } from './useActions';
3
4
  export { useAPI } from './useAPI';
4
5
  export { useAsyncMount } from './useAsyncMount';
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useAutoFocus = exports.useExpandInvalidRelations = exports.useLayoutResetter = exports.useIsMountedRef = exports.useSnackbar = exports.useSavedStateForEntityType = exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.useAPI = exports.useActions = exports.useScrollToAttributeError = void 0;
3
+ exports.useAutoFocus = exports.useExpandInvalidRelations = exports.useLayoutResetter = exports.useIsMountedRef = exports.useSnackbar = exports.useSavedStateForEntityType = exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.useAPI = exports.useActions = exports.useMatchesColumnsData = exports.useScrollToAttributeError = void 0;
4
4
  var useScrollToAttributeError_1 = require("./useScrollToAttributeError/useScrollToAttributeError");
5
5
  Object.defineProperty(exports, "useScrollToAttributeError", { enumerable: true, get: function () { return useScrollToAttributeError_1.useScrollToAttributeError; } });
6
+ var useMatchesColumnsData_1 = require("./useMatchesColumnsData/useMatchesColumnsData");
7
+ Object.defineProperty(exports, "useMatchesColumnsData", { enumerable: true, get: function () { return useMatchesColumnsData_1.useMatchesColumnsData; } });
6
8
  var useActions_1 = require("./useActions");
7
9
  Object.defineProperty(exports, "useActions", { enumerable: true, get: function () { return useActions_1.useActions; } });
8
10
  var useAPI_1 = require("./useAPI");
@@ -0,0 +1,4 @@
1
+ import { ColumnData, GroupedColumnsData } from '../../components';
2
+ export declare const getColumnsData: any;
3
+ export declare const getMatchAttrColumns: (matchAttributes: string[], columnsData: ColumnData[]) => ColumnData[];
4
+ export declare const groupColumnsDataByMatchAttributes: <TColumnData = ColumnData>(matchAttributes: string[], columnsData: TColumnData[]) => GroupedColumnsData<TColumnData>[];
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.groupColumnsDataByMatchAttributes = exports.getMatchAttrColumns = exports.getColumnsData = void 0;
7
+ var ui_i18n_1 = __importDefault(require("ui-i18n"));
8
+ var ramda_1 = require("ramda");
9
+ var mdm_sdk_1 = require("@reltio/mdm-sdk");
10
+ var ramda_2 = require("ramda");
11
+ var getColumnsDataFromEntityAttributes = (0, ramda_1.pipe)((0, ramda_2.map)(function (attr) { return ({
12
+ id: (0, mdm_sdk_1.attributeUriToSearchUri)(attr.uri),
13
+ label: (0, mdm_sdk_1.getLabel)(attr.label),
14
+ dataTypeDefinition: (0, mdm_sdk_1.getAttrDataTypeDefinition)(attr)
15
+ }); }));
16
+ exports.getColumnsData = (0, ramda_1.pipe)(mdm_sdk_1.getEntityAttributesFromMetadata, getColumnsDataFromEntityAttributes);
17
+ var isReferenceAttrColumn = function (column) { return (0, mdm_sdk_1.isReference)(column.dataTypeDefinition); };
18
+ var isMatchAttrColumn = (0, ramda_1.curry)(function (matchAttributes, column) {
19
+ return matchAttributes
20
+ .map(function (attrUri) { return (0, mdm_sdk_1.attributeUriToSearchUri)(attrUri); })
21
+ .some(function (id) { return column.id === id || (isReferenceAttrColumn(column) && isSubAttrIdForColumn(column, id)); });
22
+ });
23
+ var isSubAttrIdForColumn = (0, ramda_1.curry)(function (parentColumn, columnId) {
24
+ return columnId.startsWith("".concat(parentColumn.id, "."));
25
+ });
26
+ var isNestedForOneOfColumns = (0, ramda_1.curry)(function (columns, column) {
27
+ return isNestedAttrColumn(column) && columns.some(function (_a) {
28
+ var id = _a.id;
29
+ return isSubAttrIdForColumn(column, id);
30
+ });
31
+ });
32
+ var isNestedAttrColumn = function (column) { return (0, mdm_sdk_1.isNested)(column.dataTypeDefinition); };
33
+ var isRelatedToColumns = function (columns) { return (0, ramda_1.either)((0, ramda_1.includes)(ramda_1.__, columns), isNestedForOneOfColumns(columns)); };
34
+ var getMatchAttrColumns = function (matchAttributes, columnsData) {
35
+ return (0, ramda_1.pipe)((0, ramda_2.reject)(isNestedAttrColumn), (0, ramda_2.filter)(isMatchAttrColumn(matchAttributes)))(columnsData);
36
+ };
37
+ exports.getMatchAttrColumns = getMatchAttrColumns;
38
+ var groupColumnsDataByMatchAttributes = function (matchAttributes, columnsData) {
39
+ var _a = (0, ramda_1.pipe)((0, ramda_2.reject)(isNestedAttrColumn), (0, ramda_2.partition)(isMatchAttrColumn(matchAttributes)))(columnsData), matchAttrColumns = _a[0], otherColumns = _a[1];
40
+ if (matchAttrColumns.length) {
41
+ return [
42
+ {
43
+ id: 'match',
44
+ label: ui_i18n_1.default.text('Match attributes'),
45
+ columns: columnsData.filter(isRelatedToColumns(matchAttrColumns))
46
+ },
47
+ {
48
+ id: 'all',
49
+ label: ui_i18n_1.default.text('All attributes'),
50
+ columns: columnsData.filter(isRelatedToColumns(otherColumns))
51
+ }
52
+ ];
53
+ }
54
+ return columnsData;
55
+ };
56
+ exports.groupColumnsDataByMatchAttributes = groupColumnsDataByMatchAttributes;
@@ -0,0 +1,14 @@
1
+ import { Metadata } from '@reltio/mdm-sdk';
2
+ import { ColumnData, GroupedColumnsData } from '../../components';
3
+ type MatchesColumnsDataProps<TColumnData> = {
4
+ defaultColumnsData: TColumnData[];
5
+ additionalColumnsData?: TColumnData[];
6
+ metadata: Metadata;
7
+ entityTypeUri: string;
8
+ };
9
+ export declare const useMatchesColumnsData: <TColumnData extends ColumnData>({ defaultColumnsData, additionalColumnsData, metadata, entityTypeUri }: MatchesColumnsDataProps<TColumnData>) => {
10
+ allColumnsData: TColumnData[];
11
+ groupedColumnsData: GroupedColumnsData<TColumnData>[];
12
+ defaultColumns: string[];
13
+ };
14
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMatchesColumnsData = void 0;
4
+ var react_1 = require("react");
5
+ var ramda_1 = require("ramda");
6
+ var mdm_sdk_1 = require("@reltio/mdm-sdk");
7
+ var helpers_1 = require("./helpers");
8
+ var useMatchesColumnsData = function (_a) {
9
+ var defaultColumnsData = _a.defaultColumnsData, additionalColumnsData = _a.additionalColumnsData, metadata = _a.metadata, entityTypeUri = _a.entityTypeUri;
10
+ return (0, react_1.useMemo)(function () {
11
+ var attrColumnsData = (0, helpers_1.getColumnsData)(metadata, entityTypeUri);
12
+ var allColumnsData = defaultColumnsData
13
+ .concat(additionalColumnsData || [])
14
+ .concat(attrColumnsData);
15
+ var matchAttributes = (0, mdm_sdk_1.getEntityTypeMatchAttributes)(metadata, entityTypeUri);
16
+ var groupedColumnsData = (0, helpers_1.groupColumnsDataByMatchAttributes)(matchAttributes, allColumnsData);
17
+ var defaultColumns = (0, ramda_1.pipe)(helpers_1.getMatchAttrColumns, (0, ramda_1.concat)(defaultColumnsData), (0, ramda_1.pluck)('id'))(matchAttributes, attrColumnsData);
18
+ return { allColumnsData: allColumnsData, groupedColumnsData: groupedColumnsData, defaultColumns: defaultColumns };
19
+ }, [defaultColumnsData, additionalColumnsData, metadata, entityTypeUri]);
20
+ };
21
+ exports.useMatchesColumnsData = useMatchesColumnsData;
@@ -1,19 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { ColumnData } from '../../types';
3
+ type Props = {
4
+ columnsData: ColumnData[];
5
+ selectedColumns: string[];
6
+ onChangeColumns: (columns: string[]) => void;
7
+ title?: string;
8
+ tooltipTitle?: string;
9
+ };
10
+ declare const ColumnsSettings: ({ columnsData, selectedColumns, onChangeColumns, title, tooltipTitle }: Props) => JSX.Element;
1
11
  export default ColumnsSettings;
2
- declare function ColumnsSettings({ columnsData, selectedColumns, onChangeColumns, title, tooltipTitle }: {
3
- columnsData: any;
4
- selectedColumns: any;
5
- onChangeColumns: any;
6
- title: any;
7
- tooltipTitle: any;
8
- }): JSX.Element;
9
- declare namespace ColumnsSettings {
10
- namespace propTypes {
11
- export { ColumnsDataType as columnsData };
12
- export const selectedColumns: PropTypes.Requireable<string[]>;
13
- export const onChangeColumns: PropTypes.Requireable<(...args: any[]) => any>;
14
- export const title: PropTypes.Requireable<string>;
15
- export const tooltipTitle: PropTypes.Requireable<string>;
16
- }
17
- }
18
- import { ColumnsDataType } from '../../../../constants';
19
- import PropTypes from 'prop-types';
@@ -1,11 +1,9 @@
1
1
  import React, { useCallback, useState } from 'react';
2
- import PropTypes from 'prop-types';
3
- import { ColumnsDataType } from '../../../../constants';
2
+ import i18n from 'ui-i18n';
3
+ import { pipe, uniq, pluck, difference, concat } from 'ramda';
4
4
  import TableIcon from '../../../../icons/Table';
5
5
  import { SmallIconButtonWithTooltip } from '../../../SmallIconButton';
6
- import { pipe, uniq, pluck, difference, concat } from 'ramda';
7
6
  import { ColumnsSettingsPopup } from './ColumnsSettingsPopup';
8
- import i18n from 'ui-i18n';
9
7
  import { getChildColumns, isColumnSelected } from './columnHelpers';
10
8
  var ColumnsSettings = function (_a) {
11
9
  var columnsData = _a.columnsData, selectedColumns = _a.selectedColumns, onChangeColumns = _a.onChangeColumns, title = _a.title, tooltipTitle = _a.tooltipTitle;
@@ -20,14 +18,7 @@ var ColumnsSettings = function (_a) {
20
18
  : uniq(concat(selectedColumns, changedColumns)));
21
19
  }, [selectedColumns, onChangeColumns]);
22
20
  return (React.createElement(React.Fragment, null,
23
- React.createElement(SmallIconButtonWithTooltip, { tooltipTitle: tooltipTitle || i18n.text('Show/hide columns'), size: "L", icon: TableIcon, onClick: openPopup }),
21
+ React.createElement(SmallIconButtonWithTooltip, { "data-reltio-id": "reltio-columns-settings-button", tooltipTitle: tooltipTitle || i18n.text('Show/hide columns'), size: "L", icon: TableIcon, onClick: openPopup }),
24
22
  React.createElement(ColumnsSettingsPopup, { onColumnClick: handleColumnClick, anchorEl: anchorEl, columnsData: columnsData, onClose: closePopup, title: title, selectedColumns: selectedColumns })));
25
23
  };
26
- ColumnsSettings.propTypes = {
27
- columnsData: ColumnsDataType,
28
- selectedColumns: PropTypes.arrayOf(PropTypes.string),
29
- onChangeColumns: PropTypes.func,
30
- title: PropTypes.string,
31
- tooltipTitle: PropTypes.string
32
- };
33
24
  export default ColumnsSettings;
@@ -21,7 +21,7 @@ export type ColumnData = {
21
21
  sortable?: boolean;
22
22
  filterable?: boolean;
23
23
  resizable?: boolean;
24
- nestedPath?: string;
24
+ nestedPath?: string[];
25
25
  headCellRenderer?: React.ElementType;
26
26
  rowCellValueRenderer?: React.ElementType;
27
27
  draggable?: boolean;
@@ -32,6 +32,12 @@ export type ColumnData = {
32
32
  }>;
33
33
  [key: string]: unknown;
34
34
  };
35
+ export type GroupedColumns<TColumnData = ColumnData> = {
36
+ id: string;
37
+ label: string;
38
+ columns: TColumnData[];
39
+ };
40
+ export type GroupedColumnsData<TColumnData = ColumnData> = GroupedColumns<TColumnData> | TColumnData;
35
41
  export type CollapseContext = ReturnType<typeof useCollapsibleTableRows>['collapseContextValue'];
36
42
  export type RowId = string | number;
37
43
  export type RowValue = {
@@ -29,7 +29,7 @@ var BasicViewHeader = function (_a) {
29
29
  var _b = _a.title, title = _b === void 0 ? '' : _b, _c = _a.children, children = _c === void 0 ? null : _c, _d = _a.classes, classes = _d === void 0 ? {} : _d, otherProps = __rest(_a, ["title", "children", "classes"]);
30
30
  var styles = useStyles();
31
31
  return (React.createElement(Toolbar, __assign({ className: classes.root, classes: { root: styles.toolbar } }, otherProps),
32
- React.createElement(Typography, { className: classes.title, classes: { root: styles.title }, variant: "h6" }, i18n.text(title)),
32
+ title && (React.createElement(Typography, { className: classes.title, classes: { root: styles.title }, variant: "h6" }, i18n.text(title))),
33
33
  children));
34
34
  };
35
35
  export default BasicViewHeader;
@@ -8,7 +8,7 @@ export type Tab = {
8
8
  dataReltioId?: string;
9
9
  };
10
10
  type Props = Omit<TabsProps, 'onChange' | 'value' | 'scrollButtons'> & {
11
- value: string;
11
+ value: string | false;
12
12
  tabs: Tab[];
13
13
  onChange: (value: string) => void;
14
14
  tabClasses?: TabProps['classes'];
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { InputProps } from '@mui/material/Input';
3
3
  export type SearchInputProps = InputProps & {
4
4
  value?: string;
5
- autofocus: boolean;
5
+ autofocus?: boolean;
6
6
  onSearch: (value?: string) => void;
7
7
  rootRef?: React.MutableRefObject<HTMLInputElement>;
8
8
  height: number;
@@ -1,4 +1,5 @@
1
1
  export { useScrollToAttributeError } from './useScrollToAttributeError/useScrollToAttributeError';
2
+ export { useMatchesColumnsData } from './useMatchesColumnsData/useMatchesColumnsData';
2
3
  export { useActions } from './useActions';
3
4
  export { useAPI } from './useAPI';
4
5
  export { useAsyncMount } from './useAsyncMount';
@@ -1,4 +1,5 @@
1
1
  export { useScrollToAttributeError } from './useScrollToAttributeError/useScrollToAttributeError';
2
+ export { useMatchesColumnsData } from './useMatchesColumnsData/useMatchesColumnsData';
2
3
  export { useActions } from './useActions';
3
4
  export { useAPI } from './useAPI';
4
5
  export { useAsyncMount } from './useAsyncMount';
@@ -0,0 +1,4 @@
1
+ import { ColumnData, GroupedColumnsData } from '../../components';
2
+ export declare const getColumnsData: any;
3
+ export declare const getMatchAttrColumns: (matchAttributes: string[], columnsData: ColumnData[]) => ColumnData[];
4
+ export declare const groupColumnsDataByMatchAttributes: <TColumnData = ColumnData>(matchAttributes: string[], columnsData: TColumnData[]) => GroupedColumnsData<TColumnData>[];
@@ -0,0 +1,48 @@
1
+ import i18n from 'ui-i18n';
2
+ import { __, pipe, curry, either, includes } from 'ramda';
3
+ import { attributeUriToSearchUri, getAttrDataTypeDefinition, getEntityAttributesFromMetadata, getLabel, isNested, isReference } from '@reltio/mdm-sdk';
4
+ import { filter, partition, reject, map } from 'ramda';
5
+ var getColumnsDataFromEntityAttributes = pipe(map(function (attr) { return ({
6
+ id: attributeUriToSearchUri(attr.uri),
7
+ label: getLabel(attr.label),
8
+ dataTypeDefinition: getAttrDataTypeDefinition(attr)
9
+ }); }));
10
+ export var getColumnsData = pipe(getEntityAttributesFromMetadata, getColumnsDataFromEntityAttributes);
11
+ var isReferenceAttrColumn = function (column) { return isReference(column.dataTypeDefinition); };
12
+ var isMatchAttrColumn = curry(function (matchAttributes, column) {
13
+ return matchAttributes
14
+ .map(function (attrUri) { return attributeUriToSearchUri(attrUri); })
15
+ .some(function (id) { return column.id === id || (isReferenceAttrColumn(column) && isSubAttrIdForColumn(column, id)); });
16
+ });
17
+ var isSubAttrIdForColumn = curry(function (parentColumn, columnId) {
18
+ return columnId.startsWith("".concat(parentColumn.id, "."));
19
+ });
20
+ var isNestedForOneOfColumns = curry(function (columns, column) {
21
+ return isNestedAttrColumn(column) && columns.some(function (_a) {
22
+ var id = _a.id;
23
+ return isSubAttrIdForColumn(column, id);
24
+ });
25
+ });
26
+ var isNestedAttrColumn = function (column) { return isNested(column.dataTypeDefinition); };
27
+ var isRelatedToColumns = function (columns) { return either(includes(__, columns), isNestedForOneOfColumns(columns)); };
28
+ export var getMatchAttrColumns = function (matchAttributes, columnsData) {
29
+ return pipe(reject(isNestedAttrColumn), filter(isMatchAttrColumn(matchAttributes)))(columnsData);
30
+ };
31
+ export var groupColumnsDataByMatchAttributes = function (matchAttributes, columnsData) {
32
+ var _a = pipe(reject(isNestedAttrColumn), partition(isMatchAttrColumn(matchAttributes)))(columnsData), matchAttrColumns = _a[0], otherColumns = _a[1];
33
+ if (matchAttrColumns.length) {
34
+ return [
35
+ {
36
+ id: 'match',
37
+ label: i18n.text('Match attributes'),
38
+ columns: columnsData.filter(isRelatedToColumns(matchAttrColumns))
39
+ },
40
+ {
41
+ id: 'all',
42
+ label: i18n.text('All attributes'),
43
+ columns: columnsData.filter(isRelatedToColumns(otherColumns))
44
+ }
45
+ ];
46
+ }
47
+ return columnsData;
48
+ };
@@ -0,0 +1,14 @@
1
+ import { Metadata } from '@reltio/mdm-sdk';
2
+ import { ColumnData, GroupedColumnsData } from '../../components';
3
+ type MatchesColumnsDataProps<TColumnData> = {
4
+ defaultColumnsData: TColumnData[];
5
+ additionalColumnsData?: TColumnData[];
6
+ metadata: Metadata;
7
+ entityTypeUri: string;
8
+ };
9
+ export declare const useMatchesColumnsData: <TColumnData extends ColumnData>({ defaultColumnsData, additionalColumnsData, metadata, entityTypeUri }: MatchesColumnsDataProps<TColumnData>) => {
10
+ allColumnsData: TColumnData[];
11
+ groupedColumnsData: GroupedColumnsData<TColumnData>[];
12
+ defaultColumns: string[];
13
+ };
14
+ export {};
@@ -0,0 +1,17 @@
1
+ import { useMemo } from 'react';
2
+ import { concat, pipe, pluck } from 'ramda';
3
+ import { getEntityTypeMatchAttributes } from '@reltio/mdm-sdk';
4
+ import { getColumnsData, getMatchAttrColumns, groupColumnsDataByMatchAttributes } from './helpers';
5
+ export var useMatchesColumnsData = function (_a) {
6
+ var defaultColumnsData = _a.defaultColumnsData, additionalColumnsData = _a.additionalColumnsData, metadata = _a.metadata, entityTypeUri = _a.entityTypeUri;
7
+ return useMemo(function () {
8
+ var attrColumnsData = getColumnsData(metadata, entityTypeUri);
9
+ var allColumnsData = defaultColumnsData
10
+ .concat(additionalColumnsData || [])
11
+ .concat(attrColumnsData);
12
+ var matchAttributes = getEntityTypeMatchAttributes(metadata, entityTypeUri);
13
+ var groupedColumnsData = groupColumnsDataByMatchAttributes(matchAttributes, allColumnsData);
14
+ var defaultColumns = pipe(getMatchAttrColumns, concat(defaultColumnsData), pluck('id'))(matchAttributes, attrColumnsData);
15
+ return { allColumnsData: allColumnsData, groupedColumnsData: groupedColumnsData, defaultColumns: defaultColumns };
16
+ }, [defaultColumnsData, additionalColumnsData, metadata, entityTypeUri]);
17
+ };
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.1738",
3
+ "version": "1.4.1739",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
7
7
  "dependencies": {
8
8
  "@fluentui/react-context-selector": "^9.1.26",
9
9
  "@react-google-maps/api": "2.7.0",
10
- "@reltio/mdm-sdk": "^1.4.1721",
10
+ "@reltio/mdm-sdk": "^1.4.1722",
11
11
  "classnames": "^2.2.5",
12
12
  "d3-cloud": "^1.2.5",
13
13
  "d3-geo": "^2.0.1",