@reltio/components 1.4.2133 → 1.4.2135

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 (47) hide show
  1. package/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +2 -2
  2. package/AttributesFiltersButton/AttributesFiltersButton.d.ts +2 -2
  3. package/HOCs/withFilter/components/ColumnFilter/ColumnFilter.js +3 -2
  4. package/ReferenceAttributeEditor/ReferenceAttributeEditor.js +4 -2
  5. package/RelationEditor/RelationEditor.js +4 -2
  6. package/RelationEditor/RelationEditor.test.js +63 -36
  7. package/SimpleAttribute/IntegrationSimpleAttribute.test.js +14 -3
  8. package/cjs/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +2 -2
  9. package/cjs/AttributesFiltersButton/AttributesFiltersButton.d.ts +2 -2
  10. package/cjs/HOCs/withFilter/components/ColumnFilter/ColumnFilter.js +2 -1
  11. package/cjs/ReferenceAttributeEditor/ReferenceAttributeEditor.js +3 -1
  12. package/cjs/RelationEditor/RelationEditor.js +3 -1
  13. package/cjs/RelationEditor/RelationEditor.test.js +63 -36
  14. package/cjs/SimpleAttribute/IntegrationSimpleAttribute.test.js +14 -3
  15. package/cjs/contexts/MdmModuleContext/context.d.ts +2 -0
  16. package/cjs/contexts/MdmModuleContext/hooks.d.ts +1 -0
  17. package/cjs/contexts/MdmModuleContext/hooks.js +3 -1
  18. package/cjs/contexts/MdmModuleContext/index.d.ts +1 -1
  19. package/cjs/contexts/MdmModuleContext/index.js +2 -1
  20. package/cjs/features/activity-log/hooks/useActivitiesLoader.js +3 -2
  21. package/cjs/features/activity-log/hooks/useProfileActivitiesLoader.js +4 -3
  22. package/cjs/features/history/hooks/useHistorySlice.js +3 -2
  23. package/cjs/features/history/hooks/useHistorySlice.test.js +13 -0
  24. package/cjs/helpers/attributesSelector.d.ts +1 -1
  25. package/cjs/helpers/attributesSelector.js +1 -1
  26. package/cjs/hooks/useMaskedAttribute/useMaskedAttribute.js +3 -1
  27. package/cjs/hooks/useMatchesLoader/useMatchesLoader.js +5 -3
  28. package/cjs/hooks/useMatchesLoader/useMatchesLoader.test.js +7 -0
  29. package/cjs/hooks/useRelationsLoader/useRelationsLoader.js +9 -5
  30. package/cjs/hooks/useRelationsLoader/useRelationsLoader.test.js +2 -1
  31. package/contexts/MdmModuleContext/context.d.ts +2 -0
  32. package/contexts/MdmModuleContext/hooks.d.ts +1 -0
  33. package/contexts/MdmModuleContext/hooks.js +1 -0
  34. package/contexts/MdmModuleContext/index.d.ts +1 -1
  35. package/contexts/MdmModuleContext/index.js +1 -1
  36. package/features/activity-log/hooks/useActivitiesLoader.js +5 -4
  37. package/features/activity-log/hooks/useProfileActivitiesLoader.js +6 -5
  38. package/features/history/hooks/useHistorySlice.js +5 -4
  39. package/features/history/hooks/useHistorySlice.test.js +13 -0
  40. package/helpers/attributesSelector.d.ts +1 -1
  41. package/helpers/attributesSelector.js +1 -1
  42. package/hooks/useMaskedAttribute/useMaskedAttribute.js +4 -2
  43. package/hooks/useMatchesLoader/useMatchesLoader.js +7 -5
  44. package/hooks/useMatchesLoader/useMatchesLoader.test.js +7 -0
  45. package/hooks/useRelationsLoader/useRelationsLoader.js +10 -6
  46. package/hooks/useRelationsLoader/useRelationsLoader.test.js +2 -1
  47. package/package.json +2 -2
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
- import { Metadata, SearchFilter } from '@reltio/mdm-sdk';
2
+ import { SearchFilter } from '@reltio/mdm-sdk';
3
3
  import { AttributeSelectionInfo, AttributeSelectorItemsGroup, AttributesFilterComponentsClasses, AttributesTypesGroup } from '../types';
