@reltio/components 1.4.2077 → 1.4.2079

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.
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
- import { useStyles } from './styles';
2
+ import styles from './BlobRenderer.module.css';
3
3
  export var BlobRenderer = function (_a) {
4
4
  var value = _a.value;
5
- var styles = useStyles();
6
5
  return (React.createElement("div", { "data-reltio-id": "blob-renderer", className: styles.blobWrapper, onScroll: function (e) { return e.stopPropagation(); } }, value));
7
6
  };
@@ -0,0 +1,9 @@
1
+ const styles = {"blobWrapper":"BlobRenderer-blobWrapper--W5rww"};
2
+ if (typeof document !== 'undefined') {
3
+ const head = document.head || document.getElementsByTagName('head')[0]
4
+ const style = document.createElement('style');
5
+ style.type = 'text/css'
6
+ style.innerHTML = `.BlobRenderer-blobWrapper--W5rww{box-sizing:border-box;max-height:100px;overflow-wrap:break-word;overflow-x:hidden;overflow-y:auto;padding:15px 25px 0;position:relative;white-space:pre}`;
7
+ head.appendChild(style);
8
+ }
9
+ export default styles;
@@ -49,11 +49,11 @@ import React from 'react';
49
49
  import { dissoc } from 'ramda';
50
50
  import { act, render, screen } from '@testing-library/react';
51
51
  import userEvent from '@testing-library/user-event';
52
- import { Mode, getUnmaskedAttributeValue } from '@reltio/mdm-sdk';
52
+ import { Mode, getUnmaskedAttributeValue, createActivity } from '@reltio/mdm-sdk';
53
53
  import { MaskedAttributesProvider } from '../contexts/MaskedAttributesContext';
54
54
  import { MdmModuleProvider } from '../contexts/MdmModuleContext';
55
55
  import { SimpleAttribute } from './SimpleAttribute';
