@reltio/components 1.4.2183 → 1.4.2185

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 (51) hide show
  1. package/CollaborationItem/components/SendMessageArea/styles.d.ts +1 -1
  2. package/DateRangeEditor/styles.d.ts +1 -1
  3. package/DependentLookupEditor/styles.d.ts +1 -1
  4. package/DropDownSelector/DropDownSelector.d.ts +28 -35
  5. package/DropDownSelector/DropDownSelector.js +3 -20
  6. package/DropDownSelector/DropDownSelector.test.js +17 -0
  7. package/DropDownSelector/components/Menu/Menu.d.ts +16 -9
  8. package/DropDownSelector/components/Menu/Menu.js +2 -7
  9. package/DropDownSelector/styles.d.ts +1 -1
  10. package/EntitySelector/EntitySelector.js +24 -4
  11. package/EntitySelector/components/Group/Group.d.ts +18 -10
  12. package/EntitySelector/components/Group/Group.js +8 -9
  13. package/HOCs/withReactSelectMuiSkin/styles.d.ts +1 -1
  14. package/HierarchyNodeTitle/HierarchyNodeTitle.test.js +83 -1
  15. package/HierarchyNodeTitle/useEntityDetails.js +8 -4
  16. package/HierarchyNodeTitle/useEntityDetails.test.js +24 -9
  17. package/MetadataTypesSelector/styles.d.ts +1 -1
  18. package/MultiSelect/styles.d.ts +1 -1
  19. package/ProfileCard/components/ProfileCardPlaceholder/styles.d.ts +1 -1
  20. package/ReactSortableTree/components/NodeRendererDefault/NodeRendererDefault.d.ts +2 -2
  21. package/RelationEditor/RelationEditor.js +5 -7
  22. package/RelationEditor/RelationEditor.test.js +40 -0
  23. package/cjs/CollaborationItem/components/SendMessageArea/styles.d.ts +1 -1
  24. package/cjs/DateRangeEditor/styles.d.ts +1 -1
  25. package/cjs/DependentLookupEditor/styles.d.ts +1 -1
  26. package/cjs/DropDownSelector/DropDownSelector.d.ts +28 -35
  27. package/cjs/DropDownSelector/DropDownSelector.js +4 -21
  28. package/cjs/DropDownSelector/DropDownSelector.test.js +17 -0
  29. package/cjs/DropDownSelector/components/Menu/Menu.d.ts +16 -9
  30. package/cjs/DropDownSelector/components/Menu/Menu.js +2 -7
  31. package/cjs/DropDownSelector/styles.d.ts +1 -1
  32. package/cjs/EntitySelector/EntitySelector.js +23 -3
  33. package/cjs/EntitySelector/components/Group/Group.d.ts +18 -10
  34. package/cjs/EntitySelector/components/Group/Group.js +8 -9
  35. package/cjs/HOCs/withReactSelectMuiSkin/styles.d.ts +1 -1
  36. package/cjs/HierarchyNodeTitle/HierarchyNodeTitle.test.js +83 -1
  37. package/cjs/HierarchyNodeTitle/useEntityDetails.js +6 -2
  38. package/cjs/HierarchyNodeTitle/useEntityDetails.test.js +27 -9
  39. package/cjs/MetadataTypesSelector/styles.d.ts +1 -1
  40. package/cjs/MultiSelect/styles.d.ts +1 -1
  41. package/cjs/ProfileCard/components/ProfileCardPlaceholder/styles.d.ts +1 -1
  42. package/cjs/ReactSortableTree/components/NodeRendererDefault/NodeRendererDefault.d.ts +2 -2
  43. package/cjs/RelationEditor/RelationEditor.js +5 -7
  44. package/cjs/RelationEditor/RelationEditor.test.js +40 -0
  45. package/cjs/features/history/hooks/useHistorySlice.js +1 -1
  46. package/cjs/features/workflow/AddWorkflowDialog/styles.d.ts +1 -1
  47. package/cjs/features/workflow/WorkflowComments/styles.d.ts +1 -1
  48. package/features/history/hooks/useHistorySlice.js +1 -1
  49. package/features/workflow/AddWorkflowDialog/styles.d.ts +1 -1
  50. package/features/workflow/WorkflowComments/styles.d.ts +1 -1
  51. package/package.json +2 -2