4
4
  type Props = {
5
5
  classes?: AttributesFilterComponentsClasses;
6
6
  filters: SearchFilter[];
7
7
  onChange: (filters: SearchFilter[]) => void;
8
8
  attributesTypesGroups: AttributesTypesGroup[];
9
- attributesTypesGroupFilter?: (metadata: Metadata, attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
9
+ attributesTypesGroupFilter?: (attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
10
10
  components?: {
11
11
  ValuesEditor?: React.ElementType;
12
12
  FilterSelector?: React.ElementType;
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
- import { Metadata, SearchFilter } from '@reltio/mdm-sdk';
2
+ import { SearchFilter } from '@reltio/mdm-sdk';
3
3
  import { AttributeSelectionInfo, AttributeSelectorItemsGroup, AttributesFilterComponentsClasses, AttributesTypesGroup } from '../types';
4
4
  type Props = {
5
5
  classes?: AttributesFilterComponentsClasses;
6
6
  filters: SearchFilter[];
7
7
  onChange: (filters: SearchFilter[]) => void;
8
8
  attributesTypesGroups: AttributesTypesGroup[];
9
- attributesTypesGroupFilter?: (metadata: Metadata, attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
9
+ attributesTypesGroupFilter?: (attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
10
10
  components?: {
11
11
  ValuesEditor?: React.ElementType;
12
12
  FilterSelector?: React.ElementType;
@@ -1,6 +1,6 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import { defaultTo, pipe, prop, propEq } from 'ramda';
3
- import { getDataTypeDefinitionForFilterValue, getFilterOptionLabel, getFilterOptionsForDataTypeDefinition, validateFilter } from '@reltio/mdm-sdk';
3
+ import { checkBasicMetadataPermission, getDataTypeDefinitionForFilterValue, getFilterOptionLabel, getFilterOptionsForDataTypeDefinition, MetadataPermissions, validateFilter } from '@reltio/mdm-sdk';
4
4
  import Popover from '@mui/material/Popover';
5
5
  import IconButton from '@mui/material/IconButton';
6
6
  import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
@@ -56,9 +56,10 @@ export var ColumnFilter = function (_a) {
56
56
  };
57
57
  var filterOptionValues = (_b = filterOptionsData === null || filterOptionsData === void 0 ? void 0 : filterOptionsData.map(function (filterOption) { return filterOption.value; })) !== null && _b !== void 0 ? _b : getFilterOptionsForDataTypeDefinition(dataTypeDefinition);
58
58
  var filterOptions = filterOptionValues.map(function (value) { return ({ value: value, label: getFilterLabel(value) }); });
59
+ var hasReadPermission = checkBasicMetadataPermission(MetadataPermissions.READ, dataTypeDefinition);
59
60
  return (React.createElement("div", { ref: containerRef, className: styles.columnFilter, "data-reltio-id": "column-filter" },
60
61
  filter && (React.createElement(FilterChip, { filterValue: filter.value, filterOption: filterOptions.find(propEq('value', filter.filter)), onDelete: clearFilter, dataTypeDefinition: getFilterDataTypeDefinition(filter.filter) })),
61
- !dataTypeDefinition.masking && (React.createElement(IconButton, { className: styles.dropDownButton, onClick: openFilterPopup, disableFocusRipple: true, size: "large" },
62
+ hasReadPermission && (React.createElement(IconButton, { className: styles.dropDownButton, onClick: openFilterPopup, disableFocusRipple: true, size: "large" },
62
63
  React.createElement(ArrowDropDownIcon, null))),
63
64
  React.createElement(Popover, { PaperProps: {
64
65
  style: {
@@ -30,7 +30,7 @@ import { ErrorWrapper } from '../ErrorWrapper';
30
30
  import { withContext } from '../HOCs/withContext';
31
31
  import { useAttributeValueConfigPermissions } from '../contexts/ConfigPermissionsContext';
32
32
  import { isHighlightedErrorType, ScrollToElementContext } from '../contexts/ScrollToElementContext';
33
- import { useMdmAction, useMdmGlobalSearchRequestOptions, useMdmMetadata, useMdmModifiedEntity } from '../contexts/MdmModuleContext';
33
+ import { useMdmAction, useMdmGlobalSearchRequestOptions, useMdmMetadata, useMdmModifiedEntity, useMdmShowMasking } from '../contexts/MdmModuleContext';
34
34
  import { useScrollToAttributeError } from '../hooks/useScrollToAttributeError';
35
35
  import { useStyles } from './styles';
36
36
  var ReferenceAttributeEditor = function (props) {
@@ -48,6 +48,7 @@ var ReferenceAttributeEditor = function (props) {
48
48
  var modifiedEntity = isTempUri(entityUri) ? mdmModifiedEntity : null;
49
49
  var metadata = useMdmMetadata();
50
50
  var globalSearchRequestOptions = useMdmGlobalSearchRequestOptions(['ovOnly']);
51
+ var showMasking = useMdmShowMasking();
51
52
  var referencedEntity = getReferencedEntityFromAttrValue(attributeValue);
52
53
  var referencedRelation = getReferencedRelationFromAttrValue(attributeValue);
53
54
  var referencedEntityTypeUri = getReferencedEntityTypeUriFromAttrType(attributeType);
@@ -117,12 +118,13 @@ var ReferenceAttributeEditor = function (props) {
117
118
  }, [attributeType, attributeValue, mode, crosswalks, configCanUpdate]);
118
119
  var canCreateReferencedEntity = useMemo(function () { return configCanCreate && checkMetadataForCreate(mode, referencedEntityType); }, [mode, referencedEntityType, configCanCreate]);
119
120
  var errorMessage = getErrorMessage(referencedEntityMissedError);
121
+ var isMasked = showMasking && isAttributeHasMaskedValue(attributeValue);
120
122
  return (React.createElement(EditModeComplexAttribute, __assign({}, ownProps, { label: getLabel(label), attributeTypesList: editableAttrTypes, crosswalks: allCrosswalks, metadata: metadata }),
121
123
  React.createElement("div", { ref: ref, className: errorClassName },
122
124
  React.createElement(ErrorWrapper, { errorMessage: errorMessage },
123
125
  React.createElement(EntitySelector, { className: classnames(styles.item, (_a = {},
124
126
  _a[styles.dense] = errorMessage || (selectedEntity && isTempUri(selectedEntity.entityUri)),
125
- _a)), entity: selectedEntity || {}, entityTypesUris: entityTypesUris, globalSearchRequestOptions: globalSearchRequestOptions, mode: mode, isDisabled: !canChangeReferencedEntity || !!attributeValue.masked, onChange: onChangeEntity, onCreate: canCreateReferencedEntity ? onCreateEntity : undefined, metadata: metadata, attributeTypesSelectionStrategy: newEntityAttrTypesSelectionStrategy, isMasked: isAttributeHasMaskedValue(attributeValue) })))));
127
+ _a)), entity: selectedEntity || {}, entityTypesUris: entityTypesUris, globalSearchRequestOptions: globalSearchRequestOptions, mode: mode, isDisabled: !canChangeReferencedEntity || !!attributeValue.masked, onChange: onChangeEntity, onCreate: canCreateReferencedEntity ? onCreateEntity : undefined, metadata: metadata, attributeTypesSelectionStrategy: newEntityAttrTypesSelectionStrategy, isMasked: isMasked })))));
126
128
  };
127
129
  export default withContext(ScrollToElementContext, function (contextValue, _a) {
128
130
  var attributeValue = _a.attributeValue, attributeType = _a.attributeType;
@@ -23,7 +23,7 @@ import { EditModeAttributesList } from '../EditModeAttributesList';
23
23
  import { withContext } from '../HOCs/withContext';
24
24
  import { ConfigPermissionsContextProvider } from '../contexts/ConfigPermissionsContext';
25
25
  import { ScrollToElementContext, isHighlightedErrorType } from '../contexts/ScrollToElementContext';
26
- import { useMdmAction, useMdmAuthoringItemsByEntityType, useMdmEntity, useMdmGlobalSearchRequestOptions, useMdmInitialConnection, useMdmInitialConnectionTempEntity, useMdmModifiedEntities, useMdmModifiedEntity, useMdmProfileErrors, useMdmEntityUri } from '../contexts/MdmModuleContext';
26
+ import { useMdmAction, useMdmAuthoringItemsByEntityType, useMdmEntity, useMdmGlobalSearchRequestOptions, useMdmInitialConnection, useMdmInitialConnectionTempEntity, useMdmModifiedEntities, useMdmModifiedEntity, useMdmProfileErrors, useMdmEntityUri, useMdmShowMasking } from '../contexts/MdmModuleContext';
27
27
  import { HiddenAttributesContext } from '../contexts/HiddenAttributesContext';
28
28
  import { useScrollToAttributeError } from '../hooks/useScrollToAttributeError';
29
29
  import { useStyles } from './styles';
@@ -63,6 +63,7 @@ var RelationEditor = function (_a) {
63
63
  var profileErrors = useMdmProfileErrors();
64
64
  var authoringItems = useMdmAuthoringItemsByEntityType(mainEntity === null || mainEntity === void 0 ? void 0 : mainEntity.type);
65
65
  var mainEntityUri = useMdmEntityUri();
66
+ var showMasking = useMdmShowMasking();
66
67
  var error = getRelationEditorActiveError(connection, profileErrors);
67
68
  var allRelationEditorErrors = getAllRelationEditorActiveErrors(connection, profileErrors);
68
69
  var modifiedEntity = isTempEntity ? mdmModifiedEntity : null;
@@ -189,6 +190,7 @@ var RelationEditor = function (_a) {
189
190
  return content.entityTypes;
190
191
  }, [config, connection.parentEntityUri]);
191
192
  var isEntityHasMaskedAttrValue = pipe(values, flatten, any(isAttributeHasMaskedValue))(((_d = (_c = connection.entity) === null || _c === void 0 ? void 0 : _c.object) === null || _d === void 0 ? void 0 : _d.attributes) || {});
193
+ var isMasked = showMasking && isEntityHasMaskedAttrValue;
192
194
  return (React.createElement(React.Fragment, null,
193
195
  React.createElement("div", { className: styles.editor },
194
196
  React.createElement(Typography, { className: styles.title }, isNew ? i18n.text('Add new item') : i18n.text('Edit item')),
@@ -199,7 +201,7 @@ var RelationEditor = function (_a) {
199
201
  React.createElement(EntitySelector, { className: classnames(styles.item, (_b = {},
200
202
  _b[styles.dense] = errorMessage ||
201
203
  (connection.entity && isTempUri(connection.entity.entityUri)),
202
- _b)), entity: connection.entity || {}, entityTypesUris: getEntityTypesUris() || [], globalSearchRequestOptions: globalSearchRequestOptions, mode: mode, onChange: onChangeEntity, onCreate: canCreateNewEntity ? onCreateEntity : undefined, metadata: metadata, attributeTypesSelectionStrategy: relationEditorAttributeTypesSelectionStrategy, isMasked: isEntityHasMaskedAttrValue }))),
204
+ _b)), entity: connection.entity || {}, entityTypesUris: getEntityTypesUris() || [], globalSearchRequestOptions: globalSearchRequestOptions, mode: mode, onChange: onChangeEntity, onCreate: canCreateNewEntity ? onCreateEntity : undefined, metadata: metadata, attributeTypesSelectionStrategy: relationEditorAttributeTypesSelectionStrategy, isMasked: isMasked }))),
203
205
  React.createElement(HiddenAttributesContext.Provider, { value: emptyHiddenAttributes },
204
206
  React.createElement(EditModeAttributesList, { className: styles.item, attrTypes: firstLevelRelationAttrTypes, entity: attributeListEntity, showEmptyEditors: true, mode: mode, parentUri: relationUri, onAddAttributes: onAddAttributes, onChangeAttribute: onChangeAttribute, onDeleteAttribute: onDeleteAttribute }))))),
205
207
  React.createElement("div", { className: styles.actionButtons },
@@ -97,7 +97,8 @@ var defaultMdmValues = {
97
97
  dependentLookups: { editors: {}, structure: {}, initedTypeUris: [] },
98
98
  uiConfigLayout: [],
99
99
  uiConfigProfile: [],
100
- profileErrors: []
100
+ profileErrors: [],
101
+ showMasking: true
101
102
  };
102
103
  var defaultProps = {
103
104
  connection: { relation: defaultRelation, entity: {} },
@@ -198,6 +199,41 @@ var defaultProps = {
198
199
  },
199
200
  mode: Mode.Editing
200
201
  };
202
+ var entityWithMasking = {
203
+ uri: 'entities/uri$$123',
204
+ type: 'configuration/entityTypes/HCP',
205
+ object: {
206
+ uri: 'entities/04B1CqH',
207
+ type: 'configuration/entityTypes/Location',
208
+ attributes: {
209
+ Address: [
210
+ {
211
+ label: 'AcOEvPaVqTfzZCE Josogaf VA',
212
+ relationshipLabel: '',
213
+ value: {
214
+ AddressLine1: [
215
+ {
216
+ type: 'configuration/entityTypes/Location/attributes/AddressLine1',
217
+ ov: true,
218
+ value: 'AcOEvPaVqTfzZCE',
219
+ uri: 'entities/04B1CqH/attributes/Address/03R51aT/AddressLine1/1XFBcmPYm'
220
+ }
221
+ ],
222
+ AddressLine2: [
223
+ {
224
+ type: 'configuration/entityTypes/Location/attributes/AddressLine2',
225
+ ov: true,
226
+ masked: true,
227
+ value: 'KBmiSMlqhElLHMH',
228
+ uri: 'entities/04B1CqH/attributes/Address/03R51aT/AddressLine2/1XFBcmTp2'
229
+ }
230
+ ]
231
+ }
232
+ }
233
+ ]
234
+ }
235
+ }
236
+ };
201
237
  var setUp = function (_a) {
202
238
  var _b = _a === void 0 ? {} : _a, _c = _b.props, props = _c === void 0 ? defaultProps : _c, _d = _b.mdmValues, mdmValues = _d === void 0 ? defaultMdmValues : _d, _e = _b.error, error = _e === void 0 ? null : _e, _f = _b.hiddenAttributes, hiddenAttributes = _f === void 0 ? {} : _f;
203
239
  var user = userEvent.setup();
@@ -530,41 +566,7 @@ describe('relation editor behaviour', function () {
530
566
  case 0:
531
567
  props = __assign(__assign({}, defaultProps), { connection: {
532
568
  relation: defaultRelation,
533
- entity: {
534
- uri: 'entities/uri$$123',
535
- type: 'configuration/entityTypes/HCP',
536
- object: {
537
- uri: 'entities/04B1CqH',
538
- type: 'configuration/entityTypes/Location',
539
- attributes: {
540
- Address: [
541
- {
542
- label: 'AcOEvPaVqTfzZCE Josogaf VA',
543
- relationshipLabel: '',
544
- value: {
545
- AddressLine1: [
546
- {
547
- type: 'configuration/entityTypes/Location/attributes/AddressLine1',
548
- ov: true,
549
- value: 'AcOEvPaVqTfzZCE',
550
- uri: 'entities/04B1CqH/attributes/Address/03R51aT/AddressLine1/1XFBcmPYm'
551
- }
552
- ],
553
- AddressLine2: [
554
- {
555
- type: 'configuration/entityTypes/Location/attributes/AddressLine2',
556
- ov: true,
557
- masked: true,
558
- value: 'KBmiSMlqhElLHMH',
559
- uri: 'entities/04B1CqH/attributes/Address/03R51aT/AddressLine2/1XFBcmTp2'
560
- }
561
- ]
562
- }
563
- }
564
- ]
565
- }
566
- }
567
- }
569
+ entity: entityWithMasking
568
570
  } });
569
571
  user = setUp({ props: props }).user;
570
572
  inputs = screen.getAllByRole('textbox');
@@ -581,6 +583,31 @@ describe('relation editor behaviour', function () {
581
583
  }
582
584
  });
583
585
  }); });
586
+ it('should not add sendMasked option if configuration showMasking property is false', function () { return __awaiter(void 0, void 0, void 0, function () {
587
+ var props, mdmValues, user, inputs;
588
+ return __generator(this, function (_a) {
589
+ switch (_a.label) {
590
+ case 0:
591
+ props = __assign(__assign({}, defaultProps), { connection: {
592
+ relation: defaultRelation,
593
+ entity: entityWithMasking
594
+ } });
595
+ mdmValues = __assign(__assign({}, defaultMdmValues), { showMasking: false });
596
+ user = setUp({ props: props, mdmValues: mdmValues }).user;
597
+ inputs = screen.getAllByRole('textbox');
598
+ return [4 /*yield*/, user.click(inputs[0])];
599
+ case 1:
600
+ _a.sent();
601
+ expect(typeAheadSearch).toHaveBeenCalledWith([defaultProps.metadata.entityTypes[1]], '', {
602
+ globalFilter: '',
603
+ max: 20,
604
+ searchOptions: '',
605
+ sendMasked: false
606
+ });
607
+ return [2 /*return*/];
608
+ }
609
+ });
610
+ }); });
584
611
  describe('apply button', function () {
585
612
  var createRelation = function (value) { return (__assign(__assign({}, defaultProps.connection.relation), { object: __assign(__assign({}, defaultProps.connection.relation.object), { attributes: {
586
613
  Name: [
@@ -67,7 +67,7 @@ describe('masking/unmasking behaviour', function () {
67
67
  attributeType: defaultAttributeType,
68
68
  attributeValue: defaultAttributeValue
69
69
  };
70
- var store = {
70
+ var defaultMdmValues = {
71
71
  entity: {
72
72
  uri: 'entities/16U21B8f',
73
73
  type: 'configuration/entityTypes/HCP',
@@ -102,13 +102,15 @@ describe('masking/unmasking behaviour', function () {
102
102
  }
103
103
  ]
104
104
  },
105
+ showMasking: true,
105
106
  mode: Mode.Viewing
106
107
  };
107
- var setUp = function (props) {
108
+ var setUp = function (props, mdmValues) {
108
109
  if (props === void 0) { props = defaultProps; }
110
+ if (mdmValues === void 0) { mdmValues = defaultMdmValues; }
109
111
  var Providers = function (_a) {
110
112
  var children = _a.children;
111
- return (React.createElement(MdmModuleProvider, { values: store },
113
+ return (React.createElement(MdmModuleProvider, { values: mdmValues },
112
114
  React.createElement(MaskedAttributesProvider, null, children)));
113
115
  };
114
116
  var user = userEvent.setup();
@@ -289,4 +291,13 @@ describe('masking/unmasking behaviour', function () {
289
291
  }
290
292
  });
291
293
  }); });
294
+ it('should not render masking controls if showMasking configuration property is false', function () { return __awaiter(void 0, void 0, void 0, function () {
295
+ var mdmValues, container;
296
+ return __generator(this, function (_a) {
297
+ mdmValues = __assign(__assign({}, defaultMdmValues), { showMasking: false });
298
+ container = setUp(defaultProps, mdmValues).container;
299
+ expect(container.querySelector('.switcherWrapper')).not.toBeInTheDocument();
300
+ return [2 /*return*/];
301
+ });
302
+ }); });
292
303
  });
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
- import { Metadata, SearchFilter } from '@reltio/mdm-sdk';
2
+ import { SearchFilter } from '@reltio/mdm-sdk';
3
3
  import { AttributeSelectionInfo, AttributeSelectorItemsGroup, AttributesFilterComponentsClasses, AttributesTypesGroup } from '../types';
4
4
  type Props = {
5
5
  classes?: AttributesFilterComponentsClasses;
6
6
  filters: SearchFilter[];
7
7
  onChange: (filters: SearchFilter[]) => void;
8
8
  attributesTypesGroups: AttributesTypesGroup[];
9
- attributesTypesGroupFilter?: (metadata: Metadata, attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
9
+ attributesTypesGroupFilter?: (attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
10
10
  components?: {
11
11
  ValuesEditor?: React.ElementType;
12
12
  FilterSelector?: React.ElementType;
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
- import { Metadata, SearchFilter } from '@reltio/mdm-sdk';
2
+ import { SearchFilter } from '@reltio/mdm-sdk';
3
3
  import { AttributeSelectionInfo, AttributeSelectorItemsGroup, AttributesFilterComponentsClasses, AttributesTypesGroup } from '../types';
4
4
  type Props = {
5
5
  classes?: AttributesFilterComponentsClasses;
6
6
  filters: SearchFilter[];
7
7
  onChange: (filters: SearchFilter[]) => void;
8
8
  attributesTypesGroups: AttributesTypesGroup[];
9
- attributesTypesGroupFilter?: (metadata: Metadata, attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
9
+ attributesTypesGroupFilter?: (attributeSelectorItemsGroup: AttributeSelectorItemsGroup[]) => AttributeSelectorItemsGroup[];
10
10
  components?: {
11
11
  ValuesEditor?: React.ElementType;
12
12
  FilterSelector?: React.ElementType;
@@ -85,9 +85,10 @@ var ColumnFilter = function (_a) {
85
85
  };
86
86
  var filterOptionValues = (_b = filterOptionsData === null || filterOptionsData === void 0 ? void 0 : filterOptionsData.map(function (filterOption) { return filterOption.value; })) !== null && _b !== void 0 ? _b : (0, mdm_sdk_1.getFilterOptionsForDataTypeDefinition)(dataTypeDefinition);
87
87
  var filterOptions = filterOptionValues.map(function (value) { return ({ value: value, label: getFilterLabel(value) }); });
88
+ var hasReadPermission = (0, mdm_sdk_1.checkBasicMetadataPermission)(mdm_sdk_1.MetadataPermissions.READ, dataTypeDefinition);
88
89
  return (react_1.default.createElement("div", { ref: containerRef, className: styles.columnFilter, "data-reltio-id": "column-filter" },
89
90
  filter && (react_1.default.createElement(FilterChip_1.FilterChip, { filterValue: filter.value, filterOption: filterOptions.find((0, ramda_1.propEq)('value', filter.filter)), onDelete: clearFilter, dataTypeDefinition: getFilterDataTypeDefinition(filter.filter) })),
90
- !dataTypeDefinition.masking && (react_1.default.createElement(IconButton_1.default, { className: styles.dropDownButton, onClick: openFilterPopup, disableFocusRipple: true, size: "large" },
91
+ hasReadPermission && (react_1.default.createElement(IconButton_1.default, { className: styles.dropDownButton, onClick: openFilterPopup, disableFocusRipple: true, size: "large" },
91
92
  react_1.default.createElement(ArrowDropDown_1.default, null))),
92
93
  react_1.default.createElement(Popover_1.default, { PaperProps: {
93
94
  style: {
@@ -76,6 +76,7 @@ var ReferenceAttributeEditor = function (props) {
76
76
  var modifiedEntity = (0, mdm_sdk_1.isTempUri)(entityUri) ? mdmModifiedEntity : null;
77
77
  var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
78
78
  var globalSearchRequestOptions = (0, MdmModuleContext_1.useMdmGlobalSearchRequestOptions)(['ovOnly']);
79
+ var showMasking = (0, MdmModuleContext_1.useMdmShowMasking)();
79
80
  var referencedEntity = (0, mdm_sdk_1.getReferencedEntityFromAttrValue)(attributeValue);
80
81
  var referencedRelation = (0, mdm_sdk_1.getReferencedRelationFromAttrValue)(attributeValue);
81
82
  var referencedEntityTypeUri = (0, mdm_sdk_1.getReferencedEntityTypeUriFromAttrType)(attributeType);
@@ -145,12 +146,13 @@ var ReferenceAttributeEditor = function (props) {
145
146
  }, [attributeType, attributeValue, mode, crosswalks, configCanUpdate]);
146
147
  var canCreateReferencedEntity = (0, react_1.useMemo)(function () { return configCanCreate && (0, mdm_sdk_1.checkMetadataForCreate)(mode, referencedEntityType); }, [mode, referencedEntityType, configCanCreate]);
147
148
  var errorMessage = (0, mdm_sdk_1.getErrorMessage)(referencedEntityMissedError);
149
+ var isMasked = showMasking && (0, mdm_sdk_1.isAttributeHasMaskedValue)(attributeValue);
148
150
  return (react_1.default.createElement(EditModeComplexAttribute_1.EditModeComplexAttribute, __assign({}, ownProps, { label: (0, mdm_sdk_1.getLabel)(label), attributeTypesList: editableAttrTypes, crosswalks: allCrosswalks, metadata: metadata }),
149
151
  react_1.default.createElement("div", { ref: ref, className: errorClassName },
150
152
  react_1.default.createElement(ErrorWrapper_1.ErrorWrapper, { errorMessage: errorMessage },
151
153
  react_1.default.createElement(EntitySelector_1.EntitySelector, { className: (0, classnames_1.default)(styles.item, (_a = {},
152
154
  _a[styles.dense] = errorMessage || (selectedEntity && (0, mdm_sdk_1.isTempUri)(selectedEntity.entityUri)),
153
- _a)), entity: selectedEntity || {}, entityTypesUris: entityTypesUris, globalSearchRequestOptions: globalSearchRequestOptions, mode: mode, isDisabled: !canChangeReferencedEntity || !!attributeValue.masked, onChange: onChangeEntity, onCreate: canCreateReferencedEntity ? onCreateEntity : undefined, metadata: metadata, attributeTypesSelectionStrategy: newEntityAttrTypesSelectionStrategy, isMasked: (0, mdm_sdk_1.isAttributeHasMaskedValue)(attributeValue) })))));
155
+ _a)), entity: selectedEntity || {}, entityTypesUris: entityTypesUris, globalSearchRequestOptions: globalSearchRequestOptions, mode: mode, isDisabled: !canChangeReferencedEntity || !!attributeValue.masked, onChange: onChangeEntity, onCreate: canCreateReferencedEntity ? onCreateEntity : undefined, metadata: metadata, attributeTypesSelectionStrategy: newEntityAttrTypesSelectionStrategy, isMasked: isMasked })))));
154
156
  };
155
157
  exports.default = (0, withContext_1.withContext)(ScrollToElementContext_1.ScrollToElementContext, function (contextValue, _a) {
156
158
  var attributeValue = _a.attributeValue, attributeType = _a.attributeType;
@@ -91,6 +91,7 @@ var RelationEditor = function (_a) {
91
91
  var profileErrors = (0, MdmModuleContext_1.useMdmProfileErrors)();
92
92
  var authoringItems = (0, MdmModuleContext_1.useMdmAuthoringItemsByEntityType)(mainEntity === null || mainEntity === void 0 ? void 0 : mainEntity.type);
93
93
  var mainEntityUri = (0, MdmModuleContext_1.useMdmEntityUri)();
94
+ var showMasking = (0, MdmModuleContext_1.useMdmShowMasking)();
94
95
  var error = (0, mdm_sdk_1.getRelationEditorActiveError)(connection, profileErrors);
95
96
  var allRelationEditorErrors = (0, mdm_sdk_1.getAllRelationEditorActiveErrors)(connection, profileErrors);
96
97
  var modifiedEntity = isTempEntity ? mdmModifiedEntity : null;
@@ -217,6 +218,7 @@ var RelationEditor = function (_a) {
217
218
  return content.entityTypes;
218
219
  }, [config, connection.parentEntityUri]);
219
220
  var isEntityHasMaskedAttrValue = (0, ramda_1.pipe)(ramda_1.values, ramda_1.flatten, (0, ramda_1.any)(mdm_sdk_1.isAttributeHasMaskedValue))(((_d = (_c = connection.entity) === null || _c === void 0 ? void 0 : _c.object) === null || _d === void 0 ? void 0 : _d.attributes) || {});
221
+ var isMasked = showMasking && isEntityHasMaskedAttrValue;
220
222
  return (react_1.default.createElement(react_1.default.Fragment, null,
221
223
  react_1.default.createElement("div", { className: styles.editor },
222
224
  react_1.default.createElement(Typography_1.default, { className: styles.title }, isNew ? ui_i18n_1.default.text('Add new item') : ui_i18n_1.default.text('Edit item')),
@@ -227,7 +229,7 @@ var RelationEditor = function (_a) {
227
229
  react_1.default.createElement(EntitySelector_1.EntitySelector, { className: (0, classnames_1.default)(styles.item, (_b = {},
228
230
  _b[styles.dense] = errorMessage ||
229
231
  (connection.entity && (0, mdm_sdk_1.isTempUri)(connection.entity.entityUri)),
230
- _b)), entity: connection.entity || {}, entityTypesUris: getEntityTypesUris() || [], globalSearchRequestOptions: globalSearchRequestOptions, mode: mode, onChange: onChangeEntity, onCreate: canCreateNewEntity ? onCreateEntity : undefined, metadata: metadata, attributeTypesSelectionStrategy: mdm_sdk_1.relationEditorAttributeTypesSelectionStrategy, isMasked: isEntityHasMaskedAttrValue }))),
232
+ _b)), entity: connection.entity || {}, entityTypesUris: getEntityTypesUris() || [], globalSearchRequestOptions: globalSearchRequestOptions, mode: mode, onChange: onChangeEntity, onCreate: canCreateNewEntity ? onCreateEntity : undefined, metadata: metadata, attributeTypesSelectionStrategy: mdm_sdk_1.relationEditorAttributeTypesSelectionStrategy, isMasked: isMasked }))),
231
233
  react_1.default.createElement(HiddenAttributesContext_1.HiddenAttributesContext.Provider, { value: emptyHiddenAttributes },
232
234
  react_1.default.createElement(EditModeAttributesList_1.EditModeAttributesList, { className: styles.item, attrTypes: firstLevelRelationAttrTypes, entity: attributeListEntity, showEmptyEditors: true, mode: mode, parentUri: relationUri, onAddAttributes: onAddAttributes, onChangeAttribute: onChangeAttribute, onDeleteAttribute: onDeleteAttribute }))))),
233
235
  react_1.default.createElement("div", { className: styles.actionButtons },
@@ -102,7 +102,8 @@ var defaultMdmValues = {
102
102
  dependentLookups: { editors: {}, structure: {}, initedTypeUris: [] },
103
103
  uiConfigLayout: [],
104
104
  uiConfigProfile: [],
105
- profileErrors: []
105
+ profileErrors: [],
106
+ showMasking: true
106
107
  };
107
108
  var defaultProps = {
108
109
  connection: { relation: defaultRelation, entity: {} },
@@ -203,6 +204,41 @@ var defaultProps = {
203
204
  },
204
205
  mode: mdm_sdk_1.Mode.Editing
205
206
  };
207
+ var entityWithMasking = {
208
+ uri: 'entities/uri$$123',
209
+ type: 'configuration/entityTypes/HCP',
210
+ object: {
211
+ uri: 'entities/04B1CqH',
212
+ type: 'configuration/entityTypes/Location',
213
+ attributes: {
214
+ Address: [
215
+ {
216
+ label: 'AcOEvPaVqTfzZCE Josogaf VA',
217
+ relationshipLabel: '',
218
+ value: {
219
+ AddressLine1: [
220
+ {
221
+ type: 'configuration/entityTypes/Location/attributes/AddressLine1',
222
+ ov: true,
223
+ value: 'AcOEvPaVqTfzZCE',
224
+ uri: 'entities/04B1CqH/attributes/Address/03R51aT/AddressLine1/1XFBcmPYm'
225
+ }
226
+ ],
227
+ AddressLine2: [
228
+ {
229
+ type: 'configuration/entityTypes/Location/attributes/AddressLine2',
230
+ ov: true,
231
+ masked: true,
232
+ value: 'KBmiSMlqhElLHMH',
233
+ uri: 'entities/04B1CqH/attributes/Address/03R51aT/AddressLine2/1XFBcmTp2'
234
+ }
235
+ ]
236
+ }
237
+ }
238
+ ]
239
+ }
240
+ }
241
+ };
206
242
  var setUp = function (_a) {
207
243
  var _b = _a === void 0 ? {} : _a, _c = _b.props, props = _c === void 0 ? defaultProps : _c, _d = _b.mdmValues, mdmValues = _d === void 0 ? defaultMdmValues : _d, _e = _b.error, error = _e === void 0 ? null : _e, _f = _b.hiddenAttributes, hiddenAttributes = _f === void 0 ? {} : _f;
208
244
  var user = user_event_1.default.setup();
@@ -535,41 +571,7 @@ describe('relation editor behaviour', function () {
535
571
  case 0:
536
572
  props = __assign(__assign({}, defaultProps), { connection: {
537
573
  relation: defaultRelation,
538
- entity: {
539
- uri: 'entities/uri$$123',
540
- type: 'configuration/entityTypes/HCP',
541
- object: {
542
- uri: 'entities/04B1CqH',
543
- type: 'configuration/entityTypes/Location',
544
- attributes: {
545
- Address: [
546
- {
547
- label: 'AcOEvPaVqTfzZCE Josogaf VA',
548
- relationshipLabel: '',
549
- value: {
550
- AddressLine1: [
551
- {
552
- type: 'configuration/entityTypes/Location/attributes/AddressLine1',
553
- ov: true,
554
- value: 'AcOEvPaVqTfzZCE',
555
- uri: 'entities/04B1CqH/attributes/Address/03R51aT/AddressLine1/1XFBcmPYm'
556
- }
557
- ],
558
- AddressLine2: [
559
- {
560
- type: 'configuration/entityTypes/Location/attributes/AddressLine2',
561
- ov: true,
562
- masked: true,
563
- value: 'KBmiSMlqhElLHMH',
564
- uri: 'entities/04B1CqH/attributes/Address/03R51aT/AddressLine2/1XFBcmTp2'
565
- }
566
- ]
567
- }
568
- }
569
- ]
570
- }
571
- }
572
- }
574
+ entity: entityWithMasking
573
575
  } });
574
576
  user = setUp({ props: props }).user;
575
577
  inputs = react_2.screen.getAllByRole('textbox');
@@ -586,6 +588,31 @@ describe('relation editor behaviour', function () {
586
588
  }
587
589
  });
588
590
  }); });
591
+ it('should not add sendMasked option if configuration showMasking property is false', function () { return __awaiter(void 0, void 0, void 0, function () {
592
+ var props, mdmValues, user, inputs;
593
+ return __generator(this, function (_a) {
594
+ switch (_a.label) {
595
+ case 0:
596
+ props = __assign(__assign({}, defaultProps), { connection: {
597
+ relation: defaultRelation,
598
+ entity: entityWithMasking
599
+ } });
600
+ mdmValues = __assign(__assign({}, defaultMdmValues), { showMasking: false });
601
+ user = setUp({ props: props, mdmValues: mdmValues }).user;
602
+ inputs = react_2.screen.getAllByRole('textbox');
603
+ return [4 /*yield*/, user.click(inputs[0])];
604
+ case 1:
605
+ _a.sent();
606
+ expect(mdm_sdk_1.typeAheadSearch).toHaveBeenCalledWith([defaultProps.metadata.entityTypes[1]], '', {
607
+ globalFilter: '',
608
+ max: 20,
609
+ searchOptions: '',
610
+ sendMasked: false
611
+ });
612
+ return [2 /*return*/];
613
+ }
614
+ });
615
+ }); });
589
616
  describe('apply button', function () {
590
617
  var createRelation = function (value) { return (__assign(__assign({}, defaultProps.connection.relation), { object: __assign(__assign({}, defaultProps.connection.relation.object), { attributes: {
591
618
  Name: [
@@ -72,7 +72,7 @@ describe('masking/unmasking behaviour', function () {
72
72
  attributeType: defaultAttributeType,
73
73
  attributeValue: defaultAttributeValue
74
74
  };
75
- var store = {
75
+ var defaultMdmValues = {
76
76
  entity: {
77
77
  uri: 'entities/16U21B8f',
78
78
  type: 'configuration/entityTypes/HCP',
@@ -107,13 +107,15 @@ describe('masking/unmasking behaviour', function () {
107
107
  }
108
108
  ]
109
109
  },
110
+ showMasking: true,
110
111
  mode: mdm_sdk_1.Mode.Viewing
111
112
  };
112
- var setUp = function (props) {
113
+ var setUp = function (props, mdmValues) {
113
114
  if (props === void 0) { props = defaultProps; }
115
+ if (mdmValues === void 0) { mdmValues = defaultMdmValues; }
114
116
  var Providers = function (_a) {
115
117
  var children = _a.children;
116
- return (react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: store },
118
+ return (react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: mdmValues },
117
119
  react_1.default.createElement(MaskedAttributesContext_1.MaskedAttributesProvider, null, children)));
118
120
  };
119
121
  var user = user_event_1.default.setup();
@@ -294,4 +296,13 @@ describe('masking/unmasking behaviour', function () {
294
296
  }
295
297
  });
296
298
  }); });
299
+ it('should not render masking controls if showMasking configuration property is false', function () { return __awaiter(void 0, void 0, void 0, function () {
300
+ var mdmValues, container;
301
+ return __generator(this, function (_a) {
302
+ mdmValues = __assign(__assign({}, defaultMdmValues), { showMasking: false });
303
+ container = setUp(defaultProps, mdmValues).container;
304
+ expect(container.querySelector('.switcherWrapper')).not.toBeInTheDocument();
305
+ return [2 /*return*/];
306
+ });
307
+ }); });
297
308
  });
@@ -55,6 +55,7 @@ export type MdmModuleValuesContextProps = Partial<{
55
55
  isCollaborationEnabled: boolean;
56
56
  uiConfigLayout: Layout;
57
57
  uiConfigProfile: Profile;
58
+ showMasking: boolean;
58
59
  }>;
59
60
  export type MdmModuleActionsContextProps = Partial<{
60
61
  openSearch: (payload: SearchState) => void;
@@ -256,6 +257,7 @@ export declare const MdmModuleValuesContext: import("@fluentui/react-context-sel
256
257
  isCollaborationEnabled: boolean;
257
258
  uiConfigLayout: Layout;
258
259
  uiConfigProfile: Profile;
260
+ showMasking: boolean;
259
261
  }>>;
260
262
  export declare const MdmModuleListenersContext: import("@fluentui/react-context-selector").Context<Partial<{
261
263
  expandInvalidRelatonsListener: (callback: () => void) => (action: any) => void;
@@ -149,3 +149,4 @@ export declare const useMdmListener: <T extends keyof MdmModuleListenersContextP
149
149
  }>[T];
150
150
  export declare const useMdmHiddenAttributes: () => Record<string, string[]>;
151
151
  export declare const useMdmControlAttributes: () => string[];
152
+ export declare const useMdmShowMasking: () => boolean;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useMdmIsWorkflowEnabled = exports.useMdmIsCollaborationEnabled = exports.useMdmSearchProviderData = exports.useMdmSearchNavigationData = exports.useMdmDataTenants = exports.useMdmEnvironment = exports.useMdmTenantName = exports.useMdmTenant = exports.useMdmTenantObject = exports.useMdmUserRoles = exports.useMdmUsername = exports.useMdmUser = exports.useMdmMetadata = exports.useMdmDependentLookups = exports.useMdmLookups = exports.useMdmProfileLastLoadedTime = exports.useMdmHistoryEvent = exports.useMdmHistorySlice = exports.useMdmHistoryMode = exports.useMdmHistoryDiff = exports.useMdmIsEditableMode = exports.useMdmIsViewMode = exports.useMdmMode = exports.useMdmEntityUriWithDataTenant = exports.useMdmEntityWithDiff = exports.useMdmEntityUri = exports.useMdmEntity = exports.useMdmModifiedEntities = exports.useMdmLookupAutocomplete = exports.useMdmAttributesSortingStrategy = exports.useMdmMaxValuesInResponse = exports.useMdmAttributesPresentation = exports.useMdmDateTimeMask = exports.useMdmDateMask = exports.useMdmPivotingAttributes = exports.useMdmShowEntityId = exports.useMdmImageAttributesFieldsOrder = exports.useMdmCollaborationPath = exports.useMdmApiPath = exports.useMdmReltioPath = exports.useMdmImageServicePath = exports.useMdmWorkflowPath = exports.useMdmServicesPath = exports.useMdmDtssPath = exports.useMdmUiPath = exports.useMdmAbsoluteImagePath = exports.useMdmExportPath = exports.useMdmWorkflowEnvironmentUrl = exports.useMdmUiError = exports.useMdmAutoCloseInterval = void 0;
4
- exports.useMdmControlAttributes = exports.useMdmHiddenAttributes = exports.useMdmListener = exports.useMdmAction = exports.useMdmAuthoringItemsByEntityType = exports.useMdmGlobalSearchRequestOptions = exports.useMdmDependentLookupEditorContext = exports.useMdmRelationsDrafts = exports.useMdmAllRelationsToAddAndEdit = exports.useMdmDependentLookupsStructureNode = exports.useMdmActiveErrorsForAttributesPager = exports.useMdmDependentLookupEditorState = exports.useMdmInitialConnection = exports.useMdmInitialConnectionTempEntity = exports.useMdmModifiedEntity = exports.useMdmModifiedEntityDefaultProfilePic = exports.useMdmIsSourcesScreenEnabled = exports.useMdmProfileErrors = void 0;
4
+ exports.useMdmShowMasking = exports.useMdmControlAttributes = exports.useMdmHiddenAttributes = exports.useMdmListener = exports.useMdmAction = exports.useMdmAuthoringItemsByEntityType = exports.useMdmGlobalSearchRequestOptions = exports.useMdmDependentLookupEditorContext = exports.useMdmRelationsDrafts = exports.useMdmAllRelationsToAddAndEdit = exports.useMdmDependentLookupsStructureNode = exports.useMdmActiveErrorsForAttributesPager = exports.useMdmDependentLookupEditorState = exports.useMdmInitialConnection = exports.useMdmInitialConnectionTempEntity = exports.useMdmModifiedEntity = exports.useMdmModifiedEntityDefaultProfilePic = exports.useMdmIsSourcesScreenEnabled = exports.useMdmProfileErrors = void 0;
5
5
  var react_context_selector_1 = require("@fluentui/react-context-selector");
6
6
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
7
7
  var context_1 = require("./context");
@@ -231,3 +231,5 @@ var useMdmControlAttributes = function () {
231
231
  return useMdmModuleValuesContext(function (context) { return context.controlAttributes || emptyControlAttributes; });
232
232
  };
233
233
  exports.useMdmControlAttributes = useMdmControlAttributes;
234
+ var useMdmShowMasking = function () { return useMdmModuleValuesContext(function (context) { return context.showMasking; }); };
235
+ exports.useMdmShowMasking = useMdmShowMasking;
@@ -1,3 +1,3 @@
1
1
  export { MdmModuleProvider } from './provider';
2
- export { useMdmAutoCloseInterval, useMdmUiError, useMdmWorkflowEnvironmentUrl, useMdmExportPath, useMdmAbsoluteImagePath, useMdmUiPath, useMdmDtssPath, useMdmServicesPath, useMdmWorkflowPath, useMdmImageServicePath, useMdmReltioPath, useMdmApiPath, useMdmCollaborationPath, useMdmImageAttributesFieldsOrder, useMdmShowEntityId, useMdmPivotingAttributes, useMdmDateMask, useMdmDateTimeMask, useMdmAttributesPresentation, useMdmMaxValuesInResponse, useMdmAttributesSortingStrategy, useMdmLookupAutocomplete, useMdmModifiedEntities, useMdmEntity, useMdmEntityUri, useMdmEntityWithDiff, useMdmEntityUriWithDataTenant, useMdmMode, useMdmIsViewMode, useMdmIsEditableMode, useMdmHistoryDiff, useMdmHistoryMode, useMdmHistorySlice, useMdmHistoryEvent, useMdmProfileLastLoadedTime, useMdmLookups, useMdmDependentLookups, useMdmMetadata, useMdmUser, useMdmUsername, useMdmUserRoles, useMdmTenantObject, useMdmTenant, useMdmTenantName, useMdmEnvironment, useMdmDataTenants, useMdmSearchNavigationData, useMdmSearchProviderData, useMdmIsCollaborationEnabled, useMdmIsWorkflowEnabled, useMdmProfileErrors, useMdmRelationsDrafts, useMdmModifiedEntityDefaultProfilePic, useMdmModifiedEntity, useMdmInitialConnectionTempEntity, useMdmInitialConnection, useMdmDependentLookupEditorState, useMdmActiveErrorsForAttributesPager, useMdmDependentLookupsStructureNode, useMdmAllRelationsToAddAndEdit, useMdmDependentLookupEditorContext, useMdmGlobalSearchRequestOptions, useMdmAuthoringItemsByEntityType, useMdmAction, useMdmListener, useMdmIsSourcesScreenEnabled, useMdmHiddenAttributes, useMdmControlAttributes } from './hooks';
2
+ export { useMdmAutoCloseInterval, useMdmUiError, useMdmWorkflowEnvironmentUrl, useMdmExportPath, useMdmAbsoluteImagePath, useMdmUiPath, useMdmDtssPath, useMdmServicesPath, useMdmWorkflowPath, useMdmImageServicePath, useMdmReltioPath, useMdmApiPath, useMdmCollaborationPath, useMdmImageAttributesFieldsOrder, useMdmShowEntityId, useMdmPivotingAttributes, useMdmDateMask, useMdmDateTimeMask, useMdmAttributesPresentation, useMdmMaxValuesInResponse, useMdmAttributesSortingStrategy, useMdmLookupAutocomplete, useMdmModifiedEntities, useMdmEntity, useMdmEntityUri, useMdmEntityWithDiff, useMdmEntityUriWithDataTenant, useMdmMode, useMdmIsViewMode, useMdmIsEditableMode, useMdmHistoryDiff, useMdmHistoryMode, useMdmHistorySlice, useMdmHistoryEvent, useMdmProfileLastLoadedTime, useMdmLookups, useMdmDependentLookups, useMdmMetadata, useMdmUser, useMdmUsername, useMdmUserRoles, useMdmTenantObject, useMdmTenant, useMdmTenantName, useMdmEnvironment, useMdmDataTenants, useMdmSearchNavigationData, useMdmSearchProviderData, useMdmIsCollaborationEnabled, useMdmIsWorkflowEnabled, useMdmProfileErrors, useMdmRelationsDrafts, useMdmModifiedEntityDefaultProfilePic, useMdmModifiedEntity, useMdmInitialConnectionTempEntity, useMdmInitialConnection, useMdmDependentLookupEditorState, useMdmActiveErrorsForAttributesPager, useMdmDependentLookupsStructureNode, useMdmAllRelationsToAddAndEdit, useMdmDependentLookupEditorContext, useMdmGlobalSearchRequestOptions, useMdmAuthoringItemsByEntityType, useMdmAction, useMdmListener, useMdmIsSourcesScreenEnabled, useMdmHiddenAttributes, useMdmControlAttributes, useMdmShowMasking } from './hooks';
3
3
  export type { MdmModuleActionsContextProps, MdmModuleValuesContextProps, MdmModuleListenersContextProps } from './context';