56
- jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { getUnmaskedAttributeValue: jest.fn() })); });
56
+ jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { getUnmaskedAttributeValue: jest.fn(), createActivity: jest.fn() })); });
57
57
  describe('masking/unmasking behaviour', function () {
58
58
  beforeAll(function () {
59
59
  getUnmaskedAttributeValue.mockResolvedValue({
@@ -67,11 +67,48 @@ describe('masking/unmasking behaviour', function () {
67
67
  attributeType: defaultAttributeType,
68
68
  attributeValue: defaultAttributeValue
69
69
  };
70
+ var store = {
71
+ entity: {
72
+ uri: 'entities/16U21B8f',
73
+ type: 'configuration/entityTypes/HCP',
74
+ label: 'Test Entity'
75
+ },
76
+ metadata: {
77
+ entityTypes: [
78
+ {
79
+ uri: 'configuration/entityTypes/HCP',
80
+ attributes: [
81
+ {
82
+ uri: 'configuration/entityTypes/HCP/attributes/Nested',
83
+ name: 'Name',
84
+ label: 'Nested',
85
+ type: 'Nested',
86
+ attributes: [
87
+ {
88
+ uri: 'configuration/entityTypes/HCP/attributes/Nested/attributes/TextField',
89
+ label: 'Name Label',
90
+ type: 'String',
91
+ name: 'Name'
92
+ }
93
+ ]
94
+ },
95
+ {
96
+ uri: 'configuration/entityTypes/HCP/attributes/RDMLookup',
97
+ type: 'Reference',
98
+ label: 'RDMLookup Label',
99
+ name: 'RDMLookup'
100
+ }
101
+ ]
102
+ }
103
+ ]
104
+ },
105
+ mode: Mode.Viewing
106
+ };
70
107
  var setUp = function (props) {
71
108
  if (props === void 0) { props = defaultProps; }
72
109
  var Providers = function (_a) {
73
110
  var children = _a.children;
74
- return (React.createElement(MdmModuleProvider, { values: { mode: Mode.Viewing } },
111
+ return (React.createElement(MdmModuleProvider, { values: store },
75
112
  React.createElement(MaskedAttributesProvider, null, children)));
76
113
  };
77
114
  var user = userEvent.setup();
@@ -79,6 +116,9 @@ describe('masking/unmasking behaviour', function () {
79
116
  wrapper: Providers
80
117
  }));
81
118
  };
119
+ afterEach(function () {
120
+ jest.clearAllMocks();
121
+ });
82
122
  it('should not render MaskingSwitcher if attribute should not be masked', function () {
83
123
  var attributeType = dissoc('masking', defaultAttributeType);
84
124
  var container = setUp(__assign(__assign({}, defaultProps), { attributeType: attributeType })).container;
@@ -146,7 +186,7 @@ describe('masking/unmasking behaviour', function () {
146
186
  return __generator(this, function (_b) {
147
187
  switch (_b.label) {
148
188
  case 0:
149
- getUnmaskedAttributeValue.mockImplementation(function () { return new Promise(function (resolve) { return (resolveGetUnmaskedAttributeValue = resolve); }); });
189
+ getUnmaskedAttributeValue.mockImplementationOnce(function () { return new Promise(function (resolve) { return (resolveGetUnmaskedAttributeValue = resolve); }); });
150
190
  _a = setUp(), container = _a.container, user = _a.user;
151
191
  switcher = container.querySelector('.switcherWrapper');
152
192
  return [4 /*yield*/, user.click(switcher)];
@@ -184,4 +224,69 @@ describe('masking/unmasking behaviour', function () {
184
224
  setUp({ attributeType: attributeType, attributeValue: attributeValue });
185
225
  expect(screen.getByText('**********0000')).toBeInTheDocument();
186
226
  });
227
+ it('should call createActivity with correct arguments when MaskingSwitcher is clicked to unmask', function () { return __awaiter(void 0, void 0, void 0, function () {
228
+ var attributeType, attributeValue, _a, container, user, switcher;
229
+ return __generator(this, function (_b) {
230
+ switch (_b.label) {
231
+ case 0:
232
+ attributeType = __assign(__assign({}, defaultAttributeType), { uri: 'configuration/entityTypes/HCP/attributes/Nested/attributes/TextField' });
233
+ attributeValue = __assign(__assign({}, defaultAttributeValue), { uri: 'entities/02ZRRE9/attributes/Nested/1bgW4Wj3/TextField/1bgW4nm5' });
234
+ _a = setUp({ attributeType: attributeType, attributeValue: attributeValue }), container = _a.container, user = _a.user;
235
+ switcher = container.querySelector('.switcherWrapper');
236
+ return [4 /*yield*/, user.click(switcher)];
237
+ case 1:
238
+ _b.sent();
239
+ expect(createActivity).toHaveBeenCalledWith({
240
+ label: 'ATTRIBUTE_UNMASKED',
241
+ description: JSON.stringify({
242
+ uri: 'entities/16U21B8f',
243
+ label: 'Test Entity: Nested / Name Label - Masked value'
244
+ }),
245
+ items: [{ objectUri: 'entities/16U21B8f' }]
246
+ });
247
+ return [2 /*return*/];
248
+ }
249
+ });
250
+ }); });
251
+ it('should not call createActivity if attribute is already unmasked', function () { return __awaiter(void 0, void 0, void 0, function () {
252
+ var unmaskedAttributeValue, _a, container, user, switcher;
253
+ return __generator(this, function (_b) {
254
+ switch (_b.label) {
255
+ case 0:
256
+ unmaskedAttributeValue = {
257
+ value: 'Unmasked value',
258
+ uri: defaultAttributeValue.uri
259
+ };
260
+ getUnmaskedAttributeValue.mockResolvedValue(unmaskedAttributeValue);
261
+ _a = setUp(), container = _a.container, user = _a.user;
262
+ switcher = container.querySelector('.switcherWrapper');
263
+ return [4 /*yield*/, user.click(switcher)];
264
+ case 1:
265
+ _b.sent();
266
+ return [4 /*yield*/, user.click(switcher)];
267
+ case 2:
268
+ _b.sent();
269
+ expect(createActivity).toHaveBeenCalledTimes(1);
270
+ return [2 /*return*/];
271
+ }
272
+ });
273
+ }); });
274
+ it('should log an error if createActivity request fails', function () { return __awaiter(void 0, void 0, void 0, function () {
275
+ var consoleErrorSpy, _a, container, user, switcher;
276
+ return __generator(this, function (_b) {
277
+ switch (_b.label) {
278
+ case 0:
279
+ consoleErrorSpy = jest.spyOn(console, 'warn').mockImplementation();
280
+ createActivity.mockRejectedValue(new Error('API Error'));
281
+ _a = setUp(), container = _a.container, user = _a.user;
282
+ switcher = container.querySelector('.switcherWrapper');
283
+ return [4 /*yield*/, user.click(switcher)];
284
+ case 1:
285
+ _b.sent();
286
+ expect(consoleErrorSpy).toHaveBeenCalledWith(new Error('API Error'));
287
+ consoleErrorSpy.mockRestore();
288
+ return [2 /*return*/];
289
+ }
290
+ });
291
+ }); });
187
292
  });
@@ -5,10 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BlobRenderer = void 0;
7
7
  var react_1 = __importDefault(require("react"));
8
- var styles_1 = require("./styles");
8
+ var BlobRenderer_module_css_1 = __importDefault(require("./BlobRenderer.module.css"));
9
9
  var BlobRenderer = function (_a) {
10
10
  var value = _a.value;
11
- var styles = (0, styles_1.useStyles)();
12
- return (react_1.default.createElement("div", { "data-reltio-id": "blob-renderer", className: styles.blobWrapper, onScroll: function (e) { return e.stopPropagation(); } }, value));
11
+ return (react_1.default.createElement("div", { "data-reltio-id": "blob-renderer", className: BlobRenderer_module_css_1.default.blobWrapper, onScroll: function (e) { return e.stopPropagation(); } }, value));
13
12
  };
14
13
  exports.BlobRenderer = BlobRenderer;
@@ -0,0 +1,9 @@
1
+ const styles = {"blobWrapper":"BlobRenderer-blobWrapper--W5rww"};
2
+ if (typeof document !== 'undefined') {
3
+ const head = document.head || document.getElementsByTagName('head')[0]
4
+ const style = document.createElement('style');
5
+ style.type = 'text/css'
6
+ style.innerHTML = `.BlobRenderer-blobWrapper--W5rww{box-sizing:border-box;max-height:100px;overflow-wrap:break-word;overflow-x:hidden;overflow-y:auto;padding:15px 25px 0;position:relative;white-space:pre}`;
7
+ head.appendChild(style);
8
+ }
9
+ module.exports = styles;
@@ -58,7 +58,7 @@ var mdm_sdk_1 = require("@reltio/mdm-sdk");
58
58
  var MaskedAttributesContext_1 = require("../contexts/MaskedAttributesContext");
59
59
  var MdmModuleContext_1 = require("../contexts/MdmModuleContext");
60
60
  var SimpleAttribute_1 = require("./SimpleAttribute");
61
- jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { getUnmaskedAttributeValue: jest.fn() })); });
61
+ jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { getUnmaskedAttributeValue: jest.fn(), createActivity: jest.fn() })); });
62
62
  describe('masking/unmasking behaviour', function () {
63
63
  beforeAll(function () {
64
64
  mdm_sdk_1.getUnmaskedAttributeValue.mockResolvedValue({
@@ -72,11 +72,48 @@ describe('masking/unmasking behaviour', function () {
72
72
  attributeType: defaultAttributeType,
73
73
  attributeValue: defaultAttributeValue
74
74
  };
75
+ var store = {
76
+ entity: {
77
+ uri: 'entities/16U21B8f',
78
+ type: 'configuration/entityTypes/HCP',
79
+ label: 'Test Entity'
80
+ },
81
+ metadata: {
82
+ entityTypes: [
83
+ {
84
+ uri: 'configuration/entityTypes/HCP',
85
+ attributes: [
86
+ {
87
+ uri: 'configuration/entityTypes/HCP/attributes/Nested',
88
+ name: 'Name',
89
+ label: 'Nested',
90
+ type: 'Nested',
91
+ attributes: [
92
+ {
93
+ uri: 'configuration/entityTypes/HCP/attributes/Nested/attributes/TextField',
94
+ label: 'Name Label',
95
+ type: 'String',
96
+ name: 'Name'
97
+ }
98
+ ]
99
+ },
100
+ {
101
+ uri: 'configuration/entityTypes/HCP/attributes/RDMLookup',
102
+ type: 'Reference',
103
+ label: 'RDMLookup Label',
104
+ name: 'RDMLookup'
105
+ }
106
+ ]
107
+ }
108
+ ]
109
+ },
110
+ mode: mdm_sdk_1.Mode.Viewing
111
+ };
75
112
  var setUp = function (props) {
76
113
  if (props === void 0) { props = defaultProps; }
77
114
  var Providers = function (_a) {
78
115
  var children = _a.children;
79
- return (react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: { mode: mdm_sdk_1.Mode.Viewing } },
116
+ return (react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: store },
80
117
  react_1.default.createElement(MaskedAttributesContext_1.MaskedAttributesProvider, null, children)));
81
118
  };
82
119
  var user = user_event_1.default.setup();
@@ -84,6 +121,9 @@ describe('masking/unmasking behaviour', function () {
84
121
  wrapper: Providers
85
122
  }));
86
123
  };
124
+ afterEach(function () {
125
+ jest.clearAllMocks();
126
+ });
87
127
  it('should not render MaskingSwitcher if attribute should not be masked', function () {
88
128
  var attributeType = (0, ramda_1.dissoc)('masking', defaultAttributeType);
89
129
  var container = setUp(__assign(__assign({}, defaultProps), { attributeType: attributeType })).container;
@@ -151,7 +191,7 @@ describe('masking/unmasking behaviour', function () {
151
191
  return __generator(this, function (_b) {
152
192
  switch (_b.label) {
153
193
  case 0:
154
- mdm_sdk_1.getUnmaskedAttributeValue.mockImplementation(function () { return new Promise(function (resolve) { return (resolveGetUnmaskedAttributeValue = resolve); }); });
194
+ mdm_sdk_1.getUnmaskedAttributeValue.mockImplementationOnce(function () { return new Promise(function (resolve) { return (resolveGetUnmaskedAttributeValue = resolve); }); });
155
195
  _a = setUp(), container = _a.container, user = _a.user;
156
196
  switcher = container.querySelector('.switcherWrapper');
157
197
  return [4 /*yield*/, user.click(switcher)];
@@ -189,4 +229,69 @@ describe('masking/unmasking behaviour', function () {
189
229
  setUp({ attributeType: attributeType, attributeValue: attributeValue });
190
230
  expect(react_2.screen.getByText('**********0000')).toBeInTheDocument();
191
231
  });
232
+ it('should call createActivity with correct arguments when MaskingSwitcher is clicked to unmask', function () { return __awaiter(void 0, void 0, void 0, function () {
233
+ var attributeType, attributeValue, _a, container, user, switcher;
234
+ return __generator(this, function (_b) {
235
+ switch (_b.label) {
236
+ case 0:
237
+ attributeType = __assign(__assign({}, defaultAttributeType), { uri: 'configuration/entityTypes/HCP/attributes/Nested/attributes/TextField' });
238
+ attributeValue = __assign(__assign({}, defaultAttributeValue), { uri: 'entities/02ZRRE9/attributes/Nested/1bgW4Wj3/TextField/1bgW4nm5' });
239
+ _a = setUp({ attributeType: attributeType, attributeValue: attributeValue }), container = _a.container, user = _a.user;
240
+ switcher = container.querySelector('.switcherWrapper');
241
+ return [4 /*yield*/, user.click(switcher)];
242
+ case 1:
243
+ _b.sent();
244
+ expect(mdm_sdk_1.createActivity).toHaveBeenCalledWith({
245
+ label: 'ATTRIBUTE_UNMASKED',
246
+ description: JSON.stringify({
247
+ uri: 'entities/16U21B8f',
248
+ label: 'Test Entity: Nested / Name Label - Masked value'
249
+ }),
250
+ items: [{ objectUri: 'entities/16U21B8f' }]
251
+ });
252
+ return [2 /*return*/];
253
+ }
254
+ });
255
+ }); });
256
+ it('should not call createActivity if attribute is already unmasked', function () { return __awaiter(void 0, void 0, void 0, function () {
257
+ var unmaskedAttributeValue, _a, container, user, switcher;
258
+ return __generator(this, function (_b) {
259
+ switch (_b.label) {
260
+ case 0:
261
+ unmaskedAttributeValue = {
262
+ value: 'Unmasked value',
263
+ uri: defaultAttributeValue.uri
264
+ };
265
+ mdm_sdk_1.getUnmaskedAttributeValue.mockResolvedValue(unmaskedAttributeValue);
266
+ _a = setUp(), container = _a.container, user = _a.user;
267
+ switcher = container.querySelector('.switcherWrapper');
268
+ return [4 /*yield*/, user.click(switcher)];
269
+ case 1:
270
+ _b.sent();
271
+ return [4 /*yield*/, user.click(switcher)];
272
+ case 2:
273
+ _b.sent();
274
+ expect(mdm_sdk_1.createActivity).toHaveBeenCalledTimes(1);
275
+ return [2 /*return*/];
276
+ }
277
+ });
278
+ }); });
279
+ it('should log an error if createActivity request fails', function () { return __awaiter(void 0, void 0, void 0, function () {
280
+ var consoleErrorSpy, _a, container, user, switcher;
281
+ return __generator(this, function (_b) {
282
+ switch (_b.label) {
283
+ case 0:
284
+ consoleErrorSpy = jest.spyOn(console, 'warn').mockImplementation();
285
+ mdm_sdk_1.createActivity.mockRejectedValue(new Error('API Error'));
286
+ _a = setUp(), container = _a.container, user = _a.user;
287
+ switcher = container.querySelector('.switcherWrapper');
288
+ return [4 /*yield*/, user.click(switcher)];
289
+ case 1:
290
+ _b.sent();
291
+ expect(consoleErrorSpy).toHaveBeenCalledWith(new Error('API Error'));
292
+ consoleErrorSpy.mockRestore();
293
+ return [2 /*return*/];
294
+ }
295
+ });
296
+ }); });
192
297
  });
@@ -0,0 +1,6 @@
1
+ import { Metadata, Entity, SimpleAttributeValue } from '@reltio/mdm-sdk';
2
+ export declare const sendUnmaskActivity: ({ attributeValue, entity, metadata }: {
3
+ attributeValue: SimpleAttributeValue;
4
+ entity: Entity;
5
+ metadata: Metadata;
6
+ }) => Promise<void>;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.sendUnmaskActivity = void 0;
40
+ var mdm_sdk_1 = require("@reltio/mdm-sdk");
41
+ var sendUnmaskActivity = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
42
+ var isRelationAttribute, attributeTypeUri, rootUri, hierarchy, path, label, error_1;
43
+ var attributeValue = _b.attributeValue, entity = _b.entity, metadata = _b.metadata;
44
+ return __generator(this, function (_c) {
45
+ switch (_c.label) {
46
+ case 0:
47
+ _c.trys.push([0, 2, , 3]);
48
+ isRelationAttribute = (0, mdm_sdk_1.isRelationUri)(attributeValue.uri);
49
+ attributeTypeUri = isRelationAttribute
50
+ ? attributeValue.type
51
+ : (0, mdm_sdk_1.getAttributeTypeUriByValueUri)(attributeValue.uri, entity.type);
52
+ rootUri = (0, mdm_sdk_1.getBaseUri)(attributeTypeUri);
53
+ hierarchy = (0, mdm_sdk_1.getAttributeTypesHierarchyByUri)(metadata, attributeTypeUri, rootUri);
54
+ path = hierarchy.map(function (type) { return type.label; }).join(' / ');
55
+ label = "".concat(entity.label, ":").concat(isRelationAttribute ? ' Relationship' : '', " ").concat(path, " - ").concat(attributeValue.value);
56
+ return [4 /*yield*/, (0, mdm_sdk_1.createActivity)({
57
+ label: mdm_sdk_1.ACTIVITY_TYPES.attributeUnmasked,
58
+ description: JSON.stringify({ uri: entity.uri, label: label }),
59
+ items: [{ objectUri: entity.uri }]
60
+ })];
61
+ case 1:
62
+ _c.sent();
63
+ return [3 /*break*/, 3];
64
+ case 2:
65
+ error_1 = _c.sent();
66
+ console.warn(error_1);
67
+ return [3 /*break*/, 3];
68
+ case 3: return [2 /*return*/];
69
+ }
70
+ });
71
+ }); };
72
+ exports.sendUnmaskActivity = sendUnmaskActivity;
@@ -1,14 +1,15 @@
1
- import { AttributeTypeForMasking, SimpleAttributeValue } from '@reltio/mdm-sdk';
1
+ import { AttributeTypeForMasking, Entity, SimpleAttributeValue } from '@reltio/mdm-sdk';
2
2
  type Props = {
3
3
  attributeValue: SimpleAttributeValue;
4
4
  attributeType: AttributeTypeForMasking;
5
+ entity?: Entity;
5
6
  };
6
- export declare const useMaskedAttribute: ({ attributeType, attributeValue }: Props) => {
7
+ export declare const useMaskedAttribute: ({ attributeType, attributeValue, entity: entityProp }: Props) => {
7
8
  isUnmaskingNeeded: any;
8
9
  isMasked: boolean;
9
10
  toggleMasking: () => void;
10
11
  isUnmasking: boolean;
11
- unmask: () => Promise<void> | Promise<SimpleAttributeValue>;
12
+ unmask: () => Promise<void>;
12
13
  attributeValue: SimpleAttributeValue;
13
14
  };
14
15
  export {};
@@ -1,21 +1,75 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
2
38
  Object.defineProperty(exports, "__esModule", { value: true });
3
39
  exports.useMaskedAttribute = void 0;
4
40
  var react_1 = require("react");
5
41
  var MdmModuleContext_1 = require("../../contexts/MdmModuleContext");
42
+ var EntityContext_1 = require("../../contexts/EntityContext");
6
43
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
7
44
  var MaskedAttributesContext_1 = require("../../contexts/MaskedAttributesContext");
45
+ var helpers_1 = require("./helpers");
8
46
  var useMaskedAttribute = function (_a) {
9
- var attributeType = _a.attributeType, attributeValue = _a.attributeValue;
47
+ var attributeType = _a.attributeType, attributeValue = _a.attributeValue, entityProp = _a.entity;
10
48
  var isViewMode = (0, MdmModuleContext_1.useMdmIsViewMode)();
11
49
  var unmaskAttributeValue = (0, MaskedAttributesContext_1.useUnmaskAttributeValue)();
12
50
  var maskAttributeValue = (0, MaskedAttributesContext_1.useMaskAttributeValue)();
51
+ var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
52
+ var entityFromContext = (0, react_1.useContext)(EntityContext_1.EntityContext);
53
+ var mainEntity = (0, MdmModuleContext_1.useMdmEntity)();
54
+ var entity = entityProp || entityFromContext || mainEntity;
13
55
  var canUnmaskAttribute = (0, mdm_sdk_1.checkCanUnmaskAttribute)(attributeType);
14
56
  var _b = (0, MaskedAttributesContext_1.useUnmaskedAttributeValue)(attributeValue.uri) || {}, unmaskedAttributeValue = _b.attributeValue, _c = _b.isUnmasked, isUnmasked = _c === void 0 ? false : _c, _d = _b.loading, loading = _d === void 0 ? false : _d;
15
57
  var isUnmaskingNeeded = unmaskAttributeValue && maskAttributeValue && !!attributeType.masking && isViewMode && canUnmaskAttribute;
16
- var unmask = (0, react_1.useCallback)(function () {
17
- return isUnmaskingNeeded ? unmaskAttributeValue(attributeValue.uri) : Promise.resolve();
18
- }, [unmaskAttributeValue, attributeValue.uri, isUnmaskingNeeded]);
58
+ var unmask = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
59
+ return __generator(this, function (_a) {
60
+ switch (_a.label) {
61
+ case 0:
62
+ if (!isUnmaskingNeeded) return [3 /*break*/, 2];
63
+ return [4 /*yield*/, unmaskAttributeValue(attributeValue.uri)];
64
+ case 1:
65
+ _a.sent();
66
+ (0, helpers_1.sendUnmaskActivity)({ attributeValue: attributeValue, entity: entity, metadata: metadata });
67
+ return [3 /*break*/, 3];
68
+ case 2: return [2 /*return*/, Promise.resolve()];
69
+ case 3: return [2 /*return*/];
70
+ }
71
+ });
72
+ }); }, [unmaskAttributeValue, attributeValue, entity, metadata, isUnmaskingNeeded]);
19
73
  var toggleMasking = (0, react_1.useCallback)(function () {
20
74
  if (isUnmasked) {
21
75
  maskAttributeValue(attributeValue.uri);
@@ -0,0 +1,6 @@
1
+ import { Metadata, Entity, SimpleAttributeValue } from '@reltio/mdm-sdk';
2
+ export declare const sendUnmaskActivity: ({ attributeValue, entity, metadata }: {
3
+ attributeValue: SimpleAttributeValue;
4
+ entity: Entity;
5
+ metadata: Metadata;
6
+ }) => Promise<void>;
@@ -0,0 +1,68 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { ACTIVITY_TYPES, createActivity, getAttributeTypesHierarchyByUri, getBaseUri, getAttributeTypeUriByValueUri, isRelationUri } from '@reltio/mdm-sdk';
38
+ export var sendUnmaskActivity = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
39
+ var isRelationAttribute, attributeTypeUri, rootUri, hierarchy, path, label, error_1;
40
+ var attributeValue = _b.attributeValue, entity = _b.entity, metadata = _b.metadata;
41
+ return __generator(this, function (_c) {
42
+ switch (_c.label) {
43
+ case 0:
44
+ _c.trys.push([0, 2, , 3]);
45
+ isRelationAttribute = isRelationUri(attributeValue.uri);
46
+ attributeTypeUri = isRelationAttribute
47
+ ? attributeValue.type
48
+ : getAttributeTypeUriByValueUri(attributeValue.uri, entity.type);
49
+ rootUri = getBaseUri(attributeTypeUri);
50
+ hierarchy = getAttributeTypesHierarchyByUri(metadata, attributeTypeUri, rootUri);
51
+ path = hierarchy.map(function (type) { return type.label; }).join(' / ');
52
+ label = "".concat(entity.label, ":").concat(isRelationAttribute ? ' Relationship' : '', " ").concat(path, " - ").concat(attributeValue.value);
53
+ return [4 /*yield*/, createActivity({
54
+ label: ACTIVITY_TYPES.attributeUnmasked,
55
+ description: JSON.stringify({ uri: entity.uri, label: label }),
56
+ items: [{ objectUri: entity.uri }]
57
+ })];
58
+ case 1:
59
+ _c.sent();
60
+ return [3 /*break*/, 3];
61
+ case 2:
62
+ error_1 = _c.sent();
63
+ console.warn(error_1);
64
+ return [3 /*break*/, 3];
65
+ case 3: return [2 /*return*/];
66
+ }
67
+ });
68
+ }); };
@@ -1,14 +1,15 @@
1
- import { AttributeTypeForMasking, SimpleAttributeValue } from '@reltio/mdm-sdk';
1
+ import { AttributeTypeForMasking, Entity, SimpleAttributeValue } from '@reltio/mdm-sdk';
2
2
  type Props = {
3
3
  attributeValue: SimpleAttributeValue;
4
4
  attributeType: AttributeTypeForMasking;
5
+ entity?: Entity;
5
6
  };
6
- export declare const useMaskedAttribute: ({ attributeType, attributeValue }: Props) => {
7
+ export declare const useMaskedAttribute: ({ attributeType, attributeValue, entity: entityProp }: Props) => {
7
8
  isUnmaskingNeeded: any;
8
9
  isMasked: boolean;
9
10
  toggleMasking: () => void;
10
11
  isUnmasking: boolean;
11
- unmask: () => Promise<void> | Promise<SimpleAttributeValue>;
12
+ unmask: () => Promise<void>;
12
13
  attributeValue: SimpleAttributeValue;
13
14
  };
14
15
  export {};
@@ -1,18 +1,72 @@
1
- import { useCallback } from 'react';
2
- import { useMdmIsViewMode } from '../../contexts/MdmModuleContext';
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { useCallback, useContext } from 'react';
38
+ import { useMdmIsViewMode, useMdmEntity, useMdmMetadata } from '../../contexts/MdmModuleContext';
39
+ import { EntityContext } from '../../contexts/EntityContext';
3
40
  import { checkCanUnmaskAttribute } from '@reltio/mdm-sdk';
4
41
  import { useMaskAttributeValue, useUnmaskAttributeValue, useUnmaskedAttributeValue } from '../../contexts/MaskedAttributesContext';
42
+ import { sendUnmaskActivity } from './helpers';
5
43
  export var useMaskedAttribute = function (_a) {
6
- var attributeType = _a.attributeType, attributeValue = _a.attributeValue;
44
+ var attributeType = _a.attributeType, attributeValue = _a.attributeValue, entityProp = _a.entity;
7
45
  var isViewMode = useMdmIsViewMode();
8
46
  var unmaskAttributeValue = useUnmaskAttributeValue();
9
47
  var maskAttributeValue = useMaskAttributeValue();
48
+ var metadata = useMdmMetadata();
49
+ var entityFromContext = useContext(EntityContext);
50
+ var mainEntity = useMdmEntity();
51
+ var entity = entityProp || entityFromContext || mainEntity;
10
52
  var canUnmaskAttribute = checkCanUnmaskAttribute(attributeType);
11
53
  var _b = useUnmaskedAttributeValue(attributeValue.uri) || {}, unmaskedAttributeValue = _b.attributeValue, _c = _b.isUnmasked, isUnmasked = _c === void 0 ? false : _c, _d = _b.loading, loading = _d === void 0 ? false : _d;
12
54
  var isUnmaskingNeeded = unmaskAttributeValue && maskAttributeValue && !!attributeType.masking && isViewMode && canUnmaskAttribute;
13
- var unmask = useCallback(function () {
14
- return isUnmaskingNeeded ? unmaskAttributeValue(attributeValue.uri) : Promise.resolve();
15
- }, [unmaskAttributeValue, attributeValue.uri, isUnmaskingNeeded]);
55
+ var unmask = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
56
+ return __generator(this, function (_a) {
57
+ switch (_a.label) {
58
+ case 0:
59
+ if (!isUnmaskingNeeded) return [3 /*break*/, 2];
60
+ return [4 /*yield*/, unmaskAttributeValue(attributeValue.uri)];
61
+ case 1:
62
+ _a.sent();
63
+ sendUnmaskActivity({ attributeValue: attributeValue, entity: entity, metadata: metadata });
64
+ return [3 /*break*/, 3];
65
+ case 2: return [2 /*return*/, Promise.resolve()];
66
+ case 3: return [2 /*return*/];
67
+ }
68
+ });
69
+ }); }, [unmaskAttributeValue, attributeValue, entity, metadata, isUnmaskingNeeded]);
16
70
  var toggleMasking = useCallback(function () {
17
71
  if (isUnmasked) {
18
72
  maskAttributeValue(attributeValue.uri);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.2077",
3
+ "version": "1.4.2079",
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.1921",
14
+ "@reltio/mdm-sdk": "^1.4.1922",
15
15
  "@vis.gl/react-google-maps": "^1.3.0",
16
16
  "d3-cloud": "^1.2.5",
17
17
  "d3-geo": "^2.0.1",
@@ -1 +0,0 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"blobWrapper">;
@@ -1,13 +0,0 @@
1
- import { makeStyles } from '@mui/styles';
2
- var BLOB_HEIGHT = 100;
3
- export var useStyles = makeStyles({
4
- blobWrapper: {
5
- position: 'relative',
6
- overflowY: 'auto',
7
- overflowX: 'hidden',
8
- whiteSpace: 'pre',
9
- maxHeight: "".concat(BLOB_HEIGHT, "px"),
10
- boxSizing: 'border-box',
11
- padding: '15px 25px 0 25px'
12
- }
13
- });
@@ -1 +0,0 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"blobWrapper">;
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useStyles = void 0;
4
- var styles_1 = require("@mui/styles");
5
- var BLOB_HEIGHT = 100;
6
- exports.useStyles = (0, styles_1.makeStyles)({
7
- blobWrapper: {
8
- position: 'relative',
9
- overflowY: 'auto',
10
- overflowX: 'hidden',
11
- whiteSpace: 'pre',
12
- maxHeight: "".concat(BLOB_HEIGHT, "px"),
13
- boxSizing: 'border-box',
14
- padding: '15px 25px 0 25px'
15
- }
16
- });