@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.
Files changed (53) hide show
  1. package/cjs/components/CollaborationItem/CollaborationItem.js +3 -10
  2. package/cjs/components/CollaborationItem/Comment/Comment.d.ts +3 -2
  3. package/cjs/components/CollaborationItem/Comment/Comment.js +24 -14
  4. package/cjs/components/CollaborationItem/Comment/styles.d.ts +1 -1
  5. package/cjs/components/CollaborationItem/RepliedComment/RepliedComment.d.ts +7 -4
  6. package/cjs/components/CollaborationItem/RepliedComment/RepliedComment.js +57 -5
  7. package/cjs/components/CollaborationItem/SendMessageArea/SendMessageArea.d.ts +6 -4
  8. package/cjs/components/CollaborationItem/SendMessageArea/SendMessageArea.js +30 -12
  9. package/cjs/components/CollaborationItem/SendMessageArea/styles.d.ts +5 -1
  10. package/cjs/components/CollaborationItem/SendMessageArea/styles.js +15 -9
  11. package/cjs/components/CollaborationItem/TextFieldWithMentions/styles.js +1 -3
  12. package/cjs/components/attributes/editMode/AttributesList/AttributesList.d.ts +3 -1
  13. package/cjs/components/attributes/editMode/AttributesList/AttributesList.js +9 -4
  14. package/cjs/components/attributes/editMode/ComplexAttribute/ComplexAttribute.js +1 -1
  15. package/cjs/components/attributes/editMode/MoreAttributesButton/MoreAttributesButton.d.ts +3 -1
  16. package/cjs/components/attributes/editMode/MoreAttributesButton/MoreAttributesButton.js +22 -23
  17. package/cjs/components/attributes/editMode/MoreAttributesButton/helpers.d.ts +8 -0
  18. package/cjs/components/attributes/editMode/MoreAttributesButton/helpers.js +18 -0
  19. package/cjs/components/attributes/editMode/MoreAttributesButton/styles.d.ts +1 -1
  20. package/cjs/components/attributes/editMode/MoreAttributesButton/styles.js +20 -0
  21. package/cjs/components/attributes/editMode/MoreAttributesButton/useMoreAttributesItems.d.ts +22 -0
  22. package/cjs/components/attributes/editMode/MoreAttributesButton/useMoreAttributesItems.js +60 -0
  23. package/cjs/contexts/CollaborationContext/index.d.ts +8 -0
  24. package/cjs/contexts/CollaborationContext/index.js +3 -1
  25. package/cjs/hooks/useCollaboration.d.ts +2 -0
  26. package/cjs/hooks/useCollaboration.js +57 -5
  27. package/esm/components/CollaborationItem/CollaborationItem.js +4 -11
  28. package/esm/components/CollaborationItem/Comment/Comment.d.ts +3 -2
  29. package/esm/components/CollaborationItem/Comment/Comment.js +25 -15
  30. package/esm/components/CollaborationItem/Comment/styles.d.ts +1 -1
  31. package/esm/components/CollaborationItem/RepliedComment/RepliedComment.d.ts +7 -4
  32. package/esm/components/CollaborationItem/RepliedComment/RepliedComment.js +38 -5
  33. package/esm/components/CollaborationItem/SendMessageArea/SendMessageArea.d.ts +6 -4
  34. package/esm/components/CollaborationItem/SendMessageArea/SendMessageArea.js +30 -12
  35. package/esm/components/CollaborationItem/SendMessageArea/styles.d.ts +5 -1
  36. package/esm/components/CollaborationItem/SendMessageArea/styles.js +15 -9
  37. package/esm/components/CollaborationItem/TextFieldWithMentions/styles.js +1 -3
  38. package/esm/components/attributes/editMode/AttributesList/AttributesList.d.ts +3 -1
  39. package/esm/components/attributes/editMode/AttributesList/AttributesList.js +10 -5
  40. package/esm/components/attributes/editMode/ComplexAttribute/ComplexAttribute.js +1 -1
  41. package/esm/components/attributes/editMode/MoreAttributesButton/MoreAttributesButton.d.ts +3 -1
  42. package/esm/components/attributes/editMode/MoreAttributesButton/MoreAttributesButton.js +23 -24
  43. package/esm/components/attributes/editMode/MoreAttributesButton/helpers.d.ts +8 -0
  44. package/esm/components/attributes/editMode/MoreAttributesButton/helpers.js +15 -0
  45. package/esm/components/attributes/editMode/MoreAttributesButton/styles.d.ts +1 -1
  46. package/esm/components/attributes/editMode/MoreAttributesButton/styles.js +20 -0
  47. package/esm/components/attributes/editMode/MoreAttributesButton/useMoreAttributesItems.d.ts +22 -0
  48. package/esm/components/attributes/editMode/MoreAttributesButton/useMoreAttributesItems.js +53 -0
  49. package/esm/contexts/CollaborationContext/index.d.ts +8 -0
  50. package/esm/contexts/CollaborationContext/index.js +3 -1
  51. package/esm/hooks/useCollaboration.d.ts +2 -0
  52. package/esm/hooks/useCollaboration.js +58 -6
  53. 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 handleSetEdit = function () {
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, onStartEditing: handleSetEdit, className: styles.comment }),
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
- onStartEditing: () => void;
8
+ relatedObjectUris: CommentType['relatedObjectUris'];
9
+ objectType: CommentType['objectType'];
9
10
  };
