@reltio/components 1.4.926 → 1.4.930

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 (41) hide show
  1. package/cjs/components/CollaborationItem/SendMessageArea/SendMessageArea.js +3 -1
  2. package/cjs/components/CommentsContainer/CommentsContainer.js +10 -1
  3. package/cjs/components/LinearLoadIndicator/LinearLoadIndicator.d.ts +2 -1
  4. package/cjs/components/LinearLoadIndicator/LinearLoadIndicator.js +7 -3
  5. package/cjs/components/LinearLoadIndicator/styles.d.ts +1 -1
  6. package/cjs/components/LinearLoadIndicator/styles.js +5 -0
  7. package/cjs/components/attributes/editMode/SimpleAttributeEditor/SimpleAttributeEditor.js +16 -23
  8. package/cjs/components/attributes/editMode/SimpleAttributeEditor/styles.d.ts +1 -1
  9. package/cjs/components/attributes/editMode/SimpleAttributeEditor/styles.js +8 -0
  10. package/cjs/components/charts/MapChart/MapChart.js +23 -20
  11. package/cjs/components/crosswalks/CrosswalkRow/CrosswalkRow.js +3 -1
  12. package/cjs/components/workflow/components/AttributesChanges/components/ChangeView/ChangeView.js +2 -1
  13. package/cjs/components/workflow/components/AttributesChanges/helpers/attributesHelpers.js +9 -7
  14. package/cjs/components/workflow/components/AttributesChanges/helpers/mergeHelpers.js +3 -2
  15. package/cjs/contexts/RelatedObjectUrisContext/index.d.ts +2 -0
  16. package/cjs/contexts/RelatedObjectUrisContext/index.js +9 -0
  17. package/cjs/contexts/index.d.ts +1 -0
  18. package/cjs/contexts/index.js +3 -1
  19. package/cjs/hooks/useCollaboration.d.ts +7 -1
  20. package/cjs/hooks/useCollaboration.js +9 -9
  21. package/esm/components/CollaborationItem/SendMessageArea/SendMessageArea.js +3 -1
  22. package/esm/components/CommentsContainer/CommentsContainer.js +12 -3
  23. package/esm/components/LinearLoadIndicator/LinearLoadIndicator.d.ts +2 -1
  24. package/esm/components/LinearLoadIndicator/LinearLoadIndicator.js +7 -3
  25. package/esm/components/LinearLoadIndicator/styles.d.ts +1 -1
  26. package/esm/components/LinearLoadIndicator/styles.js +5 -0
  27. package/esm/components/attributes/editMode/SimpleAttributeEditor/SimpleAttributeEditor.js +16 -23
  28. package/esm/components/attributes/editMode/SimpleAttributeEditor/styles.d.ts +1 -1
  29. package/esm/components/attributes/editMode/SimpleAttributeEditor/styles.js +8 -0
  30. package/esm/components/charts/MapChart/MapChart.js +24 -21
  31. package/esm/components/crosswalks/CrosswalkRow/CrosswalkRow.js +3 -1
  32. package/esm/components/workflow/components/AttributesChanges/components/ChangeView/ChangeView.js +2 -1
  33. package/esm/components/workflow/components/AttributesChanges/helpers/attributesHelpers.js +10 -8
  34. package/esm/components/workflow/components/AttributesChanges/helpers/mergeHelpers.js +4 -3
  35. package/esm/contexts/RelatedObjectUrisContext/index.d.ts +2 -0
  36. package/esm/contexts/RelatedObjectUrisContext/index.js +3 -0
  37. package/esm/contexts/index.d.ts +1 -0
  38. package/esm/contexts/index.js +1 -0
  39. package/esm/hooks/useCollaboration.d.ts +7 -1
  40. package/esm/hooks/useCollaboration.js +9 -9
  41. package/package.json +3 -3
@@ -35,6 +35,7 @@ var Avatar_1 = require("../Avatar/Avatar");
35
35
  var contexts_1 = require("../../../contexts");
36
36
  var styles_1 = require("./styles");
37
37
  var ramda_1 = require("ramda");
38
+ var hooks_1 = require("../../../hooks");
38
39
  var getPlaceholder = function (status) {
39
40
  switch (status) {
40
41
  case 'open':
@@ -63,6 +64,7 @@ var SendMessageArea = function (_a) {
63
64
  var _d = react_1.useState(''), plainTextValue = _d[0], setPlainTextValue = _d[1];
64
65
  var _e = react_1.useState([]), mentions = _e[0], setMentions = _e[1];
65
66
  var _f = react_1.useState(false), focused = _f[0], setFocused = _f[1];
67
+ var safePromise = hooks_1.useSafePromise();
66
68
  var hasValue = value.trim() !== '';
67
69
  var shouldShowButtons = focused || hasValue;
68
70
  var status = comment === null || comment === void 0 ? void 0 : comment.status;
@@ -123,7 +125,7 @@ var SendMessageArea = function (_a) {
123
125
  }
124
126
  ]
125
127
  ]);
126
- return request().then(clearValue).catch(console.log); //eslint-disable-line no-console
128
+ return safePromise(request()).then(clearValue).catch(console.log); //eslint-disable-line no-console
127
129
  };
128
130
  react_1.useEffect(function () {
129
131
  if (popperRef) {
@@ -18,6 +18,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
21
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
22
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
23
+ to[j] = from[i];
24
+ return to;
25
+ };
21
26
  var __importDefault = (this && this.__importDefault) || function (mod) {
22
27
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
28
  };
@@ -63,6 +68,10 @@ var CommentsContainer = function (_a) {
63
68
  onChangePopupVisibility(isOpenPopup);
64
69
  }
65
70
  }, [isOpenPopup]);
71
+ var additionalRelatedObjectUris = react_1.useContext(contexts_1.RelatedObjectUrisContext);
72
+ var allRelatedObjectUris = react_1.useMemo(function () {
73
+ return additionalRelatedObjectUris ? __spreadArray(__spreadArray([], relatedObjectUris), additionalRelatedObjectUris) : relatedObjectUris;
74
+ }, [additionalRelatedObjectUris, relatedObjectUris]);
66
75
  return (showComments && (react_1.default.createElement("div", { className: classnames_1.default(styles.root, className) },
67
76
  shouldShowAddCommentButton && (react_1.default.createElement(AddCommentButton_1.default, { className: classnames_1.default(styles.addButton, (_b = {},
68
77
  _b[styles.showAlways] = showAlways || isOpenPopupWithNewComment,
@@ -71,6 +80,6 @@ var CommentsContainer = function (_a) {
71
80
  var replies = _a.replies, commentId = _a.commentId;
72
81
  return (react_1.default.createElement(CommentButton_1.default, { ref: commentId === (currentComment === null || currentComment === void 0 ? void 0 : currentComment.commentId) ? setAnchorEl : null, key: commentId, onClick: function () { return handleClickCommentButton(commentId); } }, 1 + replies));
73
82
  }),
74
- react_1.default.createElement(CollaborationPopup_1.CollaborationPopup, { anchorEl: anchorEl, open: isOpenPopup, onClose: handleClose, uri: uri, relatedObjectUris: relatedObjectUris, objectType: objectType, comment: currentComment }))));
83
+ react_1.default.createElement(CollaborationPopup_1.CollaborationPopup, { anchorEl: anchorEl, open: isOpenPopup, onClose: handleClose, uri: uri, relatedObjectUris: allRelatedObjectUris, objectType: objectType, comment: currentComment }))));
75
84
  };
76
85
  exports.default = CommentsContainer;
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  declare type Props = {
3
3
  transparent?: boolean;
4
+ relativePosition?: boolean;
4
5
  };
