@reltio/components 1.4.1164 → 1.4.1168
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/cjs/components/CollaborationItem/CollaborationItem.js +3 -10
- package/cjs/components/CollaborationItem/Comment/Comment.d.ts +3 -2
- package/cjs/components/CollaborationItem/Comment/Comment.js +24 -14
- package/cjs/components/CollaborationItem/Comment/styles.d.ts +1 -1
- package/cjs/components/CollaborationItem/RepliedComment/RepliedComment.d.ts +7 -4
- package/cjs/components/CollaborationItem/RepliedComment/RepliedComment.js +57 -5
- package/cjs/components/CollaborationItem/SendMessageArea/SendMessageArea.d.ts +6 -4
- package/cjs/components/CollaborationItem/SendMessageArea/SendMessageArea.js +30 -12
- package/cjs/components/CollaborationItem/SendMessageArea/styles.d.ts +5 -1
- package/cjs/components/CollaborationItem/SendMessageArea/styles.js +15 -9
- package/cjs/components/CollaborationItem/TextFieldWithMentions/styles.js +1 -3
- package/cjs/components/attributes/editMode/AttributesList/AttributesList.d.ts +3 -1
- package/cjs/components/attributes/editMode/AttributesList/AttributesList.js +9 -4
- package/cjs/components/attributes/editMode/ComplexAttribute/ComplexAttribute.js +1 -1
- package/cjs/components/attributes/editMode/MoreAttributesButton/MoreAttributesButton.d.ts +3 -1
- package/cjs/components/attributes/editMode/MoreAttributesButton/MoreAttributesButton.js +22 -23
- package/cjs/components/attributes/editMode/MoreAttributesButton/helpers.d.ts +8 -0
- package/cjs/components/attributes/editMode/MoreAttributesButton/helpers.js +18 -0
- package/cjs/components/attributes/editMode/MoreAttributesButton/styles.d.ts +1 -1
- package/cjs/components/attributes/editMode/MoreAttributesButton/styles.js +20 -0
- package/cjs/components/attributes/editMode/MoreAttributesButton/useMoreAttributesItems.d.ts +22 -0
- package/cjs/components/attributes/editMode/MoreAttributesButton/useMoreAttributesItems.js +60 -0
- package/cjs/contexts/CollaborationContext/index.d.ts +8 -0
- package/cjs/contexts/CollaborationContext/index.js +3 -1
- package/cjs/hooks/useCollaboration.d.ts +2 -0
- package/cjs/hooks/useCollaboration.js +57 -5
- package/esm/components/CollaborationItem/CollaborationItem.js +4 -11
- package/esm/components/CollaborationItem/Comment/Comment.d.ts +3 -2
- package/esm/components/CollaborationItem/Comment/Comment.js +25 -15
- package/esm/components/CollaborationItem/Comment/styles.d.ts +1 -1
- package/esm/components/CollaborationItem/RepliedComment/RepliedComment.d.ts +7 -4
- package/esm/components/CollaborationItem/RepliedComment/RepliedComment.js +38 -5
- package/esm/components/CollaborationItem/SendMessageArea/SendMessageArea.d.ts +6 -4
- package/esm/components/CollaborationItem/SendMessageArea/SendMessageArea.js +30 -12
- package/esm/components/CollaborationItem/SendMessageArea/styles.d.ts +5 -1
- package/esm/components/CollaborationItem/SendMessageArea/styles.js +15 -9
- package/esm/components/CollaborationItem/TextFieldWithMentions/styles.js +1 -3
- package/esm/components/attributes/editMode/AttributesList/AttributesList.d.ts +3 -1
- package/esm/components/attributes/editMode/AttributesList/AttributesList.js +10 -5
- package/esm/components/attributes/editMode/ComplexAttribute/ComplexAttribute.js +1 -1
- package/esm/components/attributes/editMode/MoreAttributesButton/MoreAttributesButton.d.ts +3 -1
- package/esm/components/attributes/editMode/MoreAttributesButton/MoreAttributesButton.js +23 -24
- package/esm/components/attributes/editMode/MoreAttributesButton/helpers.d.ts +8 -0
- package/esm/components/attributes/editMode/MoreAttributesButton/helpers.js +15 -0
- package/esm/components/attributes/editMode/MoreAttributesButton/styles.d.ts +1 -1
- package/esm/components/attributes/editMode/MoreAttributesButton/styles.js +20 -0
- package/esm/components/attributes/editMode/MoreAttributesButton/useMoreAttributesItems.d.ts +22 -0
- package/esm/components/attributes/editMode/MoreAttributesButton/useMoreAttributesItems.js +53 -0
- package/esm/contexts/CollaborationContext/index.d.ts +8 -0
- package/esm/contexts/CollaborationContext/index.js +3 -1
- package/esm/hooks/useCollaboration.d.ts +2 -0
- package/esm/hooks/useCollaboration.js +58 -6
- package/package.json +3 -3
|
@@ -33,22 +33,15 @@ 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 });
|
|
36
|
-
var _b = react_1.useState(false), isEditingComment = _b[0], setIsEditingComment = _b[1];
|
|
37
36
|
var handleReply = function () {
|
|
38
|
-
if (isEditingComment) {
|
|
39
|
-
setIsEditingComment(false);
|
|
40
|
-
}
|
|
41
37
|
inputRef.current.focus();
|
|
42
38
|
};
|
|
43
|
-
var
|
|
44
|
-
setIsEditingComment(true);
|
|
45
|
-
};
|
|
46
|
-
var sendMessageArea = (react_1.default.createElement(SendMessageArea_1.SendMessageArea, { className: styles.sendMessageArea, inputRef: inputRef, popperRef: popperRef, uri: uri, relatedObjectUris: relatedObjectUris, objectType: objectType, comment: comment, onCancel: function () { return setIsEditingComment(false); }, isEditingComment: isEditingComment }));
|
|
39
|
+
var sendMessageArea = (react_1.default.createElement(SendMessageArea_1.SendMessageArea, { className: styles.sendMessageArea, inputRef: inputRef, popperRef: popperRef, uri: uri, relatedObjectUris: relatedObjectUris, objectType: objectType, comment: comment }));
|
|
47
40
|
return (react_1.default.createElement(Box_1.default, { className: styles.root },
|
|
48
41
|
comment && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
49
42
|
react_1.default.createElement("div", { className: styles.messages, ref: messagesRef },
|
|
50
|
-
react_1.default.createElement(Comment_1.Comment, { comment: comment, uri: uri, onReply: handleReply,
|
|
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 })); }))),
|
|
43
|
+
react_1.default.createElement(Comment_1.Comment, { comment: comment, uri: uri, onReply: handleReply, className: styles.comment, relatedObjectUris: relatedObjectUris, objectType: objectType }),
|
|
44
|
+
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, uri: uri, comment: comment })); }))),
|
|
52
45
|
sendMessageArea)),
|
|
53
46
|
!comment && sendMessageArea));
|
|
54
47
|
});
|
|
@@ -5,7 +5,8 @@ declare type Props = {
|
|
|
5
5
|
onReply: () => void;
|
|
6
6
|
className?: string;
|
|
7
7
|
comment: CommentType;
|
|
8
|
-
|
|
8
|
+
relatedObjectUris: CommentType['relatedObjectUris'];
|
|
9
|
+
objectType: CommentType['objectType'];
|
|
9
10
|
};
|
|
10
|
-
export declare const Comment: ({ onReply, className, uri, comment,
|
|
11
|
+
export declare const Comment: ({ onReply, className, uri, comment, relatedObjectUris, objectType }: Props) => JSX.Element;
|
|
11
12
|
export {};
|
|
@@ -24,11 +24,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
exports.Comment = void 0;
|
|
26
26
|
var react_1 = __importStar(require("react"));
|
|
27
|
+
var react_redux_1 = require("react-redux");
|
|
27
28
|
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
28
29
|
var Link_1 = __importDefault(require("@material-ui/core/Link"));
|
|
29
30
|
var Box_1 = __importDefault(require("@material-ui/core/Box"));
|
|
30
31
|
var Typography_1 = __importDefault(require("@material-ui/core/Typography"));
|
|
31
32
|
var MoreVert_1 = __importDefault(require("@material-ui/icons/MoreVert"));
|
|
33
|
+
var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
|
|
32
34
|
var DropDownMenuButton_1 = __importDefault(require("../../DropDownMenuButton/DropDownMenuButton"));
|
|
33
35
|
var SmallIconButton_1 = require("../../SmallIconButton");
|
|
34
36
|
var CommentTarget_1 = require("../CommentTarget/CommentTarget");
|
|
@@ -36,44 +38,52 @@ var CommentContent_1 = require("../CommentContent/CommentContent");
|
|
|
36
38
|
var Avatar_1 = require("../Avatar/Avatar");
|
|
37
39
|
var contexts_1 = require("../../../contexts");
|
|
38
40
|
var utils_1 = require("../utils");
|
|
41
|
+
var SendMessageArea_1 = require("../SendMessageArea/SendMessageArea");
|
|
39
42
|
var styles_1 = require("./styles");
|
|
40
|
-
var react_redux_1 = require("react-redux");
|
|
41
|
-
var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
|
|
42
43
|
var Comment = function (_a) {
|
|
43
|
-
var onReply = _a.onReply, className = _a.className, uri = _a.uri, comment = _a.comment,
|
|
44
|
+
var onReply = _a.onReply, className = _a.className, uri = _a.uri, comment = _a.comment, relatedObjectUris = _a.relatedObjectUris, objectType = _a.objectType;
|
|
44
45
|
var styles = styles_1.useStyles();
|
|
46
|
+
var inputRef = react_1.useRef();
|
|
47
|
+
var _b = react_1.useState(false), isEditingComment = _b[0], setIsEditingComment = _b[1];
|
|
45
48
|
var username = react_redux_1.useSelector(mdm_module_1.default.selectors.getUserName);
|
|
46
|
-
var
|
|
47
|
-
var
|
|
49
|
+
var commentId = comment.commentId, createdBy = comment.createdBy, createdTime = comment.createdTime;
|
|
50
|
+
var canChangeComment = createdBy === username;
|
|
51
|
+
var _c = react_1.useContext(contexts_1.CollaborationContext), resolveThread = _c.resolveThread, reOpenThread = _c.reOpenThread, sending = _c.sending, deleteComment = _c.deleteComment;
|
|
52
|
+
react_1.useEffect(function () {
|
|
53
|
+
if (isEditingComment) {
|
|
54
|
+
inputRef.current.focus();
|
|
55
|
+
}
|
|
56
|
+
}, [isEditingComment]);
|
|
48
57
|
var menuItems = react_1.useMemo(function () { return [
|
|
49
58
|
{
|
|
50
59
|
text: ui_i18n_1.default.text('Edit'),
|
|
51
|
-
onClick:
|
|
60
|
+
onClick: function () { return setIsEditingComment(true); }
|
|
52
61
|
},
|
|
53
62
|
{
|
|
54
63
|
text: ui_i18n_1.default.text('Delete'),
|
|
55
|
-
onClick: function () { return deleteComment({ uri: uri, commentId:
|
|
64
|
+
onClick: function () { return deleteComment({ uri: uri, commentId: commentId }); }
|
|
56
65
|
}
|
|
57
|
-
]; }, [
|
|
66
|
+
]; }, [deleteComment, uri, commentId]);
|
|
58
67
|
var handleResolve = function () {
|
|
59
|
-
resolveThread({ commentId:
|
|
68
|
+
resolveThread({ commentId: commentId, uri: uri });
|
|
60
69
|
};
|
|
61
70
|
var handleReOpen = function () {
|
|
62
|
-
reOpenThread({ commentId:
|
|
71
|
+
reOpenThread({ commentId: commentId, uri: uri });
|
|
63
72
|
};
|
|
73
|
+
var sendMessageArea = (react_1.default.createElement(SendMessageArea_1.SendMessageArea, { inputRef: inputRef, uri: uri, relatedObjectUris: relatedObjectUris, objectType: objectType, onCancel: function () { return setIsEditingComment(false); }, isEditingComment: isEditingComment, comment: comment }));
|
|
64
74
|
return (react_1.default.createElement(Box_1.default, { className: className },
|
|
65
75
|
react_1.default.createElement(Box_1.default, { className: styles.header },
|
|
66
|
-
react_1.default.createElement(Avatar_1.Avatar, { classes: { root: styles.avatar } },
|
|
76
|
+
react_1.default.createElement(Avatar_1.Avatar, { classes: { root: styles.avatar } }, createdBy),
|
|
67
77
|
react_1.default.createElement(Box_1.default, { width: "100%" },
|
|
68
|
-
react_1.default.createElement(Typography_1.default, { className: styles.username },
|
|
69
|
-
react_1.default.createElement(Typography_1.default, { className: styles.createdAt }, utils_1.formatDate(
|
|
78
|
+
react_1.default.createElement(Typography_1.default, { className: styles.username }, createdBy)),
|
|
79
|
+
react_1.default.createElement(Typography_1.default, { className: styles.createdAt }, utils_1.formatDate(createdTime)),
|
|
70
80
|
canChangeComment && (react_1.default.createElement(DropDownMenuButton_1.default, { buttonComponent: SmallIconButton_1.SmallIconButtonWithTooltip, buttonProps: {
|
|
71
81
|
icon: MoreVert_1.default,
|
|
72
82
|
tooltipTitle: ui_i18n_1.default.text('Open menu')
|
|
73
83
|
}, popoverProps: { PopoverClasses: { root: styles.dropdownMenu } }, menuItems: menuItems, menuId: "collaboration-comment-menu" }))),
|
|
74
84
|
react_1.default.createElement(Box_1.default, { className: styles.body },
|
|
75
85
|
react_1.default.createElement(CommentTarget_1.CommentTarget, { comment: comment, className: styles.commentTarget }),
|
|
76
|
-
react_1.default.createElement(CommentContent_1.CommentContent, { comment: comment, className: styles.message }),
|
|
86
|
+
isEditingComment ? sendMessageArea : react_1.default.createElement(CommentContent_1.CommentContent, { comment: comment, className: styles.message }),
|
|
77
87
|
react_1.default.createElement(Box_1.default, { className: styles.buttons },
|
|
78
88
|
react_1.default.createElement(Link_1.default, { className: styles.button, onClick: onReply, component: "button" }, ui_i18n_1.default.text('Reply')),
|
|
79
89
|
comment.status === 'open' && (react_1.default.createElement(Link_1.default, { disabled: sending, className: styles.button, onClick: handleResolve, component: "button" }, ui_i18n_1.default.text('Resolve'))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"body" | "message" | "button" | "header" | "avatar" | "username" | "
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"body" | "message" | "button" | "header" | "avatar" | "username" | "buttons" | "createdAt" | "commentTarget" | "dropdownMenu">;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
import { Reply } from '@reltio/mdm-sdk';
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Reply, Comment as CommentType } from '@reltio/mdm-sdk';
|
|
3
3
|
declare type Props = {
|
|
4
4
|
className?: string;
|
|
5
|
-
reply: Pick<Reply, 'createdTime' | 'content' | 'createdBy' | 'action' | 'namedUsers'>;
|
|
5
|
+
reply: Pick<Reply, 'createdTime' | 'content' | 'createdBy' | 'action' | 'namedUsers' | 'replyId'>;
|
|
6
|
+
comment?: CommentType;
|
|
7
|
+
uri: string;
|
|
8
|
+
popperRef?: React.RefObject<any>;
|
|
6
9
|
};
|
|
7
|
-
export declare const RepliedComment: ({ className, reply }: Props) => JSX.Element;
|
|
10
|
+
export declare const RepliedComment: ({ className, reply, uri, comment, popperRef }: Props) => JSX.Element;
|
|
8
11
|
export {};
|
|
@@ -1,30 +1,82 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
2
21
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
23
|
};
|
|
5
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
25
|
exports.RepliedComment = void 0;
|
|
7
|
-
var react_1 =
|
|
26
|
+
var react_1 = __importStar(require("react"));
|
|
27
|
+
var react_redux_1 = require("react-redux");
|
|
8
28
|
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
9
29
|
var classnames_1 = __importDefault(require("classnames"));
|
|
30
|
+
var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
|
|
10
31
|
var Box_1 = __importDefault(require("@material-ui/core/Box"));
|
|
32
|
+
var MoreVert_1 = __importDefault(require("@material-ui/icons/MoreVert"));
|
|
11
33
|
var Typography_1 = __importDefault(require("@material-ui/core/Typography"));
|
|
12
34
|
var Avatar_1 = require("../Avatar/Avatar");
|
|
13
35
|
var CommentContent_1 = require("../CommentContent/CommentContent");
|
|
14
36
|
var utils_1 = require("../utils");
|
|
15
37
|
var styles_1 = require("./styles");
|
|
38
|
+
var contexts_1 = require("../../../contexts");
|
|
39
|
+
var DropDownMenuButton_1 = __importDefault(require("../../DropDownMenuButton/DropDownMenuButton"));
|
|
40
|
+
var SmallIconButton_1 = require("../../SmallIconButton");
|
|
41
|
+
var SendMessageArea_1 = require("../SendMessageArea/SendMessageArea");
|
|
16
42
|
var RepliedComment = function (_a) {
|
|
17
|
-
var className = _a.className, reply = _a.reply;
|
|
43
|
+
var className = _a.className, reply = _a.reply, uri = _a.uri, comment = _a.comment, popperRef = _a.popperRef;
|
|
44
|
+
var inputRef = react_1.useRef();
|
|
45
|
+
var _b = react_1.useState(false), isEditingReply = _b[0], setIsEditingReply = _b[1];
|
|
18
46
|
var createdBy = reply.createdBy, action = reply.action, createdTime = reply.createdTime;
|
|
47
|
+
var username = react_redux_1.useSelector(mdm_module_1.default.selectors.getUserName);
|
|
48
|
+
var canChangeReply = createdBy === username;
|
|
49
|
+
var deleteReply = react_1.useContext(contexts_1.CollaborationContext).deleteReply;
|
|
50
|
+
react_1.useEffect(function () {
|
|
51
|
+
if (isEditingReply) {
|
|
52
|
+
inputRef.current.focus();
|
|
53
|
+
}
|
|
54
|
+
}, [isEditingReply]);
|
|
19
55
|
var styles = styles_1.useStyles();
|
|
56
|
+
var menuItems = react_1.useMemo(function () { return [
|
|
57
|
+
{
|
|
58
|
+
text: ui_i18n_1.default.text('Edit'),
|
|
59
|
+
onClick: function () { return setIsEditingReply(true); }
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
text: ui_i18n_1.default.text('Delete'),
|
|
63
|
+
onClick: function () { return deleteReply({ uri: uri, commentId: comment.commentId, reply: reply }); }
|
|
64
|
+
}
|
|
65
|
+
]; }, [deleteReply, uri, comment.commentId, reply]);
|
|
66
|
+
var sendMessageArea = (react_1.default.createElement(SendMessageArea_1.SendMessageArea, { inputRef: inputRef, popperRef: popperRef, uri: uri, onCancel: function () { return setIsEditingReply(false); }, isEditingReply: isEditingReply, reply: reply, comment: comment }));
|
|
20
67
|
return (react_1.default.createElement(Box_1.default, { className: classnames_1.default(styles.root, className) },
|
|
21
68
|
react_1.default.createElement(Avatar_1.Avatar, { classes: { root: styles.avatar } }, createdBy),
|
|
22
|
-
react_1.default.createElement(Box_1.default,
|
|
69
|
+
react_1.default.createElement(Box_1.default, { flexGrow: 1 },
|
|
23
70
|
react_1.default.createElement(Box_1.default, { className: styles.header },
|
|
24
71
|
react_1.default.createElement(Typography_1.default, { className: styles.username }, createdBy),
|
|
25
72
|
action === 'resolve' && (react_1.default.createElement(Typography_1.default, { className: styles.marked }, ui_i18n_1.default.text('Marked as resolved'))),
|
|
26
73
|
action === 'reopen' && react_1.default.createElement(Typography_1.default, { className: styles.marked }, ui_i18n_1.default.text('Re-opened'))),
|
|
27
|
-
action !== 'resolve' &&
|
|
28
|
-
|
|
74
|
+
action !== 'resolve' &&
|
|
75
|
+
(isEditingReply ? sendMessageArea : react_1.default.createElement(CommentContent_1.CommentContent, { className: styles.message, comment: reply })),
|
|
76
|
+
react_1.default.createElement(Typography_1.default, { className: styles.createdAt }, utils_1.formatDate(createdTime))),
|
|
77
|
+
canChangeReply && (react_1.default.createElement(DropDownMenuButton_1.default, { buttonComponent: SmallIconButton_1.SmallIconButtonWithTooltip, buttonProps: {
|
|
78
|
+
icon: MoreVert_1.default,
|
|
79
|
+
tooltipTitle: ui_i18n_1.default.text('Open menu')
|
|
80
|
+
}, menuItems: menuItems, menuId: "collaboration-comment-menu" }))));
|
|
29
81
|
};
|
|
30
82
|
exports.RepliedComment = RepliedComment;
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Comment } from '@reltio/mdm-sdk';
|
|
2
|
+
import { Comment, Reply } from '@reltio/mdm-sdk';
|
|
3
3
|
declare type Props = {
|
|
4
4
|
inputRef: React.RefObject<HTMLInputElement>;
|
|
5
5
|
className?: string;
|
|
6
6
|
uri: string;
|
|
7
|
-
objectType
|
|
8
|
-
relatedObjectUris
|
|
7
|
+
objectType?: Comment['objectType'];
|
|
8
|
+
relatedObjectUris?: Comment['relatedObjectUris'];
|
|
9
9
|
popperRef?: React.RefObject<any>;
|
|
10
10
|
comment?: Comment;
|
|
11
|
+
reply?: Pick<Reply, 'content' | 'replyId'>;
|
|
11
12
|
isEditingComment?: boolean;
|
|
13
|
+
isEditingReply?: boolean;
|
|
12
14
|
onCancel?: () => void;
|
|
13
15
|
};
|
|
14
|
-
export declare const SendMessageArea: ({ inputRef, className, uri, relatedObjectUris, objectType, popperRef, comment, isEditingComment, onCancel }: Props) => JSX.Element;
|
|
16
|
+
export declare const SendMessageArea: ({ inputRef, className, uri, relatedObjectUris, objectType, popperRef, comment, reply, isEditingComment, isEditingReply, onCancel }: Props) => JSX.Element;
|
|
15
17
|
export {};
|
|
@@ -27,6 +27,7 @@ var react_1 = __importStar(require("react"));
|
|
|
27
27
|
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
28
28
|
var classnames_1 = __importDefault(require("classnames"));
|
|
29
29
|
var react_redux_1 = require("react-redux");
|
|
30
|
+
var ramda_1 = require("ramda");
|
|
30
31
|
var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
|
|
31
32
|
var Box_1 = __importDefault(require("@material-ui/core/Box"));
|
|
32
33
|
var Button_1 = __importDefault(require("@material-ui/core/Button"));
|
|
@@ -34,7 +35,6 @@ var TextFieldWithMentions_1 = require("../TextFieldWithMentions/TextFieldWithMen
|
|
|
34
35
|
var Avatar_1 = require("../Avatar/Avatar");
|
|
35
36
|
var contexts_1 = require("../../../contexts");
|
|
36
37
|
var styles_1 = require("./styles");
|
|
37
|
-
var ramda_1 = require("ramda");
|
|
38
38
|
var hooks_1 = require("../../../hooks");
|
|
39
39
|
var getPlaceholder = function (status) {
|
|
40
40
|
switch (status) {
|
|
@@ -46,8 +46,8 @@ var getPlaceholder = function (status) {
|
|
|
46
46
|
return '';
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
|
-
var getButtonText = function (status, isEditingComment) {
|
|
50
|
-
if (isEditingComment) {
|
|
49
|
+
var getButtonText = function (status, isEditingComment, isEditingReply) {
|
|
50
|
+
if (isEditingComment || isEditingReply) {
|
|
51
51
|
return ui_i18n_1.default.text('Edit');
|
|
52
52
|
}
|
|
53
53
|
if (status === 'open' || status === 'resolved') {
|
|
@@ -56,10 +56,11 @@ var getButtonText = function (status, isEditingComment) {
|
|
|
56
56
|
return ui_i18n_1.default.text('Comment');
|
|
57
57
|
};
|
|
58
58
|
var SendMessageArea = function (_a) {
|
|
59
|
-
var inputRef = _a.inputRef, className = _a.className, uri = _a.uri, relatedObjectUris = _a.relatedObjectUris, objectType = _a.objectType, popperRef = _a.popperRef, comment = _a.comment, isEditingComment = _a.isEditingComment, onCancel = _a.onCancel;
|
|
60
|
-
var
|
|
59
|
+
var inputRef = _a.inputRef, className = _a.className, uri = _a.uri, relatedObjectUris = _a.relatedObjectUris, objectType = _a.objectType, popperRef = _a.popperRef, comment = _a.comment, reply = _a.reply, isEditingComment = _a.isEditingComment, isEditingReply = _a.isEditingReply, onCancel = _a.onCancel;
|
|
60
|
+
var isEditing = isEditingComment || isEditingReply;
|
|
61
|
+
var styles = styles_1.useStyles({ isEditing: isEditing });
|
|
61
62
|
var username = react_redux_1.useSelector(mdm_module_1.default.selectors.getUserName);
|
|
62
|
-
var _b = react_1.useContext(contexts_1.CollaborationContext), createReply = _b.createReply, createComment = _b.createComment, sending = _b.sending, editComment = _b.editComment;
|
|
63
|
+
var _b = react_1.useContext(contexts_1.CollaborationContext), createReply = _b.createReply, createComment = _b.createComment, sending = _b.sending, editComment = _b.editComment, editReply = _b.editReply;
|
|
63
64
|
var _c = react_1.useState(''), value = _c[0], setValue = _c[1];
|
|
64
65
|
var _d = react_1.useState(''), plainTextValue = _d[0], setPlainTextValue = _d[1];
|
|
65
66
|
var _e = react_1.useState([]), mentions = _e[0], setMentions = _e[1];
|
|
@@ -112,6 +113,17 @@ var SendMessageArea = function (_a) {
|
|
|
112
113
|
});
|
|
113
114
|
}
|
|
114
115
|
],
|
|
116
|
+
[
|
|
117
|
+
ramda_1.always(isEditingReply),
|
|
118
|
+
function () {
|
|
119
|
+
return editReply({
|
|
120
|
+
content: plainTextValue,
|
|
121
|
+
namedUsers: mentions,
|
|
122
|
+
commentId: comment.commentId,
|
|
123
|
+
replyId: reply.replyId
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
],
|
|
115
127
|
[
|
|
116
128
|
ramda_1.T,
|
|
117
129
|
function () {
|
|
@@ -133,20 +145,26 @@ var SendMessageArea = function (_a) {
|
|
|
133
145
|
}
|
|
134
146
|
}, [popperRef, shouldShowButtons]);
|
|
135
147
|
react_1.useEffect(function () {
|
|
136
|
-
if (isEditingComment) {
|
|
137
|
-
|
|
148
|
+
if (isEditingComment || isEditingReply) {
|
|
149
|
+
if (isEditingComment) {
|
|
150
|
+
setValue(comment.content);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
setValue(reply.content);
|
|
154
|
+
}
|
|
138
155
|
}
|
|
139
156
|
else {
|
|
140
157
|
clearValue();
|
|
141
158
|
}
|
|
142
|
-
}, [isEditingComment]);
|
|
159
|
+
}, [isEditingComment, isEditingReply]);
|
|
160
|
+
var buttonSize = isEditing ? 'small' : 'medium';
|
|
143
161
|
return (react_1.default.createElement(Box_1.default, { className: classnames_1.default(styles.root, className) },
|
|
144
162
|
react_1.default.createElement("form", { onSubmit: handleSubmit, className: styles.form },
|
|
145
163
|
react_1.default.createElement(Box_1.default, { className: styles.main },
|
|
146
|
-
react_1.default.createElement(Avatar_1.Avatar, { classes: { root: styles.avatar } }, username),
|
|
164
|
+
!isEditing && react_1.default.createElement(Avatar_1.Avatar, { classes: { root: styles.avatar } }, username),
|
|
147
165
|
react_1.default.createElement(TextFieldWithMentions_1.TextFieldWithMentions, { className: styles.textField, disabled: sending, onChange: handleChange, inputRef: inputRef, value: value, onFocus: handleFocus, onBlur: handleBlur, placeholder: getPlaceholder(status) })),
|
|
148
166
|
shouldShowButtons && (react_1.default.createElement(Box_1.default, { className: styles.buttons },
|
|
149
|
-
react_1.default.createElement(Button_1.default, { className: styles.button, variant: "contained", color: "primary", disabled: !hasValue || sending, type: "submit" }, getButtonText(status, isEditingComment)),
|
|
150
|
-
react_1.default.createElement(Button_1.default, { disabled: sending, onClick: handleCancel, className: styles.button, variant: "outlined", color: "primary" }, ui_i18n_1.default.text('Cancel')))))));
|
|
167
|
+
react_1.default.createElement(Button_1.default, { className: styles.button, variant: "contained", color: "primary", disabled: !hasValue || sending, type: "submit", size: buttonSize }, getButtonText(status, isEditingComment, isEditingReply)),
|
|
168
|
+
react_1.default.createElement(Button_1.default, { disabled: sending, onClick: handleCancel, className: styles.button, variant: "outlined", color: "primary", size: buttonSize }, ui_i18n_1.default.text('Cancel')))))));
|
|
151
169
|
};
|
|
152
170
|
exports.SendMessageArea = SendMessageArea;
|
|
@@ -1 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
declare type StylesProps = {
|
|
2
|
+
isEditing?: boolean;
|
|
3
|
+
};
|
|
4
|
+
export declare const useStyles: (props: StylesProps) => import("@material-ui/core/styles/withStyles").ClassNameMap<"button" | "form" | "main" | "root" | "avatar" | "textField" | "buttons">;
|
|
5
|
+
export {};
|
|
@@ -3,13 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.useStyles = void 0;
|
|
4
4
|
var styles_1 = require("@material-ui/core/styles");
|
|
5
5
|
exports.useStyles = styles_1.makeStyles({
|
|
6
|
-
root: {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
root: function (_a) {
|
|
7
|
+
var isEditing = _a.isEditing;
|
|
8
|
+
return ({
|
|
9
|
+
padding: isEditing ? '6px 6px 6px 0' : ' 6px 6px 6px 8px',
|
|
10
|
+
borderRadius: '4px',
|
|
11
|
+
backgroundColor: isEditing ? 'transparent' : 'rgba(0,114,206,0.06)'
|
|
12
|
+
});
|
|
10
13
|
},
|
|
11
|
-
textField: {
|
|
12
|
-
|
|
14
|
+
textField: function (_a) {
|
|
15
|
+
var isEditing = _a.isEditing;
|
|
16
|
+
return ({
|
|
17
|
+
maxWidth: isEditing ? '100%' : 'calc(100% - 40px)'
|
|
18
|
+
});
|
|
13
19
|
},
|
|
14
20
|
form: {
|
|
15
21
|
marginBottom: 0
|
|
@@ -21,9 +27,9 @@ exports.useStyles = styles_1.makeStyles({
|
|
|
21
27
|
avatar: {
|
|
22
28
|
marginRight: '8px'
|
|
23
29
|
},
|
|
24
|
-
buttons: {
|
|
25
|
-
|
|
26
|
-
marginTop: '8px'
|
|
30
|
+
buttons: function (_a) {
|
|
31
|
+
var isEditing = _a.isEditing;
|
|
32
|
+
return ({ marginLeft: isEditing ? '0' : '40px', marginTop: '8px' });
|
|
27
33
|
},
|
|
28
34
|
button: {
|
|
29
35
|
'& + $button': {
|
|
@@ -12,15 +12,13 @@ exports.useStyles = styles_1.makeStyles(function (theme) { return ({
|
|
|
12
12
|
},
|
|
13
13
|
'&__highlighter': {
|
|
14
14
|
padding: '10px 22px',
|
|
15
|
-
border: '1px solid transparent !important'
|
|
16
|
-
maxHeight: '70px'
|
|
15
|
+
border: '1px solid transparent !important'
|
|
17
16
|
},
|
|
18
17
|
'&__input': {
|
|
19
18
|
borderRadius: '2px',
|
|
20
19
|
border: '1px solid rgba(0,0,0,0.12)',
|
|
21
20
|
padding: '10px 22px',
|
|
22
21
|
outline: 0,
|
|
23
|
-
maxHeight: '70px',
|
|
24
22
|
overflow: 'auto !important'
|
|
25
23
|
},
|
|
26
24
|
'&__suggestions': {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
declare var _default: React.MemoExoticComponent<{
|
|
2
|
-
({ attrTypes, entity, parentUri, showEmptyEditors, mode, crosswalks, drawLines, children, className, alwaysVisibleTypeUris, onAddAttributes, onChangeAttribute, onDeleteAttribute, additionalControlsRenderer, showNonOv }: {
|
|
2
|
+
({ parentAttributeType, attrTypes, entity, parentUri, showEmptyEditors, mode, crosswalks, drawLines, children, className, alwaysVisibleTypeUris, onAddAttributes, onChangeAttribute, onDeleteAttribute, additionalControlsRenderer, showNonOv }: {
|
|
3
|
+
parentAttributeType: any;
|
|
3
4
|
attrTypes: any;
|
|
4
5
|
entity: any;
|
|
5
6
|
parentUri: any;
|
|
@@ -17,6 +18,7 @@ declare var _default: React.MemoExoticComponent<{
|
|
|
17
18
|
showNonOv: any;
|
|
18
19
|
}): JSX.Element;
|
|
19
20
|
propTypes: {
|
|
21
|
+
parentAttributeType: PropTypes.Requireable<object>;
|
|
20
22
|
attrTypes: PropTypes.Requireable<any[]>;
|
|
21
23
|
entity: PropTypes.Requireable<object>;
|
|
22
24
|
parentUri: PropTypes.Requireable<string>;
|
|
@@ -47,7 +47,7 @@ var helpers_1 = require("./helpers");
|
|
|
47
47
|
var PinnedAttributesContext_1 = require("../contexts/PinnedAttributesContext");
|
|
48
48
|
var HasDeletionsContext_1 = require("../contexts/HasDeletionsContext");
|
|
49
49
|
var AttributesList = function (_a) {
|
|
50
|
-
var attrTypes = _a.attrTypes, entity = _a.entity, parentUri = _a.parentUri, showEmptyEditors = _a.showEmptyEditors, mode = _a.mode, crosswalks = _a.crosswalks, drawLines = _a.drawLines, children = _a.children, className = _a.className, _b = _a.alwaysVisibleTypeUris, alwaysVisibleTypeUris = _b === void 0 ? constants_1.ALWAYS_VISIBLE_TYPE_URIS : _b, onAddAttributes = _a.onAddAttributes, onChangeAttribute = _a.onChangeAttribute, onDeleteAttribute = _a.onDeleteAttribute, additionalControlsRenderer = _a.additionalControlsRenderer, showNonOv = _a.showNonOv;
|
|
50
|
+
var parentAttributeType = _a.parentAttributeType, attrTypes = _a.attrTypes, entity = _a.entity, parentUri = _a.parentUri, showEmptyEditors = _a.showEmptyEditors, mode = _a.mode, crosswalks = _a.crosswalks, drawLines = _a.drawLines, children = _a.children, className = _a.className, _b = _a.alwaysVisibleTypeUris, alwaysVisibleTypeUris = _b === void 0 ? constants_1.ALWAYS_VISIBLE_TYPE_URIS : _b, onAddAttributes = _a.onAddAttributes, onChangeAttribute = _a.onChangeAttribute, onDeleteAttribute = _a.onDeleteAttribute, additionalControlsRenderer = _a.additionalControlsRenderer, showNonOv = _a.showNonOv;
|
|
51
51
|
var _c = entity.attributes, attributes = _c === void 0 ? {} : _c;
|
|
52
52
|
var _d = react_1.useState({}), hasDeletionsMap = _d[0], setHasDeletionsMap = _d[1];
|
|
53
53
|
var setHasDeletions = react_1.useCallback(function (attrTypeUri, value) {
|
|
@@ -59,14 +59,18 @@ var AttributesList = function (_a) {
|
|
|
59
59
|
react_1.useEffect(function () {
|
|
60
60
|
setHasDeletionsMap({});
|
|
61
61
|
}, [parentUri]);
|
|
62
|
+
var canCreateParentAttrType = react_1.useMemo(function () { return parentAttributeType && mdm_sdk_1.checkCanCreateAttribute({ attributeType: parentAttributeType, mode: mode }); }, [parentAttributeType, mode]);
|
|
62
63
|
var creatableAttrTypes = react_1.useMemo(function () { return mdm_sdk_1.getCreatableAttributeTypes(mode, attrTypes); }, [attrTypes, mode]);
|
|
63
64
|
var moreAttrTypes = helpers_1.getMoreAttrTypes(creatableAttrTypes, entity, showEmptyEditors, hasDeletionsMap);
|
|
64
65
|
var pinnedAttributes = react_1.useContext(PinnedAttributesContext_1.PinnedAttributesContext);
|
|
65
66
|
var pagersData = react_1.useMemo(function () { return mdm_sdk_1.getAttributesListForEditMode(attrTypes, mode, entity, showEmptyEditors, showNonOv, pinnedAttributes); }, [attrTypes, mode, entity, showEmptyEditors, showNonOv, pinnedAttributes]);
|
|
66
67
|
var _e = react_1.useMemo(function () { return attributesView_1.splitPagersData(alwaysVisibleTypeUris, pagersData); }, [pagersData, alwaysVisibleTypeUris]), alwaysVisiblePagersData = _e[0], regularPagersData = _e[1];
|
|
67
68
|
var onAddMoreAttributes = react_1.useCallback(function (attributeTypes) {
|
|
68
|
-
onAddAttributes(attributeTypes.map(function (attributeType) { return ({
|
|
69
|
-
|
|
69
|
+
onAddAttributes(attributeTypes.map(function (attributeType) { return ({
|
|
70
|
+
attributeType: attributeType,
|
|
71
|
+
parentUri: attributeType === parentAttributeType ? mdm_sdk_1.getParentUri(parentUri) : parentUri
|
|
72
|
+
}); }));
|
|
73
|
+
}, [onAddAttributes, parentUri, parentAttributeType]);
|
|
70
74
|
var decoratorProps = {
|
|
71
75
|
enabled: drawLines
|
|
72
76
|
};
|
|
@@ -76,13 +80,14 @@ var AttributesList = function (_a) {
|
|
|
76
80
|
}); }, [hasDeletionsMap, setHasDeletions]);
|
|
77
81
|
return (react_1.default.createElement("div", { className: className },
|
|
78
82
|
children && react_1.default.createElement(BranchDecorator_1.default, __assign({}, decoratorProps), children),
|
|
79
|
-
react_1.default.createElement(BranchDecorator_1.default, __assign({}, decoratorProps, { plain: true }), moreAttrTypes.length > 0 && (react_1.default.createElement(MoreAttributesButton_1.default, { label: ui_i18n_1.default.text('More attributes'), onApply: onAddMoreAttributes, dense: drawLines, data: moreAttrTypes }))),
|
|
83
|
+
react_1.default.createElement(BranchDecorator_1.default, __assign({}, decoratorProps, { plain: true }), moreAttrTypes.length > 0 && (react_1.default.createElement(MoreAttributesButton_1.default, { label: ui_i18n_1.default.text('More attributes'), onApply: onAddMoreAttributes, dense: drawLines, data: moreAttrTypes, parent: canCreateParentAttrType && parentAttributeType }))),
|
|
80
84
|
react_1.default.createElement(HasDeletionsContext_1.HasDeletionsContext.Provider, { value: hasDeletionsContextValue }, regularPagersData.concat(alwaysVisiblePagersData).map(function (_a) {
|
|
81
85
|
var attrType = _a.attrType, values = _a.values;
|
|
82
86
|
return (react_1.default.createElement(AttributesPager_1.default, { key: attrType.uri, attributeType: attrType, drawLines: drawLines, values: values, paging: ramda_1.path(['paging', attrType.uri], attributes), parentUri: parentUri, showEmptyEditors: showEmptyEditors, mode: mode, crosswalks: crosswalks, onAddAttributes: onAddAttributes, onChangeAttribute: onChangeAttribute, onDeleteAttribute: onDeleteAttribute, additionalControlsRenderer: additionalControlsRenderer, showNonOv: showNonOv }));
|
|
83
87
|
}))));
|
|
84
88
|
};
|
|
85
89
|
AttributesList.propTypes = {
|
|
90
|
+
parentAttributeType: prop_types_1.default.object,
|
|
86
91
|
attrTypes: prop_types_1.default.array,
|
|
87
92
|
entity: prop_types_1.default.object,
|
|
88
93
|
parentUri: prop_types_1.default.string,
|
|
@@ -103,7 +103,7 @@ var ComplexAttribute = function (_a) {
|
|
|
103
103
|
")")),
|
|
104
104
|
additionalControlsRenderer && additionalControlsRenderer({ attributeType: attributeType, attributeValue: attributeValue }),
|
|
105
105
|
showDeleteButton && react_1.default.createElement(SmallIconButton_1.default, { icon: Delete_1.default, onClick: onDeleteThis, size: "L" }))),
|
|
106
|
-
expanded && (react_1.default.createElement(AttributesList_1.default, { attrTypes: attributeTypesList, entity: attributeListEntity, showEmptyEditors: showEmptyEditors || isNew, drawLines: true, parentUri: uri, mode: mode, crosswalks: crosswalks, onAddAttributes: onAddAttributes, onChangeAttribute: onChangeAttribute, onDeleteAttribute: onDeleteAttribute, additionalControlsRenderer: additionalControlsRenderer, showNonOv: showNonOv }, children))));
|
|
106
|
+
expanded && (react_1.default.createElement(AttributesList_1.default, { parentAttributeType: attributeType, attrTypes: attributeTypesList, entity: attributeListEntity, showEmptyEditors: showEmptyEditors || isNew, drawLines: true, parentUri: uri, mode: mode, crosswalks: crosswalks, onAddAttributes: onAddAttributes, onChangeAttribute: onChangeAttribute, onDeleteAttribute: onDeleteAttribute, additionalControlsRenderer: additionalControlsRenderer, showNonOv: showNonOv }, children))));
|
|
107
107
|
};
|
|
108
108
|
ComplexAttribute.propTypes = __assign({ label: prop_types_1.default.string, children: prop_types_1.default.node, attributeTypesList: prop_types_1.default.arrayOf(mdm_sdk_1.AttributeTypeType), attributeValue: prop_types_1.default.oneOfType([mdm_sdk_1.NestedAttributeValueType, mdm_sdk_1.ReferenceAttributeValueType]) }, mdm_sdk_1.ComplexAttributeType);
|
|
109
109
|
exports.default = ComplexAttribute;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export default MoreAttributesButton;
|
|
2
|
-
declare function MoreAttributesButton({ label, popupTitle, data, dense, onApply }: {
|
|
2
|
+
declare function MoreAttributesButton({ label, popupTitle, data, parent, dense, onApply }: {
|
|
3
3
|
label: any;
|
|
4
4
|
popupTitle?: any;
|
|
5
5
|
data: any;
|
|
6
|
+
parent: any;
|
|
6
7
|
dense: any;
|
|
7
8
|
onApply: any;
|
|
8
9
|
}): JSX.Element;
|
|
@@ -11,6 +12,7 @@ declare namespace MoreAttributesButton {
|
|
|
11
12
|
const label: PropTypes.Requireable<string>;
|
|
12
13
|
const popupTitle: PropTypes.Requireable<string>;
|
|
13
14
|
const data: PropTypes.Requireable<any[]>;
|
|
15
|
+
const parent: PropTypes.Requireable<object>;
|
|
14
16
|
const dense: PropTypes.Requireable<boolean>;
|
|
15
17
|
const onApply: PropTypes.Requireable<(...args: any[]) => any>;
|
|
16
18
|
}
|
|
@@ -23,29 +23,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
var react_1 = __importStar(require("react"));
|
|
26
|
+
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
26
27
|
var classnames_1 = __importDefault(require("classnames"));
|
|
27
28
|
var prop_types_1 = __importDefault(require("prop-types"));
|
|
28
29
|
var ramda_1 = require("ramda");
|
|
29
30
|
var Button_1 = __importDefault(require("@material-ui/core/Button"));
|
|
31
|
+
var ListItem_1 = __importDefault(require("@material-ui/core/ListItem"));
|
|
32
|
+
var Typography_1 = __importDefault(require("@material-ui/core/Typography"));
|
|
30
33
|
var styles_1 = require("./styles");
|
|
31
34
|
var SelectionPopup_1 = __importDefault(require("../../../SelectionPopup/SelectionPopup"));
|
|
32
35
|
var AttributeListItem_1 = __importDefault(require("../../../AttributeListItem/AttributeListItem"));
|
|
33
|
-
var helpers_1 = require("../../../VirtualGroupedList/helpers");
|
|
34
36
|
var VirtualGroupedList_1 = __importDefault(require("../../../VirtualGroupedList/VirtualGroupedList"));
|
|
35
|
-
var
|
|
37
|
+
var helpers_1 = require("../../../SelectionPopup/helpers");
|
|
36
38
|
var Add_1 = __importDefault(require("@material-ui/icons/Add"));
|
|
37
39
|
var Highlighter_1 = __importDefault(require("../../../Highlighter/Highlighter"));
|
|
40
|
+
var useMoreAttributesItems_1 = require("./useMoreAttributesItems");
|
|
38
41
|
var ITEM_HEIGHT = 28;
|
|
42
|
+
var ITEM_GROUP_TITLE_HEIGHT = 40;
|
|
39
43
|
var LIST_CONTAINER_WIDTH = 320;
|
|
40
44
|
var MAX_LIST_CONTAINER_HEIGHT = 255;
|
|
41
45
|
var MIN_CONTAINER_HEIGHT = 140;
|
|
42
46
|
var CONTAINER_HEADER_HEIGHT = 112;
|
|
43
|
-
var filterItems = ramda_1.curry(function (filterText, items) {
|
|
44
|
-
return ramda_1.filter(function (item) { return item.label.toLowerCase().includes(filterText.toLowerCase()); })(items);
|
|
45
|
-
});
|
|
46
47
|
var MoreAttributesButton = function (_a) {
|
|
47
48
|
var _b;
|
|
48
|
-
var label = _a.label, _c = _a.popupTitle, popupTitle = _c === void 0 ? label : _c, data = _a.data, dense = _a.dense, onApply = _a.onApply;
|
|
49
|
+
var label = _a.label, _c = _a.popupTitle, popupTitle = _c === void 0 ? label : _c, data = _a.data, parent = _a.parent, dense = _a.dense, onApply = _a.onApply;
|
|
49
50
|
var styles = styles_1.useStyles();
|
|
50
51
|
var inputRef = react_1.useRef();
|
|
51
52
|
var _d = react_1.useState(false), isOpen = _d[0], setIsOpen = _d[1];
|
|
@@ -55,6 +56,7 @@ var MoreAttributesButton = function (_a) {
|
|
|
55
56
|
var clearFilter = function () { return setFilter(''); };
|
|
56
57
|
var _f = react_1.useState([]), selectedItems = _f[0], setSelectedItems = _f[1];
|
|
57
58
|
var clearSelectedItems = function () { return setSelectedItems([]); };
|
|
59
|
+
var _g = useMoreAttributesItems_1.useMoreAttributesItems({ data: data, parent: parent, filter: filter }), items = _g.items, hasGroups = _g.hasGroups, parentGroupLength = _g.parentGroupLength, attributesGroupLength = _g.attributesGroupLength;
|
|
58
60
|
var addSelectedAttributes = function () {
|
|
59
61
|
if (selectedItems.length > 0) {
|
|
60
62
|
onApply(ramda_1.pluck('attrType', selectedItems));
|
|
@@ -63,48 +65,45 @@ var MoreAttributesButton = function (_a) {
|
|
|
63
65
|
var handleListItemClick = react_1.useCallback(function (item, checked) {
|
|
64
66
|
setSelectedItems(ramda_1.ifElse(ramda_1.always(checked), ramda_1.append(item), ramda_1.reject(ramda_1.propEq('id', item.id)))(selectedItems));
|
|
65
67
|
}, [selectedItems]);
|
|
66
|
-
var
|
|
67
|
-
return ramda_1.pipe(filterItems(filter), ramda_1.map(function (attrType) { return ({
|
|
68
|
-
item: {
|
|
69
|
-
id: attrType.uri,
|
|
70
|
-
label: attrType.label,
|
|
71
|
-
attrType: attrType
|
|
72
|
-
}
|
|
73
|
-
}); }))(data);
|
|
74
|
-
}, [data, filter]);
|
|
75
|
-
var items = react_1.useMemo(function () { return helpers_1.flattenGroupedItemsData(preparedGroupedItems); }, [preparedGroupedItems]);
|
|
76
|
-
var getItemSize = react_1.useCallback(function () { return ITEM_HEIGHT; }, []);
|
|
68
|
+
var getItemSize = react_1.useCallback(function (i, item) { return (item.items ? ITEM_GROUP_TITLE_HEIGHT : ITEM_HEIGHT); }, []);
|
|
77
69
|
var handleSearchOnEnter = react_1.useCallback(function (_a) {
|
|
78
70
|
var item = _a.item;
|
|
79
71
|
handleListItemClick(item, ramda_1.not(ramda_1.any(ramda_1.propEq('id', item.id))(selectedItems)));
|
|
80
72
|
}, [handleListItemClick, selectedItems]);
|
|
81
|
-
var
|
|
73
|
+
var _h = helpers_1.useKeyboardNavigation({
|
|
82
74
|
items: items,
|
|
83
75
|
open: isOpen,
|
|
84
76
|
onSelectFocusedItem: handleSearchOnEnter,
|
|
85
77
|
selectedItems: selectedItems
|
|
86
|
-
}), focusIndex =
|
|
78
|
+
}), focusIndex = _h.focusIndex, handleKeyDown = _h.handleKeyDown;
|
|
87
79
|
var focusIndexRef = react_1.useRef(null);
|
|
88
80
|
focusIndexRef.current = focusIndex;
|
|
89
|
-
var
|
|
81
|
+
var groupsCount = hasGroups ? (parentGroupLength ? 1 : 0) + (attributesGroupLength ? 1 : 0) : 0;
|
|
82
|
+
var itemsCount = items.length - groupsCount;
|
|
83
|
+
var listHeight = Math.min(MAX_LIST_CONTAINER_HEIGHT, ITEM_HEIGHT * itemsCount + ITEM_GROUP_TITLE_HEIGHT * groupsCount);
|
|
90
84
|
var containerHeight = Math.max(MIN_CONTAINER_HEIGHT, listHeight + CONTAINER_HEADER_HEIGHT);
|
|
91
85
|
var listItemRenderer = react_1.useCallback(function (style, _a, index) {
|
|
92
|
-
var
|
|
86
|
+
var _b;
|
|
87
|
+
var item = _a.item, _c = _a.level, level = _c === void 0 ? 0 : _c;
|
|
93
88
|
var isChecked = ramda_1.any(ramda_1.propEq('id', item.id))(selectedItems);
|
|
94
89
|
var isFocused = focusIndexRef.current === index;
|
|
95
|
-
return (react_1.default.createElement(AttributeListItem_1.default, { key: item.uri, onClick: handleListItemClick, checked: isChecked, level: level, data: item, label: react_1.default.createElement(Highlighter_1.default, { text: item.label, highlight: filter }), labelInText: item.label, style: style, isFocused: isFocused, isRequired: !!item.attrType.required, LogoIcon: item.LogoIcon }));
|
|
90
|
+
return (react_1.default.createElement(AttributeListItem_1.default, { key: item.uri, onClick: handleListItemClick, checked: isChecked, level: level, data: item, label: react_1.default.createElement(Highlighter_1.default, { text: item.label, highlight: filter }), labelInText: item.label, style: style, isFocused: isFocused, isRequired: !!((_b = item.attrType) === null || _b === void 0 ? void 0 : _b.required), LogoIcon: item.LogoIcon }));
|
|
96
91
|
}, [filter, handleListItemClick, selectedItems]);
|
|
92
|
+
var renderGroupTitle = react_1.useCallback(function (style, item) { return (react_1.default.createElement(ListItem_1.default, { component: 'div', className: styles.subHeader, style: style, key: "group-" + item.item.id }, item.item.label)); }, []);
|
|
97
93
|
return (react_1.default.createElement("div", { className: classnames_1.default(styles.moreAttributes, (_b = {}, _b[styles.dense] = dense, _b)) },
|
|
98
94
|
react_1.default.createElement(Button_1.default, { color: "primary", onClick: togglePopupOpen, ref: inputRef, className: styles.moreButton },
|
|
99
95
|
react_1.default.createElement(Add_1.default, { classes: { root: styles.icon } }),
|
|
100
96
|
react_1.default.createElement("div", { className: styles.buttonLabel }, label)),
|
|
101
97
|
react_1.default.createElement(SelectionPopup_1.default, { open: isOpen, className: classnames_1.default(styles.moreAttributesPopup, styles.popupContainer), anchorEl: inputRef.current, onClose: ramda_1.pipe(addSelectedAttributes, closePopup, clearFilter, clearSelectedItems), onSearch: setFilter, containerHeight: containerHeight, title: popupTitle, containerWidth: LIST_CONTAINER_WIDTH, searchInputOnKeyDown: handleKeyDown },
|
|
102
|
-
react_1.default.createElement(VirtualGroupedList_1.default, { getItemSize: getItemSize, renderItem: listItemRenderer, items: items, height: listHeight, containerWidth: LIST_CONTAINER_WIDTH, focusIndex: focusIndex })
|
|
98
|
+
react_1.default.createElement(VirtualGroupedList_1.default, { getItemSize: getItemSize, renderItem: listItemRenderer, renderGroupTitle: renderGroupTitle, items: items, height: listHeight, containerWidth: LIST_CONTAINER_WIDTH, focusIndex: focusIndex }),
|
|
99
|
+
items.length === 0 && (react_1.default.createElement("div", { className: styles.noResultsCaptionContainer },
|
|
100
|
+
react_1.default.createElement(Typography_1.default, { variant: "caption", display: "block", gutterBottom: true }, ui_i18n_1.default.text('No results found')))))));
|
|
103
101
|
};
|
|
104
102
|
MoreAttributesButton.propTypes = {
|
|
105
103
|
label: prop_types_1.default.string,
|
|
106
104
|
popupTitle: prop_types_1.default.string,
|
|
107
105
|
data: prop_types_1.default.array,
|
|
106
|
+
parent: prop_types_1.default.object,
|
|
108
107
|
dense: prop_types_1.default.bool,
|
|
109
108
|
onApply: prop_types_1.default.func
|
|
110
109
|
};
|