10
- export declare const Comment: ({ onReply, className, uri, comment, onStartEditing }: Props) => JSX.Element;
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, onStartEditing = _a.onStartEditing;
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 canChangeComment = comment.createdBy === username;
47
- var _b = react_1.useContext(contexts_1.CollaborationContext), resolveThread = _b.resolveThread, reOpenThread = _b.reOpenThread, sending = _b.sending, deleteComment = _b.deleteComment;
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: onStartEditing
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: comment.commentId }); }
64
+ onClick: function () { return deleteComment({ uri: uri, commentId: commentId }); }
56
65
  }
57
- ]; }, [onStartEditing, deleteComment, uri, comment]);
66
+ ]; }, [deleteComment, uri, commentId]);
58
67
  var handleResolve = function () {
59
- resolveThread({ commentId: comment.commentId, uri: uri });
68
+ resolveThread({ commentId: commentId, uri: uri });
60
69
  };
61
70
  var handleReOpen = function () {
62
- reOpenThread({ commentId: comment.commentId, uri: uri });
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 } }, comment.createdBy),
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 }, comment.createdBy)),
69
- react_1.default.createElement(Typography_1.default, { className: styles.createdAt }, utils_1.formatDate(comment.createdTime)),
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" | "createdAt" | "commentTarget" | "dropdownMenu" | "buttons">;
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
- /// <reference types="react" />
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 = __importDefault(require("react"));
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, null,
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' && react_1.default.createElement(CommentContent_1.CommentContent, { className: styles.message, comment: reply }),
28
- react_1.default.createElement(Typography_1.default, { className: styles.createdAt }, utils_1.formatDate(createdTime)))));
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: Comment['objectType'];
8
- relatedObjectUris: Comment['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 styles = styles_1.useStyles();
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
- setValue(comment.content);
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
- export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"button" | "form" | "main" | "root" | "avatar" | "buttons" | "textField">;
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
- padding: '6px 6px 6px 8px',
8
- borderRadius: '4px',
9
- backgroundColor: 'rgba(0,114,206,0.06)'
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
- maxWidth: 'calc(100% - 40px)'
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
- marginLeft: '40px',
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 ({ attributeType: attributeType, parentUri: parentUri }); }));
69
- }, [onAddAttributes, parentUri]);
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 helpers_2 = require("../../../SelectionPopup/helpers");
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 preparedGroupedItems = react_1.useMemo(function () {
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 _g = helpers_2.useKeyboardNavigation({
73
+ var _h = helpers_1.useKeyboardNavigation({
82
74
  items: items,
83
75
  open: isOpen,
84
76
  onSelectFocusedItem: handleSearchOnEnter,
85
77
  selectedItems: selectedItems
86
- }), focusIndex = _g.focusIndex, handleKeyDown = _g.handleKeyDown;
78
+ }), focusIndex = _h.focusIndex, handleKeyDown = _h.handleKeyDown;
87
79
  var focusIndexRef = react_1.useRef(null);
88
80
  focusIndexRef.current = focusIndex;
89
- var listHeight = Math.min(MAX_LIST_CONTAINER_HEIGHT, ITEM_HEIGHT * items.length);
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 item = _a.item, _b = _a.level, level = _b === void 0 ? 0 : _b;
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
  };