@reltio/components 1.4.1975 → 1.4.1977

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 (33) hide show
  1. package/cjs/AttributesFiltersBuilder/AttributesFiltersBuilder.js +5 -10
  2. package/cjs/AttributesFiltersBuilder/helpers.d.ts +2 -4
  3. package/cjs/AttributesFiltersBuilder/helpers.js +1 -77
  4. package/cjs/MetadataTypesSelector/MetadataTypesSelector.js +2 -1
  5. package/cjs/MetadataTypesSelector/MetadataTypesSelector.test.js +108 -0
  6. package/cjs/MetadataTypesSelector/components/SelectMetadataTypesList/SelectMetadataTypesList.js +2 -1
  7. package/cjs/MetadataTypesSelector/helpers.d.ts +3 -0
  8. package/cjs/MetadataTypesSelector/helpers.js +8 -0
  9. package/cjs/helpers/attributesSelector.d.ts +4 -0
  10. package/cjs/helpers/attributesSelector.js +79 -0
  11. package/cjs/hooks/useFilterAutoFocus/index.d.ts +1 -0
  12. package/cjs/hooks/useFilterAutoFocus/index.js +5 -0
  13. package/cjs/hooks/useFilterAutoFocus/useFilterAutoFocus.d.ts +6 -0
  14. package/cjs/hooks/useFilterAutoFocus/useFilterAutoFocus.js +18 -0
  15. package/cjs/index.d.ts +3 -0
  16. package/cjs/index.js +10 -4
  17. package/esm/AttributesFiltersBuilder/AttributesFiltersBuilder.js +5 -10
  18. package/esm/AttributesFiltersBuilder/helpers.d.ts +2 -4
  19. package/esm/AttributesFiltersBuilder/helpers.js +0 -74
  20. package/esm/MetadataTypesSelector/MetadataTypesSelector.js +3 -2
  21. package/esm/MetadataTypesSelector/MetadataTypesSelector.test.js +108 -0
  22. package/esm/MetadataTypesSelector/components/SelectMetadataTypesList/SelectMetadataTypesList.js +2 -1
  23. package/esm/MetadataTypesSelector/helpers.d.ts +3 -0
  24. package/esm/MetadataTypesSelector/helpers.js +3 -0
  25. package/esm/helpers/attributesSelector.d.ts +4 -0
  26. package/esm/helpers/attributesSelector.js +74 -0
  27. package/esm/hooks/useFilterAutoFocus/index.d.ts +1 -0
  28. package/esm/hooks/useFilterAutoFocus/index.js +1 -0
  29. package/esm/hooks/useFilterAutoFocus/useFilterAutoFocus.d.ts +6 -0
  30. package/esm/hooks/useFilterAutoFocus/useFilterAutoFocus.js +14 -0
  31. package/esm/index.d.ts +3 -0
  32. package/esm/index.js +3 -0
  33. package/package.json +1 -1
@@ -47,12 +47,14 @@ var react_1 = __importStar(require("react"));
47
47
  var ramda_1 = require("ramda");
48
48
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
49
49
  var EmptyStub_1 = require("../EmptyStub");
50
+ var attributesSelector_1 = require("../helpers/attributesSelector");
50
51
  var helpers_1 = require("./helpers");
51
52
  var AttributesFilterSelector_1 = require("../AttributesFilterSelector");
52
53
  var RowActions_1 = require("./components/RowActions");
53
54
  var QueryBuilderRowsGroup_1 = require("../QueryBuilderRowsGroup");
54
55
  var MdmModuleContext_1 = require("../contexts/MdmModuleContext");
55
56
  var AttributeSelector_1 = require("./components/AttributeSelector");
57
+ var useFilterAutoFocus_1 = require("../hooks/useFilterAutoFocus");
56
58
  var AttributesValuesEditor_1 = require("../AttributesValuesEditor");
57
59
  var styles_1 = require("./styles");
58
60
  var EMPTY_FILTER = { fieldName: null, filter: null, operator: mdm_sdk_1.SearchOperator.and, values: [] };