5
- declare const LinearLoadIndicator: ({ transparent }: Props) => JSX.Element;
6
+ declare const LinearLoadIndicator: ({ transparent, relativePosition }: Props) => JSX.Element;
6
7
  export default LinearLoadIndicator;
@@ -9,9 +9,13 @@ var LinearProgress_1 = __importDefault(require("@material-ui/core/LinearProgress
9
9
  var styles_1 = require("./styles");
10
10
  var LinearLoadIndicator = function (_a) {
11
11
  var _b;
12
- var _c = _a.transparent, transparent = _c === void 0 ? false : _c;
12
+ var _c = _a.transparent, transparent = _c === void 0 ? false : _c, _d = _a.relativePosition, relativePosition = _d === void 0 ? false : _d;
13
13
  var styles = styles_1.useStyles();
14
- return (react_1.default.createElement("div", { className: classnames_1.default(styles.loadingOverlay, (_b = {}, _b[styles.transparent] = transparent, _b)) },
15
- react_1.default.createElement(LinearProgress_1.default, { color: "secondary" })));
14
+ return (react_1.default.createElement(react_1.default.Fragment, null,
15
+ react_1.default.createElement("div", { className: classnames_1.default(styles.loadingOverlay, (_b = {},
16
+ _b[styles.transparent] = transparent,
17
+ _b[styles.relativePosition] = relativePosition,
18
+ _b)) },
19
+ react_1.default.createElement(LinearProgress_1.default, { color: "secondary" }))));
16
20
  };
17
21
  exports.default = LinearLoadIndicator;
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"transparent" | "loadingOverlay">;
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"transparent" | "loadingOverlay" | "relativePosition">;
@@ -15,5 +15,10 @@ exports.useStyles = styles_1.makeStyles({
15
15
  },
16
16
  transparent: {
17
17
  backgroundColor: 'transparent'
18
+ },
19
+ relativePosition: {
20
+ '&$loadingOverlay': {
21
+ position: 'relative'
22
+ }
18
23
  }
19
24
  });
@@ -67,7 +67,7 @@ var AsyncMountPlaceholder = function () {
67
67
  return react_1.default.createElement("div", { className: styles.placeholder });
68
68
  };
69
69
  var SimpleAttributeEditor = function (_a) {
70
- var _b;
70
+ var _b, _c;
71
71
  var className = _a.className, attributeValue = _a.attributeValue, attributeType = _a.attributeType, isReltioCrosswalk = _a.isReltioCrosswalk, ownError = _a.ownError, mode = _a.mode, onAddOneMore = _a.onAddOneMore, onDeleteAttribute = _a.onDeleteAttribute, onChangeAttribute = _a.onChangeAttribute, onDeactivateError = _a.onDeactivateError, additionalControlsRenderer = _a.additionalControlsRenderer, state = _a.state, otherProps = __rest(_a, ["className", "attributeValue", "attributeType", "isReltioCrosswalk", "ownError", "mode", "onAddOneMore", "onDeleteAttribute", "onChangeAttribute", "onDeactivateError", "additionalControlsRenderer", "state"]);
72
72
  var styles = styles_1.useStyles();
73
73
  var deleted = state === 'deleted';
@@ -96,28 +96,21 @@ var SimpleAttributeEditor = function (_a) {
96
96
  onDeactivateError(mdm_sdk_1.getErrorId(ownError));
97
97
  }
98
98
  };
99
- if (showToEdit) {
100
- var showAddButton = !!onAddOneMore && canCreate && !attributeType.singleValue;
101
- var showDeleteButton = !deleted && !!onDeleteAttribute && canDelete;
102
- var hasError = !!errorMessage;
103
- var deletedProps = deleted ? { disabled: true } : {};
104
- return (react_1.default.createElement("div", { className: classnames_1.default(styles.editor, className) },
105
- react_1.default.createElement(ErrorWrapper_1.default, { errorMessage: errorMessage },
106
- react_1.default.createElement("div", { className: classnames_1.default(styles['editor-value'], (_b = {}, _b[styles.deleted] = deleted, _b)) },
107
- react_1.default.createElement(DataTypeValueEditor_1.default, __assign({ fieldName: mdm_sdk_1.attributeUriToSearchUri(attributeType.uri), value: value, dataTypeDefinition: dataTypeDefinition, error: hasError, onChange: ramda_1.pipe(utils_1.prepareChangeData(attributeValue, attributeType), onChangeAttribute, deactivateError), fullWidth: true }, dependentLookupEditorContext, otherProps, deletedProps)))),
108
- react_1.default.createElement("div", { className: styles['editor-actions'] },
109
- edited && (react_1.default.createElement(Typography_1.default, { variant: "caption", className: styles.editedLabel },
110
- "(",
111
- ui_i18n_1.default.text('edited'),
112
- ")")),
113
- showAddButton && (react_1.default.createElement(SmallIconButton_1.default, { icon: Add_1.default, onClick: onAddOneMore, size: "L", className: classnames_1.default(styles.addButton, styles.button) })),
114
- additionalControlsRenderer && additionalControlsRenderer({ attributeType: attributeType, attributeValue: attributeValue }),
115
- showDeleteButton && (react_1.default.createElement(SmallIconButton_1.default, { className: styles.button, icon: Delete_1.default, onClick: onDelete, size: "L" })))));
116
- }
117
- else {
118
- return (react_1.default.createElement("div", { className: className },
119
- react_1.default.createElement(DataTypeValue_1.default, { value: mdm_sdk_1.getAttributeValue(attributeValue), dataTypeDefinition: dataTypeDefinition })));
120
- }
99
+ var showAddButton = !!onAddOneMore && canCreate && !attributeType.singleValue;
100
+ var showDeleteButton = !deleted && !!onDeleteAttribute && canDelete;
101
+ var hasError = !!errorMessage;
102
+ var deletedProps = deleted ? { disabled: true } : {};
103
+ return (react_1.default.createElement("div", { className: classnames_1.default(styles.editor, className) },
104
+ react_1.default.createElement(ErrorWrapper_1.default, { errorMessage: errorMessage, className: styles.errorWrapper },
105
+ react_1.default.createElement("div", { className: classnames_1.default(styles['editor-value'], (_b = {}, _b[styles.deleted] = deleted, _b), (_c = {}, _c[styles['editor-read-only-value']] = !showToEdit, _c)) }, showToEdit ? (react_1.default.createElement(DataTypeValueEditor_1.default, __assign({ fieldName: mdm_sdk_1.attributeUriToSearchUri(attributeType.uri), value: value, dataTypeDefinition: dataTypeDefinition, error: hasError, onChange: ramda_1.pipe(utils_1.prepareChangeData(attributeValue, attributeType), onChangeAttribute, deactivateError), fullWidth: true }, dependentLookupEditorContext, otherProps, deletedProps))) : (react_1.default.createElement(DataTypeValue_1.default, { value: mdm_sdk_1.getAttributeValue(attributeValue), dataTypeDefinition: dataTypeDefinition })))),
106
+ react_1.default.createElement("div", { className: styles['editor-actions'] },
107
+ edited && (react_1.default.createElement(Typography_1.default, { variant: "caption", className: styles.editedLabel },
108
+ "(",
109
+ ui_i18n_1.default.text('edited'),
110
+ ")")),
111
+ showAddButton && (react_1.default.createElement(SmallIconButton_1.default, { icon: Add_1.default, onClick: onAddOneMore, size: "L", className: classnames_1.default(styles.addButton, styles.button) })),
112
+ additionalControlsRenderer && additionalControlsRenderer({ attributeType: attributeType, attributeValue: attributeValue }),
113
+ showDeleteButton && (react_1.default.createElement(SmallIconButton_1.default, { className: styles.button, icon: Delete_1.default, onClick: onDelete, size: "L" })))));
121
114
  };
