@reltio/components 1.4.818 → 1.4.822
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.
- package/components/CollaborationItem/CollaborationItem.d.ts +1 -1
- package/components/CollaborationItem/CollaborationItem.js +2 -3
- package/components/attributes/inline/ComplexAttribute/ComplexAttribute.js +2 -2
- package/components/attributes/inline/SimpleAttribute/SimpleAttribute.js +12 -5
- package/components/attributes/inline/SimpleAttribute/styles.d.ts +3 -2
- package/components/attributes/inline/SimpleAttribute/styles.js +35 -10
- package/components/attributes/inline/common/IgnoreButton.d.ts +2 -1
- package/components/attributes/inline/common/IgnoreButton.js +2 -2
- package/components/attributes/inline/common/PinButton.d.ts +2 -1
- package/components/attributes/inline/common/PinButton.js +2 -2
- package/components/attributes/inline/common/__test__/IgnoreButton.spec.js +9 -5
- package/components/attributes/inline/common/__test__/PinButton.spec.js +9 -5
- package/components/crosswalks/ColoredBlock/ColoredBlock.d.ts +1 -0
- package/components/crosswalks/ColoredBlock/ColoredBlock.js +2 -2
- package/components/crosswalks/ColoredBlock/styles.d.ts +1 -0
- package/components/crosswalks/ColoredBlock/styles.js +13 -6
- package/components/crosswalks/CrosswalkRow/CrosswalkRow.js +4 -3
- package/contexts/CollaborationContext/index.d.ts +3 -0
- package/contexts/CollaborationContext/index.js +4 -1
- package/hooks/useCollaboration.d.ts +3 -0
- package/hooks/useCollaboration.js +42 -18
- package/package.json +3 -3
|
@@ -11,5 +11,5 @@ declare type Props = {
|
|
|
11
11
|
messagesRef?: React.RefCallback<HTMLDivElement>;
|
|
12
12
|
comment?: CommentType;
|
|
13
13
|
};
|
|
14
|
-
export declare const CollaborationItem: ({ uri, relatedObjectUris, objectType, classes, popperRef, messagesRef, comment }: Props) => JSX.Element
|
|
14
|
+
export declare const CollaborationItem: React.MemoExoticComponent<({ uri, relatedObjectUris, objectType, classes, popperRef, messagesRef, comment }: Props) => JSX.Element>;
|
|
15
15
|
export {};
|
|
@@ -29,7 +29,7 @@ var Comment_1 = require("./Comment/Comment");
|
|
|
29
29
|
var RepliedComment_1 = require("./RepliedComment/RepliedComment");
|
|
30
30
|
var SendMessageArea_1 = require("./SendMessageArea/SendMessageArea");
|
|
31
31
|
var styles_1 = require("./styles");
|
|
32
|
-
|
|
32
|
+
exports.CollaborationItem = react_1.memo(function (_a) {
|
|
33
33
|
var uri = _a.uri, relatedObjectUris = _a.relatedObjectUris, objectType = _a.objectType, classes = _a.classes, popperRef = _a.popperRef, messagesRef = _a.messagesRef, comment = _a.comment;
|
|
34
34
|
var inputRef = react_1.useRef();
|
|
35
35
|
var styles = styles_1.useStyles({ classes: classes });
|
|
@@ -51,5 +51,4 @@ var CollaborationItem = function (_a) {
|
|
|
51
51
|
react_1.default.createElement(Box_1.default, { className: styles.replies }, comment.replies.map(function (reply) { return (react_1.default.createElement(RepliedComment_1.RepliedComment, { key: reply.replyId, className: styles.repliedComment, reply: reply })); }))),
|
|
52
52
|
sendMessageArea)),
|
|
53
53
|
!comment && sendMessageArea));
|
|
54
|
-
};
|
|
55
|
-
exports.CollaborationItem = CollaborationItem;
|
|
54
|
+
});
|
|
@@ -61,8 +61,8 @@ var ComplexAttribute = function (_a) {
|
|
|
61
61
|
crosswalks.map(function (crosswalk) { return (react_1.default.createElement(CrosswalkIcon_1.default, { key: mdm_sdk_1.getCrosswalkId(crosswalk), crosswalk: crosswalk, className: styles.crosswalkIcon })); })),
|
|
62
62
|
react_1.default.createElement(index_1.Spacer, null),
|
|
63
63
|
react_1.default.createElement("div", { className: styles.actions },
|
|
64
|
-
showPin && react_1.default.createElement(PinButton_1.default, { isPinned: attributeValue.pin, onClick: function () { return onPin({ attributeValue: attributeValue }); } }),
|
|
65
|
-
showIgnore && (react_1.default.createElement(IgnoreButton_1.default, { isIgnored: attributeValue.ignored, onClick: function () { return onIgnore({ attributeValue: attributeValue }); } })),
|
|
64
|
+
showPin && (react_1.default.createElement(PinButton_1.default, { disabled: !canEdit, isPinned: attributeValue.pin, onClick: function () { return onPin({ attributeValue: attributeValue }); } })),
|
|
65
|
+
showIgnore && (react_1.default.createElement(IgnoreButton_1.default, { disabled: !canEdit, isIgnored: attributeValue.ignored, onClick: function () { return onIgnore({ attributeValue: attributeValue }); } })),
|
|
66
66
|
showDelete && (react_1.default.createElement(DeleteButton_1.default, { onClick: function () {
|
|
67
67
|
return onDelete({
|
|
68
68
|
attributeType: attributeType,
|
|
@@ -44,14 +44,21 @@ var SimpleAttribute = function (_a) {
|
|
|
44
44
|
var _e = useAttributeState_1.useAttributeState(), isReadingMode = _e.isReadingMode, isEditingMode = _e.isEditingMode, isHovered = _e.isHovered, onMouseOver = _e.onMouseOver, onMouseOut = _e.onMouseOut, setReadingMode = _e.setReadingMode, setEditingMode = _e.setEditingMode;
|
|
45
45
|
var containerRef = react_1.useRef();
|
|
46
46
|
var id = mdm_sdk_1.getLastUriPart(attributeValue.uri);
|
|
47
|
-
var
|
|
48
|
-
var
|
|
47
|
+
var crosswalkDisabled = mdm_sdk_1.isCrosswalkDisabled(crosswalk);
|
|
48
|
+
var canModifyAttribute = !attributeType.system && !crosswalkDisabled;
|
|
49
|
+
var canEdit = canModifyAttribute && allowEdit && mdm_sdk_1.checkMetadataForUpdate(mdm_sdk_1.ModeTypes.EDITING, attributeType);
|
|
50
|
+
var canDelete = canModifyAttribute && allowDelete && mdm_sdk_1.checkMetadataForDelete(mdm_sdk_1.ModeTypes.EDITING, attributeType);
|
|
49
51
|
var isTemporary = mdm_sdk_1.isTempUri(attributeValue.uri);
|
|
50
52
|
var showPin = !isTemporary && ((!isReadingMode && canEdit) || attributeValue.pin);
|
|
51
53
|
var showIgnore = !isTemporary && ((!isReadingMode && canEdit) || attributeValue.ignored);
|
|
52
54
|
var color = contexts_1.useCrosswalkColor(crosswalk);
|
|
53
55
|
var _f = contexts_1.useCrosswalkHighlight(crosswalk), isHighlighted = _f.isHighlighted, isDimmed = _f.isDimmed, highlightCrosswalk = _f.highlightCrosswalk, removeHighlight = _f.removeHighlight;
|
|
54
|
-
var styles = styles_1.useStyles({
|
|
56
|
+
var styles = styles_1.useStyles({
|
|
57
|
+
variant: crosswalkDisabled ? 'outlined' : 'filled',
|
|
58
|
+
opaque: !isDimmed,
|
|
59
|
+
fullyColored: isHighlighted,
|
|
60
|
+
color: color
|
|
61
|
+
});
|
|
55
62
|
var actions = [
|
|
56
63
|
{
|
|
57
64
|
crosswalk: crosswalk,
|
|
@@ -88,8 +95,8 @@ var SimpleAttribute = function (_a) {
|
|
|
88
95
|
react_1.default.createElement("div", { className: styles.attributeValue },
|
|
89
96
|
react_1.default.createElement(DataTypeValue_1.default, { value: mdm_sdk_1.getAttributeValue(attributeValue), dataTypeDefinition: mdm_sdk_1.getAttrDataTypeDefinition(attributeType) })),
|
|
90
97
|
react_1.default.createElement("div", { className: styles.actions },
|
|
91
|
-
showPin && react_1.default.createElement(PinButton_1.default, { isPinned: attributeValue.pin, onClick: function () { return onPin({ attributeValue: attributeValue }); } }),
|
|
92
|
-
showIgnore && (react_1.default.createElement(IgnoreButton_1.default, { isIgnored: attributeValue.ignored, onClick: function () { return onIgnore({ attributeValue: attributeValue }); } })),
|
|
98
|
+
showPin && (react_1.default.createElement(PinButton_1.default, { isPinned: attributeValue.pin, onClick: function () { return onPin({ attributeValue: attributeValue }); }, disabled: !canEdit })),
|
|
99
|
+
showIgnore && (react_1.default.createElement(IgnoreButton_1.default, { isIgnored: attributeValue.ignored, onClick: function () { return onIgnore({ attributeValue: attributeValue }); }, disabled: !canEdit })),
|
|
93
100
|
isHovered && (react_1.default.createElement(DropDownMenuButton_1.default, { MenuItemRenderer: CrosswalkMenuItem_1.default, menuId: "simple-attribute-additional-actions-" + id, buttonComponent: SmallIconButton_1.SmallIconButtonWithTooltip, buttonProps: {
|
|
94
101
|
icon: MoreVert_1.default,
|
|
95
102
|
size: 'XS',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
declare type StylesProps = {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
variant: 'filled' | 'outlined';
|
|
3
|
+
fullyColored: boolean;
|
|
4
|
+
opaque: boolean;
|
|
4
5
|
color: string;
|
|
5
6
|
};
|
|
6
7
|
export declare const useStyles: (props: StylesProps) => import("@material-ui/core/styles/withStyles").ClassNameMap<"attributeValue" | "root" | "actions">;
|
|
@@ -1,20 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
exports.useStyles = void 0;
|
|
4
15
|
var styles_1 = require("@material-ui/core/styles");
|
|
5
16
|
exports.useStyles = styles_1.makeStyles(function () { return ({
|
|
6
17
|
root: function (_a) {
|
|
7
|
-
var
|
|
8
|
-
return ({
|
|
9
|
-
height: '28px',
|
|
18
|
+
var fullyColored = _a.fullyColored, opaque = _a.opaque, color = _a.color, variant = _a.variant;
|
|
19
|
+
return (__assign(__assign(__assign({ height: '28px' }, (variant === 'filled' && {
|
|
10
20
|
borderRadius: '4px',
|
|
11
|
-
background:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
background: fullyColored ? color : "linear-gradient(to right, " + color + " 8px, rgba(0,0,0,0.05) 8px)"
|
|
22
|
+
})), (variant === 'outlined' && {
|
|
23
|
+
'&::after': {
|
|
24
|
+
content: '""',
|
|
25
|
+
position: 'absolute',
|
|
26
|
+
background: color,
|
|
27
|
+
borderRadius: '4px 0px 0px 4px',
|
|
28
|
+
width: '8px',
|
|
29
|
+
height: '100%',
|
|
30
|
+
pointerEvents: 'none'
|
|
31
|
+
},
|
|
32
|
+
'&::before': {
|
|
33
|
+
content: '""',
|
|
34
|
+
position: 'absolute',
|
|
35
|
+
boxSizing: 'border-box',
|
|
36
|
+
borderRadius: '4px',
|
|
37
|
+
border: fullyColored ? color + " solid 2px" : 'rgba(0,0,0,0.12) solid 1px',
|
|
38
|
+
width: '100%',
|
|
39
|
+
height: '100%',
|
|
40
|
+
pointerEvents: 'none'
|
|
41
|
+
}
|
|
42
|
+
})), { display: 'flex', alignItems: 'center', maxWidth: '230px', opacity: opaque ? 1 : 0.38, transition: 'opacity 0.3s', position: 'relative' }));
|
|
18
43
|
},
|
|
19
44
|
attributeValue: {
|
|
20
45
|
marginLeft: '16px',
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
declare type Props = {
|
|
3
3
|
isIgnored: boolean;
|
|
4
4
|
onClick: () => void;
|
|
5
|
+
disabled?: boolean;
|
|
5
6
|
};
|
|
6
|
-
declare const IgnoreButton: ({ isIgnored, onClick }: Props) => JSX.Element;
|
|
7
|
+
declare const IgnoreButton: ({ isIgnored, onClick, disabled }: Props) => JSX.Element;
|
|
7
8
|
export default IgnoreButton;
|
|
@@ -9,7 +9,7 @@ var Ignored_1 = __importDefault(require("../../../../icons/Ignored"));
|
|
|
9
9
|
var IgnoredOutlined_1 = __importDefault(require("../../../../icons/IgnoredOutlined"));
|
|
10
10
|
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
11
11
|
var IgnoreButton = function (_a) {
|
|
12
|
-
var isIgnored = _a.isIgnored, onClick = _a.onClick;
|
|
13
|
-
return (react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { icon: isIgnored ? Ignored_1.default : IgnoredOutlined_1.default, tooltipTitle: ui_i18n_1.default.text('Ignore'), onClick: onClick, size: "XS", disableRipple: true }));
|
|
12
|
+
var isIgnored = _a.isIgnored, onClick = _a.onClick, disabled = _a.disabled;
|
|
13
|
+
return (react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { disabled: disabled, showForDisabled: true, icon: isIgnored ? Ignored_1.default : IgnoredOutlined_1.default, tooltipTitle: disabled ? ui_i18n_1.default.text("You don't have permissions to ignore") : ui_i18n_1.default.text('Ignore'), onClick: onClick, size: "XS", disableRipple: true }));
|
|
14
14
|
};
|
|
15
15
|
exports.default = IgnoreButton;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
declare type Props = {
|
|
3
3
|
isPinned: boolean;
|
|
4
4
|
onClick: () => void;
|
|
5
|
+
disabled?: boolean;
|
|
5
6
|
};
|
|
6
|
-
declare const PinButton: ({ isPinned, onClick }: Props) => JSX.Element;
|
|
7
|
+
declare const PinButton: ({ isPinned, onClick, disabled }: Props) => JSX.Element;
|
|
7
8
|
export default PinButton;
|
|
@@ -9,7 +9,7 @@ var Pin_1 = __importDefault(require("../../../../icons/Pin"));
|
|
|
9
9
|
var PinOutlined_1 = __importDefault(require("../../../../icons/PinOutlined"));
|
|
10
10
|
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
11
11
|
var PinButton = function (_a) {
|
|
12
|
-
var isPinned = _a.isPinned, onClick = _a.onClick;
|
|
13
|
-
return (react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { onClick: onClick, icon: isPinned ? Pin_1.default : PinOutlined_1.default, tooltipTitle: ui_i18n_1.default.text('Pin'), size: "XS", disableRipple: true }));
|
|
12
|
+
var isPinned = _a.isPinned, onClick = _a.onClick, disabled = _a.disabled;
|
|
13
|
+
return (react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { disabled: disabled, showForDisabled: true, onClick: onClick, icon: isPinned ? Pin_1.default : PinOutlined_1.default, tooltipTitle: disabled ? "You don't have permissions to pin" : ui_i18n_1.default.text('Pin'), size: "XS", disableRipple: true }));
|
|
14
14
|
};
|
|
15
15
|
exports.default = PinButton;
|
|
@@ -16,15 +16,19 @@ describe('Ignore button test', function () {
|
|
|
16
16
|
onClickFn = jest.fn();
|
|
17
17
|
component = enzyme_1.mount(react_1.default.createElement(IgnoreButton_1.default, { isIgnored: false, onClick: onClickFn }));
|
|
18
18
|
});
|
|
19
|
-
it('should
|
|
20
|
-
expect(getButton(component).
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
});
|
|
19
|
+
it('should pass button props correctly', function () {
|
|
20
|
+
expect(getButton(component).prop('onClick')).toBe(onClickFn);
|
|
21
|
+
component.setProps({ disabled: true });
|
|
22
|
+
expect(getButton(component).prop('disabled')).toBe(true);
|
|
24
23
|
});
|
|
25
24
|
it('should show correct icon', function () {
|
|
26
25
|
expect(getButton(component).prop('icon')).toBe(IgnoredOutlined_1.default);
|
|
27
26
|
component.setProps({ isIgnored: true });
|
|
28
27
|
expect(getButton(component).prop('icon')).toBe(Ignored_1.default);
|
|
29
28
|
});
|
|
29
|
+
it('should show correct tooltip', function () {
|
|
30
|
+
expect(getButton(component).prop('tooltipTitle')).toBe('Ignore');
|
|
31
|
+
component.setProps({ disabled: true });
|
|
32
|
+
expect(getButton(component).prop('tooltipTitle')).toBe("You don't have permissions to ignore");
|
|
33
|
+
});
|
|
30
34
|
});
|
|
@@ -16,15 +16,19 @@ describe('Pin button test', function () {
|
|
|
16
16
|
onClickFn = jest.fn();
|
|
17
17
|
component = enzyme_1.mount(react_1.default.createElement(PinButton_1.default, { isPinned: false, onClick: onClickFn }));
|
|
18
18
|
});
|
|
19
|
-
it('should
|
|
20
|
-
expect(getButton(component).
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
});
|
|
19
|
+
it('should pass button props correctly', function () {
|
|
20
|
+
expect(getButton(component).prop('onClick')).toBe(onClickFn);
|
|
21
|
+
component.setProps({ disabled: true });
|
|
22
|
+
expect(getButton(component).prop('disabled')).toBe(true);
|
|
24
23
|
});
|
|
25
24
|
it('should show correct icon', function () {
|
|
26
25
|
expect(getButton(component).prop('icon')).toBe(PinOutlined_1.default);
|
|
27
26
|
component.setProps({ isPinned: true });
|
|
28
27
|
expect(getButton(component).prop('icon')).toBe(Pin_1.default);
|
|
29
28
|
});
|
|
29
|
+
it('should show correct tooltip', function () {
|
|
30
|
+
expect(getButton(component).prop('tooltipTitle')).toBe('Pin');
|
|
31
|
+
component.setProps({ disabled: true });
|
|
32
|
+
expect(getButton(component).prop('tooltipTitle')).toBe("You don't have permissions to pin");
|
|
33
|
+
});
|
|
30
34
|
});
|
|
@@ -2,5 +2,6 @@ import React from 'react';
|
|
|
2
2
|
declare const ColoredBlock: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
|
|
3
3
|
color: string;
|
|
4
4
|
opacity?: number;
|
|
5
|
+
variant?: 'filled' | 'outlined';
|
|
5
6
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
6
7
|
export default ColoredBlock;
|
|
@@ -48,8 +48,8 @@ var react_1 = __importStar(require("react"));
|
|
|
48
48
|
var classnames_1 = __importDefault(require("classnames"));
|
|
49
49
|
var styles_1 = require("./styles");
|
|
50
50
|
var ColoredBlock = react_1.forwardRef(function (_a, ref) {
|
|
51
|
-
var color = _a.color, opacity = _a.opacity, children = _a.children, className = _a.className, props = __rest(_a, ["color", "opacity", "children", "className"]);
|
|
52
|
-
var styles = styles_1.useColoredItemStyles({ color: color, opacity: opacity });
|
|
51
|
+
var color = _a.color, opacity = _a.opacity, _b = _a.variant, variant = _b === void 0 ? 'filled' : _b, children = _a.children, className = _a.className, props = __rest(_a, ["color", "opacity", "variant", "children", "className"]);
|
|
52
|
+
var styles = styles_1.useColoredItemStyles({ color: color, opacity: opacity, variant: variant });
|
|
53
53
|
return (react_1.default.createElement("div", __assign({ ref: ref, className: classnames_1.default(styles.item, className) }, props), children));
|
|
54
54
|
});
|
|
55
55
|
exports.default = ColoredBlock;
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
exports.useColoredItemStyles = void 0;
|
|
4
15
|
var styles_1 = require("@material-ui/core/styles");
|
|
5
16
|
exports.useColoredItemStyles = styles_1.makeStyles({
|
|
6
17
|
item: function (_a) {
|
|
7
|
-
var color = _a.color, opacity = _a.opacity;
|
|
8
|
-
return ({
|
|
9
|
-
backgroundColor: color,
|
|
10
|
-
opacity: opacity,
|
|
11
|
-
transition: 'opacity 0.3s'
|
|
12
|
-
});
|
|
18
|
+
var color = _a.color, opacity = _a.opacity, variant = _a.variant;
|
|
19
|
+
return (__assign(__assign(__assign({}, (variant === 'filled' && { backgroundColor: color })), (variant === 'outlined' && { border: color + " solid 2px" })), { opacity: opacity, transition: 'opacity 0.3s', boxSizing: 'border-box' }));
|
|
13
20
|
}
|
|
14
21
|
});
|
|
@@ -57,14 +57,15 @@ var CrosswalkRow = function (_a) {
|
|
|
57
57
|
var metadata = react_redux_1.useSelector(mdm_module_1.default.selectors.getMetadata);
|
|
58
58
|
var sourceSystemLabel = mdm_sdk_1.getSourceSystemLabel(metadata, crosswalk.type);
|
|
59
59
|
var crosswalkId = mdm_sdk_1.getLastUriPart(crosswalk.uri);
|
|
60
|
+
var crosswalkDisabled = mdm_sdk_1.isCrosswalkDisabled(crosswalk);
|
|
60
61
|
var _j = react_dnd_1.useDrag({
|
|
61
62
|
item: {
|
|
62
63
|
type: 'Crosswalk',
|
|
63
64
|
crosswalk: crosswalk
|
|
64
65
|
},
|
|
65
|
-
canDrag: !
|
|
66
|
+
canDrag: !crosswalkDisabled
|
|
66
67
|
}), drag = _j[1], preview = _j[2];
|
|
67
|
-
var canDelete = !
|
|
68
|
+
var canDelete = !crosswalkDisabled && crosswalk.ownerType !== 'relation';
|
|
68
69
|
react_1.useEffect(function () {
|
|
69
70
|
preview(react_dnd_html5_backend_1.getEmptyImage(), { captureDraggingState: true });
|
|
70
71
|
}, []);
|
|
@@ -85,7 +86,7 @@ var CrosswalkRow = function (_a) {
|
|
|
85
86
|
return (react_1.default.createElement("div", { className: styles.root, ref: ref },
|
|
86
87
|
react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { size: "XXS", className: styles.focusedIcon, icon: focusable && Visibility_1.default, onClick: function () { return toggleCrosswalkFocus(); }, disabled: !focusable, tooltipTitle: focusable && ui_i18n_1.default.text('Focus') }),
|
|
87
88
|
react_1.default.createElement("div", { className: styles.crosswalkWrapper },
|
|
88
|
-
react_1.default.createElement(ColoredBlock_1.default, { ref: drag, className: styles.header, color: color, onMouseEnter: function () { return highlightCrosswalk(); }, onMouseLeave: function () { return removeHighlight(); } },
|
|
89
|
+
react_1.default.createElement(ColoredBlock_1.default, { ref: drag, className: styles.header, color: color, variant: crosswalkDisabled ? 'outlined' : 'filled', onMouseEnter: function () { return highlightCrosswalk(); }, onMouseLeave: function () { return removeHighlight(); } },
|
|
89
90
|
isDependent && react_1.default.createElement(NestedAttribute_1.default, { className: styles.dependentIcon }),
|
|
90
91
|
react_1.default.createElement(ArrowExpandButton_1.default, { onClick: function () { return setExpanded(function (value) { return !value; }); }, expanded: expanded }),
|
|
91
92
|
react_1.default.createElement(SourceIcon_1.default, { className: styles.sourceIcon, sourceType: crosswalk.type }),
|
|
@@ -3,7 +3,9 @@ import { CollaborationObjectTypes, Comment, CommentsMap, Reply } from '@reltio/m
|
|
|
3
3
|
export declare const CollaborationContext: React.Context<{
|
|
4
4
|
objectTypes?: CollaborationObjectTypes[];
|
|
5
5
|
commentsMap: CommentsMap;
|
|
6
|
+
comments: Comment[];
|
|
6
7
|
currentComment: Comment;
|
|
8
|
+
getComments: (uri: string, pageToken?: string) => void;
|
|
7
9
|
getComment: (commentId: Comment['commentId']) => void;
|
|
8
10
|
createComment: (params: Pick<Comment, 'content' | 'namedUsers' | 'objectType' | 'relatedObjectUris'> & {
|
|
9
11
|
uri: string;
|
|
@@ -29,4 +31,5 @@ export declare const CollaborationContext: React.Context<{
|
|
|
29
31
|
clearCurrentComment: () => void;
|
|
30
32
|
sending: boolean;
|
|
31
33
|
loading: boolean;
|
|
34
|
+
pageToken: string;
|
|
32
35
|
}>;
|
|
@@ -7,9 +7,11 @@ exports.CollaborationContext = void 0;
|
|
|
7
7
|
var react_1 = __importDefault(require("react"));
|
|
8
8
|
var noop = function () { };
|
|
9
9
|
exports.CollaborationContext = react_1.default.createContext({
|
|
10
|
+
comments: [],
|
|
10
11
|
commentsMap: null,
|
|
11
12
|
currentComment: null,
|
|
12
13
|
getComment: noop,
|
|
14
|
+
getComments: function () { return new Promise(noop); },
|
|
13
15
|
createComment: function () { return new Promise(noop); },
|
|
14
16
|
editComment: function () { return new Promise(noop); },
|
|
15
17
|
createReply: function () { return new Promise(noop); },
|
|
@@ -18,6 +20,7 @@ exports.CollaborationContext = react_1.default.createContext({
|
|
|
18
20
|
clearCurrentComment: noop,
|
|
19
21
|
deleteComment: noop,
|
|
20
22
|
sending: false,
|
|
21
|
-
loading: false
|
|
23
|
+
loading: false,
|
|
24
|
+
pageToken: null
|
|
22
25
|
});
|
|
23
26
|
exports.CollaborationContext.displayName = 'CollaborationContext';
|
|
@@ -2,6 +2,7 @@ import { CollaborationObjectTypes, Comment, CommentsMap } from '@reltio/mdm-sdk'
|
|
|
2
2
|
export declare const useCollaboration: (objectIds?: string[], objectTypes?: CollaborationObjectTypes[]) => {
|
|
3
3
|
commentsMap: CommentsMap;
|
|
4
4
|
currentComment: Comment;
|
|
5
|
+
comments: Comment[];
|
|
5
6
|
getComment: (commentId: string) => void;
|
|
6
7
|
createReply: ({ content, namedUsers, commentId, action, uri }: any) => Promise<void>;
|
|
7
8
|
editComment: ({ content, namedUsers, objectType, uri, relatedObjectUris, commentId, replies }: any) => Promise<void>;
|
|
@@ -13,4 +14,6 @@ export declare const useCollaboration: (objectIds?: string[], objectTypes?: Coll
|
|
|
13
14
|
sending: boolean;
|
|
14
15
|
loading: boolean;
|
|
15
16
|
objectTypes: CollaborationObjectTypes[];
|
|
17
|
+
getComments: (relatedObjectUri: string, pageToken?: string) => void;
|
|
18
|
+
pageToken: string;
|
|
16
19
|
};
|
|
@@ -33,10 +33,12 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
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
35
|
var isCollaborationEnabled = react_redux_1.useSelector(mdm_module_1.default.selectors.isCollaborationEnabled);
|
|
36
|
-
var _a = react_1.useState(null),
|
|
37
|
-
var _b = react_1.useState(
|
|
38
|
-
var _c = react_1.useState(
|
|
39
|
-
var _d = react_1.useState(
|
|
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];
|
|
40
42
|
react_1.useEffect(function () {
|
|
41
43
|
if (isCollaborationEnabled && entity) {
|
|
42
44
|
var onError = function (e) {
|
|
@@ -49,6 +51,20 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
49
51
|
setCommentsMap(null);
|
|
50
52
|
}
|
|
51
53
|
}, [entity, isCollaborationEnabled, tenant, collaborationPath, objectIds]);
|
|
54
|
+
var getComments = react_1.useCallback(function (relatedObjectUri, pageToken) {
|
|
55
|
+
mdm_sdk_1.getComments({ collaborationPath: collaborationPath, tenant: tenant, relatedObjectUri: relatedObjectUri, pageToken: pageToken })
|
|
56
|
+
.then(function (_a) {
|
|
57
|
+
var items = _a.items, nextPageToken = _a.nextPageToken;
|
|
58
|
+
setComments(function (prevComments) {
|
|
59
|
+
if (!pageToken) {
|
|
60
|
+
return items;
|
|
61
|
+
}
|
|
62
|
+
return ramda_1.uniqBy(ramda_1.prop('commentId'), __spreadArray(__spreadArray([], prevComments), items));
|
|
63
|
+
});
|
|
64
|
+
setPageToken(nextPageToken);
|
|
65
|
+
})
|
|
66
|
+
.catch(catchErrorInRequest);
|
|
67
|
+
}, [collaborationPath, tenant]);
|
|
52
68
|
var getComment = react_1.useCallback(function (commentId) {
|
|
53
69
|
setLoading(true);
|
|
54
70
|
mdm_sdk_1.getComment({ collaborationPath: collaborationPath, tenant: tenant, commentId: commentId })
|
|
@@ -62,17 +78,11 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
62
78
|
var _a;
|
|
63
79
|
return __assign(__assign({}, prevCommentsMap), (_a = {}, _a[uri] = __spreadArray(__spreadArray([], (prevCommentsMap[uri] || [])), [{ commentId: comment.commentId, replies: 0, status: 'open' }]), _a));
|
|
64
80
|
});
|
|
81
|
+
setComments(function (prevComments) { return __spreadArray([comment], prevComments); });
|
|
65
82
|
};
|
|
66
|
-
var updateCommentInState = function (comment
|
|
83
|
+
var updateCommentInState = function (comment) {
|
|
67
84
|
setCurrentComment(comment);
|
|
68
|
-
|
|
69
|
-
var _a;
|
|
70
|
-
var comments = (prevCommentsMap[uri] || []).map(function (c) {
|
|
71
|
-
return c.commentId === comment.commentId
|
|
72
|
-
? __assign(__assign({}, comment), { replies: (typeof comment.replies === 'number' ? comment.replies : comment.replies.length) || 0 }) : c;
|
|
73
|
-
});
|
|
74
|
-
return __assign(__assign({}, prevCommentsMap), (_a = {}, _a[uri] = comments, _a));
|
|
75
|
-
});
|
|
85
|
+
setComments(ramda_1.map(ramda_1.when(ramda_1.propEq('commentId', comment.commentId), ramda_1.always(comment))));
|
|
76
86
|
};
|
|
77
87
|
var deleteCommentFromState = function (commentId, uri) {
|
|
78
88
|
setCurrentComment(null);
|
|
@@ -81,6 +91,9 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
81
91
|
var comments = prevCommentsMap[uri] || [];
|
|
82
92
|
return __assign(__assign({}, prevCommentsMap), (_a = {}, _a[uri] = comments.filter(function (c) { return c.commentId !== commentId; }), _a));
|
|
83
93
|
});
|
|
94
|
+
setComments(function (prevComments) {
|
|
95
|
+
return prevComments.filter(function (comment) { return comment.commentId !== commentId; });
|
|
96
|
+
});
|
|
84
97
|
};
|
|
85
98
|
var createComment = react_1.useCallback(function (_a) {
|
|
86
99
|
var content = _a.content, namedUsers = _a.namedUsers, objectType = _a.objectType, uri = _a.uri, relatedObjectUris = _a.relatedObjectUris;
|
|
@@ -117,7 +130,7 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
117
130
|
replies: replies
|
|
118
131
|
};
|
|
119
132
|
return mdm_sdk_1.updateComment({ collaborationPath: collaborationPath, tenant: tenant, data: data })
|
|
120
|
-
.then(function (comment) { return updateCommentInState(__assign(__assign({}, comment), { replies: replies })
|
|
133
|
+
.then(function (comment) { return updateCommentInState(__assign(__assign({}, comment), { replies: replies })); })
|
|
121
134
|
.catch(catchErrorInRequest)
|
|
122
135
|
.finally(function () { return setSending(false); });
|
|
123
136
|
}, [collaborationPath, tenant]);
|
|
@@ -129,7 +142,7 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
129
142
|
.catch(catchErrorInRequest)
|
|
130
143
|
.finally(function () { return setSending(false); });
|
|
131
144
|
}, [collaborationPath, tenant]);
|
|
132
|
-
var
|
|
145
|
+
var updateReplyInState = react_1.useCallback(function (reply, uri, commentId) {
|
|
133
146
|
var newStatus = reply.action === 'resolve' ? 'resolved' : 'open';
|
|
134
147
|
if (newStatus === 'resolved') {
|
|
135
148
|
setCurrentComment(function (prevCurrentComment) {
|
|
@@ -154,6 +167,14 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
154
167
|
return comment;
|
|
155
168
|
}), _a)));
|
|
156
169
|
});
|
|
170
|
+
setComments(function (prevComments) {
|
|
171
|
+
return prevComments.map(function (comment) {
|
|
172
|
+
if (comment.commentId === commentId) {
|
|
173
|
+
return __assign(__assign({}, comment), { status: newStatus, replies: __spreadArray(__spreadArray([], comment.replies), [reply]) });
|
|
174
|
+
}
|
|
175
|
+
return comment;
|
|
176
|
+
});
|
|
177
|
+
});
|
|
157
178
|
}, []);
|
|
158
179
|
var createReply = react_1.useCallback(function (_a) {
|
|
159
180
|
var content = _a.content, namedUsers = _a.namedUsers, commentId = _a.commentId, action = _a.action, uri = _a.uri;
|
|
@@ -166,11 +187,11 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
166
187
|
return mdm_sdk_1.createReply({ collaborationPath: collaborationPath, tenant: tenant, commentId: commentId, data: data })
|
|
167
188
|
.then(function (_a) {
|
|
168
189
|
var reply = _a[0];
|
|
169
|
-
return
|
|
190
|
+
return updateReplyInState(reply, uri, commentId);
|
|
170
191
|
})
|
|
171
192
|
.catch(catchErrorInRequest)
|
|
172
193
|
.finally(function () { return setSending(false); });
|
|
173
|
-
}, [collaborationPath, tenant,
|
|
194
|
+
}, [collaborationPath, tenant, updateReplyInState]);
|
|
174
195
|
var resolveThread = react_1.useCallback(function (_a) {
|
|
175
196
|
var commentId = _a.commentId, uri = _a.uri;
|
|
176
197
|
createReply({ content: '', namedUsers: [], commentId: commentId, action: 'resolve', uri: uri });
|
|
@@ -185,6 +206,7 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
185
206
|
return {
|
|
186
207
|
commentsMap: commentsMap,
|
|
187
208
|
currentComment: currentComment,
|
|
209
|
+
comments: comments,
|
|
188
210
|
getComment: getComment,
|
|
189
211
|
createReply: createReply,
|
|
190
212
|
editComment: editComment,
|
|
@@ -195,7 +217,9 @@ var useCollaboration = function (objectIds, objectTypes) {
|
|
|
195
217
|
reOpenThread: reOpenThread,
|
|
196
218
|
sending: sending,
|
|
197
219
|
loading: loading,
|
|
198
|
-
objectTypes: objectTypes
|
|
220
|
+
objectTypes: objectTypes,
|
|
221
|
+
getComments: getComments,
|
|
222
|
+
pageToken: pageToken
|
|
199
223
|
};
|
|
200
224
|
};
|
|
201
225
|
exports.useCollaboration = useCollaboration;
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reltio/components",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.822",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE FILE",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@date-io/moment": "^1.3.5",
|
|
8
8
|
"@react-google-maps/api": "^2.7.0",
|
|
9
|
-
"@reltio/mdm-module": "^1.4.
|
|
10
|
-
"@reltio/mdm-sdk": "^1.4.
|
|
9
|
+
"@reltio/mdm-module": "^1.4.822",
|
|
10
|
+
"@reltio/mdm-sdk": "^1.4.822",
|
|
11
11
|
"classnames": "^2.2.5",
|
|
12
12
|
"frontend-collective-react-dnd-scrollzone": "^1.0.2",
|
|
13
13
|
"nanoid": "^2.0.0",
|