@@ -46,13 +46,31 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
47
  }
48
48
  };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
49
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
+ var react_1 = __importDefault(require("react"));
50
54
  var react_hooks_1 = require("@testing-library/react-hooks");
51
55
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
56
+ var MdmModuleContext_1 = require("../contexts/MdmModuleContext");
52
57
  var useEntityDetails_1 = require("./useEntityDetails");
53
58
  jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { getEntity: jest.fn(), debounce: jest.fn() })); });
59
+ var entity = { uri: 'entities/123', type: 'configuration/entityTypes/HCP' };
60
+ var defaultMdmValues = {
61
+ metadata: {
62
+ entityTypes: []
63
+ }
64
+ };
54
65
  describe('useEntityDetails', function () {
55
- var entity = { uri: 'entities/123', type: 'configuration/entityTypes/HCP' };
66
+ var setUp = function (_a) {
67
+ var _b = _a === void 0 ? {} : _a, _c = _b.props, props = _c === void 0 ? entity.uri : _c, _d = _b.mdmValues, mdmValues = _d === void 0 ? defaultMdmValues : _d;
68
+ var Providers = function (_a) {
69
+ var children = _a.children;
70
+ return (react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: mdmValues }, children));
71
+ };
72
+ return (0, react_hooks_1.renderHook)(useEntityDetails_1.useEntityDetails, { initialProps: props, wrapper: Providers });
73
+ };
56
74
  beforeEach(function () {
57
75
  mdm_sdk_1.getEntity.mockResolvedValue(entity);
58
76
  mdm_sdk_1.debounce.mockImplementation(function (fn) { return jest.requireActual('@reltio/mdm-sdk').debounce(fn, 10); });
@@ -68,7 +86,7 @@ describe('useEntityDetails', function () {
68
86
  return __generator(this, function (_a) {
69
87
  switch (_a.label) {
70
88
  case 0:
71
- result = (0, react_hooks_1.renderHook)(useEntityDetails_1.useEntityDetails, { initialProps: entity.uri }).result;
89
+ result = setUp().result;
72
90
  expect(result.current.isLoading).toBe(false);
73
91
  (0, react_hooks_1.act)(function () {
74
92
  result.current.showEntityDetails();
@@ -80,7 +98,7 @@ describe('useEntityDetails', function () {
80
98
  });
81
99
  expect(result.current.isLoading).toBe(true);
82
100
  expect(result.current.entityDetails).toBe(null);
83
- expect(mdm_sdk_1.getEntity).toHaveBeenCalledWith(entity.uri);
101
+ expect(mdm_sdk_1.getEntity).toHaveBeenCalledWith(entity.uri, { options: 'sendHidden,addRefAttrUriToCrosswalk' });
84
102
  return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
85
103
  return __generator(this, function (_a) {
86
104
  return [2 /*return*/, Promise.resolve()];
@@ -99,7 +117,7 @@ describe('useEntityDetails', function () {
99
117
  return __generator(this, function (_a) {
100
118
  switch (_a.label) {
101
119
  case 0:
102
- result = (0, react_hooks_1.renderHook)(useEntityDetails_1.useEntityDetails, { initialProps: entity.uri }).result;
120
+ result = setUp().result;
103
121
  return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
104
122
  return __generator(this, function (_a) {
105
123
  result.current.showEntityDetails();
@@ -123,7 +141,7 @@ describe('useEntityDetails', function () {
123
141
  return __generator(this, function (_a) {
124
142
  switch (_a.label) {
125
143
  case 0:
126
- result = (0, react_hooks_1.renderHook)(useEntityDetails_1.useEntityDetails, { initialProps: entity.uri }).result;
144
+ result = setUp().result;
127
145
  (0, react_hooks_1.act)(function () {
128
146
  result.current.showEntityDetails();
129
147
  jest.runAllTimers();
@@ -146,7 +164,7 @@ describe('useEntityDetails', function () {
146
164
  });
147
165
  }); });
148
166
  it('should clear timeout if hideEntityDetails has been called before request started', function () {
149
- var result = (0, react_hooks_1.renderHook)(useEntityDetails_1.useEntityDetails, { initialProps: entity.uri }).result;
167
+ var result = setUp().result;
150
168
  (0, react_hooks_1.act)(function () {
151
169
  result.current.showEntityDetails();
152
170
  });
@@ -169,12 +187,12 @@ describe('useEntityDetails', function () {
169
187
  return __generator(this, function (_a) {
170
188
  switch (_a.label) {
171
189
  case 0:
172
- result = (0, react_hooks_1.renderHook)(useEntityDetails_1.useEntityDetails, { initialProps: entity.uri }).result;
190
+ result = setUp().result;
173
191
  (0, react_hooks_1.act)(function () {
174
192
  result.current.showEntityDetails();
175
193
  jest.runAllTimers();
176
194
  });
177
- expect(mdm_sdk_1.getEntity).toHaveBeenCalledWith('entities/123');
195
+ expect(mdm_sdk_1.getEntity).toHaveBeenCalledWith('entities/123', { options: 'sendHidden,addRefAttrUriToCrosswalk' });
178
196
  expect(result.current.isLoading).toBe(true);
179
197
  expect(result.current.entityDetails).toBe(null);
180
198
  (0, react_hooks_1.act)(function () {
@@ -203,7 +221,7 @@ describe('useEntityDetails', function () {
203
221
  case 0:
204
222
  warnSpy = jest.spyOn(global.console, 'warn');
205
223
  mdm_sdk_1.getEntity.mockRejectedValue({ errorCode: 403, errorMessage: 'Access is denied' });
206
- result = (0, react_hooks_1.renderHook)(useEntityDetails_1.useEntityDetails, { initialProps: entity.uri }).result;
224
+ result = setUp().result;
207
225
  (0, react_hooks_1.act)(function () {
208
226
  result.current.showEntityDetails();
209
227
  jest.runAllTimers();
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"icon" | "input" | "root" | "inputRoot" | "inputLabel" | "inputText" | "emptyInput" | "disabledInput" | "disabledPointer" | "disabledUnderline" | "popup-opened-icon">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"icon" | "input" | "root" | "inputLabel" | "inputRoot" | "inputText" | "emptyInput" | "disabledInput" | "disabledPointer" | "disabledUnderline" | "popup-opened-icon">;
@@ -2,5 +2,5 @@ type PlaceholderProps = {
2
2
  placeholder?: string;
3
3
  label?: string;
4
4
  };
5
- export declare const useStyles: (props: PlaceholderProps) => import("@mui/styles").ClassNameMap<"placeholder" | "label" | "dropdownIndicator" | "option--selected" | "clearIndicator">;
5
+ export declare const useStyles: (props: PlaceholderProps) => import("@mui/styles").ClassNameMap<"placeholder" | "label" | "dropdownIndicator" | "clearIndicator" | "option--selected">;
6
6
  export {};
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"label" | "info" | "secondaryLabel" | "thirdRow" | "@keyframes keyframes-wave" | "wave" | "avatar">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"label" | "info" | "secondaryLabel" | "avatar" | "thirdRow" | "@keyframes keyframes-wave" | "wave">;
@@ -42,9 +42,9 @@ export namespace NodeRendererDefault {
42
42
  }
43
43
  namespace propTypes {
44
44
  export let node: PropTypes.Validator<NonNullable<PropTypes.InferProps<{}>>>;
45
- let title_1: PropTypes.Requireable<NonNullable<((...args: any[]) => any) | PropTypes.ReactNodeLike>>;
45
+ let title_1: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike | ((...args: any[]) => any)>>;
46
46
  export { title_1 as title };
47
- let subtitle_1: PropTypes.Requireable<NonNullable<((...args: any[]) => any) | PropTypes.ReactNodeLike>>;
47
+ let subtitle_1: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike | ((...args: any[]) => any)>>;
48
48
  export { subtitle_1 as subtitle };
49
49
  export let path: PropTypes.Validator<NonNullable<string | number>[]>;
50
50
  export let treeIndex: PropTypes.Validator<number>;
@@ -211,12 +211,10 @@ var RelationEditor = function (_a) {
211
211
  setModifiedEntity(newEntity);
212
212
  }, [setModifiedEntity, onChangeEntity, mode, metadata]);
213
213
  var errorMessage = (0, mdm_sdk_1.getErrorMessage)(error);
214
- var getEntityTypesUris = (0, react_1.useCallback)(function () {
215
- var _a = config, content = _a.content, contentSecondLevel = _a.contentSecondLevel;
216
- if (contentSecondLevel && connection.parentEntityUri) {
217
- return contentSecondLevel.entityTypes;
218
- }
219
- return content.entityTypes;
214
+ var entityTypesUris = (0, react_1.useMemo)(function () {
215
+ var _a;
216
+ var _b = config, content = _b.content, contentSecondLevel = _b.contentSecondLevel;
217
+ return ((_a = (contentSecondLevel && connection.parentEntityUri ? contentSecondLevel.entityTypes : content.entityTypes)) !== null && _a !== void 0 ? _a : []);
220
218
  }, [config, connection.parentEntityUri]);
221
219
  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) || {});
222
220
  var isMasked = showMasking && isEntityHasMaskedAttrValue;
@@ -231,7 +229,7 @@ var RelationEditor = function (_a) {
231
229
  react_1.default.createElement(EntitySelector_1.EntitySelector, { className: (0, classnames_1.default)(styles.item, (_b = {},
232
230
  _b[styles.dense] = errorMessage ||
233
231
  (connection.entity && (0, mdm_sdk_1.isTempUri)(connection.entity.entityUri)),
234
- _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 })))),
232
+ _b)), entity: connection.entity || {}, entityTypesUris: entityTypesUris, globalSearchRequestOptions: globalSearchRequestOptions, mode: mode, onChange: onChangeEntity, onCreate: canCreateNewEntity ? onCreateEntity : undefined, metadata: metadata, attributeTypesSelectionStrategy: mdm_sdk_1.relationEditorAttributeTypesSelectionStrategy, isMasked: isMasked })))),
235
233
  react_1.default.createElement(HiddenAttributesContext_1.HiddenAttributesContext.Provider, { value: emptyHiddenAttributes },
236
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 }))))),
237
235
  react_1.default.createElement("div", { className: styles.actionButtons },
@@ -53,6 +53,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
53
53
  var react_1 = __importDefault(require("react"));
54
54
  var react_2 = require("@testing-library/react");
55
55
  var user_event_1 = __importDefault(require("@testing-library/user-event"));
56
+ var ramda_1 = require("ramda");
56
57
  var AdapterMoment_1 = require("@mui/x-date-pickers/AdapterMoment");
57
58
  var LocalizationProvider_1 = require("@mui/x-date-pickers/LocalizationProvider");
58
59
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
@@ -483,6 +484,45 @@ describe('relation editor behaviour', function () {
483
484
  }
484
485
  });
485
486
  }); });
487
+ it('should hide create button when user lacks metadata permissions', function () { return __awaiter(void 0, void 0, void 0, function () {
488
+ var props, user, inputs;
489
+ return __generator(this, function (_a) {
490
+ switch (_a.label) {
491
+ case 0:
492
+ props = (0, ramda_1.assocPath)(['metadata', 'entityTypes', 1, 'access'], ['READ', 'UPDATE', 'INITIATE_CHANGE_REQUEST'], defaultProps);
493
+ user = setUp({ props: props }).user;
494
+ inputs = react_2.screen.getAllByRole('combobox');
495
+ return [4 /*yield*/, user.click(inputs[0])];
496
+ case 1:
497
+ _a.sent();
498
+ expect(react_2.screen.queryByText('Create new Address')).not.toBeInTheDocument();
499
+ return [2 /*return*/];
500
+ }
501
+ });
502
+ }); });
503
+ it('should hide create button for one of the entity types when user lacks metadata permissions', function () { return __awaiter(void 0, void 0, void 0, function () {
504
+ var props, user, inputs;
505
+ return __generator(this, function (_a) {
506
+ switch (_a.label) {
507
+ case 0:
508
+ props = (0, ramda_1.pipe)((0, ramda_1.assocPath)(['metadata', 'entityTypes', 1, 'access'], ['READ', 'UPDATE', 'INITIATE_CHANGE_REQUEST']), (0, ramda_1.assocPath)(['config', 'content'], {
509
+ entityTypes: ['configuration/entityTypes/Location', 'configuration/entityTypes/HCA'],
510
+ outRelations: [
511
+ { uri: 'configuration/relationTypes/HasAddress', label: '{directionalLabel}' },
512
+ { uri: 'configuration/relationTypes/InternalHCAtoHCA', label: '{directionalLabel}' }
513
+ ]
514
+ }))(defaultProps);
515
+ user = setUp({ props: props }).user;
516
+ inputs = react_2.screen.getAllByRole('combobox');
517
+ return [4 /*yield*/, user.click(inputs[1])];
518
+ case 1:
519
+ _a.sent();
520
+ expect(react_2.screen.queryByText('Create new Address')).not.toBeInTheDocument();
521
+ expect(react_2.screen.getByText('Create new HCA')).toBeInTheDocument();
522
+ return [2 /*return*/];
523
+ }
524
+ });
525
+ }); });
486
526
  it('should show "create entity" button if mode is suggesting, but main entity uri is not temporary', function () { return __awaiter(void 0, void 0, void 0, function () {
487
527
  var props, mdmValues, user, inputs;
488
528
  return __generator(this, function (_a) {
@@ -28,7 +28,7 @@ var useHistorySlice = function (_a) {
28
28
  if (entityUri) {
29
29
  if (historyEvent) {
30
30
  setIsLoading(true);
31
- var entityOptions = (0, mdm_sdk_1.addGetEntityMaskingOptions)(metadata, showMasking);
31
+ var entityOptions = (0, mdm_sdk_1.addGetEntityMaskingOptions)(metadata, { showMasking: showMasking });
32
32
  safePromise(Promise.all([
33
33
  (0, mdm_sdk_1.getEntityTimeSlice)(entityUri, aStamp, entityOptions),
34
34
  bStamp && bStamp !== 1
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"content" | "title" | "footer" | "input" | "select" | "inputRoot" | "asterisk" | "cancelButton" | "inputLabelRoot" | "popoverPaper" | "simpleDropDownSelector">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"content" | "title" | "footer" | "input" | "select" | "asterisk" | "inputRoot" | "cancelButton" | "inputLabelRoot" | "popoverPaper" | "simpleDropDownSelector">;
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"container" | "title" | "commentsContainer" | "filledInputRoot" | "modeSwitcherWrapper" | "sendButton">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"container" | "title" | "filledInputRoot" | "commentsContainer" | "modeSwitcherWrapper" | "sendButton">;
@@ -25,7 +25,7 @@ export var useHistorySlice = function (_a) {
25
25
  if (entityUri) {
26
26
  if (historyEvent) {
27
27
  setIsLoading(true);
28
- var entityOptions = addGetEntityMaskingOptions(metadata, showMasking);
28
+ var entityOptions = addGetEntityMaskingOptions(metadata, { showMasking: showMasking });
29
29
  safePromise(Promise.all([
30
30
  getEntityTimeSlice(entityUri, aStamp, entityOptions),
31
31
  bStamp && bStamp !== 1
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"content" | "title" | "footer" | "input" | "select" | "inputRoot" | "asterisk" | "cancelButton" | "inputLabelRoot" | "popoverPaper" | "simpleDropDownSelector">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"content" | "title" | "footer" | "input" | "select" | "asterisk" | "inputRoot" | "cancelButton" | "inputLabelRoot" | "popoverPaper" | "simpleDropDownSelector">;
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"container" | "title" | "commentsContainer" | "filledInputRoot" | "modeSwitcherWrapper" | "sendButton">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"container" | "title" | "filledInputRoot" | "commentsContainer" | "modeSwitcherWrapper" | "sendButton">;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.2183",
3
+ "version": "1.4.2185",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./index.js",
@@ -11,7 +11,7 @@
11
11
  "@fluentui/react-context-selector": "^9.1.26",
12
12
  "@googlemaps/markerclusterer": "^2.5.3",
13
13
  "@react-sigma/core": "3.4.0",
14
- "@reltio/mdm-sdk": "^1.4.1993",
14
+ "@reltio/mdm-sdk": "^1.4.1994",
15
15
  "@vis.gl/react-google-maps": "^1.3.0",
16
16
  "d3-cloud": "^1.2.5",
17
17
  "d3-geo": "^2.0.1",