@@ -61,8 +63,6 @@ var AttributesFiltersBuilder = function (_a) {
61
63
  var _d = components, CustomValuesEditor = _d.ValuesEditor, CustomFilterSelector = _d.FilterSelector, _e = _d.LogicalOperator, LogicalOperator = _e === void 0 ? EmptyStub_1.EmptyStub : _e;
62
64
  var styles = (0, styles_1.useStyles)();
63
65
  var actualFilters = (0, react_1.useRef)(filters);
64
- var attributeFilterRef = (0, react_1.useRef)(null);
65
- var lastAttributesCountRef = (0, react_1.useRef)(null);
66
66
  var attributesCountRef = (0, react_1.useRef)(null);
67
67
  var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
68
68
  actualFilters.current = filters;
@@ -75,20 +75,15 @@ var AttributesFiltersBuilder = function (_a) {
75
75
  var currentEntityType = (0, react_1.useMemo)(function () {
76
76
  var entityTypesUris = attributesTypesGroups.map(function (_a) {
77
77
  var attributeTypes = _a.attributeTypes;
78
- return (0, helpers_1.getOperationalTypeUriFromAttrTypes)(attributeTypes);
78
+ return (0, attributesSelector_1.getOperationalTypeUriFromAttrTypes)(attributeTypes);
79
79
  });
80
80
  var closestEntityTypeAncestorUri = (0, mdm_sdk_1.findClosestCommonAncestor)(metadata, entityTypesUris);
81
81
  return (0, mdm_sdk_1.getEntityType)(metadata, closestEntityTypeAncestorUri);
82
82
  }, [attributesTypesGroups, metadata]);
83
- var attributeSelectorItemsGroups = (0, react_1.useMemo)(function () { return (0, helpers_1.getAttributeSelectorItems)(metadata, attributesTypesGroups, attributesTypesGroupFilter); }, [attributesTypesGroups, metadata]);
83
+ var attributeSelectorItemsGroups = (0, react_1.useMemo)(function () { return (0, attributesSelector_1.getAttributeSelectorItems)(metadata, attributesTypesGroups, attributesTypesGroupFilter); }, [attributesTypesGroups, metadata]);
84
84
  var rowsData = (0, react_1.useMemo)(function () { return (filters.length ? (0, helpers_1.getRowsDataFromFilters)(filters, attributeSelectorItemsGroups) : []); }, [attributeSelectorItemsGroups, filters]);
85
+ var _f = (0, useFilterAutoFocus_1.useFilterAutoFocus)(rowsData), attributeFilterRef = _f.attributeFilterRef, lastAttributesCountRef = _f.lastAttributesCountRef;
85
86
  attributesCountRef.current = rowsData.length;
86
- (0, react_1.useEffect)(function () {
87
- if (attributeFilterRef.current && lastAttributesCountRef.current !== attributesCountRef.current) {
88
- attributeFilterRef.current.querySelector('input').focus();
89
- lastAttributesCountRef.current = null;
90
- }
91
- }, [rowsData.length]);
92
87
  var handleAttributeSelectorOnOpen = (0, react_1.useCallback)(function () {
93
88
  lastAttributesCountRef.current = rowsData.length;
94
89
  }, [rowsData.length]);
@@ -1,7 +1,6 @@
1
- import { AttributeType, Metadata, SearchFilter } from '@reltio/mdm-sdk';
2
- import { AttributeSelectorItem, AttributeSelectorItemsGroup, AttributesTypesGroup } from '../types';
1
+ import { SearchFilter } from '@reltio/mdm-sdk';
2
+ import { AttributeSelectorItem, AttributeSelectorItemsGroup } from '../types';
3
3
  import { FilterOption } from './types';
4
- export declare const getAttributeSelectorItems: (metadata: Metadata, attributesTypesGroups: AttributesTypesGroup[], attributesTypesGroupFilter: (metadata: Metadata, attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
5
4
  export declare const findValue: (options: FilterOption[], filter: string) => FilterOption;
6
5
  export declare const getRowsDataFromFilters: (filters: SearchFilter[], attributesGroupArr: AttributeSelectorItemsGroup[]) => {
7
6
  attribute: AttributeSelectorItem;
@@ -10,4 +9,3 @@ export declare const getRowsDataFromFilters: (filters: SearchFilter[], attribute
10
9
  id: number;
11
10
  values: import("@reltio/mdm-sdk").SearchValue[];
12
11
  }[];
13
- export declare const getOperationalTypeUriFromAttrTypes: (attributeTypes: AttributeType[]) => any;
@@ -1,77 +1,6 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
- if (ar || !(i in from)) {
16
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
- ar[i] = from[i];
18
- }
19
- }
20
- return to.concat(ar || Array.prototype.slice.call(from));
21
- };
22
2
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.getOperationalTypeUriFromAttrTypes = exports.getRowsDataFromFilters = exports.findValue = exports.getAttributeSelectorItems = void 0;
24
- var mdm_sdk_1 = require("@reltio/mdm-sdk");
25
- var ramda_1 = require("ramda");
26
- var createAttributeItem = function (metadata, attrType, operationalTypeUri, parents) {
27
- var title = attrType.label || attrType.name;
28
- if ((0, mdm_sdk_1.isSpecialAttribute)(attrType)) {
29
- return { attrType: attrType, title: title, fieldName: attrType.name };
30
- }
31
- if ((0, mdm_sdk_1.isInteractionTypeUri)(operationalTypeUri)) {
32
- return { attrType: attrType, title: title, fieldName: (0, mdm_sdk_1.attributeUriToSearchUri)(attrType.uri, parents) };
33
- }
34
- var entityTypeLabel = (0, mdm_sdk_1.getEntityTypeLabel)(metadata, { type: operationalTypeUri });
35
- return {
36
- attrType: attrType,
37
- title: title,
38
- entityTypeUri: operationalTypeUri,
39
- pathToTitle: Array.isArray(parents)
40
- ? __spreadArray(__spreadArray([entityTypeLabel], (0, ramda_1.chain)((0, ramda_1.prop)('label'), parents), true), [title], false) : [entityTypeLabel, title],
41
- fieldName: (0, mdm_sdk_1.attributeUriToSearchUri)(attrType.uri, parents)
42
- };
43
- };
44
- var createAttributesConfig = function (metadata, attrNode, operationalTypeUri, parents) {
45
- if (parents === void 0) { parents = []; }
46
- var resConfig = __assign(__assign({}, createAttributeItem(metadata, attrNode, operationalTypeUri, parents)), { uri: attrNode.uri });
47
- var children = attrNode.children
48
- ? attrNode.children.map(function (childNode) {
49
- return createAttributesConfig(metadata, childNode, operationalTypeUri, parents.concat(attrNode));
50
- })
51
- : [];
52
- if (children.length) {
53
- resConfig.children = children;
54
- }
55
- return resConfig;
56
- };
57
- var getAttributeSelectorItems = function (metadata, attributesTypesGroups, attributesTypesGroupFilter) {
58
- var attributeSelectorItemsGroup = attributesTypesGroups.map(function (_a) {
59
- var id = _a.id, title = _a.title, attributeTypes = _a.attributeTypes;
60
- var operationalTypeUri = (0, exports.getOperationalTypeUriFromAttrTypes)(attributeTypes);
61
- return {
62
- id: id,
63
- title: title,
64
- attributes: (0, mdm_sdk_1.getAttributesTreeFromAttributes)(attributeTypes, metadata).map(function (attrNode) {
65
- var uri = (0, mdm_sdk_1.isSpecialAttribute)(attrNode) ? null : operationalTypeUri;
66
- return createAttributesConfig(metadata, attrNode, uri);
67
- })
68
- };
69
- });
70
- return attributesTypesGroupFilter
71
- ? attributesTypesGroupFilter(metadata, attributeSelectorItemsGroup)
72
- : attributeSelectorItemsGroup;
73
- };
74
- exports.getAttributeSelectorItems = getAttributeSelectorItems;
3
+ exports.getRowsDataFromFilters = exports.findValue = void 0;
75
4
  var findAttributeSelectorItem = function (fieldName, attributesGroup) {
76
5
  var attrGroup;
77
6
  var _loop_1 = function (attributesGroupItem) {
@@ -111,8 +40,3 @@ var getRowsDataFromFilters = function (filters, attributesGroupArr) {
111
40
  });
112
41
  };
113
42
  exports.getRowsDataFromFilters = getRowsDataFromFilters;
114
- var getOperationalTypeUriFromAttrTypes = function (attributeTypes) {
115
- var regularAttribute = (0, mdm_sdk_1.findRegularAttribute)(attributeTypes);
116
- return regularAttribute ? (0, mdm_sdk_1.getBaseUri)(regularAttribute.uri) : null;
117
- };
118
- exports.getOperationalTypeUriFromAttrTypes = getOperationalTypeUriFromAttrTypes;
@@ -49,6 +49,7 @@ var SmallIconButton_1 = require("../SmallIconButton");
49
49
  var SelectionPopup_1 = require("../SelectionPopup");
50
50
  var useKeyboardNavigation_1 = require("../hooks/useKeyboardNavigation");
51
51
  var SelectMetadataTypesList_1 = require("./components/SelectMetadataTypesList");
52
+ var helpers_1 = require("./helpers");
52
53
  var styles_1 = require("./styles");
53
54
  var MIN_CONTAINER_WIDTH = 255;
54
55
  var LIST_HEIGHT = 245;
@@ -70,7 +71,7 @@ exports.MetadataTypesSelector = (0, react_1.memo)(function (_a) {
70
71
  })
71
72
  .map(function (item, index) { return ({ item: { item: __assign(__assign({}, item), { filterText: filterText }) }, index: index }); });
72
73
  var selectedLabels = (0, react_1.useMemo)(function () {
73
- return (0, ramda_1.pipe)((0, ramda_1.map)(function (uri) { return items.find((0, ramda_1.propEq)('uri', uri)); }), (0, ramda_1.reject)(ramda_1.isNil), (0, ramda_1.pluck)('label'))(selectedItemsUris);
74
+ return (0, ramda_1.pipe)((0, ramda_1.map)(function (uri) { return items.find((0, ramda_1.propEq)('uri', uri)); }), (0, ramda_1.reject)(ramda_1.isNil), helpers_1.getItemLabels)(selectedItemsUris);
74
75
  }, [selectedItemsUris, items]);
75
76
  var handleListItemClick = (0, react_1.useCallback)(function (item, checked) {
76
77
  if (single) {
@@ -10,12 +10,59 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
+ if (ar || !(i in from)) {
52
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
+ ar[i] = from[i];
54
+ }
55
+ }
56
+ return to.concat(ar || Array.prototype.slice.call(from));
57
+ };
13
58
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
59
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
60
  };
16
61
  Object.defineProperty(exports, "__esModule", { value: true });
17
62
  var react_1 = __importDefault(require("react"));
18
63
  var enzyme_1 = require("enzyme");
64
+ var react_2 = require("@testing-library/react");
65
+ var user_event_1 = __importDefault(require("@testing-library/user-event"));
19
66
  var test_utils_1 = require("react-dom/test-utils");
20
67
  var TextField_1 = __importDefault(require("@mui/material/TextField"));
21
68
  var AttributeListItem_1 = require("../AttributeListItem");
@@ -42,6 +89,19 @@ var setUp = function (method, _a) {
42
89
  var _b = _a === void 0 ? {} : _a, _c = _b.selectedItemsUris, selectedItemsUris = _c === void 0 ? [] : _c, _d = _b.onChange, onChange = _d === void 0 ? jest.fn() : _d, single = _b.single, placeholder = _b.placeholder, enableEmptyValueUnderline = _b.enableEmptyValueUnderline;
43
90
  return method(react_1.default.createElement(MetadataTypesSelector_1.MetadataTypesSelector, { items: items, selectedItemsUris: selectedItemsUris, onChange: onChange, single: single, placeholder: placeholder, enableEmptyValueUnderline: enableEmptyValueUnderline, label: "Entity Type", dataReltioId: "entity-type-selector", selectionPopupTitle: 'Select entity types' }));
44
91
  };
92
+ var defaultProps = {
93
+ items: items,
94
+ selectedItemsUris: [],
95
+ onChange: jest.fn(),
96
+ label: 'Entity Type',
97
+ dataReltioId: 'entity-type-selector',
98
+ selectionPopupTitle: 'Select entity types'
99
+ };
100
+ var setUpRTL = function (props) {
101
+ if (props === void 0) { props = {}; }
102
+ var user = user_event_1.default.setup();
103
+ return __assign({ user: user }, (0, react_2.render)(react_1.default.createElement(MetadataTypesSelector_1.MetadataTypesSelector, __assign({}, defaultProps, props))));
104
+ };
45
105
  describe('MetadataTypesSelector tests', function () {
46
106
  it('should render correctly', function () {
47
107
  var selectedItemsUris = ['configuration/entityTypes/HCP'];
@@ -170,4 +230,52 @@ describe('MetadataTypesSelector tests', function () {
170
230
  wrapper.find(SelectMetadataTypesList_1.SelectMetadataTypesList).prop('onItemClick')(items[0], false);
171
231
  expect(onChange).toHaveBeenCalledWith([]);
172
232
  });
233
+ describe('MetadataTypesSelector behavior with RTL', function () {
234
+ var originalRange = document.createRange;
235
+ beforeEach(function () {
236
+ document.createRange = function () {
237
+ var range = new Range();
238
+ range.getBoundingClientRect = jest.fn(function () {
239
+ return { width: 0 };
240
+ });
241
+ return range;
242
+ };
243
+ });
244
+ afterEach(function () {
245
+ document.createRange = originalRange;
246
+ });
247
+ it('should not throw an error on clicking list item if entity does not have a label', function () { return __awaiter(void 0, void 0, void 0, function () {
248
+ var itemWithoutLabel, selectedItemsUris, user, button, popover, blankListItem, checkbox;
249
+ return __generator(this, function (_a) {
250
+ switch (_a.label) {
251
+ case 0:
252
+ itemWithoutLabel = {
253
+ uri: 'configuration/entityTypes/CompanyUri',
254
+ attributes: []
255
+ };
256
+ selectedItemsUris = [itemWithoutLabel.uri];
257
+ user = setUpRTL({ selectedItemsUris: selectedItemsUris, items: __spreadArray(__spreadArray([], items, true), [itemWithoutLabel], false) }).user;
258
+ expect(react_2.screen.getAllByText('CompanyUri')[0]).toBeInTheDocument();
259
+ button = react_2.screen.getByRole('button');
260
+ return [4 /*yield*/, user.click(button)];
261
+ case 1:
262
+ _a.sent();
263
+ popover = react_2.screen.getByRole('presentation');
264
+ expect(popover).toBeInTheDocument();
265
+ expect((0, react_2.within)(popover).getByText('Select entity types')).toBeInTheDocument();
266
+ blankListItem = react_2.screen.getAllByRole('menuitem')[2];
267
+ expect(blankListItem).toHaveTextContent('CompanyUri');
268
+ checkbox = (0, react_2.within)(blankListItem).getByRole('checkbox');
269
+ return [4 /*yield*/, user.click(checkbox)];
270
+ case 2:
271
+ _a.sent();
272
+ return [4 /*yield*/, user.keyboard('[Escape]')];
273
+ case 3:
274
+ _a.sent();
275
+ expect(popover).not.toBeInTheDocument();
276
+ return [2 /*return*/];
277
+ }
278
+ });
279
+ }); });
280
+ });
173
281
  });
@@ -51,6 +51,7 @@ var ramda_1 = require("ramda");
51
51
  var AttributeListItem_1 = require("../../../AttributeListItem");
52
52
  var Highlighter_1 = require("../../../Highlighter");
53
53
  var VirtualGroupedList_1 = require("../../../VirtualGroupedList");
54
+ var helpers_1 = require("../../helpers");
54
55
  var ITEM_HEIGHT = 32;
55
56
  var getItemSize = (0, ramda_1.always)(ITEM_HEIGHT);
56
57
  exports.SelectMetadataTypesList = (0, react_1.memo)(function (_a) {
@@ -59,7 +60,7 @@ exports.SelectMetadataTypesList = (0, react_1.memo)(function (_a) {
59
60
  var item = _a.item;
60
61
  var isSelected = !!selectedItems.find(function (uri) { return item.uri === uri; });
61
62
  var isFocused = index === focusIndex;
62
- return (react_1.default.createElement(AttributeListItem_1.AttributeListItem, { key: item.uri, onClick: onItemClick, checked: isSelected, data: item, label: react_1.default.createElement(Highlighter_1.Highlighter, { text: item.label, highlight: item.filterText }), labelInText: item.label, style: style, isFocused: isFocused, hideIcon: true, LogoIcon: item.LogoIcon }));
63
+ return (react_1.default.createElement(AttributeListItem_1.AttributeListItem, { key: item.uri, onClick: onItemClick, checked: isSelected, data: item, label: react_1.default.createElement(Highlighter_1.Highlighter, { text: (0, helpers_1.getItemLabel)(item), highlight: item.filterText }), labelInText: item.label, style: style, isFocused: isFocused, hideIcon: true, LogoIcon: item.LogoIcon }));
63
64
  };
64
65
  return (react_1.default.createElement(VirtualGroupedList_1.VirtualGroupedList, __assign({ getItemSize: getItemSize, renderItem: renderItem, focusIndex: focusIndex, fixedTitle: false, disableHorizontalScrollbar: true, width: width, height: height }, otherProps)));
65
66
  });
@@ -0,0 +1,3 @@
1
+ import { TEntityType, TRelationType } from '@reltio/mdm-sdk';
2
+ export declare const getItemLabels: (items: (TEntityType | TRelationType)[]) => any[];
3
+ export declare const getItemLabel: (item: TEntityType | TRelationType) => any;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getItemLabel = exports.getItemLabels = void 0;
4
+ var mdm_sdk_1 = require("@reltio/mdm-sdk");
5
+ var getItemLabels = function (items) { return items.map(exports.getItemLabel); };
6
+ exports.getItemLabels = getItemLabels;
7
+ var getItemLabel = function (item) { return item.label || (0, mdm_sdk_1.getLastUriPart)(item.uri); };
8
+ exports.getItemLabel = getItemLabel;
@@ -0,0 +1,4 @@
1
+ import { AttributeType, Metadata } from '@reltio/mdm-sdk';
2
+ import { AttributeSelectorItemsGroup, AttributesTypesGroup } from '../types';
3
+ export declare const getOperationalTypeUriFromAttrTypes: (attributeTypes: AttributeType[]) => any;
4
+ export declare const getAttributeSelectorItems: (metadata: Metadata, attributesTypesGroups: AttributesTypesGroup[], attributesTypesGroupFilter: (metadata: Metadata, attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.getAttributeSelectorItems = exports.getOperationalTypeUriFromAttrTypes = void 0;
24
+ var ramda_1 = require("ramda");
25
+ var mdm_sdk_1 = require("@reltio/mdm-sdk");
26
+ var createAttributeItem = function (metadata, attrType, operationalTypeUri, parents) {
27
+ var title = attrType.label || attrType.name;
28
+ if ((0, mdm_sdk_1.isSpecialAttribute)(attrType)) {
29
+ return { attrType: attrType, title: title, fieldName: attrType.name };
30
+ }
31
+ if ((0, mdm_sdk_1.isInteractionTypeUri)(operationalTypeUri)) {
32
+ return { attrType: attrType, title: title, fieldName: (0, mdm_sdk_1.attributeUriToSearchUri)(attrType.uri, parents) };
33
+ }
34
+ var entityTypeLabel = (0, mdm_sdk_1.getEntityTypeLabel)(metadata, { type: operationalTypeUri });
35
+ return {
36
+ attrType: attrType,
37
+ title: title,
38
+ entityTypeUri: operationalTypeUri,
39
+ pathToTitle: Array.isArray(parents)
40
+ ? __spreadArray(__spreadArray([entityTypeLabel], (0, ramda_1.chain)((0, ramda_1.prop)('label'), parents), true), [title], false) : [entityTypeLabel, title],
41
+ fieldName: (0, mdm_sdk_1.attributeUriToSearchUri)(attrType.uri, parents)
42
+ };
43
+ };
44
+ var createAttributesConfig = function (metadata, attrNode, operationalTypeUri, parents) {
45
+ if (parents === void 0) { parents = []; }
46
+ var resConfig = __assign(__assign({}, createAttributeItem(metadata, attrNode, operationalTypeUri, parents)), { uri: attrNode.uri });
47
+ var children = attrNode.children
48
+ ? attrNode.children.map(function (childNode) {
49
+ return createAttributesConfig(metadata, childNode, operationalTypeUri, parents.concat(attrNode));
50
+ })
51
+ : [];
52
+ if (children.length) {
53
+ resConfig.children = children;
54
+ }
55
+ return resConfig;
56
+ };
57
+ var getOperationalTypeUriFromAttrTypes = function (attributeTypes) {
58
+ var regularAttribute = (0, mdm_sdk_1.findRegularAttribute)(attributeTypes);
59
+ return regularAttribute ? (0, mdm_sdk_1.getBaseUri)(regularAttribute.uri) : null;
60
+ };
61
+ exports.getOperationalTypeUriFromAttrTypes = getOperationalTypeUriFromAttrTypes;
62
+ var getAttributeSelectorItems = function (metadata, attributesTypesGroups, attributesTypesGroupFilter) {
63
+ var attributeSelectorItemsGroup = attributesTypesGroups.map(function (_a) {
64
+ var id = _a.id, title = _a.title, attributeTypes = _a.attributeTypes;
65
+ var operationalTypeUri = (0, exports.getOperationalTypeUriFromAttrTypes)(attributeTypes);
66
+ return {
67
+ id: id,
68
+ title: title,
69
+ attributes: (0, mdm_sdk_1.getAttributesTreeFromAttributes)(attributeTypes, metadata).map(function (attrNode) {
70
+ var uri = (0, mdm_sdk_1.isSpecialAttribute)(attrNode) ? null : operationalTypeUri;
71
+ return createAttributesConfig(metadata, attrNode, uri);
72
+ })
73
+ };
74
+ });
75
+ return attributesTypesGroupFilter
76
+ ? attributesTypesGroupFilter(metadata, attributeSelectorItemsGroup)
77
+ : attributeSelectorItemsGroup;
78
+ };
79
+ exports.getAttributeSelectorItems = getAttributeSelectorItems;
@@ -0,0 +1 @@
1
+ export { useFilterAutoFocus } from './useFilterAutoFocus';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useFilterAutoFocus = void 0;
4
+ var useFilterAutoFocus_1 = require("./useFilterAutoFocus");
5
+ Object.defineProperty(exports, "useFilterAutoFocus", { enumerable: true, get: function () { return useFilterAutoFocus_1.useFilterAutoFocus; } });
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ export declare const useFilterAutoFocus: (rowsData: Record<string, unknown>[]) => {
3
+ attributeFilterRef: import("react").MutableRefObject<any>;
4
+ lastAttributesCountRef: import("react").MutableRefObject<any>;
5
+ attributesCountRef: import("react").MutableRefObject<any>;
6
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useFilterAutoFocus = void 0;
4
+ var react_1 = require("react");
5
+ var useFilterAutoFocus = function (rowsData) {
6
+ var attributeFilterRef = (0, react_1.useRef)(null);
7
+ var lastAttributesCountRef = (0, react_1.useRef)(null);
8
+ var attributesCountRef = (0, react_1.useRef)(null);
9
+ attributesCountRef.current = rowsData.length;
10
+ (0, react_1.useEffect)(function () {
11
+ if (attributeFilterRef.current && lastAttributesCountRef.current !== attributesCountRef.current) {
12
+ attributeFilterRef.current.querySelector('input').focus();
13
+ lastAttributesCountRef.current = null;
14
+ }
15
+ }, [rowsData.length]);
16
+ return { attributeFilterRef: attributeFilterRef, lastAttributesCountRef: lastAttributesCountRef, attributesCountRef: attributesCountRef };
17
+ };
18
+ exports.useFilterAutoFocus = useFilterAutoFocus;
package/cjs/index.d.ts CHANGED
@@ -178,6 +178,7 @@ export { RelationEditor } from './RelationEditor';
178
178
  export { GaugeChart } from './GaugeChart';
179
179
  export { UpSetChart } from './UpSetChart';
180
180
  export { DateRangeSelector } from './DateRangeSelector';
181
+ export { MetadataTypesSelector } from './MetadataTypesSelector';
181
182
  export { withTooltip } from './HOCs/withTooltip';
182
183
  export { withAsyncMount } from './HOCs/withAsyncMount';
183
184
  export { withDragHandle } from './HOCs/withDragHandle';
@@ -267,11 +268,13 @@ export { useKeyboardNavigation } from './hooks/useKeyboardNavigation';
267
268
  export { useMaskedAttribute } from './hooks/useMaskedAttribute';
268
269
  export { useMarkers, resolveMarkers } from './hooks/useMarkers';
269
270
  export { useSegmentationRequest } from './hooks/useSegmentationRequest';
271
+ export { useFilterAutoFocus } from './hooks/useFilterAutoFocus';
270
272
  export { buildColumnsFilter, buildColumnsSizeById, columnFilterToMdmFilter, defaultGetRowCellHeight, defaultRenderRowCell } from './helpers/basicTable';
271
273
  export { enrichDataWithPercents } from './helpers/charts';
272
274
  export { showDefaultErrorMessage, showErrorMessage } from './helpers/errors';
273
275
  export { getChecked, getValue, isControlOrCommandPressed } from './helpers/events';
274
276
  export { mergeClasses } from './helpers/classes';
277
+ export { getAttributeSelectorItems } from './helpers/attributesSelector';
275
278
  export type { AttributeFiltersComponentProps } from './AttributesFiltersBuilder';
276
279
  export type { ChartData } from './types/charts';
277
280
  export type { AddInlineAttributeEvent, DeleteInlineAttributeEvent, EditInlineAttributeEvent, IgnoreInlineAttributeEvent, PinInlineAttributeEvent } from './types/inlineAttributes';
package/cjs/index.js CHANGED
@@ -17,10 +17,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.NestedAttributeEditor = exports.NestedAttribute = exports.MoreAttributesButton = exports.InlineReferenceAttribute = exports.InlineNestedAttribute = exports.InlineImageAttribute = exports.InlineAttributesPager = exports.InfoIcon = exports.EditableImageAttributesLine = exports.FilterButton = exports.FacetViewHeader = exports.ExpandedValueTooltip = exports.EntitySelector = exports.EntityCreator = exports.AttributesPager = exports.AttributesList = exports.EditableAttribute = exports.DropDownMenuButton = exports.DescriptionIcon = exports.DefaultCellValueRenderer = exports.ControlAttributeIcon = exports.ColumnsSettingsPopup = exports.ColumnsSettings = exports.ColorBar = exports.CollapseRowButton = exports.BasicChartsFactory = exports.ChartsFactory = exports.CardinalityMessage = exports.BranchDecorator = exports.BasicViewHeader = exports.BasicViewContent = exports.BasicView = exports.BasicTablePagination = exports.basicTableViewState = exports.BasicTable = exports.BasicAttributeSelector = exports.BarChart = exports.AvatarWithFallback = exports.AutoSizeList = exports.AttributesView = exports.AttributesValuesEditor = exports.AttributesFiltersButton = exports.AttributesFiltersBuilder = exports.AttributesFilterSelector = exports.AttributesErrorsPanel = exports.AttributeListItem = exports.AttributeGroupIcon = exports.ArrowExpandButton = exports.ActionsPanel = exports.ActionButton = void 0;
18
18
  exports.ConnectionEditor = exports.DropDownSelector = exports.ReactSelectOptionWithCheckIcon = exports.ReactSelectMenuWithPopper = exports.ReactSelectMenuList = exports.ReactSelectLoadMoreButton = exports.ReactSelectDropdownIndicatorWithIconButton = exports.ReactSelectDropdownIndicator = exports.Highlighter = exports.HierarchyNodeTitle = exports.HierarchicalAttributeTooltip = exports.HideOnShrink = exports.ExpandableSearchInput = exports.ErrorPopup = exports.ErrorBoundary = exports.EntityUriLink = exports.EntityTypesSelector = exports.EntityTypeIcon = exports.EntityTypeBadge = exports.EntityAvatar = exports.EMPTY_STATE_VARIANTS = exports.EMPTY_STATE_ICONS = exports.EmptyState = exports.Drawer = exports.DataTypeValue = exports.DataTenantBadge = exports.ConnectionRelationTypeSelector = exports.CollaborationItem = exports.ConfirmationDialog = exports.CommentsContainer = exports.ColoredSourceIcon = exports.CollapseButton = exports.TreeChart = exports.TableWithBars = exports.SourceIcon = exports.SmallIconButtonWithTooltip = exports.SmallIconButton = exports.SimpleAttributeEditor = exports.SimpleAttribute = exports.RowCellAutoSizer = exports.RelationTypeSelector = exports.ReferenceAttributeEditor = exports.ReferenceAttribute = exports.ImageAttributesLine = exports.ReadOnlyAttributesPager = exports.ReadOnlyAttributesList = exports.ReadOnlyAttribute = exports.ReadOnlyAttributeValuesBlock = exports.PieChart = exports.OvIcon = void 0;
19
19
  exports.MultipleInput = exports.ModeSwitcherSelect = exports.ModeSwitcher = exports.TransitiveMatchBlock = exports.SimpleMatchRulesBuilder = exports.SimpleMatchRulesBlock = exports.SimpleMatchRules = exports.MatchRulesBlock = exports.LoadingSpinner = exports.Link = exports.LinearLoadIndicator = exports.ImportButton = exports.ReadableSearchQueryBuilder = exports.ReadableSearchQuery = exports.LogicOperator = exports.TableSkeleton = exports.StepNavigation = exports.TenantLabel = exports.RelevanceScoreBadge = exports.RequiredMark = exports.SettingsMenu = exports.TenantsDropDownSelector = exports.TenantIcon = exports.SourceSystemsSelector = exports.MatchRulesSelector = exports.MultiValueSelector = exports.ProfilesList = exports.NotMatchButton = exports.MergeButton = exports.ProfileMatchCard = exports.ImageGalleryDialog = exports.RelationTypesSelector = exports.ScreenProfileBand = exports.ProfileBandNavigation = exports.EmptyStub = exports.SaveSegmentDialog = exports.MaskingSwitcher = exports.FileTypeEditor = exports.EmptySearchResult = exports.DropDownEditor = exports.FilterValueEditor = exports.MultiValueChip = exports.TextEditor = exports.DateRangeEditor = exports.NumberEditor = exports.DataTypeValueEditor = exports.DateEditor = exports.ErrorWrapper = exports.ErrorMessage = exports.ConfigureColumnsPopup = void 0;
20
- exports.BlockImageGalleryDialogContext = exports.PopupBoundariesContext = exports.HistoryDiffContext = exports.AsyncMountContext = exports.MdmModuleProvider = exports.withTableContext = exports.withFilterAtBottom = exports.withPercents = exports.withContext = exports.withDateRangeSelector = exports.withDragHandle = exports.withAsyncMount = exports.withTooltip = exports.DateRangeSelector = exports.UpSetChart = exports.GaugeChart = exports.RelationEditor = exports.ReltioMap = exports.Marginator = exports.LightArrowTooltip = exports.ScrollableTabs = exports.VirtualGroupedList = exports.ViewMoreToggle = exports.VerticalHeadingsTable = exports.VerticalDivider = exports.AttributeTitle = exports.Spacer = exports.SimpleDropDownSelector = exports.SidePanelContentHeader = exports.SidePanel = exports.SidePanelEmptyState = exports.SideButtonsPanel = exports.SelectorWithOnlyOptionAutoSelect = exports.SelectionPopup = exports.WhiteSearchInput = exports.SearchInput = exports.ProfileResizablePanes = exports.ResizablePanes = exports.ReltioGridLayout = exports.RCTree = exports.reactSortableTreeHelpers = exports.ReactSortableTree = exports.MultiSelect = exports.QueryBuilderRowsGroup = exports.QueryBuilderRow = exports.ProfileCard = exports.ProfileBand = exports.PotentialMatchReviewCard = exports.PopupWithArrow = exports.Popper = void 0;
21
- exports.SegmentationContext = exports.useReloadData = exports.ReloadDataProvider = exports.useAttributeValueConfigPermissions = exports.ConfigPermissionsContextProvider = exports.ConfigPermissionsContext = exports.useActionsHook = exports.ActionsHookProvider = exports.PageRequestsAbortingContext = exports.DependentLookupAutopopulationContext = exports.FeaturesContext = exports.LabelsContext = exports.UrlGeneratorsContext = exports.isHighlightedAttributeType = exports.isHighlightedErrorType = exports.ScrollType = exports.ScrollToElementProvider = exports.ScrollToElementContext = exports.SearchValueContext = exports.InterceptHandlersContext = exports.HighlightedValuesContext = exports.SnackbarContext = exports.SearchFiltersContext = exports.useReloadFacet = exports.ReloadFacetProvider = exports.useReloadAllFacets = exports.SandboxAPIContext = exports.EntityContext = exports.RelatedObjectUrisContext = exports.WorkflowTasksContext = exports.useEntityLoadingIndication = exports.EntityLoadingIndicationProvider = exports.EntityMarkerContext = exports.useAttributeExpanded = exports.ExpandedAttributesProvider = exports.useHighlightedCrosswalks = exports.useCrosswalkHighlight = exports.useCrosswalkFocus = exports.useCrosswalkColor = exports.CrosswalksDisplayProvider = exports.EntitiesMapContext = exports.IdContext = exports.ProfilePerspectiveViewContext = exports.usePerspectivesSettings = exports.PerspectivesSettingsContext = exports.PivotingAttributeContext = exports.UsersContext = exports.InitialCollaborationContextValue = exports.CollaborationContextProvider = exports.CollaborationContext = void 0;
22
- exports.resolveMarkers = exports.useMarkers = exports.useMaskedAttribute = exports.useKeyboardNavigation = exports.useDynamicRowCellHeight = exports.useClickableStyle = exports.BasicTableCellRenderer = exports.useBasicTableCellRenderer = exports.useHiddenAttributes = exports.useSavedSearchesRequest = exports.useRequestDCRReview = 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 = exports.ProfileTablesContext = exports.HiddenAttributesContext = exports.BasicTableContext = exports.BasicTableRowCollapseContext = exports.useDeleteUnmaskedAttributeForRelation = exports.useUnmaskedAttributeValue = exports.useUnmaskAttributeValue = exports.useMaskAttributeValue = exports.MaskedAttributesProvider = void 0;
23
- exports.FakeMouseEvent = exports.rerenderWrapper = exports.mockElementSizes = exports.fixClicksOnResizablePanes = exports.mockBasicTableSizing = exports.getMuiIconsByName = exports.getMuiIconByName = exports.delayPromise = exports.deepFreeze = exports.awaitMockPromises = exports.TestStylesProvider = exports.TestPerspectivesSettingsProvider = exports.mergeClasses = exports.isControlOrCommandPressed = exports.getValue = exports.getChecked = exports.showErrorMessage = exports.showDefaultErrorMessage = exports.enrichDataWithPercents = exports.defaultRenderRowCell = exports.defaultGetRowCellHeight = exports.columnFilterToMdmFilter = exports.buildColumnsSizeById = exports.buildColumnsFilter = exports.useSegmentationRequest = void 0;
20
+ exports.PopupBoundariesContext = exports.HistoryDiffContext = exports.AsyncMountContext = exports.MdmModuleProvider = exports.withTableContext = exports.withFilterAtBottom = exports.withPercents = exports.withContext = exports.withDateRangeSelector = exports.withDragHandle = exports.withAsyncMount = exports.withTooltip = exports.MetadataTypesSelector = exports.DateRangeSelector = exports.UpSetChart = exports.GaugeChart = exports.RelationEditor = exports.ReltioMap = exports.Marginator = exports.LightArrowTooltip = exports.ScrollableTabs = exports.VirtualGroupedList = exports.ViewMoreToggle = exports.VerticalHeadingsTable = exports.VerticalDivider = exports.AttributeTitle = exports.Spacer = exports.SimpleDropDownSelector = exports.SidePanelContentHeader = exports.SidePanel = exports.SidePanelEmptyState = exports.SideButtonsPanel = exports.SelectorWithOnlyOptionAutoSelect = exports.SelectionPopup = exports.WhiteSearchInput = exports.SearchInput = exports.ProfileResizablePanes = exports.ResizablePanes = exports.ReltioGridLayout = exports.RCTree = exports.reactSortableTreeHelpers = exports.ReactSortableTree = exports.MultiSelect = exports.QueryBuilderRowsGroup = exports.QueryBuilderRow = exports.ProfileCard = exports.ProfileBand = exports.PotentialMatchReviewCard = exports.PopupWithArrow = exports.Popper = void 0;
21
+ exports.useReloadData = exports.ReloadDataProvider = exports.useAttributeValueConfigPermissions = exports.ConfigPermissionsContextProvider = exports.ConfigPermissionsContext = exports.useActionsHook = exports.ActionsHookProvider = exports.PageRequestsAbortingContext = exports.DependentLookupAutopopulationContext = exports.FeaturesContext = exports.LabelsContext = exports.UrlGeneratorsContext = exports.isHighlightedAttributeType = exports.isHighlightedErrorType = exports.ScrollType = exports.ScrollToElementProvider = exports.ScrollToElementContext = exports.SearchValueContext = exports.InterceptHandlersContext = exports.HighlightedValuesContext = exports.SnackbarContext = exports.SearchFiltersContext = exports.useReloadFacet = exports.ReloadFacetProvider = exports.useReloadAllFacets = exports.SandboxAPIContext = exports.EntityContext = exports.RelatedObjectUrisContext = exports.WorkflowTasksContext = exports.useEntityLoadingIndication = exports.EntityLoadingIndicationProvider = exports.EntityMarkerContext = exports.useAttributeExpanded = exports.ExpandedAttributesProvider = exports.useHighlightedCrosswalks = exports.useCrosswalkHighlight = exports.useCrosswalkFocus = exports.useCrosswalkColor = exports.CrosswalksDisplayProvider = exports.EntitiesMapContext = exports.IdContext = exports.ProfilePerspectiveViewContext = exports.usePerspectivesSettings = exports.PerspectivesSettingsContext = exports.PivotingAttributeContext = exports.UsersContext = exports.InitialCollaborationContextValue = exports.CollaborationContextProvider = exports.CollaborationContext = exports.BlockImageGalleryDialogContext = void 0;
22
+ exports.useMarkers = exports.useMaskedAttribute = exports.useKeyboardNavigation = exports.useDynamicRowCellHeight = exports.useClickableStyle = exports.BasicTableCellRenderer = exports.useBasicTableCellRenderer = exports.useHiddenAttributes = exports.useSavedSearchesRequest = exports.useRequestDCRReview = 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 = exports.ProfileTablesContext = exports.HiddenAttributesContext = exports.BasicTableContext = exports.BasicTableRowCollapseContext = exports.useDeleteUnmaskedAttributeForRelation = exports.useUnmaskedAttributeValue = exports.useUnmaskAttributeValue = exports.useMaskAttributeValue = exports.MaskedAttributesProvider = exports.SegmentationContext = void 0;
23
+ exports.FakeMouseEvent = exports.rerenderWrapper = exports.mockElementSizes = exports.fixClicksOnResizablePanes = exports.mockBasicTableSizing = exports.getMuiIconsByName = exports.getMuiIconByName = exports.delayPromise = exports.deepFreeze = exports.awaitMockPromises = exports.TestStylesProvider = exports.TestPerspectivesSettingsProvider = exports.getAttributeSelectorItems = exports.mergeClasses = exports.isControlOrCommandPressed = exports.getValue = exports.getChecked = exports.showErrorMessage = exports.showDefaultErrorMessage = exports.enrichDataWithPercents = exports.defaultRenderRowCell = exports.defaultGetRowCellHeight = exports.columnFilterToMdmFilter = exports.buildColumnsSizeById = exports.buildColumnsFilter = exports.useFilterAutoFocus = exports.useSegmentationRequest = exports.resolveMarkers = void 0;
24
24
  // components
25
25
  var ActionButton_1 = require("./ActionButton");
26
26
  Object.defineProperty(exports, "ActionButton", { enumerable: true, get: function () { return ActionButton_1.ActionButton; } });
@@ -389,6 +389,8 @@ var UpSetChart_1 = require("./UpSetChart");
389
389
  Object.defineProperty(exports, "UpSetChart", { enumerable: true, get: function () { return UpSetChart_1.UpSetChart; } });
390
390
  var DateRangeSelector_1 = require("./DateRangeSelector");
391
391
  Object.defineProperty(exports, "DateRangeSelector", { enumerable: true, get: function () { return DateRangeSelector_1.DateRangeSelector; } });
392
+ var MetadataTypesSelector_1 = require("./MetadataTypesSelector");
393
+ Object.defineProperty(exports, "MetadataTypesSelector", { enumerable: true, get: function () { return MetadataTypesSelector_1.MetadataTypesSelector; } });
392
394
  // HOCs
393
395
  var withTooltip_1 = require("./HOCs/withTooltip");
394
396
  Object.defineProperty(exports, "withTooltip", { enumerable: true, get: function () { return withTooltip_1.withTooltip; } });
@@ -595,6 +597,8 @@ Object.defineProperty(exports, "useMarkers", { enumerable: true, get: function (
595
597
  Object.defineProperty(exports, "resolveMarkers", { enumerable: true, get: function () { return useMarkers_1.resolveMarkers; } });
596
598
  var useSegmentationRequest_1 = require("./hooks/useSegmentationRequest");
597
599
  Object.defineProperty(exports, "useSegmentationRequest", { enumerable: true, get: function () { return useSegmentationRequest_1.useSegmentationRequest; } });
600
+ var useFilterAutoFocus_1 = require("./hooks/useFilterAutoFocus");
601
+ Object.defineProperty(exports, "useFilterAutoFocus", { enumerable: true, get: function () { return useFilterAutoFocus_1.useFilterAutoFocus; } });
598
602
  // helpers
599
603
  var basicTable_1 = require("./helpers/basicTable");
600
604
  Object.defineProperty(exports, "buildColumnsFilter", { enumerable: true, get: function () { return basicTable_1.buildColumnsFilter; } });
@@ -613,6 +617,8 @@ Object.defineProperty(exports, "getValue", { enumerable: true, get: function ()
613
617
  Object.defineProperty(exports, "isControlOrCommandPressed", { enumerable: true, get: function () { return events_1.isControlOrCommandPressed; } });
614
618
  var classes_1 = require("./helpers/classes");
615
619
  Object.defineProperty(exports, "mergeClasses", { enumerable: true, get: function () { return classes_1.mergeClasses; } });
620
+ var attributesSelector_1 = require("./helpers/attributesSelector");
621
+ Object.defineProperty(exports, "getAttributeSelectorItems", { enumerable: true, get: function () { return attributesSelector_1.getAttributeSelectorItems; } });
616
622
  __exportStar(require("./types/preferences"), exports);
617
623
  __exportStar(require("./types"), exports);
618
624
  // constants
@@ -18,16 +18,18 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
18
  }
19
19
  return to.concat(ar || Array.prototype.slice.call(from));
20
20
  };
21
- import React, { useCallback, useRef, useMemo, useEffect, memo } from 'react';
21
+ import React, { useCallback, useRef, useMemo, memo } from 'react';
22
22
  import { always, evolve } from 'ramda';
23
23
  import { SearchOperator, findClosestCommonAncestor, getEntityType } from '@reltio/mdm-sdk';
24
24
  import { EmptyStub } from '../EmptyStub';
25
- import { getAttributeSelectorItems, getOperationalTypeUriFromAttrTypes, getRowsDataFromFilters } from './helpers';
25
+ import { getAttributeSelectorItems, getOperationalTypeUriFromAttrTypes } from '../helpers/attributesSelector';
26
+ import { getRowsDataFromFilters } from './helpers';
26
27
  import { AttributesFilterSelector } from '../AttributesFilterSelector';
27
28
  import { RowActions } from './components/RowActions';
28
29
  import { QueryBuilderRowsGroup } from '../QueryBuilderRowsGroup';
29
30
  import { useMdmMetadata } from '../contexts/MdmModuleContext';
30
31
  import { AttributeSelector } from './components/AttributeSelector';
32
+ import { useFilterAutoFocus } from '../hooks/useFilterAutoFocus';
31
33
  import { AttributesValuesEditor } from '../AttributesValuesEditor';
32
34
  import { useStyles } from './styles';
33
35
  var EMPTY_FILTER = { fieldName: null, filter: null, operator: SearchOperator.and, values: [] };
@@ -36,8 +38,6 @@ var AttributesFiltersBuilder = function (_a) {
36
38
  var _d = components, CustomValuesEditor = _d.ValuesEditor, CustomFilterSelector = _d.FilterSelector, _e = _d.LogicalOperator, LogicalOperator = _e === void 0 ? EmptyStub : _e;
37
39
  var styles = useStyles();
38
40
  var actualFilters = useRef(filters);
39
- var attributeFilterRef = useRef(null);
40
- var lastAttributesCountRef = useRef(null);
41
41
  var attributesCountRef = useRef(null);
42
42
  var metadata = useMdmMetadata();
43
43
  actualFilters.current = filters;
@@ -57,13 +57,8 @@ var AttributesFiltersBuilder = function (_a) {
57
57
  }, [attributesTypesGroups, metadata]);
58
58
  var attributeSelectorItemsGroups = useMemo(function () { return getAttributeSelectorItems(metadata, attributesTypesGroups, attributesTypesGroupFilter); }, [attributesTypesGroups, metadata]);
59
59
  var rowsData = useMemo(function () { return (filters.length ? getRowsDataFromFilters(filters, attributeSelectorItemsGroups) : []); }, [attributeSelectorItemsGroups, filters]);
60
+ var _f = useFilterAutoFocus(rowsData), attributeFilterRef = _f.attributeFilterRef, lastAttributesCountRef = _f.lastAttributesCountRef;
60
61
  attributesCountRef.current = rowsData.length;
61
- useEffect(function () {
62
- if (attributeFilterRef.current && lastAttributesCountRef.current !== attributesCountRef.current) {
63
- attributeFilterRef.current.querySelector('input').focus();
64
- lastAttributesCountRef.current = null;
65
- }
66
- }, [rowsData.length]);
67
62
  var handleAttributeSelectorOnOpen = useCallback(function () {
68
63
  lastAttributesCountRef.current = rowsData.length;
69
64
  }, [rowsData.length]);
@@ -1,7 +1,6 @@
1
- import { AttributeType, Metadata, SearchFilter } from '@reltio/mdm-sdk';
2
- import { AttributeSelectorItem, AttributeSelectorItemsGroup, AttributesTypesGroup } from '../types';
1
+ import { SearchFilter } from '@reltio/mdm-sdk';
2
+ import { AttributeSelectorItem, AttributeSelectorItemsGroup } from '../types';
3
3
  import { FilterOption } from './types';
4
- export declare const getAttributeSelectorItems: (metadata: Metadata, attributesTypesGroups: AttributesTypesGroup[], attributesTypesGroupFilter: (metadata: Metadata, attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
5
4
  export declare const findValue: (options: FilterOption[], filter: string) => FilterOption;
6
5
  export declare const getRowsDataFromFilters: (filters: SearchFilter[], attributesGroupArr: AttributeSelectorItemsGroup[]) => {
7
6
  attribute: AttributeSelectorItem;
@@ -10,4 +9,3 @@ export declare const getRowsDataFromFilters: (filters: SearchFilter[], attribute
10
9
  id: number;
11
10
  values: import("@reltio/mdm-sdk").SearchValue[];
12
11
  }[];
13
- export declare const getOperationalTypeUriFromAttrTypes: (attributeTypes: AttributeType[]) => any;
@@ -1,73 +1,3 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
- if (ar || !(i in from)) {
15
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
- ar[i] = from[i];
17
- }
18
- }
19
- return to.concat(ar || Array.prototype.slice.call(from));
20
- };
21
- import { getAttributesTreeFromAttributes, attributeUriToSearchUri, isSpecialAttribute, getBaseUri, getEntityTypeLabel, findRegularAttribute, isInteractionTypeUri } from '@reltio/mdm-sdk';
22
- import { chain, prop } from 'ramda';
23
- var createAttributeItem = function (metadata, attrType, operationalTypeUri, parents) {
24
- var title = attrType.label || attrType.name;
25
- if (isSpecialAttribute(attrType)) {
26
- return { attrType: attrType, title: title, fieldName: attrType.name };
27
- }
28
- if (isInteractionTypeUri(operationalTypeUri)) {
29
- return { attrType: attrType, title: title, fieldName: attributeUriToSearchUri(attrType.uri, parents) };
30
- }
31
- var entityTypeLabel = getEntityTypeLabel(metadata, { type: operationalTypeUri });
32
- return {
33
- attrType: attrType,
34
- title: title,
35
- entityTypeUri: operationalTypeUri,
36
- pathToTitle: Array.isArray(parents)
37
- ? __spreadArray(__spreadArray([entityTypeLabel], chain(prop('label'), parents), true), [title], false) : [entityTypeLabel, title],
38
- fieldName: attributeUriToSearchUri(attrType.uri, parents)
39
- };
40
- };
41
- var createAttributesConfig = function (metadata, attrNode, operationalTypeUri, parents) {
42
- if (parents === void 0) { parents = []; }
43
- var resConfig = __assign(__assign({}, createAttributeItem(metadata, attrNode, operationalTypeUri, parents)), { uri: attrNode.uri });
44
- var children = attrNode.children
45
- ? attrNode.children.map(function (childNode) {
46
- return createAttributesConfig(metadata, childNode, operationalTypeUri, parents.concat(attrNode));
47
- })
48
- : [];
49
- if (children.length) {
50
- resConfig.children = children;
51
- }
52
- return resConfig;
53
- };
54
- export var getAttributeSelectorItems = function (metadata, attributesTypesGroups, attributesTypesGroupFilter) {
55
- var attributeSelectorItemsGroup = attributesTypesGroups.map(function (_a) {
56
- var id = _a.id, title = _a.title, attributeTypes = _a.attributeTypes;
57
- var operationalTypeUri = getOperationalTypeUriFromAttrTypes(attributeTypes);
58
- return {
59
- id: id,
60
- title: title,
61
- attributes: getAttributesTreeFromAttributes(attributeTypes, metadata).map(function (attrNode) {
62
- var uri = isSpecialAttribute(attrNode) ? null : operationalTypeUri;
63
- return createAttributesConfig(metadata, attrNode, uri);
64
- })
65
- };
66
- });
67
- return attributesTypesGroupFilter
68
- ? attributesTypesGroupFilter(metadata, attributeSelectorItemsGroup)
69
- : attributeSelectorItemsGroup;
70
- };
71
1
  var findAttributeSelectorItem = function (fieldName, attributesGroup) {
72
2
  var attrGroup;
73
3
  var _loop_1 = function (attributesGroupItem) {
@@ -105,7 +35,3 @@ export var getRowsDataFromFilters = function (filters, attributesGroupArr) {
105
35
  };
106
36
  });
107
37
  };
108
- export var getOperationalTypeUriFromAttrTypes = function (attributeTypes) {
109
- var regularAttribute = findRegularAttribute(attributeTypes);
110
- return regularAttribute ? getBaseUri(regularAttribute.uri) : null;
111
- };
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
11
11
  };
12
12
  import React, { useRef, useState, useCallback, useMemo, memo } from 'react';
13
13
  import classnames from 'classnames';
14
- import { isNil, map, pipe, pluck, propEq, reject } from 'ramda';
14
+ import { isNil, map, pipe, propEq, reject } from 'ramda';
15
15
  import { utils } from '@reltio/mdm-sdk';
16
16
  import TextField from '@mui/material/TextField';
17
17
  import ArrowDropDown from '@mui/icons-material/ArrowDropDown';
@@ -20,6 +20,7 @@ import { SmallIconButton } from '../SmallIconButton';
20
20
  import { SelectionPopup } from '../SelectionPopup';
21
21
  import { useKeyboardNavigation } from '../hooks/useKeyboardNavigation';
22
22
  import { SelectMetadataTypesList } from './components/SelectMetadataTypesList';
23
+ import { getItemLabels } from './helpers';
23
24
  import { useStyles } from './styles';
24
25
  var MIN_CONTAINER_WIDTH = 255;
25
26
  var LIST_HEIGHT = 245;
@@ -41,7 +42,7 @@ export var MetadataTypesSelector = memo(function (_a) {
41
42
  })
42
43
  .map(function (item, index) { return ({ item: { item: __assign(__assign({}, item), { filterText: filterText }) }, index: index }); });
43
44
  var selectedLabels = useMemo(function () {
44
- return pipe(map(function (uri) { return items.find(propEq('uri', uri)); }), reject(isNil), pluck('label'))(selectedItemsUris);
45
+ return pipe(map(function (uri) { return items.find(propEq('uri', uri)); }), reject(isNil), getItemLabels)(selectedItemsUris);
45
46
  }, [selectedItemsUris, items]);
46
47
  var handleListItemClick = useCallback(function (item, checked) {
47
48
  if (single) {
@@ -9,8 +9,55 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
49
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
+ if (ar || !(i in from)) {
51
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
+ ar[i] = from[i];
53
+ }
54
+ }
55
+ return to.concat(ar || Array.prototype.slice.call(from));
56
+ };
12
57
  import React from 'react';
13
58
  import { shallow, mount } from 'enzyme';
59
+ import { screen, render, within } from '@testing-library/react';
60
+ import userEvent from '@testing-library/user-event';
14
61
  import { act } from 'react-dom/test-utils';
15
62
  import TextField from '@mui/material/TextField';
16
63
  import { AttributeListItem } from '../AttributeListItem';
@@ -37,6 +84,19 @@ var setUp = function (method, _a) {
37
84
  var _b = _a === void 0 ? {} : _a, _c = _b.selectedItemsUris, selectedItemsUris = _c === void 0 ? [] : _c, _d = _b.onChange, onChange = _d === void 0 ? jest.fn() : _d, single = _b.single, placeholder = _b.placeholder, enableEmptyValueUnderline = _b.enableEmptyValueUnderline;
38
85
  return method(React.createElement(MetadataTypesSelector, { items: items, selectedItemsUris: selectedItemsUris, onChange: onChange, single: single, placeholder: placeholder, enableEmptyValueUnderline: enableEmptyValueUnderline, label: "Entity Type", dataReltioId: "entity-type-selector", selectionPopupTitle: 'Select entity types' }));
39
86
  };
87
+ var defaultProps = {
88
+ items: items,
89
+ selectedItemsUris: [],
90
+ onChange: jest.fn(),
91
+ label: 'Entity Type',
92
+ dataReltioId: 'entity-type-selector',
93
+ selectionPopupTitle: 'Select entity types'
94
+ };
95
+ var setUpRTL = function (props) {
96
+ if (props === void 0) { props = {}; }
97
+ var user = userEvent.setup();
98
+ return __assign({ user: user }, render(React.createElement(MetadataTypesSelector, __assign({}, defaultProps, props))));
99
+ };
40
100
  describe('MetadataTypesSelector tests', function () {
41
101
  it('should render correctly', function () {
42
102
  var selectedItemsUris = ['configuration/entityTypes/HCP'];
@@ -165,4 +225,52 @@ describe('MetadataTypesSelector tests', function () {
165
225
  wrapper.find(SelectMetadataTypesList).prop('onItemClick')(items[0], false);
166
226
  expect(onChange).toHaveBeenCalledWith([]);
167
227
  });
228
+ describe('MetadataTypesSelector behavior with RTL', function () {
229
+ var originalRange = document.createRange;
230
+ beforeEach(function () {
231
+ document.createRange = function () {
232
+ var range = new Range();
233
+ range.getBoundingClientRect = jest.fn(function () {
234
+ return { width: 0 };
235
+ });
236
+ return range;
237
+ };
238
+ });
239
+ afterEach(function () {
240
+ document.createRange = originalRange;
241
+ });
242
+ it('should not throw an error on clicking list item if entity does not have a label', function () { return __awaiter(void 0, void 0, void 0, function () {
243
+ var itemWithoutLabel, selectedItemsUris, user, button, popover, blankListItem, checkbox;
244
+ return __generator(this, function (_a) {
245
+ switch (_a.label) {
246
+ case 0:
247
+ itemWithoutLabel = {
248
+ uri: 'configuration/entityTypes/CompanyUri',
249
+ attributes: []
250
+ };
251
+ selectedItemsUris = [itemWithoutLabel.uri];
252
+ user = setUpRTL({ selectedItemsUris: selectedItemsUris, items: __spreadArray(__spreadArray([], items, true), [itemWithoutLabel], false) }).user;
253
+ expect(screen.getAllByText('CompanyUri')[0]).toBeInTheDocument();
254
+ button = screen.getByRole('button');
255
+ return [4 /*yield*/, user.click(button)];
256
+ case 1:
257
+ _a.sent();
258
+ popover = screen.getByRole('presentation');
259
+ expect(popover).toBeInTheDocument();
260
+ expect(within(popover).getByText('Select entity types')).toBeInTheDocument();
261
+ blankListItem = screen.getAllByRole('menuitem')[2];
262
+ expect(blankListItem).toHaveTextContent('CompanyUri');
263
+ checkbox = within(blankListItem).getByRole('checkbox');
264
+ return [4 /*yield*/, user.click(checkbox)];
265
+ case 2:
266
+ _a.sent();
267
+ return [4 /*yield*/, user.keyboard('[Escape]')];
268
+ case 3:
269
+ _a.sent();
270
+ expect(popover).not.toBeInTheDocument();
271
+ return [2 /*return*/];
272
+ }
273
+ });
274
+ }); });
275
+ });
168
276
  });
@@ -25,6 +25,7 @@ import { always } from 'ramda';
25
25
  import { AttributeListItem } from '../../../AttributeListItem';
26
26
  import { Highlighter } from '../../../Highlighter';
27
27
  import { VirtualGroupedList } from '../../../VirtualGroupedList';
28
+ import { getItemLabel } from '../../helpers';
28
29
  var ITEM_HEIGHT = 32;
29
30
  var getItemSize = always(ITEM_HEIGHT);
30
31
  export var SelectMetadataTypesList = memo(function (_a) {
@@ -33,7 +34,7 @@ export var SelectMetadataTypesList = memo(function (_a) {
33
34
  var item = _a.item;
34
35
  var isSelected = !!selectedItems.find(function (uri) { return item.uri === uri; });
35
36
  var isFocused = index === focusIndex;
36
- return (React.createElement(AttributeListItem, { key: item.uri, onClick: onItemClick, checked: isSelected, data: item, label: React.createElement(Highlighter, { text: item.label, highlight: item.filterText }), labelInText: item.label, style: style, isFocused: isFocused, hideIcon: true, LogoIcon: item.LogoIcon }));
37
+ return (React.createElement(AttributeListItem, { key: item.uri, onClick: onItemClick, checked: isSelected, data: item, label: React.createElement(Highlighter, { text: getItemLabel(item), highlight: item.filterText }), labelInText: item.label, style: style, isFocused: isFocused, hideIcon: true, LogoIcon: item.LogoIcon }));
37
38
  };
38
39
  return (React.createElement(VirtualGroupedList, __assign({ getItemSize: getItemSize, renderItem: renderItem, focusIndex: focusIndex, fixedTitle: false, disableHorizontalScrollbar: true, width: width, height: height }, otherProps)));
39
40
  });
@@ -0,0 +1,3 @@
1
+ import { TEntityType, TRelationType } from '@reltio/mdm-sdk';
2
+ export declare const getItemLabels: (items: (TEntityType | TRelationType)[]) => any[];
3
+ export declare const getItemLabel: (item: TEntityType | TRelationType) => any;
@@ -0,0 +1,3 @@
1
+ import { getLastUriPart } from '@reltio/mdm-sdk';
2
+ export var getItemLabels = function (items) { return items.map(getItemLabel); };
3
+ export var getItemLabel = function (item) { return item.label || getLastUriPart(item.uri); };
@@ -0,0 +1,4 @@
1
+ import { AttributeType, Metadata } from '@reltio/mdm-sdk';
2
+ import { AttributeSelectorItemsGroup, AttributesTypesGroup } from '../types';
3
+ export declare const getOperationalTypeUriFromAttrTypes: (attributeTypes: AttributeType[]) => any;
4
+ export declare const getAttributeSelectorItems: (metadata: Metadata, attributesTypesGroups: AttributesTypesGroup[], attributesTypesGroupFilter: (metadata: Metadata, attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
@@ -0,0 +1,74 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
+ if (ar || !(i in from)) {
15
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
+ ar[i] = from[i];
17
+ }
18
+ }
19
+ return to.concat(ar || Array.prototype.slice.call(from));
20
+ };
21
+ import { chain, prop } from 'ramda';
22
+ import { attributeUriToSearchUri, findRegularAttribute, getAttributesTreeFromAttributes, getBaseUri, getEntityTypeLabel, isInteractionTypeUri, isSpecialAttribute } from '@reltio/mdm-sdk';
23
+ var createAttributeItem = function (metadata, attrType, operationalTypeUri, parents) {
24
+ var title = attrType.label || attrType.name;
25
+ if (isSpecialAttribute(attrType)) {
26
+ return { attrType: attrType, title: title, fieldName: attrType.name };
27
+ }
28
+ if (isInteractionTypeUri(operationalTypeUri)) {
29
+ return { attrType: attrType, title: title, fieldName: attributeUriToSearchUri(attrType.uri, parents) };
30
+ }
31
+ var entityTypeLabel = getEntityTypeLabel(metadata, { type: operationalTypeUri });
32
+ return {
33
+ attrType: attrType,
34
+ title: title,
35
+ entityTypeUri: operationalTypeUri,
36
+ pathToTitle: Array.isArray(parents)
37
+ ? __spreadArray(__spreadArray([entityTypeLabel], chain(prop('label'), parents), true), [title], false) : [entityTypeLabel, title],
38
+ fieldName: attributeUriToSearchUri(attrType.uri, parents)
39
+ };
40
+ };
41
+ var createAttributesConfig = function (metadata, attrNode, operationalTypeUri, parents) {
42
+ if (parents === void 0) { parents = []; }
43
+ var resConfig = __assign(__assign({}, createAttributeItem(metadata, attrNode, operationalTypeUri, parents)), { uri: attrNode.uri });
44
+ var children = attrNode.children
45
+ ? attrNode.children.map(function (childNode) {
46
+ return createAttributesConfig(metadata, childNode, operationalTypeUri, parents.concat(attrNode));
47
+ })
48
+ : [];
49
+ if (children.length) {
50
+ resConfig.children = children;
51
+ }
52
+ return resConfig;
53
+ };
54
+ export var getOperationalTypeUriFromAttrTypes = function (attributeTypes) {
55
+ var regularAttribute = findRegularAttribute(attributeTypes);
56
+ return regularAttribute ? getBaseUri(regularAttribute.uri) : null;
57
+ };
58
+ export var getAttributeSelectorItems = function (metadata, attributesTypesGroups, attributesTypesGroupFilter) {
59
+ var attributeSelectorItemsGroup = attributesTypesGroups.map(function (_a) {
60
+ var id = _a.id, title = _a.title, attributeTypes = _a.attributeTypes;
61
+ var operationalTypeUri = getOperationalTypeUriFromAttrTypes(attributeTypes);
62
+ return {
63
+ id: id,
64
+ title: title,
65
+ attributes: getAttributesTreeFromAttributes(attributeTypes, metadata).map(function (attrNode) {
66
+ var uri = isSpecialAttribute(attrNode) ? null : operationalTypeUri;
67
+ return createAttributesConfig(metadata, attrNode, uri);
68
+ })
69
+ };
70
+ });
71
+ return attributesTypesGroupFilter
72
+ ? attributesTypesGroupFilter(metadata, attributeSelectorItemsGroup)
73
+ : attributeSelectorItemsGroup;
74
+ };
@@ -0,0 +1 @@
1
+ export { useFilterAutoFocus } from './useFilterAutoFocus';
@@ -0,0 +1 @@
1
+ export { useFilterAutoFocus } from './useFilterAutoFocus';
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ export declare const useFilterAutoFocus: (rowsData: Record<string, unknown>[]) => {
3
+ attributeFilterRef: import("react").MutableRefObject<any>;
4
+ lastAttributesCountRef: import("react").MutableRefObject<any>;
5
+ attributesCountRef: import("react").MutableRefObject<any>;
6
+ };
@@ -0,0 +1,14 @@
1
+ import { useRef, useEffect } from 'react';
2
+ export var useFilterAutoFocus = function (rowsData) {
3
+ var attributeFilterRef = useRef(null);
4
+ var lastAttributesCountRef = useRef(null);
5
+ var attributesCountRef = useRef(null);
6
+ attributesCountRef.current = rowsData.length;
7
+ useEffect(function () {
8
+ if (attributeFilterRef.current && lastAttributesCountRef.current !== attributesCountRef.current) {
9
+ attributeFilterRef.current.querySelector('input').focus();
10
+ lastAttributesCountRef.current = null;
11
+ }
12
+ }, [rowsData.length]);
13
+ return { attributeFilterRef: attributeFilterRef, lastAttributesCountRef: lastAttributesCountRef, attributesCountRef: attributesCountRef };
14
+ };
package/esm/index.d.ts CHANGED
@@ -178,6 +178,7 @@ export { RelationEditor } from './RelationEditor';
178
178
  export { GaugeChart } from './GaugeChart';
179
179
  export { UpSetChart } from './UpSetChart';
180
180
  export { DateRangeSelector } from './DateRangeSelector';
181
+ export { MetadataTypesSelector } from './MetadataTypesSelector';
181
182
  export { withTooltip } from './HOCs/withTooltip';
182
183
  export { withAsyncMount } from './HOCs/withAsyncMount';
183
184
  export { withDragHandle } from './HOCs/withDragHandle';
@@ -267,11 +268,13 @@ export { useKeyboardNavigation } from './hooks/useKeyboardNavigation';
267
268
  export { useMaskedAttribute } from './hooks/useMaskedAttribute';
268
269
  export { useMarkers, resolveMarkers } from './hooks/useMarkers';
269
270
  export { useSegmentationRequest } from './hooks/useSegmentationRequest';
271
+ export { useFilterAutoFocus } from './hooks/useFilterAutoFocus';
270
272
  export { buildColumnsFilter, buildColumnsSizeById, columnFilterToMdmFilter, defaultGetRowCellHeight, defaultRenderRowCell } from './helpers/basicTable';
271
273
  export { enrichDataWithPercents } from './helpers/charts';
272
274
  export { showDefaultErrorMessage, showErrorMessage } from './helpers/errors';
273
275
  export { getChecked, getValue, isControlOrCommandPressed } from './helpers/events';
274
276
  export { mergeClasses } from './helpers/classes';
277
+ export { getAttributeSelectorItems } from './helpers/attributesSelector';
275
278
  export type { AttributeFiltersComponentProps } from './AttributesFiltersBuilder';
276
279
  export type { ChartData } from './types/charts';
277
280
  export type { AddInlineAttributeEvent, DeleteInlineAttributeEvent, EditInlineAttributeEvent, IgnoreInlineAttributeEvent, PinInlineAttributeEvent } from './types/inlineAttributes';
package/esm/index.js CHANGED
@@ -179,6 +179,7 @@ export { RelationEditor } from './RelationEditor';
179
179
  export { GaugeChart } from './GaugeChart';
180
180
  export { UpSetChart } from './UpSetChart';
181
181
  export { DateRangeSelector } from './DateRangeSelector';
182
+ export { MetadataTypesSelector } from './MetadataTypesSelector';
182
183
  // HOCs
183
184
  export { withTooltip } from './HOCs/withTooltip';
184
185
  export { withAsyncMount } from './HOCs/withAsyncMount';
@@ -271,12 +272,14 @@ export { useKeyboardNavigation } from './hooks/useKeyboardNavigation';
271
272
  export { useMaskedAttribute } from './hooks/useMaskedAttribute';
272
273
  export { useMarkers, resolveMarkers } from './hooks/useMarkers';
273
274
  export { useSegmentationRequest } from './hooks/useSegmentationRequest';
275
+ export { useFilterAutoFocus } from './hooks/useFilterAutoFocus';
274
276
  // helpers
275
277
  export { buildColumnsFilter, buildColumnsSizeById, columnFilterToMdmFilter, defaultGetRowCellHeight, defaultRenderRowCell } from './helpers/basicTable';
276
278
  export { enrichDataWithPercents } from './helpers/charts';
277
279
  export { showDefaultErrorMessage, showErrorMessage } from './helpers/errors';
278
280
  export { getChecked, getValue, isControlOrCommandPressed } from './helpers/events';
279
281
  export { mergeClasses } from './helpers/classes';
282
+ export { getAttributeSelectorItems } from './helpers/attributesSelector';
280
283
  export * from './types/preferences';
281
284
  export * from './types';
282
285
  // constants
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.1975",
3
+ "version": "1.4.1977",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",