122
115
  SimpleAttributeEditor.propTypes = {
123
116
  className: prop_types_1.default.string,
@@ -1 +1 @@
1
- export const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"deleted" | "button" | "placeholder" | "wrapper" | "addButton" | "editor" | "editor-value" | "editor-actions" | "editedLabel">;
1
+ export const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"deleted" | "button" | "placeholder" | "wrapper" | "addButton" | "editor" | "errorWrapper" | "editor-value" | "editor-read-only-value" | "editor-actions" | "editedLabel">;
@@ -7,6 +7,9 @@ exports.useStyles = styles_1.makeStyles(function (theme) { return ({
7
7
  wrapper: {
8
8
  width: '100%'
9
9
  },
10
+ errorWrapper: {
11
+ alignSelf: 'stretch'
12
+ },
10
13
  editor: {
11
14
  display: 'flex',
12
15
  flex: 1,
@@ -16,6 +19,11 @@ exports.useStyles = styles_1.makeStyles(function (theme) { return ({
16
19
  'editor-value': {
17
20
  flex: '1 1 auto'
18
21
  },
22
+ 'editor-read-only-value': {
23
+ marginLeft: '12px',
24
+ display: 'flex',
25
+ alignItems: 'center'
26
+ },
19
27
  'editor-actions': {
20
28
  display: 'flex',
21
29
  alignItems: 'center',
@@ -36,6 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.MapChart = exports.LEGEND_WIDTH = void 0;
37
37
  var react_1 = __importStar(require("react"));
38
38
  var withPercents_1 = __importDefault(require("../HOCs/withPercents"));
39
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
40
+ // @ts-ignore
39
41
  var react_simple_maps_1 = require("react-simple-maps");
40
42
  var d3_scale_1 = require("d3-scale");
41
43
  var d3Geo = __importStar(require("d3-geo"));
@@ -82,27 +84,28 @@ var MapChart = function (_a) {
82
84
  var _d = useTooltipState_1.default(), tooltipState = _d.tooltipState, showTooltip = _d.showTooltip, hideTooltip = _d.hideTooltip;
83
85
  var clickable = useClickableStyle_1.useClickableStyle(onItemClick);
84
86
  return (react_1.default.createElement("div", { className: styles.mapChart, style: { width: width, height: height } },
85
- react_1.default.createElement(react_simple_maps_1.ComposableMap, { width: mapWidth, height: height, projection: projectionFunc },
86
- react_1.default.createElement(react_simple_maps_1.Geographies, { geography: geography }, function (_a) {
87
- var geographies = _a.geographies;
88
- return geographies.map(function (geo) {
89
- var geoId = geo.properties[geoIdName || 'name'];
90
- var geoLabel = geo.properties.name;
91
- var cur = data.find(function (_a) {
92
- var group = _a.group;
93
- return group === geoId;
87
+ react_1.default.createElement(react_simple_maps_1.MapProvider, { width: mapWidth, height: height, projection: projectionFunc, projectionConfig: {} },
88
+ react_1.default.createElement("svg", { width: mapWidth, height: height, viewBox: "0 0 " + mapWidth + " " + height, className: 'rsm-svg' },
89
+ react_1.default.createElement(react_simple_maps_1.Geographies, { geography: geography }, function (_a) {
90
+ var geographies = _a.geographies;
91
+ return geographies.map(function (geo) {
92
+ var geoId = geo.properties[geoIdName || 'name'];
93
+ var geoLabel = geo.properties.name;
94
+ var cur = data.find(function (_a) {
95
+ var group = _a.group;
96
+ return group === geoId;
97
+ });
98
+ return (react_1.default.createElement(react_simple_maps_1.Geography, { key: geo.rsmKey, geography: geo, fill: cur ? colorScale(cur.value) : '#EEE', stroke: '#FFF', className: classnames_1.default(styles.geography, clickable), onMouseEnter: function (event) {
99
+ var data = cur || { label: geoLabel, value: 0, percent: 0, group: geoId };
100
+ var mapRect = event.target.parentElement.parentElement.getBoundingClientRect();
101
+ var coordinate = {
102
+ x: event.clientX - mapRect.x,
103
+ y: event.clientY - mapRect.y
104
+ };
105
+ showTooltip(data, coordinate);
106
+ }, onMouseLeave: function () { return hideTooltip(); }, onClick: onItemClick && (function () { return onItemClick(geoId); }) }));
94
107
  });
95
- return (react_1.default.createElement(react_simple_maps_1.Geography, { key: geo.rsmKey, geography: geo, fill: cur ? colorScale(cur.value) : '#EEE', stroke: '#FFF', className: classnames_1.default(styles.geography, clickable), onMouseEnter: function (event) {
96
- var data = cur || { label: geoLabel, value: 0, percent: 0, group: geoId };
97
- var mapRect = event.target.parentElement.parentElement.getBoundingClientRect();
98
- var coordinate = {
99
- x: event.clientX - mapRect.x,
100
- y: event.clientY - mapRect.y
101
- };
102
- showTooltip(data, coordinate);
103
- }, onMouseLeave: function () { return hideTooltip(); }, onClick: onItemClick && (function () { return onItemClick(geoId); }) }));
104
- });
105
- })),
108
+ }))),
106
109
  showLegend && react_1.default.createElement(Legend_1.default, { width: exports.LEGEND_WIDTH, minValue: minValue, maxValue: maxValue, colors: MAP_COLORS }),
107
110
  react_1.default.createElement(recharts_1.Tooltip, __assign({ viewBox: {
108
111
  x: 0,
@@ -97,7 +97,9 @@ var CrosswalkRow = function (_a) {
97
97
  react_1.default.createElement(Typography_1.default, { variant: 'body2', className: styles.labelValue, noWrap: true }, crosswalk.value))),
98
98
  expanded && (react_1.default.createElement("div", { className: styles.attributesWrapper },
99
99
  canDelete && (react_1.default.createElement("div", { className: styles.deleteCrosswalkButton },
100
- react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { icon: Delete_1.default, disabled: disableDelete, onClick: function () { return setDeleteDialogOpen(true); }, size: "XS", tooltipTitle: ui_i18n_1.default.text('Delete crosswalk'), showForDisabled: true }),
100
+ react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { icon: Delete_1.default, disabled: disableDelete, onClick: function () { return setDeleteDialogOpen(true); }, size: "XS", tooltipTitle: disableDelete
101
+ ? ui_i18n_1.default.text("You don't have permissions to delete")
102
+ : ui_i18n_1.default.text('Delete crosswalk'), showForDisabled: true }),
101
103
  react_1.default.createElement(ConfirmDeleteDialog_1.default, { open: isDeleteDialogOpen, onConfirm: handleDeleteCrosswalk, onClose: function () { return setDeleteDialogOpen(false); } }))),
102
104
  react_1.default.createElement(CrosswalkAttributes_1.default, { crosswalk: crosswalk, canEditAttribute: !disableEdit, onEditAttribute: function (attributeName, value) {
103
105
  onEdit({
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  var react_1 = __importDefault(require("react"));
7
7
  var classnames_1 = __importDefault(require("classnames"));
8
+ var ramda_1 = require("ramda");
8
9
  var ArrowRightAlt_1 = __importDefault(require("@material-ui/icons/ArrowRightAlt"));
9
10
  var Chip_1 = __importDefault(require("@material-ui/core/Chip"));
10
11
  var helpers_1 = require("../../helpers/helpers");
@@ -17,7 +18,7 @@ var ChangeView = function (_a) {
17
18
  react_1.default.createElement("span", { className: styles.fieldName },
18
19
  label,
19
20
  ":"),
20
- react_1.default.createElement("span", { className: styles.difference },
21
+ !ramda_1.isNil(value) && react_1.default.createElement("span", { className: styles.difference },
21
22
  value,
22
23
  newValue && oldValue && (react_1.default.createElement(react_1.default.Fragment, null,
23
24
  react_1.default.createElement(ArrowRightAlt_1.default, { className: styles.arrow }),
@@ -40,16 +40,18 @@ var getEntityChanges = ramda_1.curry(function (metadata, entityInfo, changes) {
40
40
  return getAttributesList(metadata, attrTypes, changes);
41
41
  });
42
42
  exports.getEntityChanges = getEntityChanges;
43
- var getRelationChanges = ramda_1.curry(function (metadata, relationInfo, changes) {
43
+ var getRelationChanges = ramda_1.curry(function (metadata, relationInfo, changes, changeType) {
44
+ var addRelationOperationIfNeeded = function (changes, changeType) {
45
+ if (changeType === operations_1.DCRTypes.CREATE_RELATIONSHIP || mdm_sdk_1.isEmptyValue(changes)) {
46
+ var operation = helpers_1.getOperationType(changeType);
47
+ return operation ? { operation: operation } : {};
48
+ }
49
+ return {};
50
+ };
44
51
  var relationType = mdm_sdk_1.getRelationType(metadata, relationInfo.type);
45
52
  var attrTypes = mdm_sdk_1.getRelationAttributesList(metadata, relationInfo.type);
46
53
  return ramda_1.flatten([
47
- {
48
- level: 1,
49
- label: ramda_1.propOr('', 'label', relationType),
50
- attributeType: relationType,
51
- attributeValue: __assign(__assign({}, relationInfo), changes)
52
- },
54
+ __assign({ level: 1, label: ramda_1.propOr('', 'label', relationType), attributeType: relationType, attributeValue: __assign(__assign({}, relationInfo), changes) }, addRelationOperationIfNeeded(changes, changeType)),
53
55
  getAttributesList(metadata, attrTypes, changes, 2)
54
56
  ]);
55
57
  });
@@ -26,7 +26,7 @@ var SPECIAL_ATTRIBUTES_NAMES = [
26
26
  ];
27
27
  var prepareStartOrEndDate = function (_a) {
28
28
  var newValue = _a.newValue, oldValue = _a.oldValue;
29
- var parseValue = function (value) { return (isNaN(value) ? value : parseInt(value)); };
29
+ var parseValue = function (value) { return (isNaN(value) || mdm_sdk_1.isEmptyValue(value) ? value : parseInt(value)); };
30
30
  var isExistedValue = function (value) { return (value === null || value === void 0 ? void 0 : value.length) && !mdm_sdk_1.isEmptyValue(value); };
31
31
  var isExistNewValue = isExistedValue(newValue);
32
32
  var isExistOldValue = isExistedValue(oldValue);
@@ -211,7 +211,8 @@ var mergeChanges = function (metadata, changes, entityInfo, relationsInfo) {
211
211
  getAttributeChanges(mdm_sdk_1.EntityAttrTypes.endDate.name)
212
212
  ], changesTree);
213
213
  var relationsChanges = ramda_1.flatten(relationsInfo.map(function (relationInfo, index) {
214
- return attributesHelpers_1.getRelationChanges(metadata, relationInfo, relationsTrees[index]);
214
+ var changeType = ramda_1.path([relationInfo.uri, 0, 'type'], changes);
215
+ return attributesHelpers_1.getRelationChanges(metadata, relationInfo, relationsTrees[index], changeType);
215
216
  }));
216
217
  return [entityChanges, relationsChanges];
217
218
  };
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const RelatedObjectUrisContext: React.Context<string[]>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RelatedObjectUrisContext = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ exports.RelatedObjectUrisContext = react_1.default.createContext([]);
9
+ exports.RelatedObjectUrisContext.displayName = 'RelatedObjectUrisContext';
@@ -13,3 +13,4 @@ export { CrosswalksDisplayProvider, useCrosswalkColor, useCrosswalkFocus, useCro
13
13
  export { ExpandedAttributesProvider, useAttributeExpanded } from './ExpandedAttributesContext';
14
14
  export { EntityMarkerContext } from './EntityMarkerContext';
15
15
  export { WorkflowTasksContext } from './WorkflowTasksContext';
16
+ export { RelatedObjectUrisContext } from './RelatedObjectUrisContext';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WorkflowTasksContext = exports.EntityMarkerContext = exports.useAttributeExpanded = exports.ExpandedAttributesProvider = exports.useHighlightedCrosswalks = exports.useCrosswalkHighlight = exports.useCrosswalkFocus = exports.useCrosswalkColor = exports.CrosswalksDisplayProvider = exports.EntitiesMapContext = exports.IdContext = exports.ProfilePerspectiveViewContext = exports.PivotingAttributeContext = exports.UsersContext = exports.CollaborationContext = exports.BlockImageGalleryDialogContext = exports.ViewIdContext = exports.PopupBoundariesContext = exports.HistoryDiffContext = exports.AsyncMountContext = void 0;
3
+ exports.RelatedObjectUrisContext = exports.WorkflowTasksContext = exports.EntityMarkerContext = exports.useAttributeExpanded = exports.ExpandedAttributesProvider = exports.useHighlightedCrosswalks = exports.useCrosswalkHighlight = exports.useCrosswalkFocus = exports.useCrosswalkColor = exports.CrosswalksDisplayProvider = exports.EntitiesMapContext = exports.IdContext = exports.ProfilePerspectiveViewContext = exports.PivotingAttributeContext = exports.UsersContext = exports.CollaborationContext = exports.BlockImageGalleryDialogContext = exports.ViewIdContext = exports.PopupBoundariesContext = exports.HistoryDiffContext = exports.AsyncMountContext = void 0;
4
4
  var AsyncMountContext_1 = require("./AsyncMountContext");
5
5
  Object.defineProperty(exports, "AsyncMountContext", { enumerable: true, get: function () { return AsyncMountContext_1.AsyncMountContext; } });
6
6
  var HistoryAppearanceContext_1 = require("./HistoryAppearanceContext");
@@ -36,3 +36,5 @@ var EntityMarkerContext_1 = require("./EntityMarkerContext");
36
36
  Object.defineProperty(exports, "EntityMarkerContext", { enumerable: true, get: function () { return EntityMarkerContext_1.EntityMarkerContext; } });
37
37
  var WorkflowTasksContext_1 = require("./WorkflowTasksContext");
38
38
  Object.defineProperty(exports, "WorkflowTasksContext", { enumerable: true, get: function () { return WorkflowTasksContext_1.WorkflowTasksContext; } });
39
+ var RelatedObjectUrisContext_1 = require("./RelatedObjectUrisContext");
40
+ Object.defineProperty(exports, "RelatedObjectUrisContext", { enumerable: true, get: function () { return RelatedObjectUrisContext_1.RelatedObjectUrisContext; } });
@@ -1,5 +1,10 @@
1
1
  import { CollaborationObjectTypes, Comment, CommentsMap } from '@reltio/mdm-sdk';
2
- export declare const useCollaboration: (objectIds?: string[], objectTypes?: CollaborationObjectTypes[]) => {
2
+ declare type Props = {
3
+ objectIds?: string[];
4
+ objectTypes?: CollaborationObjectTypes[];
5
+ enabled?: boolean;
6
+ };
7
+ export declare const useCollaboration: ({ objectIds, objectTypes, enabled }: Props) => {
3
8
  clearCurrentComment: () => void;
4
9
  comments: Comment[];
5
10
  commentsMap: CommentsMap;
@@ -18,3 +23,4 @@ export declare const useCollaboration: (objectIds?: string[], objectTypes?: Coll
18
23
  resolveThread: ({ commentId, uri }: any) => void;
19
24
  sending: boolean;
20
25
  };
26
+ export {};
@@ -27,18 +27,18 @@ var mdm_sdk_1 = require("@reltio/mdm-sdk");
27
27
  var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
28
28
  var defaultObjectIds = [];
29
29
  var catchErrorInRequest = function (e) { return console.error('Collaboration error', e); };
30
- var useCollaboration = function (objectIds, objectTypes) {
31
- if (objectIds === void 0) { objectIds = defaultObjectIds; }
30
+ var useCollaboration = function (_a) {
31
+ var _b = _a.objectIds, objectIds = _b === void 0 ? defaultObjectIds : _b, objectTypes = _a.objectTypes, _c = _a.enabled, enabled = _c === void 0 ? true : _c;
32
32
  var entity = react_redux_1.useSelector(mdm_module_1.default.selectors.getEntity);
33
33
  var tenant = react_redux_1.useSelector(mdm_module_1.default.selectors.getTenant);
34
34
  var collaborationPath = react_redux_1.useSelector(mdm_module_1.default.selectors.getCollaborationPath);
35
- var isCollaborationEnabled = react_redux_1.useSelector(mdm_module_1.default.selectors.isCollaborationEnabled);
36
- var _a = react_1.useState(null), pageToken = _a[0], setPageToken = _a[1];
37
- var _b = react_1.useState([]), comments = _b[0], setComments = _b[1];
38
- var _c = react_1.useState(null), commentsMap = _c[0], setCommentsMap = _c[1];
39
- var _d = react_1.useState(null), currentComment = _d[0], setCurrentComment = _d[1];
40
- var _e = react_1.useState(false), sending = _e[0], setSending = _e[1];
41
- var _f = react_1.useState(false), loading = _f[0], setLoading = _f[1];
35
+ var isCollaborationEnabled = react_redux_1.useSelector(mdm_module_1.default.selectors.isCollaborationEnabled) && enabled;
36
+ var _d = react_1.useState(null), pageToken = _d[0], setPageToken = _d[1];
37
+ var _e = react_1.useState([]), comments = _e[0], setComments = _e[1];
38
+ var _f = react_1.useState(null), commentsMap = _f[0], setCommentsMap = _f[1];
39
+ var _g = react_1.useState(null), currentComment = _g[0], setCurrentComment = _g[1];
40
+ var _h = react_1.useState(false), sending = _h[0], setSending = _h[1];
41
+ var _j = react_1.useState(false), loading = _j[0], setLoading = _j[1];
42
42
  var addCommentsToCommentsMap = react_1.useCallback(function (commentsMap) {
43
43
  setCommentsMap(function (currentCommentsMap) { return (__assign(__assign({}, currentCommentsMap), commentsMap)); });
44
44
  }, []);
@@ -10,6 +10,7 @@ import { Avatar } from '../Avatar/Avatar';
10
10
  import { CollaborationContext } from '../../../contexts';
11
11
  import { useStyles } from './styles';
12
12
  import { always, cond, T } from 'ramda';
13
+ import { useSafePromise } from '../../../hooks';
13
14
  var getPlaceholder = function (status) {
14
15
  switch (status) {
15
16
  case 'open':
@@ -38,6 +39,7 @@ export var SendMessageArea = function (_a) {
38
39
  var _d = useState(''), plainTextValue = _d[0], setPlainTextValue = _d[1];
39
40
  var _e = useState([]), mentions = _e[0], setMentions = _e[1];
40
41
  var _f = useState(false), focused = _f[0], setFocused = _f[1];
42
+ var safePromise = useSafePromise();
41
43
  var hasValue = value.trim() !== '';
42
44
  var shouldShowButtons = focused || hasValue;
43
45
  var status = comment === null || comment === void 0 ? void 0 : comment.status;
@@ -98,7 +100,7 @@ export var SendMessageArea = function (_a) {
98
100
  }
99
101
  ]
100
102
  ]);
101
- return request().then(clearValue).catch(console.log); //eslint-disable-line no-console
103
+ return safePromise(request()).then(clearValue).catch(console.log); //eslint-disable-line no-console
102
104
  };
103
105
  useEffect(function () {
104
106
  if (popperRef) {
@@ -1,8 +1,13 @@
1
- import React, { useContext, useState } from 'react';
1
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
2
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
3
+ to[j] = from[i];
4
+ return to;
5
+ };
6
+ import React, { useContext, useMemo, useState } from 'react';
2
7
  import classnames from 'classnames';
3
8
  import { useStyles } from './styles';
4
9
  import { useDidUpdateEffect } from '../../hooks';
5
- import { CollaborationContext } from '../../contexts';
10
+ import { CollaborationContext, RelatedObjectUrisContext } from '../../contexts';
6
11
  import CommentButton from './buttons/CommentButton';
7
12
  import AddCommentButton from './buttons/AddCommentButton';
8
13
  import { CollaborationPopup } from '../CollaborationPopup/CollaborationPopup';
@@ -39,6 +44,10 @@ var CommentsContainer = function (_a) {
39
44
  onChangePopupVisibility(isOpenPopup);
40
45
  }
41
46
  }, [isOpenPopup]);
47
+ var additionalRelatedObjectUris = useContext(RelatedObjectUrisContext);
48
+ var allRelatedObjectUris = useMemo(function () {
49
+ return additionalRelatedObjectUris ? __spreadArray(__spreadArray([], relatedObjectUris), additionalRelatedObjectUris) : relatedObjectUris;
50
+ }, [additionalRelatedObjectUris, relatedObjectUris]);
42
51
  return (showComments && (React.createElement("div", { className: classnames(styles.root, className) },
43
52
  shouldShowAddCommentButton && (React.createElement(AddCommentButton, { className: classnames(styles.addButton, (_b = {},
44
53
  _b[styles.showAlways] = showAlways || isOpenPopupWithNewComment,
@@ -47,6 +56,6 @@ var CommentsContainer = function (_a) {
47
56
  var replies = _a.replies, commentId = _a.commentId;
48
57
  return (React.createElement(CommentButton, { ref: commentId === (currentComment === null || currentComment === void 0 ? void 0 : currentComment.commentId) ? setAnchorEl : null, key: commentId, onClick: function () { return handleClickCommentButton(commentId); } }, 1 + replies));
49
58
  }),
50
- React.createElement(CollaborationPopup, { anchorEl: anchorEl, open: isOpenPopup, onClose: handleClose, uri: uri, relatedObjectUris: relatedObjectUris, objectType: objectType, comment: currentComment }))));
59
+ React.createElement(CollaborationPopup, { anchorEl: anchorEl, open: isOpenPopup, onClose: handleClose, uri: uri, relatedObjectUris: allRelatedObjectUris, objectType: objectType, comment: currentComment }))));
51
60
  };
52
61
  export default CommentsContainer;
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  declare type Props = {
3
3
  transparent?: boolean;
4
+ relativePosition?: boolean;
4
5
  };
5
- declare const LinearLoadIndicator: ({ transparent }: Props) => JSX.Element;
6
+ declare const LinearLoadIndicator: ({ transparent, relativePosition }: Props) => JSX.Element;
6
7
  export default LinearLoadIndicator;
@@ -4,9 +4,13 @@ import LinearProgress from '@material-ui/core/LinearProgress';
4
4
  import { useStyles } from './styles';
5
5
  var LinearLoadIndicator = function (_a) {
6
6
  var _b;
7
- var _c = _a.transparent, transparent = _c === void 0 ? false : _c;
7
+ var _c = _a.transparent, transparent = _c === void 0 ? false : _c, _d = _a.relativePosition, relativePosition = _d === void 0 ? false : _d;
8
8
  var styles = useStyles();
9
- return (React.createElement("div", { className: classnames(styles.loadingOverlay, (_b = {}, _b[styles.transparent] = transparent, _b)) },
10
- React.createElement(LinearProgress, { color: "secondary" })));
9
+ return (React.createElement(React.Fragment, null,
10
+ React.createElement("div", { className: classnames(styles.loadingOverlay, (_b = {},
11
+ _b[styles.transparent] = transparent,
12
+ _b[styles.relativePosition] = relativePosition,
13
+ _b)) },
14
+ React.createElement(LinearProgress, { color: "secondary" }))));
11
15
  };
12
16
  export default LinearLoadIndicator;
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"transparent" | "loadingOverlay">;
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"transparent" | "loadingOverlay" | "relativePosition">;
@@ -12,5 +12,10 @@ export var useStyles = makeStyles({
12
12
  },
13
13
  transparent: {
14
14
  backgroundColor: 'transparent'
15
+ },
16
+ relativePosition: {
17
+ '&$loadingOverlay': {
18
+ position: 'relative'
19
+ }
15
20
  }
16
21
  });
@@ -43,7 +43,7 @@ var AsyncMountPlaceholder = function () {
43
43
  return React.createElement("div", { className: styles.placeholder });
44
44
  };
45
45
  var SimpleAttributeEditor = function (_a) {
46
- var _b;
46
+ var _b, _c;
47
47
  var className = _a.className, attributeValue = _a.attributeValue, attributeType = _a.attributeType, isReltioCrosswalk = _a.isReltioCrosswalk, ownError = _a.ownError, mode = _a.mode, onAddOneMore = _a.onAddOneMore, onDeleteAttribute = _a.onDeleteAttribute, onChangeAttribute = _a.onChangeAttribute, onDeactivateError = _a.onDeactivateError, additionalControlsRenderer = _a.additionalControlsRenderer, state = _a.state, otherProps = __rest(_a, ["className", "attributeValue", "attributeType", "isReltioCrosswalk", "ownError", "mode", "onAddOneMore", "onDeleteAttribute", "onChangeAttribute", "onDeactivateError", "additionalControlsRenderer", "state"]);
48
48
  var styles = useStyles();
49
49
  var deleted = state === 'deleted';
@@ -72,28 +72,21 @@ var SimpleAttributeEditor = function (_a) {
72
72
  onDeactivateError(getErrorId(ownError));
73
73
  }
74
74
  };
75
- if (showToEdit) {
76
- var showAddButton = !!onAddOneMore && canCreate && !attributeType.singleValue;
77
- var showDeleteButton = !deleted && !!onDeleteAttribute && canDelete;
78
- var hasError = !!errorMessage;
79
- var deletedProps = deleted ? { disabled: true } : {};
80
- return (React.createElement("div", { className: classnames(styles.editor, className) },
81
- React.createElement(ErrorWrapper, { errorMessage: errorMessage },
82
- React.createElement("div", { className: classnames(styles['editor-value'], (_b = {}, _b[styles.deleted] = deleted, _b)) },
83
- React.createElement(DataTypeValueEditor, __assign({ fieldName: attributeUriToSearchUri(attributeType.uri), value: value, dataTypeDefinition: dataTypeDefinition, error: hasError, onChange: pipe(prepareChangeData(attributeValue, attributeType), onChangeAttribute, deactivateError), fullWidth: true }, dependentLookupEditorContext, otherProps, deletedProps)))),
84
- React.createElement("div", { className: styles['editor-actions'] },
85
- edited && (React.createElement(Typography, { variant: "caption", className: styles.editedLabel },
86
- "(",
87
- i18n.text('edited'),
88
- ")")),
89
- showAddButton && (React.createElement(SmallIconButton, { icon: AddIcon, onClick: onAddOneMore, size: "L", className: classnames(styles.addButton, styles.button) })),
90
- additionalControlsRenderer && additionalControlsRenderer({ attributeType: attributeType, attributeValue: attributeValue }),
91
- showDeleteButton && (React.createElement(SmallIconButton, { className: styles.button, icon: DeleteIcon, onClick: onDelete, size: "L" })))));
92
- }
93
- else {
94
- return (React.createElement("div", { className: className },
95
- React.createElement(DataTypeValue, { value: getAttributeValue(attributeValue), dataTypeDefinition: dataTypeDefinition })));
96
- }
75
+ var showAddButton = !!onAddOneMore && canCreate && !attributeType.singleValue;
76
+ var showDeleteButton = !deleted && !!onDeleteAttribute && canDelete;
77
+ var hasError = !!errorMessage;
78
+ var deletedProps = deleted ? { disabled: true } : {};
79
+ return (React.createElement("div", { className: classnames(styles.editor, className) },
80
+ React.createElement(ErrorWrapper, { errorMessage: errorMessage, className: styles.errorWrapper },
81
+ React.createElement("div", { className: classnames(styles['editor-value'], (_b = {}, _b[styles.deleted] = deleted, _b), (_c = {}, _c[styles['editor-read-only-value']] = !showToEdit, _c)) }, showToEdit ? (React.createElement(DataTypeValueEditor, __assign({ fieldName: attributeUriToSearchUri(attributeType.uri), value: value, dataTypeDefinition: dataTypeDefinition, error: hasError, onChange: pipe(prepareChangeData(attributeValue, attributeType), onChangeAttribute, deactivateError), fullWidth: true }, dependentLookupEditorContext, otherProps, deletedProps))) : (React.createElement(DataTypeValue, { value: getAttributeValue(attributeValue), dataTypeDefinition: dataTypeDefinition })))),
82
+ React.createElement("div", { className: styles['editor-actions'] },
83
+ edited && (React.createElement(Typography, { variant: "caption", className: styles.editedLabel },
84
+ "(",
85
+ i18n.text('edited'),
86
+ ")")),
87
+ showAddButton && (React.createElement(SmallIconButton, { icon: AddIcon, onClick: onAddOneMore, size: "L", className: classnames(styles.addButton, styles.button) })),
88
+ additionalControlsRenderer && additionalControlsRenderer({ attributeType: attributeType, attributeValue: attributeValue }),
89
+ showDeleteButton && (React.createElement(SmallIconButton, { className: styles.button, icon: DeleteIcon, onClick: onDelete, size: "L" })))));
97
90
  };
98
91
  SimpleAttributeEditor.propTypes = {
99
92
  className: PropTypes.string,
@@ -1 +1 @@
1
- export const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"deleted" | "button" | "placeholder" | "wrapper" | "addButton" | "editor" | "editor-value" | "editor-actions" | "editedLabel">;
1
+ export const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"deleted" | "button" | "placeholder" | "wrapper" | "addButton" | "editor" | "errorWrapper" | "editor-value" | "editor-read-only-value" | "editor-actions" | "editedLabel">;
@@ -4,6 +4,9 @@ export var useStyles = makeStyles(function (theme) { return ({
4
4
  wrapper: {
5
5
  width: '100%'
6
6
  },
7
+ errorWrapper: {
8
+ alignSelf: 'stretch'
9
+ },
7
10
  editor: {
8
11
  display: 'flex',
9
12
  flex: 1,
@@ -13,6 +16,11 @@ export var useStyles = makeStyles(function (theme) { return ({
13
16
  'editor-value': {
14
17
  flex: '1 1 auto'
15
18
  },
19
+ 'editor-read-only-value': {
20
+ marginLeft: '12px',
21
+ display: 'flex',
22
+ alignItems: 'center'
23
+ },
16
24
  'editor-actions': {
17
25
  display: 'flex',
18
26
  alignItems: 'center',
@@ -11,7 +11,9 @@ var __assign = (this && this.__assign) || function () {
11
11
  };
12
12
  import React, { useMemo } from 'react';
13
13
  import withPercents from '../HOCs/withPercents';
14
- import { ComposableMap, Geographies, Geography } from 'react-simple-maps';
14
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15
+ // @ts-ignore
16
+ import { Geographies, Geography, MapProvider } from 'react-simple-maps';
15
17
  import { scaleQuantize } from 'd3-scale';
16
18
  import * as d3Geo from 'd3-geo';
17
19
  import { feature } from 'topojson-client';
@@ -57,27 +59,28 @@ export var MapChart = function (_a) {
57
59
  var _d = useTooltipState(), tooltipState = _d.tooltipState, showTooltip = _d.showTooltip, hideTooltip = _d.hideTooltip;
58
60
  var clickable = useClickableStyle(onItemClick);
59
61
  return (React.createElement("div", { className: styles.mapChart, style: { width: width, height: height } },
60
- React.createElement(ComposableMap, { width: mapWidth, height: height, projection: projectionFunc },
61
- React.createElement(Geographies, { geography: geography }, function (_a) {
62
- var geographies = _a.geographies;
63
- return geographies.map(function (geo) {
64
- var geoId = geo.properties[geoIdName || 'name'];
65
- var geoLabel = geo.properties.name;
66
- var cur = data.find(function (_a) {
67
- var group = _a.group;
68
- return group === geoId;
62
+ React.createElement(MapProvider, { width: mapWidth, height: height, projection: projectionFunc, projectionConfig: {} },
63
+ React.createElement("svg", { width: mapWidth, height: height, viewBox: "0 0 " + mapWidth + " " + height, className: 'rsm-svg' },
64
+ React.createElement(Geographies, { geography: geography }, function (_a) {
65
+ var geographies = _a.geographies;
66
+ return geographies.map(function (geo) {
67
+ var geoId = geo.properties[geoIdName || 'name'];
68
+ var geoLabel = geo.properties.name;
69
+ var cur = data.find(function (_a) {
70
+ var group = _a.group;
71
+ return group === geoId;
72
+ });
73
+ return (React.createElement(Geography, { key: geo.rsmKey, geography: geo, fill: cur ? colorScale(cur.value) : '#EEE', stroke: '#FFF', className: classnames(styles.geography, clickable), onMouseEnter: function (event) {
74
+ var data = cur || { label: geoLabel, value: 0, percent: 0, group: geoId };
75
+ var mapRect = event.target.parentElement.parentElement.getBoundingClientRect();
76
+ var coordinate = {
77
+ x: event.clientX - mapRect.x,
78
+ y: event.clientY - mapRect.y
79
+ };
80
+ showTooltip(data, coordinate);
81
+ }, onMouseLeave: function () { return hideTooltip(); }, onClick: onItemClick && (function () { return onItemClick(geoId); }) }));
69
82
  });
70
- return (React.createElement(Geography, { key: geo.rsmKey, geography: geo, fill: cur ? colorScale(cur.value) : '#EEE', stroke: '#FFF', className: classnames(styles.geography, clickable), onMouseEnter: function (event) {
71
- var data = cur || { label: geoLabel, value: 0, percent: 0, group: geoId };
72
- var mapRect = event.target.parentElement.parentElement.getBoundingClientRect();
73
- var coordinate = {
74
- x: event.clientX - mapRect.x,
75
- y: event.clientY - mapRect.y
76
- };
77
- showTooltip(data, coordinate);
78
- }, onMouseLeave: function () { return hideTooltip(); }, onClick: onItemClick && (function () { return onItemClick(geoId); }) }));
79
- });
80
- })),
83
+ }))),
81
84
  showLegend && React.createElement(Legend, { width: LEGEND_WIDTH, minValue: minValue, maxValue: maxValue, colors: MAP_COLORS }),
82
85
  React.createElement(Tooltip, __assign({ viewBox: {
83
86
  x: 0,
@@ -73,7 +73,9 @@ var CrosswalkRow = function (_a) {
73
73
  React.createElement(Typography, { variant: 'body2', className: styles.labelValue, noWrap: true }, crosswalk.value))),
74
74
  expanded && (React.createElement("div", { className: styles.attributesWrapper },
75
75
  canDelete && (React.createElement("div", { className: styles.deleteCrosswalkButton },
76
- React.createElement(SmallIconButtonWithTooltip, { icon: DeleteIcon, disabled: disableDelete, onClick: function () { return setDeleteDialogOpen(true); }, size: "XS", tooltipTitle: i18n.text('Delete crosswalk'), showForDisabled: true }),
76
+ React.createElement(SmallIconButtonWithTooltip, { icon: DeleteIcon, disabled: disableDelete, onClick: function () { return setDeleteDialogOpen(true); }, size: "XS", tooltipTitle: disableDelete
77
+ ? i18n.text("You don't have permissions to delete")
78
+ : i18n.text('Delete crosswalk'), showForDisabled: true }),
77
79
  React.createElement(ConfirmDeleteDialog, { open: isDeleteDialogOpen, onConfirm: handleDeleteCrosswalk, onClose: function () { return setDeleteDialogOpen(false); } }))),
78
80
  React.createElement(CrosswalkAttributes, { crosswalk: crosswalk, canEditAttribute: !disableEdit, onEditAttribute: function (attributeName, value) {
79
81
  onEdit({
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import classnames from 'classnames';
3
+ import { isNil } from 'ramda';
3
4
  import ArrowRightAltIcon from '@material-ui/icons/ArrowRightAlt';
4
5
  import Chip from '@material-ui/core/Chip';
5
6
  import { getOperationLabel } from '../../helpers/helpers';
@@ -12,7 +13,7 @@ var ChangeView = function (_a) {
12
13
  React.createElement("span", { className: styles.fieldName },
13
14
  label,
14
15
  ":"),
15
- React.createElement("span", { className: styles.difference },
16
+ !isNil(value) && React.createElement("span", { className: styles.difference },
16
17
  value,
17
18
  newValue && oldValue && (React.createElement(React.Fragment, null,
18
19
  React.createElement(ArrowRightAltIcon, { className: styles.arrow }),
@@ -10,7 +10,7 @@ var __assign = (this && this.__assign) || function () {
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
12
  import { complement, curry, flatten, is, isEmpty, pathOr, propOr, times } from 'ramda';
13
- import { DataTypes, getAttributeTypeSubAttributes, getLabel, getRelationAttributesList, getRelationType, isSpecialAttribute } from '@reltio/mdm-sdk';
13
+ import { DataTypes, getAttributeTypeSubAttributes, getLabel, getRelationAttributesList, getRelationType, isEmptyValue, isSpecialAttribute } from '@reltio/mdm-sdk';
14
14
  import { getFilteredAttrTypes } from '../../../../attributes/helpers/attributesView';
15
15
  import { getOperationType } from './helpers';
16
16
  import { DCRTypes } from '../../../constants/operations';
@@ -36,16 +36,18 @@ var getEntityChanges = curry(function (metadata, entityInfo, changes) {
36
36
  var attrTypes = getFilteredAttrTypes(metadata, entityInfo.type, [], []);
37
37
  return getAttributesList(metadata, attrTypes, changes);
38
38
  });
39
- var getRelationChanges = curry(function (metadata, relationInfo, changes) {
39
+ var getRelationChanges = curry(function (metadata, relationInfo, changes, changeType) {
40
+ var addRelationOperationIfNeeded = function (changes, changeType) {
41
+ if (changeType === DCRTypes.CREATE_RELATIONSHIP || isEmptyValue(changes)) {
42
+ var operation = getOperationType(changeType);
43
+ return operation ? { operation: operation } : {};
44
+ }
45
+ return {};
46
+ };
40
47
  var relationType = getRelationType(metadata, relationInfo.type);
41
48
  var attrTypes = getRelationAttributesList(metadata, relationInfo.type);
42
49
  return flatten([
43
- {
44
- level: 1,
45
- label: propOr('', 'label', relationType),
46
- attributeType: relationType,
47
- attributeValue: __assign(__assign({}, relationInfo), changes)
48
- },
50
+ __assign({ level: 1, label: propOr('', 'label', relationType), attributeType: relationType, attributeValue: __assign(__assign({}, relationInfo), changes) }, addRelationOperationIfNeeded(changes, changeType)),
49
51
  getAttributesList(metadata, attrTypes, changes, 2)
50
52
  ]);
51
53
  });
@@ -9,7 +9,7 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import { concat, curry, difference, flatten, identity, isNil, omit, pick, pipe, propEq, propOr, reduce } from 'ramda';
12
+ import { concat, curry, difference, flatten, identity, isNil, omit, path, pick, pipe, propEq, propOr, reduce } from 'ramda';
13
13
  import { EntityAttrTypes, generateTempUri, getRoleLabel, isEmptyValue } from '@reltio/mdm-sdk';
14
14
  import { DCRTypes } from '../../../constants/operations';
15
15
  import { getEntityChanges, getRelationChanges } from './attributesHelpers';
@@ -23,7 +23,7 @@ var SPECIAL_ATTRIBUTES_NAMES = [
23
23
  ];
24
24
  var prepareStartOrEndDate = function (_a) {
25
25
  var newValue = _a.newValue, oldValue = _a.oldValue;
26
- var parseValue = function (value) { return (isNaN(value) ? value : parseInt(value)); };
26
+ var parseValue = function (value) { return (isNaN(value) || isEmptyValue(value) ? value : parseInt(value)); };
27
27
  var isExistedValue = function (value) { return (value === null || value === void 0 ? void 0 : value.length) && !isEmptyValue(value); };
28
28
  var isExistNewValue = isExistedValue(newValue);
29
29
  var isExistOldValue = isExistedValue(oldValue);
@@ -208,7 +208,8 @@ var mergeChanges = function (metadata, changes, entityInfo, relationsInfo) {
208
208
  getAttributeChanges(EntityAttrTypes.endDate.name)
209
209
  ], changesTree);
210
210
  var relationsChanges = flatten(relationsInfo.map(function (relationInfo, index) {
211
- return getRelationChanges(metadata, relationInfo, relationsTrees[index]);
211
+ var changeType = path([relationInfo.uri, 0, 'type'], changes);
212
+ return getRelationChanges(metadata, relationInfo, relationsTrees[index], changeType);
212
213
  }));
213
214
  return [entityChanges, relationsChanges];
214
215
  };
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const RelatedObjectUrisContext: React.Context<string[]>;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export var RelatedObjectUrisContext = React.createContext([]);
3
+ RelatedObjectUrisContext.displayName = 'RelatedObjectUrisContext';
@@ -13,3 +13,4 @@ export { CrosswalksDisplayProvider, useCrosswalkColor, useCrosswalkFocus, useCro
13
13
  export { ExpandedAttributesProvider, useAttributeExpanded } from './ExpandedAttributesContext';
14
14
  export { EntityMarkerContext } from './EntityMarkerContext';
15
15
  export { WorkflowTasksContext } from './WorkflowTasksContext';
16
+ export { RelatedObjectUrisContext } from './RelatedObjectUrisContext';
@@ -13,3 +13,4 @@ export { CrosswalksDisplayProvider, useCrosswalkColor, useCrosswalkFocus, useCro
13
13
  export { ExpandedAttributesProvider, useAttributeExpanded } from './ExpandedAttributesContext';
14
14
  export { EntityMarkerContext } from './EntityMarkerContext';
15
15
  export { WorkflowTasksContext } from './WorkflowTasksContext';
16
+ export { RelatedObjectUrisContext } from './RelatedObjectUrisContext';
@@ -1,5 +1,10 @@
1
1
  import { CollaborationObjectTypes, Comment, CommentsMap } from '@reltio/mdm-sdk';
2
- export declare const useCollaboration: (objectIds?: string[], objectTypes?: CollaborationObjectTypes[]) => {
2
+ declare type Props = {
3
+ objectIds?: string[];
4
+ objectTypes?: CollaborationObjectTypes[];
5
+ enabled?: boolean;
6
+ };
7
+ export declare const useCollaboration: ({ objectIds, objectTypes, enabled }: Props) => {
3
8
  clearCurrentComment: () => void;
4
9
  comments: Comment[];
5
10
  commentsMap: CommentsMap;
@@ -18,3 +23,4 @@ export declare const useCollaboration: (objectIds?: string[], objectTypes?: Coll
18
23
  resolveThread: ({ commentId, uri }: any) => void;
19
24
  sending: boolean;
20
25
  };
26
+ export {};
@@ -21,18 +21,18 @@ import { createComment as createCommentRequest, createReply as createReplyReques
21
21
  import mdm from '@reltio/mdm-module';
22
22
  var defaultObjectIds = [];
23
23
  var catchErrorInRequest = function (e) { return console.error('Collaboration error', e); };
24
- export var useCollaboration = function (objectIds, objectTypes) {
25
- if (objectIds === void 0) { objectIds = defaultObjectIds; }
24
+ export var useCollaboration = function (_a) {
25
+ var _b = _a.objectIds, objectIds = _b === void 0 ? defaultObjectIds : _b, objectTypes = _a.objectTypes, _c = _a.enabled, enabled = _c === void 0 ? true : _c;
26
26
  var entity = useSelector(mdm.selectors.getEntity);
27
27
  var tenant = useSelector(mdm.selectors.getTenant);
28
28
  var collaborationPath = useSelector(mdm.selectors.getCollaborationPath);
29
- var isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled);
30
- var _a = useState(null), pageToken = _a[0], setPageToken = _a[1];
31
- var _b = useState([]), comments = _b[0], setComments = _b[1];
32
- var _c = useState(null), commentsMap = _c[0], setCommentsMap = _c[1];
33
- var _d = useState(null), currentComment = _d[0], setCurrentComment = _d[1];
34
- var _e = useState(false), sending = _e[0], setSending = _e[1];
35
- var _f = useState(false), loading = _f[0], setLoading = _f[1];
29
+ var isCollaborationEnabled = useSelector(mdm.selectors.isCollaborationEnabled) && enabled;
30
+ var _d = useState(null), pageToken = _d[0], setPageToken = _d[1];
31
+ var _e = useState([]), comments = _e[0], setComments = _e[1];
32
+ var _f = useState(null), commentsMap = _f[0], setCommentsMap = _f[1];
33
+ var _g = useState(null), currentComment = _g[0], setCurrentComment = _g[1];
34
+ var _h = useState(false), sending = _h[0], setSending = _h[1];
35
+ var _j = useState(false), loading = _j[0], setLoading = _j[1];
36
36
  var addCommentsToCommentsMap = useCallback(function (commentsMap) {
37
37
  setCommentsMap(function (currentCommentsMap) { return (__assign(__assign({}, currentCommentsMap), commentsMap)); });
38
38
  }, []);
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.926",
3
+ "version": "1.4.930",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
7
7
  "dependencies": {
8
8
  "@date-io/moment": "^1.3.5",
9
9
  "@react-google-maps/api": "^2.7.0",
10
- "@reltio/mdm-module": "^1.4.926",
11
- "@reltio/mdm-sdk": "^1.4.926",
10
+ "@reltio/mdm-module": "^1.4.930",
11
+ "@reltio/mdm-sdk": "^1.4.930",
12
12
  "classnames": "^2.2.5",
13
13
  "d3-cloud": "^1.2.5",
14
14
  "d3-geo": "^2.0.1",