@dhis2/analytics 23.11.1 → 23.12.0

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 (74) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/cjs/components/Interpretations/InterpretationModal/Comment.js +64 -0
  3. package/build/cjs/components/Interpretations/InterpretationModal/CommentAddForm.js +93 -0
  4. package/build/cjs/components/Interpretations/InterpretationModal/CommentDeleteButton.js +62 -0
  5. package/build/cjs/components/Interpretations/InterpretationModal/CommentUpdateForm.js +95 -0
  6. package/build/cjs/components/Interpretations/InterpretationModal/InterpretationModal.js +187 -0
  7. package/build/cjs/components/Interpretations/InterpretationModal/InterpretationThread.js +100 -0
  8. package/build/cjs/components/Interpretations/InterpretationModal/index.js +13 -0
  9. package/build/cjs/components/Interpretations/InterpretationModal/useModalContentWidth.js +39 -0
  10. package/build/cjs/components/Interpretations/InterpretationsUnit/InterpretationForm.js +94 -0
  11. package/build/cjs/components/Interpretations/InterpretationsUnit/InterpretationList.js +94 -0
  12. package/build/cjs/components/Interpretations/InterpretationsUnit/InterpretationsUnit.js +135 -0
  13. package/build/cjs/components/Interpretations/InterpretationsUnit/index.js +13 -0
  14. package/build/cjs/components/Interpretations/common/Interpretation/Interpretation.js +110 -0
  15. package/build/cjs/components/Interpretations/common/Interpretation/InterpretationDeleteButton.js +58 -0
  16. package/build/cjs/components/Interpretations/common/Interpretation/InterpretationSharingLink.js +50 -0
  17. package/build/cjs/components/Interpretations/common/Interpretation/InterpretationUpdateForm.js +108 -0
  18. package/build/cjs/components/Interpretations/common/Interpretation/index.js +21 -0
  19. package/build/cjs/components/Interpretations/common/Interpretation/useLike.js +53 -0
  20. package/build/cjs/components/Interpretations/common/Message/Message.js +55 -0
  21. package/build/cjs/components/Interpretations/common/Message/MessageButtonStrip.js +33 -0
  22. package/build/cjs/components/Interpretations/common/Message/MessageEditorContainer.js +42 -0
  23. package/build/cjs/components/Interpretations/common/Message/MessageIconButton.js +67 -0
  24. package/build/cjs/components/Interpretations/common/Message/MessageInput.js +31 -0
  25. package/build/cjs/components/Interpretations/common/Message/MessageStatsBar.js +33 -0
  26. package/build/cjs/components/Interpretations/common/Message/index.js +53 -0
  27. package/build/cjs/components/Interpretations/common/RichTextEditor/RichTextEditor.js +262 -0
  28. package/build/cjs/components/Interpretations/common/RichTextEditor/index.js +13 -0
  29. package/build/cjs/components/Interpretations/common/RichTextEditor/markdownHandler.js +148 -0
  30. package/build/cjs/components/Interpretations/common/RichTextEditor/styles/RichTextEditor.style.js +21 -0
  31. package/build/cjs/components/Interpretations/common/UserMention/UserList.js +48 -0
  32. package/build/cjs/components/Interpretations/common/UserMention/UserMentionWrapper.js +226 -0
  33. package/build/cjs/components/Interpretations/common/UserMention/styles/UserMentionWrapper.style.js +30 -0
  34. package/build/cjs/components/Interpretations/common/UserMention/useUserSearchResults.js +78 -0
  35. package/build/cjs/components/Interpretations/common/index.js +44 -0
  36. package/build/cjs/index.js +16 -0
  37. package/build/cjs/locales/en/translations.json +32 -1
  38. package/build/es/components/Interpretations/InterpretationModal/Comment.js +45 -0
  39. package/build/es/components/Interpretations/InterpretationModal/CommentAddForm.js +70 -0
  40. package/build/es/components/Interpretations/InterpretationModal/CommentDeleteButton.js +47 -0
  41. package/build/es/components/Interpretations/InterpretationModal/CommentUpdateForm.js +73 -0
  42. package/build/es/components/Interpretations/InterpretationModal/InterpretationModal.js +165 -0
  43. package/build/es/components/Interpretations/InterpretationModal/InterpretationThread.js +79 -0
  44. package/build/es/components/Interpretations/InterpretationModal/index.js +1 -0
  45. package/build/es/components/Interpretations/InterpretationModal/useModalContentWidth.js +28 -0
  46. package/build/es/components/Interpretations/InterpretationsUnit/InterpretationForm.js +71 -0
  47. package/build/es/components/Interpretations/InterpretationsUnit/InterpretationList.js +78 -0
  48. package/build/es/components/Interpretations/InterpretationsUnit/InterpretationsUnit.js +112 -0
  49. package/build/es/components/Interpretations/InterpretationsUnit/index.js +1 -0
  50. package/build/es/components/Interpretations/common/Interpretation/Interpretation.js +87 -0
  51. package/build/es/components/Interpretations/common/Interpretation/InterpretationDeleteButton.js +43 -0
  52. package/build/es/components/Interpretations/common/Interpretation/InterpretationSharingLink.js +33 -0
  53. package/build/es/components/Interpretations/common/Interpretation/InterpretationUpdateForm.js +85 -0
  54. package/build/es/components/Interpretations/common/Interpretation/index.js +2 -0
  55. package/build/es/components/Interpretations/common/Interpretation/useLike.js +45 -0
  56. package/build/es/components/Interpretations/common/Message/Message.js +41 -0
  57. package/build/es/components/Interpretations/common/Message/MessageButtonStrip.js +21 -0
  58. package/build/es/components/Interpretations/common/Message/MessageEditorContainer.js +30 -0
  59. package/build/es/components/Interpretations/common/Message/MessageIconButton.js +54 -0
  60. package/build/es/components/Interpretations/common/Message/MessageInput.js +16 -0
  61. package/build/es/components/Interpretations/common/Message/MessageStatsBar.js +21 -0
  62. package/build/es/components/Interpretations/common/Message/index.js +6 -0
  63. package/build/es/components/Interpretations/common/RichTextEditor/RichTextEditor.js +240 -0
  64. package/build/es/components/Interpretations/common/RichTextEditor/index.js +1 -0
  65. package/build/es/components/Interpretations/common/RichTextEditor/markdownHandler.js +128 -0
  66. package/build/es/components/Interpretations/common/RichTextEditor/styles/RichTextEditor.style.js +9 -0
  67. package/build/es/components/Interpretations/common/UserMention/UserList.js +33 -0
  68. package/build/es/components/Interpretations/common/UserMention/UserMentionWrapper.js +202 -0
  69. package/build/es/components/Interpretations/common/UserMention/styles/UserMentionWrapper.style.js +17 -0
  70. package/build/es/components/Interpretations/common/UserMention/useUserSearchResults.js +63 -0
  71. package/build/es/components/Interpretations/common/index.js +3 -0
  72. package/build/es/index.js +2 -0
  73. package/build/es/locales/en/translations.json +32 -1
  74. package/package.json +2 -1
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Interpretation", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Interpretation.Interpretation;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "InterpretationSharingLink", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _InterpretationSharingLink.InterpretationSharingLink;
16
+ }
17
+ });
18
+
19
+ var _Interpretation = require("./Interpretation.js");
20
+
21
+ var _InterpretationSharingLink = require("./InterpretationSharingLink.js");
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useLike = void 0;
7
+
8
+ var _appRuntime = require("@dhis2/app-runtime");
9
+
10
+ var _react = require("react");
11
+
12
+ const useLike = _ref => {
13
+ let {
14
+ interpretation,
15
+ currentUser,
16
+ onComplete
17
+ } = _ref;
18
+ const resource = "interpretations/".concat(interpretation.id, "/like");
19
+ const likeMutationRef = (0, _react.useRef)({
20
+ resource,
21
+ type: 'create'
22
+ });
23
+ const unlikeMutationRef = (0, _react.useRef)({
24
+ resource,
25
+ type: 'delete'
26
+ });
27
+ const [like, {
28
+ loading: likeLoading
29
+ }] = (0, _appRuntime.useDataMutation)(likeMutationRef.current, {
30
+ onComplete
31
+ });
32
+ const [unlike, {
33
+ loading: unlikeLoading
34
+ }] = (0, _appRuntime.useDataMutation)(unlikeMutationRef.current, {
35
+ onComplete
36
+ });
37
+ const [isLikedByCurrentUser, setIsLikedByCurrentUser] = (0, _react.useState)(false);
38
+
39
+ const toggleLike = () => {
40
+ isLikedByCurrentUser ? unlike() : like();
41
+ };
42
+
43
+ (0, _react.useEffect)(() => {
44
+ setIsLikedByCurrentUser(interpretation.likedBy.some(likedBy => likedBy.id === currentUser.id));
45
+ }, [currentUser, interpretation]);
46
+ return {
47
+ isLikedByCurrentUser,
48
+ toggleLike,
49
+ toggleLikeInProgress: likeLoading || unlikeLoading
50
+ };
51
+ };
52
+
53
+ exports.useLike = useLike;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Message = void 0;
7
+
8
+ var _style = _interopRequireDefault(require("styled-jsx/style"));
9
+
10
+ var _d2UiRichText = require("@dhis2/d2-ui-rich-text");
11
+
12
+ var _ui = require("@dhis2/ui");
13
+
14
+ var _moment = _interopRequireDefault(require("moment"));
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _react = _interopRequireDefault(require("react"));
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ const Message = _ref => {
23
+ let {
24
+ children,
25
+ text,
26
+ created,
27
+ username
28
+ } = _ref;
29
+ return /*#__PURE__*/_react.default.createElement("li", {
30
+ className: _style.default.dynamic([["2436588813", [_ui.spacers.dp8, _ui.colors.grey100, _ui.spacers.dp8, _ui.colors.grey900, _ui.colors.grey600, _ui.colors.grey900, _ui.spacers.dp8]]]) + " " + "container"
31
+ }, /*#__PURE__*/_react.default.createElement("div", {
32
+ className: _style.default.dynamic([["2436588813", [_ui.spacers.dp8, _ui.colors.grey100, _ui.spacers.dp8, _ui.colors.grey900, _ui.colors.grey600, _ui.colors.grey900, _ui.spacers.dp8]]]) + " " + "header"
33
+ }, /*#__PURE__*/_react.default.createElement(_ui.UserAvatar, {
34
+ name: username,
35
+ extrasmall: true
36
+ }), username, /*#__PURE__*/_react.default.createElement("time", {
37
+ dateTime: created,
38
+ className: _style.default.dynamic([["2436588813", [_ui.spacers.dp8, _ui.colors.grey100, _ui.spacers.dp8, _ui.colors.grey900, _ui.colors.grey600, _ui.colors.grey900, _ui.spacers.dp8]]])
39
+ }, (0, _moment.default)(created).format('lll'))), /*#__PURE__*/_react.default.createElement("div", {
40
+ className: _style.default.dynamic([["2436588813", [_ui.spacers.dp8, _ui.colors.grey100, _ui.spacers.dp8, _ui.colors.grey900, _ui.colors.grey600, _ui.colors.grey900, _ui.spacers.dp8]]]) + " " + "content"
41
+ }, /*#__PURE__*/_react.default.createElement(_d2UiRichText.Parser, null, text)), /*#__PURE__*/_react.default.createElement("div", {
42
+ className: _style.default.dynamic([["2436588813", [_ui.spacers.dp8, _ui.colors.grey100, _ui.spacers.dp8, _ui.colors.grey900, _ui.colors.grey600, _ui.colors.grey900, _ui.spacers.dp8]]]) + " " + "footer"
43
+ }, children), /*#__PURE__*/_react.default.createElement(_style.default, {
44
+ id: "2436588813",
45
+ dynamic: [_ui.spacers.dp8, _ui.colors.grey100, _ui.spacers.dp8, _ui.colors.grey900, _ui.colors.grey600, _ui.colors.grey900, _ui.spacers.dp8]
46
+ }, [".container.__jsx-style-dynamic-selector{padding:".concat(_ui.spacers.dp8, ";background-color:").concat(_ui.colors.grey100, ";border-radius:5px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:").concat(_ui.spacers.dp8, ";}"), ".header.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:6px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:13px;line-height:16px;color:".concat(_ui.colors.grey900, ";}"), ".header.__jsx-style-dynamic-selector time.__jsx-style-dynamic-selector{font-size:12px;color:".concat(_ui.colors.grey600, ";}"), ".content.__jsx-style-dynamic-selector{font-size:14px;line-height:19px;color:".concat(_ui.colors.grey900, ";}"), ".content.__jsx-style-dynamic-selector p:first-child{margin:0;}", ".footer.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;gap:".concat(_ui.spacers.dp8, ";}")]));
47
+ };
48
+
49
+ exports.Message = Message;
50
+ Message.propTypes = {
51
+ children: _propTypes.default.node.isRequired,
52
+ created: _propTypes.default.string.isRequired,
53
+ text: _propTypes.default.string.isRequired,
54
+ username: _propTypes.default.string.isRequired
55
+ };
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MessageButtonStrip = void 0;
7
+
8
+ var _style = _interopRequireDefault(require("styled-jsx/style"));
9
+
10
+ var _ui = require("@dhis2/ui");
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _react = _interopRequireDefault(require("react"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ const MessageButtonStrip = _ref => {
19
+ let {
20
+ children
21
+ } = _ref;
22
+ return /*#__PURE__*/_react.default.createElement("div", {
23
+ className: _style.default.dynamic([["1819118406", [_ui.spacers.dp8, _ui.spacers.dp8]]]) + " " + "container"
24
+ }, children, /*#__PURE__*/_react.default.createElement(_style.default, {
25
+ id: "1819118406",
26
+ dynamic: [_ui.spacers.dp8, _ui.spacers.dp8]
27
+ }, [".container.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:".concat(_ui.spacers.dp8, ";margin-top:").concat(_ui.spacers.dp8, ";}")]));
28
+ };
29
+
30
+ exports.MessageButtonStrip = MessageButtonStrip;
31
+ MessageButtonStrip.propTypes = {
32
+ children: _propTypes.default.node.isRequired
33
+ };
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MessageEditorContainer = void 0;
7
+
8
+ var _style = _interopRequireDefault(require("styled-jsx/style"));
9
+
10
+ var _ui = require("@dhis2/ui");
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _react = _interopRequireDefault(require("react"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ const MessageEditorContainer = _ref => {
19
+ let {
20
+ children,
21
+ currentUser
22
+ } = _ref;
23
+ return /*#__PURE__*/_react.default.createElement("div", {
24
+ className: _style.default.dynamic([["3807884305", [_ui.spacers.dp8, _ui.spacers.dp12]]]) + " " + "container"
25
+ }, /*#__PURE__*/_react.default.createElement("div", {
26
+ className: _style.default.dynamic([["3807884305", [_ui.spacers.dp8, _ui.spacers.dp12]]]) + " " + "avatar"
27
+ }, /*#__PURE__*/_react.default.createElement(_ui.UserAvatar, {
28
+ name: currentUser.name,
29
+ medium: true
30
+ })), /*#__PURE__*/_react.default.createElement("div", {
31
+ className: _style.default.dynamic([["3807884305", [_ui.spacers.dp8, _ui.spacers.dp12]]]) + " " + "editor"
32
+ }, children), /*#__PURE__*/_react.default.createElement(_style.default, {
33
+ id: "3807884305",
34
+ dynamic: [_ui.spacers.dp8, _ui.spacers.dp12]
35
+ }, [".container.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:".concat(_ui.spacers.dp8, ";margin-top:").concat(_ui.spacers.dp12, ";}"), ".avatar.__jsx-style-dynamic-selector{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;}", ".editor.__jsx-style-dynamic-selector{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}"]));
36
+ };
37
+
38
+ exports.MessageEditorContainer = MessageEditorContainer;
39
+ MessageEditorContainer.propTypes = {
40
+ currentUser: _propTypes.default.object.isRequired,
41
+ children: _propTypes.default.node
42
+ };
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MessageIconButton = void 0;
7
+
8
+ var _style = _interopRequireDefault(require("styled-jsx/style"));
9
+
10
+ var _ui = require("@dhis2/ui");
11
+
12
+ var _classnames = _interopRequireDefault(require("classnames"));
13
+
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
16
+ var _react = _interopRequireDefault(require("react"));
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ const MessageIconButton = _ref => {
21
+ let {
22
+ tooltipContent,
23
+ disabled,
24
+ onClick,
25
+ selected,
26
+ count,
27
+ iconComponent: Icon
28
+ } = _ref;
29
+ return /*#__PURE__*/_react.default.createElement(_ui.Tooltip, {
30
+ closeDelay: 200,
31
+ content: tooltipContent
32
+ }, _ref2 => {
33
+ let {
34
+ ref,
35
+ onMouseOver,
36
+ onMouseOut
37
+ } = _ref2;
38
+ return /*#__PURE__*/_react.default.createElement("span", {
39
+ ref: ref,
40
+ onMouseOver: onMouseOver,
41
+ onMouseOut: onMouseOut,
42
+ className: _style.default.dynamic([["3807261824", [_ui.spacers.dp4, _ui.colors.grey700, _ui.colors.teal600, _ui.colors.grey900, _ui.colors.teal800, _ui.colors.teal500, _ui.colors.teal700]]]) + " " + "wrapper"
43
+ }, /*#__PURE__*/_react.default.createElement("button", {
44
+ onClick: event => {
45
+ event.stopPropagation();
46
+ onClick();
47
+ },
48
+ disabled: disabled,
49
+ className: _style.default.dynamic([["3807261824", [_ui.spacers.dp4, _ui.colors.grey700, _ui.colors.teal600, _ui.colors.grey900, _ui.colors.teal800, _ui.colors.teal500, _ui.colors.teal700]]]) + " " + ((0, _classnames.default)('button', {
50
+ selected
51
+ }) || "")
52
+ }, count && count, /*#__PURE__*/_react.default.createElement(Icon, null)), /*#__PURE__*/_react.default.createElement(_style.default, {
53
+ id: "3807261824",
54
+ dynamic: [_ui.spacers.dp4, _ui.colors.grey700, _ui.colors.teal600, _ui.colors.grey900, _ui.colors.teal800, _ui.colors.teal500, _ui.colors.teal700]
55
+ }, [".wrapper.__jsx-style-dynamic-selector{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}", ".button.__jsx-style-dynamic-selector{all:unset;cursor:pointer;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:".concat(_ui.spacers.dp4, ";-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:12px;line-height:14px;color:").concat(_ui.colors.grey700, ";}"), ".button.selected.__jsx-style-dynamic-selector{color:".concat(_ui.colors.teal600, ";font-weight:500;}"), ".button.__jsx-style-dynamic-selector:hover{color:".concat(_ui.colors.grey900, ";}"), ".button.selected.__jsx-style-dynamic-selector:hover{color:".concat(_ui.colors.teal800, ";}"), ".button.selected.__jsx-style-dynamic-selector svg{color:".concat(_ui.colors.teal500, ";}"), ".button.selected.__jsx-style-dynamic-selector:hover svg{color:".concat(_ui.colors.teal700, ";}")]));
56
+ });
57
+ };
58
+
59
+ exports.MessageIconButton = MessageIconButton;
60
+ MessageIconButton.propTypes = {
61
+ iconComponent: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.func]).isRequired,
62
+ tooltipContent: _propTypes.default.string.isRequired,
63
+ count: _propTypes.default.number,
64
+ disabled: _propTypes.default.bool,
65
+ selected: _propTypes.default.bool,
66
+ onClick: _propTypes.default.func
67
+ };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MessageInput = void 0;
7
+
8
+ var _style = _interopRequireDefault(require("styled-jsx/style"));
9
+
10
+ var _ui = require("@dhis2/ui");
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
21
+
22
+ const MessageInput = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("input", _extends({
23
+ ref: ref
24
+ }, props, {
25
+ className: _style.default.dynamic([["2769305849", [_ui.colors.grey900, _ui.colors.grey500, _ui.theme.focus, _ui.colors.grey100, _ui.colors.grey500, _ui.theme.disabled]]]) + " " + (props && props.className != null && props.className || "input")
26
+ })), /*#__PURE__*/_react.default.createElement(_style.default, {
27
+ id: "2769305849",
28
+ dynamic: [_ui.colors.grey900, _ui.colors.grey500, _ui.theme.focus, _ui.colors.grey100, _ui.colors.grey500, _ui.theme.disabled]
29
+ }, [".input.__jsx-style-dynamic-selector{width:100%;box-sizing:border-box;font-size:14px;line-height:16px;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;color:".concat(_ui.colors.grey900, ";background-color:white;padding:12px 11px 10px;outline:0;border:1px solid ").concat(_ui.colors.grey500, ";border-radius:3px;box-shadow:inset 0 1px 2px 0 rgba(48,54,60,0.1);text-overflow:ellipsis;}"), "input.__jsx-style-dynamic-selector:focus{outline:none;box-shadow:0 0 0 3px ".concat(_ui.theme.focus, ";}"), "input.disabled.__jsx-style-dynamic-selector{background-color:".concat(_ui.colors.grey100, ";border-color:").concat(_ui.colors.grey500, ";color:").concat(_ui.theme.disabled, ";cursor:not-allowed;}")])));
30
+ exports.MessageInput = MessageInput;
31
+ MessageInput.displayName = 'MessageInput';
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MessageStatsBar = void 0;
7
+
8
+ var _style = _interopRequireDefault(require("styled-jsx/style"));
9
+
10
+ var _ui = require("@dhis2/ui");
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _react = _interopRequireDefault(require("react"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ const MessageStatsBar = _ref => {
19
+ let {
20
+ children
21
+ } = _ref;
22
+ return /*#__PURE__*/_react.default.createElement("div", {
23
+ className: _style.default.dynamic([["2534339265", [_ui.spacers.dp12]]]) + " " + "container"
24
+ }, children, /*#__PURE__*/_react.default.createElement(_style.default, {
25
+ id: "2534339265",
26
+ dynamic: [_ui.spacers.dp12]
27
+ }, [".container.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:".concat(_ui.spacers.dp12, ";}")]));
28
+ };
29
+
30
+ exports.MessageStatsBar = MessageStatsBar;
31
+ MessageStatsBar.propTypes = {
32
+ children: _propTypes.default.node.isRequired
33
+ };
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Message", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Message.Message;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "MessageButtonStrip", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _MessageButtonStrip.MessageButtonStrip;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "MessageEditorContainer", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _MessageEditorContainer.MessageEditorContainer;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "MessageIconButton", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _MessageIconButton.MessageIconButton;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "MessageInput", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _MessageInput.MessageInput;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "MessageStatsBar", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _MessageStatsBar.MessageStatsBar;
40
+ }
41
+ });
42
+
43
+ var _Message = require("./Message.js");
44
+
45
+ var _MessageButtonStrip = require("./MessageButtonStrip.js");
46
+
47
+ var _MessageIconButton = require("./MessageIconButton.js");
48
+
49
+ var _MessageInput = require("./MessageInput.js");
50
+
51
+ var _MessageEditorContainer = require("./MessageEditorContainer.js");
52
+
53
+ var _MessageStatsBar = require("./MessageStatsBar.js");
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RichTextEditor = void 0;
7
+
8
+ var _style = _interopRequireDefault(require("styled-jsx/style"));
9
+
10
+ var _d2I18n = _interopRequireDefault(require("@dhis2/d2-i18n"));
11
+
12
+ var _d2UiRichText = require("@dhis2/d2-ui-rich-text");
13
+
14
+ var _ui = require("@dhis2/ui");
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _UserMentionWrapper = require("../UserMention/UserMentionWrapper.js");
21
+
22
+ var _markdownHandler = require("./markdownHandler.js");
23
+
24
+ var _RichTextEditorStyle = require("./styles/RichTextEditor.style.js");
25
+
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
+
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+
30
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
+
32
+ const EmojisPopover = _ref => {
33
+ let {
34
+ onInsertMarkdown,
35
+ onClose,
36
+ reference
37
+ } = _ref;
38
+ return /*#__PURE__*/_react.default.createElement(_ui.Popover, {
39
+ reference: reference,
40
+ onClickOutside: onClose
41
+ }, /*#__PURE__*/_react.default.createElement("ul", {
42
+ className: "jsx-".concat(_RichTextEditorStyle.emojisPopoverClasses.__hash) + " " + "emojisList"
43
+ }, /*#__PURE__*/_react.default.createElement("li", {
44
+ onClick: () => onInsertMarkdown(_markdownHandler.EMOJI_SMILEY_FACE),
45
+ className: "jsx-".concat(_RichTextEditorStyle.emojisPopoverClasses.__hash)
46
+ }, /*#__PURE__*/_react.default.createElement(_d2UiRichText.Parser, null, _markdownHandler.emojis[_markdownHandler.EMOJI_SMILEY_FACE])), /*#__PURE__*/_react.default.createElement("li", {
47
+ onClick: () => onInsertMarkdown(_markdownHandler.EMOJI_SAD_FACE),
48
+ className: "jsx-".concat(_RichTextEditorStyle.emojisPopoverClasses.__hash)
49
+ }, /*#__PURE__*/_react.default.createElement(_d2UiRichText.Parser, null, _markdownHandler.emojis[_markdownHandler.EMOJI_SAD_FACE])), /*#__PURE__*/_react.default.createElement("li", {
50
+ onClick: () => onInsertMarkdown(_markdownHandler.EMOJI_THUMBS_UP),
51
+ className: "jsx-".concat(_RichTextEditorStyle.emojisPopoverClasses.__hash)
52
+ }, /*#__PURE__*/_react.default.createElement(_d2UiRichText.Parser, null, _markdownHandler.emojis[_markdownHandler.EMOJI_THUMBS_UP])), /*#__PURE__*/_react.default.createElement("li", {
53
+ onClick: () => onInsertMarkdown(_markdownHandler.EMOJI_THUMBS_DOWN),
54
+ className: "jsx-".concat(_RichTextEditorStyle.emojisPopoverClasses.__hash)
55
+ }, /*#__PURE__*/_react.default.createElement(_d2UiRichText.Parser, null, _markdownHandler.emojis[_markdownHandler.EMOJI_THUMBS_DOWN]))), /*#__PURE__*/_react.default.createElement(_style.default, {
56
+ id: _RichTextEditorStyle.emojisPopoverClasses.__hash
57
+ }, _RichTextEditorStyle.emojisPopoverClasses));
58
+ };
59
+
60
+ EmojisPopover.propTypes = {
61
+ onClose: _propTypes.default.func.isRequired,
62
+ onInsertMarkdown: _propTypes.default.func.isRequired,
63
+ reference: _propTypes.default.object
64
+ };
65
+
66
+ const IconButtonWithTooltip = _ref2 => {
67
+ let {
68
+ tooltipContent,
69
+ disabled,
70
+ icon,
71
+ onClick
72
+ } = _ref2;
73
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ui.Tooltip, {
74
+ content: tooltipContent,
75
+ placement: "bottom",
76
+ closeDelay: 200
77
+ }, _ref3 => {
78
+ let {
79
+ ref,
80
+ onMouseOver,
81
+ onMouseOut
82
+ } = _ref3;
83
+ return /*#__PURE__*/_react.default.createElement("span", {
84
+ ref: ref,
85
+ onMouseOver: onMouseOver,
86
+ onMouseOut: onMouseOut,
87
+ className: "jsx-".concat(_RichTextEditorStyle.tooltipAnchorClasses.__hash) + " " + "tooltip"
88
+ }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
89
+ secondary: true,
90
+ small: true,
91
+ disabled: disabled,
92
+ icon: icon,
93
+ onClick: onClick
94
+ }));
95
+ }), /*#__PURE__*/_react.default.createElement(_style.default, {
96
+ id: _RichTextEditorStyle.tooltipAnchorClasses.__hash
97
+ }, _RichTextEditorStyle.tooltipAnchorClasses));
98
+ };
99
+
100
+ IconButtonWithTooltip.propTypes = {
101
+ disabled: _propTypes.default.bool,
102
+ icon: _propTypes.default.node,
103
+ tooltipContent: _propTypes.default.string,
104
+ onClick: _propTypes.default.func
105
+ };
106
+
107
+ const Toolbar = _ref4 => {
108
+ let {
109
+ disabled,
110
+ onInsertMarkdown,
111
+ onTogglePreview,
112
+ previewButtonDisabled,
113
+ previewMode
114
+ } = _ref4;
115
+ const emojisButtonRef = (0, _react.useRef)();
116
+ const [emojisPopoverIsOpen, setEmojisPopoverIsOpen] = (0, _react.useState)(false);
117
+ const iconColor = disabled ? _ui.colors.grey600 : _ui.colors.grey700;
118
+ return /*#__PURE__*/_react.default.createElement("div", {
119
+ className: "jsx-".concat(_RichTextEditorStyle.tooltipAnchorClasses.__hash, " jsx-").concat(_RichTextEditorStyle.toolbarClasses.__hash) + " " + "toolbar"
120
+ }, !previewMode ? /*#__PURE__*/_react.default.createElement("div", {
121
+ className: "jsx-".concat(_RichTextEditorStyle.tooltipAnchorClasses.__hash, " jsx-").concat(_RichTextEditorStyle.toolbarClasses.__hash) + " " + "actionsWrapper"
122
+ }, /*#__PURE__*/_react.default.createElement("div", {
123
+ className: "jsx-".concat(_RichTextEditorStyle.tooltipAnchorClasses.__hash, " jsx-").concat(_RichTextEditorStyle.toolbarClasses.__hash) + " " + "mainActions"
124
+ }, /*#__PURE__*/_react.default.createElement(IconButtonWithTooltip, {
125
+ tooltipContent: _d2I18n.default.t('Bold text'),
126
+ disabled: disabled,
127
+ icon: /*#__PURE__*/_react.default.createElement(_ui.IconTextBold24, {
128
+ color: iconColor
129
+ }),
130
+ onClick: () => onInsertMarkdown(_markdownHandler.BOLD)
131
+ }), /*#__PURE__*/_react.default.createElement(IconButtonWithTooltip, {
132
+ tooltipContent: _d2I18n.default.t('Italic text'),
133
+ disabled: disabled,
134
+ icon: /*#__PURE__*/_react.default.createElement(_ui.IconTextItalic24, {
135
+ color: iconColor
136
+ }),
137
+ onClick: () => onInsertMarkdown(_markdownHandler.ITALIC)
138
+ }), /*#__PURE__*/_react.default.createElement(IconButtonWithTooltip, {
139
+ tooltipContent: _d2I18n.default.t('Link to a URL'),
140
+ disabled: disabled,
141
+ icon: /*#__PURE__*/_react.default.createElement(_ui.IconLink24, {
142
+ color: iconColor
143
+ }),
144
+ onClick: () => onInsertMarkdown(_markdownHandler.LINK)
145
+ }), /*#__PURE__*/_react.default.createElement(IconButtonWithTooltip, {
146
+ tooltipContent: _d2I18n.default.t('Mention a user'),
147
+ disabled: disabled,
148
+ icon: /*#__PURE__*/_react.default.createElement(_ui.IconAt24, {
149
+ color: iconColor
150
+ }),
151
+ onClick: () => onInsertMarkdown(_markdownHandler.MENTION)
152
+ }), /*#__PURE__*/_react.default.createElement("span", {
153
+ ref: emojisButtonRef,
154
+ className: "jsx-".concat(_RichTextEditorStyle.tooltipAnchorClasses.__hash, " jsx-").concat(_RichTextEditorStyle.toolbarClasses.__hash) + " " + "tooltip"
155
+ }, /*#__PURE__*/_react.default.createElement(IconButtonWithTooltip, {
156
+ tooltipContent: _d2I18n.default.t('Add emoji'),
157
+ disabled: disabled,
158
+ icon: /*#__PURE__*/_react.default.createElement(_ui.IconFaceAdd24, {
159
+ color: iconColor
160
+ }),
161
+ onClick: () => setEmojisPopoverIsOpen(true)
162
+ })), emojisPopoverIsOpen && /*#__PURE__*/_react.default.createElement(EmojisPopover, {
163
+ onClose: () => setEmojisPopoverIsOpen(false),
164
+ onInsertMarkdown: markup => {
165
+ onInsertMarkdown(markup);
166
+ setEmojisPopoverIsOpen(false);
167
+ },
168
+ reference: emojisButtonRef
169
+ })), /*#__PURE__*/_react.default.createElement("div", {
170
+ className: "jsx-".concat(_RichTextEditorStyle.tooltipAnchorClasses.__hash, " jsx-").concat(_RichTextEditorStyle.toolbarClasses.__hash) + " " + "sideActions"
171
+ }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
172
+ secondary: true,
173
+ small: true,
174
+ disabled: previewButtonDisabled || disabled,
175
+ onClick: onTogglePreview
176
+ }, _d2I18n.default.t('Preview')))) : /*#__PURE__*/_react.default.createElement("div", {
177
+ className: "jsx-".concat(_RichTextEditorStyle.tooltipAnchorClasses.__hash, " jsx-").concat(_RichTextEditorStyle.toolbarClasses.__hash) + " " + "previewWrapper"
178
+ }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
179
+ secondary: true,
180
+ small: true,
181
+ onClick: onTogglePreview,
182
+ disabled: disabled
183
+ }, _d2I18n.default.t('Back to write mode'))), /*#__PURE__*/_react.default.createElement(_style.default, {
184
+ id: _RichTextEditorStyle.tooltipAnchorClasses.__hash
185
+ }, _RichTextEditorStyle.tooltipAnchorClasses), /*#__PURE__*/_react.default.createElement(_style.default, {
186
+ id: _RichTextEditorStyle.toolbarClasses.__hash
187
+ }, _RichTextEditorStyle.toolbarClasses));
188
+ };
189
+
190
+ Toolbar.propTypes = {
191
+ previewButtonDisabled: _propTypes.default.bool.isRequired,
192
+ previewMode: _propTypes.default.bool.isRequired,
193
+ onInsertMarkdown: _propTypes.default.func.isRequired,
194
+ onTogglePreview: _propTypes.default.func.isRequired,
195
+ disabled: _propTypes.default.bool
196
+ };
197
+ const RichTextEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref5, externalRef) => {
198
+ let {
199
+ value,
200
+ disabled,
201
+ inputPlaceholder,
202
+ onChange,
203
+ errorText
204
+ } = _ref5;
205
+ const [previewMode, setPreviewMode] = (0, _react.useState)(false);
206
+ const internalRef = (0, _react.useRef)();
207
+ const textareaRef = externalRef || internalRef;
208
+ (0, _react.useEffect)(() => {
209
+ var _textareaRef$current;
210
+
211
+ return (_textareaRef$current = textareaRef.current) === null || _textareaRef$current === void 0 ? void 0 : _textareaRef$current.focus();
212
+ }, [textareaRef.current]);
213
+ return /*#__PURE__*/_react.default.createElement("div", {
214
+ className: "jsx-".concat(_RichTextEditorStyle.mainClasses.__hash) + " " + "container"
215
+ }, /*#__PURE__*/_react.default.createElement(Toolbar, {
216
+ onInsertMarkdown: markdown => {
217
+ (0, _markdownHandler.insertMarkdown)(markdown, textareaRef.current, (text, caretPos) => {
218
+ onChange(text);
219
+ textareaRef.current.focus();
220
+ textareaRef.current.selectionEnd = caretPos;
221
+ });
222
+
223
+ if (markdown === _markdownHandler.MENTION) {
224
+ textareaRef.current.dispatchEvent(new KeyboardEvent('keydown', {
225
+ key: '@',
226
+ bubbles: true
227
+ }));
228
+ }
229
+ },
230
+ onTogglePreview: () => setPreviewMode(!previewMode),
231
+ previewMode: previewMode,
232
+ previewButtonDisabled: !value,
233
+ disabled: disabled
234
+ }), previewMode ? /*#__PURE__*/_react.default.createElement("div", {
235
+ className: "jsx-".concat(_RichTextEditorStyle.mainClasses.__hash) + " " + "preview"
236
+ }, /*#__PURE__*/_react.default.createElement(_d2UiRichText.Parser, null, value)) : /*#__PURE__*/_react.default.createElement(_ui.Field, {
237
+ error: !!errorText,
238
+ validationText: errorText
239
+ }, /*#__PURE__*/_react.default.createElement(_UserMentionWrapper.UserMentionWrapper, {
240
+ onUserSelect: onChange,
241
+ inputReference: textareaRef
242
+ }, /*#__PURE__*/_react.default.createElement("textarea", {
243
+ ref: textareaRef,
244
+ placeholder: inputPlaceholder,
245
+ disabled: disabled,
246
+ value: value,
247
+ onChange: event => onChange(event.target.value),
248
+ onKeyDown: event => (0, _markdownHandler.convertCtrlKey)(event, onChange),
249
+ className: "jsx-".concat(_RichTextEditorStyle.mainClasses.__hash) + " " + "textarea"
250
+ }))), /*#__PURE__*/_react.default.createElement(_style.default, {
251
+ id: _RichTextEditorStyle.mainClasses.__hash
252
+ }, _RichTextEditorStyle.mainClasses));
253
+ });
254
+ exports.RichTextEditor = RichTextEditor;
255
+ RichTextEditor.displayName = 'RichTextEditor';
256
+ RichTextEditor.propTypes = {
257
+ value: _propTypes.default.string.isRequired,
258
+ onChange: _propTypes.default.func.isRequired,
259
+ disabled: _propTypes.default.bool,
260
+ errorText: _propTypes.default.string,
261
+ inputPlaceholder: _propTypes.default.string
262
+ };