@atlaskit/editor-plugin-mentions 1.3.0 → 1.4.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.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/nodeviews/mention.js +29 -18
- package/dist/cjs/ui/Mention/index.js +71 -59
- package/dist/es2019/nodeviews/mention.js +33 -19
- package/dist/es2019/ui/Mention/index.js +48 -53
- package/dist/esm/nodeviews/mention.js +30 -19
- package/dist/esm/ui/Mention/index.js +74 -61
- package/dist/types/nodeviews/mention.d.ts +1 -1
- package/dist/types/types.d.ts +0 -2
- package/dist/types/ui/Mention/index.d.ts +12 -10
- package/dist/types-ts4.5/nodeviews/mention.d.ts +1 -1
- package/dist/types-ts4.5/types.d.ts +0 -2
- package/dist/types-ts4.5/ui/Mention/index.d.ts +12 -10
- package/package.json +3 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-mentions
|
|
2
2
|
|
|
3
|
+
## 1.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#103099](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/103099)
|
|
8
|
+
[`ab382e121799`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/ab382e121799) -
|
|
9
|
+
[ux] [ED-23248] -
|
|
10
|
+
|
|
11
|
+
**@atlaskit/editor-core**: REVERT: Added optional profilecardProvider to Mention plugin in
|
|
12
|
+
universal composable editor **@atlaskit/editor-plugin-mentions**: REVERT: Made mentions render
|
|
13
|
+
with profile cards on click if the feature flag:
|
|
14
|
+
`platform.editor.mentions-in-editor-popup-on-click` is turned on
|
|
15
|
+
|
|
3
16
|
## 1.3.0
|
|
4
17
|
|
|
5
18
|
### Minor Changes
|
|
@@ -17,10 +17,13 @@ var _Mention = _interopRequireDefault(require("../ui/Mention"));
|
|
|
17
17
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
18
18
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
19
|
var UNKNOWN_USER_ID = '_|unknown|_';
|
|
20
|
-
var
|
|
20
|
+
var MentionAssistiveTextComponent = function MentionAssistiveTextComponent(_ref) {
|
|
21
21
|
var id = _ref.id,
|
|
22
22
|
text = _ref.text,
|
|
23
|
-
|
|
23
|
+
providers = _ref.providers,
|
|
24
|
+
accessLevel = _ref.accessLevel,
|
|
25
|
+
mentionProvider = _ref.mentionProvider,
|
|
26
|
+
localId = _ref.localId;
|
|
24
27
|
var _useState = (0, _react.useState)(text),
|
|
25
28
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
26
29
|
resolvedName = _useState2[0],
|
|
@@ -76,28 +79,36 @@ var useResolvedName = function useResolvedName(_ref) {
|
|
|
76
79
|
});
|
|
77
80
|
}
|
|
78
81
|
}, [id, text, mentionProvider]);
|
|
79
|
-
return
|
|
82
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_Mention.default, {
|
|
83
|
+
id: id,
|
|
84
|
+
text: resolvedName,
|
|
85
|
+
accessLevel: accessLevel,
|
|
86
|
+
providers: providers,
|
|
87
|
+
localId: localId
|
|
88
|
+
})));
|
|
80
89
|
};
|
|
81
90
|
var MentionNodeView = exports.MentionNodeView = function MentionNodeView(props) {
|
|
82
|
-
var
|
|
91
|
+
var providerFactory = props.providerFactory;
|
|
83
92
|
var _props$node$attrs = props.node.attrs,
|
|
84
93
|
id = _props$node$attrs.id,
|
|
85
94
|
text = _props$node$attrs.text,
|
|
86
95
|
accessLevel = _props$node$attrs.accessLevel,
|
|
87
96
|
localId = _props$node$attrs.localId;
|
|
88
|
-
var
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
97
|
+
var renderAssistiveTextWithProviders = function renderAssistiveTextWithProviders(providers) {
|
|
98
|
+
var _ref3 = providers,
|
|
99
|
+
mentionProvider = _ref3.mentionProvider;
|
|
100
|
+
return /*#__PURE__*/_react.default.createElement(MentionAssistiveTextComponent, {
|
|
101
|
+
mentionProvider: mentionProvider,
|
|
102
|
+
id: id,
|
|
103
|
+
text: text,
|
|
104
|
+
providers: providerFactory,
|
|
105
|
+
accessLevel: accessLevel,
|
|
106
|
+
localId: localId
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
return /*#__PURE__*/_react.default.createElement(_providerFactory.WithProviders, {
|
|
110
|
+
providers: ['mentionProvider', 'profilecardProvider'],
|
|
111
|
+
providerFactory: providerFactory,
|
|
112
|
+
renderNode: renderAssistiveTextWithProviders
|
|
94
113
|
});
|
|
95
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_Mention.default, {
|
|
96
|
-
id: id,
|
|
97
|
-
text: resolvedName,
|
|
98
|
-
accessLevel: accessLevel,
|
|
99
|
-
mentionProvider: mentionProvider,
|
|
100
|
-
profilecardProvider: profilecardProvider,
|
|
101
|
-
localId: localId
|
|
102
|
-
})));
|
|
103
114
|
};
|
|
@@ -7,14 +7,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
-
var
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
17
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
-
var
|
|
18
|
+
var _providerFactory = require("@atlaskit/editor-common/provider-factory");
|
|
13
19
|
var _utils = require("@atlaskit/editor-common/utils");
|
|
14
20
|
var _element = require("@atlaskit/mention/element");
|
|
15
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
16
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
17
22
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
23
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
24
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
18
25
|
// Workaround for a firefox issue where dom selection is off sync
|
|
19
26
|
// https://product-fabric.atlassian.net/browse/ED-12442
|
|
20
27
|
var refreshBrowserSelection = function refreshBrowserSelection() {
|
|
@@ -27,62 +34,67 @@ var refreshBrowserSelection = function refreshBrowserSelection() {
|
|
|
27
34
|
}
|
|
28
35
|
}
|
|
29
36
|
};
|
|
30
|
-
var Mention = function
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
setProfilecardProvider(null);
|
|
37
|
+
var Mention = exports.default = /*#__PURE__*/function (_PureComponent) {
|
|
38
|
+
(0, _inherits2.default)(Mention, _PureComponent);
|
|
39
|
+
var _super = _createSuper(Mention);
|
|
40
|
+
function Mention(props) {
|
|
41
|
+
var _this;
|
|
42
|
+
(0, _classCallCheck2.default)(this, Mention);
|
|
43
|
+
_this = _super.call(this, props);
|
|
44
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderWithProvider", function (providers) {
|
|
45
|
+
var _this$props = _this.props,
|
|
46
|
+
accessLevel = _this$props.accessLevel,
|
|
47
|
+
eventHandlers = _this$props.eventHandlers,
|
|
48
|
+
id = _this$props.id,
|
|
49
|
+
text = _this$props.text,
|
|
50
|
+
localId = _this$props.localId;
|
|
51
|
+
var _ref = providers,
|
|
52
|
+
mentionProvider = _ref.mentionProvider;
|
|
53
|
+
var actionHandlers = {};
|
|
54
|
+
['onClick', 'onMouseEnter', 'onMouseLeave'].forEach(function (handler) {
|
|
55
|
+
actionHandlers[handler] = eventHandlers && eventHandlers[handler] || function () {};
|
|
50
56
|
});
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
return /*#__PURE__*/_react.default.createElement(_element.ResourcedMention, (0, _extends2.default)({
|
|
58
|
+
id: id,
|
|
59
|
+
text: text,
|
|
60
|
+
accessLevel: accessLevel,
|
|
61
|
+
localId: localId,
|
|
62
|
+
mentionProvider: mentionProvider
|
|
63
|
+
}, actionHandlers));
|
|
64
|
+
});
|
|
65
|
+
_this.providerFactory = props.providers || new _providerFactory.ProviderFactory();
|
|
66
|
+
return _this;
|
|
67
|
+
}
|
|
68
|
+
(0, _createClass2.default)(Mention, [{
|
|
69
|
+
key: "componentDidMount",
|
|
70
|
+
value: function componentDidMount() {
|
|
71
|
+
// Workaround an issue where the selection is not updated immediately after adding
|
|
72
|
+
// a mention when "sanitizePrivateContent" is enabled in the editor on safari.
|
|
73
|
+
// This affects both insertion and paste behaviour it is applied to the component.
|
|
74
|
+
// https://product-fabric.atlassian.net/browse/ED-14859
|
|
75
|
+
if (_utils.browser.safari) {
|
|
76
|
+
setTimeout(refreshBrowserSelection, 0);
|
|
77
|
+
}
|
|
53
78
|
}
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
79
|
+
}, {
|
|
80
|
+
key: "componentWillUnmount",
|
|
81
|
+
value: function componentWillUnmount() {
|
|
82
|
+
if (!this.props.providers) {
|
|
83
|
+
// new ProviderFactory is created if no `providers` has been set
|
|
84
|
+
// in this case when component is unmounted it's safe to destroy this providerFactory
|
|
85
|
+
this.providerFactory.destroy();
|
|
86
|
+
}
|
|
62
87
|
}
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}, actionHandlers));
|
|
77
|
-
} else {
|
|
78
|
-
return /*#__PURE__*/_react.default.createElement(_element.ResourcedMention, (0, _extends2.default)({
|
|
79
|
-
id: id,
|
|
80
|
-
text: text,
|
|
81
|
-
accessLevel: accessLevel,
|
|
82
|
-
mentionProvider: mentionProvider,
|
|
83
|
-
localId: localId
|
|
84
|
-
}, actionHandlers));
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
Mention.displayName = 'Mention';
|
|
88
|
-
var _default = exports.default = Mention;
|
|
88
|
+
}, {
|
|
89
|
+
key: "render",
|
|
90
|
+
value: function render() {
|
|
91
|
+
return /*#__PURE__*/_react.default.createElement(_providerFactory.WithProviders, {
|
|
92
|
+
providers: ['mentionProvider', 'profilecardProvider'],
|
|
93
|
+
providerFactory: this.providerFactory,
|
|
94
|
+
renderNode: this.renderWithProvider
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}]);
|
|
98
|
+
return Mention;
|
|
99
|
+
}(_react.PureComponent);
|
|
100
|
+
(0, _defineProperty2.default)(Mention, "displayName", 'Mention');
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { WithProviders } from '@atlaskit/editor-common/provider-factory';
|
|
3
3
|
import { isResolvingMentionProvider, MentionNameStatus } from '@atlaskit/mention';
|
|
4
4
|
import { isPromise } from '@atlaskit/mention/types';
|
|
5
5
|
import Mention from '../ui/Mention';
|
|
6
6
|
const UNKNOWN_USER_ID = '_|unknown|_';
|
|
7
|
-
const
|
|
7
|
+
const MentionAssistiveTextComponent = ({
|
|
8
8
|
id,
|
|
9
9
|
text,
|
|
10
|
-
|
|
10
|
+
providers,
|
|
11
|
+
accessLevel,
|
|
12
|
+
mentionProvider,
|
|
13
|
+
localId
|
|
11
14
|
}) => {
|
|
12
15
|
const [resolvedName, setResolvedName] = useState(text);
|
|
13
16
|
const processName = name => {
|
|
@@ -35,29 +38,40 @@ const useResolvedName = ({
|
|
|
35
38
|
});
|
|
36
39
|
}
|
|
37
40
|
}, [id, text, mentionProvider]);
|
|
38
|
-
return
|
|
41
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Mention, {
|
|
42
|
+
id: id,
|
|
43
|
+
text: resolvedName,
|
|
44
|
+
accessLevel: accessLevel,
|
|
45
|
+
providers: providers,
|
|
46
|
+
localId: localId
|
|
47
|
+
})));
|
|
39
48
|
};
|
|
40
49
|
export const MentionNodeView = props => {
|
|
41
|
-
|
|
50
|
+
const {
|
|
51
|
+
providerFactory
|
|
52
|
+
} = props;
|
|
42
53
|
const {
|
|
43
54
|
id,
|
|
44
55
|
text,
|
|
45
56
|
accessLevel,
|
|
46
57
|
localId
|
|
47
58
|
} = props.node.attrs;
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
const renderAssistiveTextWithProviders = providers => {
|
|
60
|
+
const {
|
|
61
|
+
mentionProvider
|
|
62
|
+
} = providers;
|
|
63
|
+
return /*#__PURE__*/React.createElement(MentionAssistiveTextComponent, {
|
|
64
|
+
mentionProvider: mentionProvider,
|
|
65
|
+
id: id,
|
|
66
|
+
text: text,
|
|
67
|
+
providers: providerFactory,
|
|
68
|
+
accessLevel: accessLevel,
|
|
69
|
+
localId: localId
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
return /*#__PURE__*/React.createElement(WithProviders, {
|
|
73
|
+
providers: ['mentionProvider', 'profilecardProvider'],
|
|
74
|
+
providerFactory: providerFactory,
|
|
75
|
+
renderNode: renderAssistiveTextWithProviders
|
|
54
76
|
});
|
|
55
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Mention, {
|
|
56
|
-
id: id,
|
|
57
|
-
text: resolvedName,
|
|
58
|
-
accessLevel: accessLevel,
|
|
59
|
-
mentionProvider: mentionProvider,
|
|
60
|
-
profilecardProvider: profilecardProvider,
|
|
61
|
-
localId: localId
|
|
62
|
-
})));
|
|
63
77
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { PureComponent } from 'react';
|
|
5
|
+
import { ProviderFactory, WithProviders } from '@atlaskit/editor-common/provider-factory';
|
|
4
6
|
import { browser } from '@atlaskit/editor-common/utils';
|
|
5
7
|
import { ResourcedMention } from '@atlaskit/mention/element';
|
|
6
|
-
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
7
|
-
|
|
8
8
|
// Workaround for a firefox issue where dom selection is off sync
|
|
9
9
|
// https://product-fabric.atlassian.net/browse/ED-12442
|
|
10
10
|
const refreshBrowserSelection = () => {
|
|
@@ -17,31 +17,35 @@ const refreshBrowserSelection = () => {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}).catch(() => {
|
|
38
|
-
setProfilecardProvider(null);
|
|
20
|
+
export default class Mention extends PureComponent {
|
|
21
|
+
constructor(props) {
|
|
22
|
+
super(props);
|
|
23
|
+
_defineProperty(this, "renderWithProvider", providers => {
|
|
24
|
+
const {
|
|
25
|
+
accessLevel,
|
|
26
|
+
eventHandlers,
|
|
27
|
+
id,
|
|
28
|
+
text,
|
|
29
|
+
localId
|
|
30
|
+
} = this.props;
|
|
31
|
+
const {
|
|
32
|
+
mentionProvider
|
|
33
|
+
} = providers;
|
|
34
|
+
const actionHandlers = {};
|
|
35
|
+
['onClick', 'onMouseEnter', 'onMouseLeave'].forEach(handler => {
|
|
36
|
+
actionHandlers[handler] = eventHandlers && eventHandlers[handler] || (() => {});
|
|
39
37
|
});
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
return /*#__PURE__*/React.createElement(ResourcedMention, _extends({
|
|
39
|
+
id: id,
|
|
40
|
+
text: text,
|
|
41
|
+
accessLevel: accessLevel,
|
|
42
|
+
localId: localId,
|
|
43
|
+
mentionProvider: mentionProvider
|
|
44
|
+
}, actionHandlers));
|
|
45
|
+
});
|
|
46
|
+
this.providerFactory = props.providers || new ProviderFactory();
|
|
47
|
+
}
|
|
48
|
+
componentDidMount() {
|
|
45
49
|
// Workaround an issue where the selection is not updated immediately after adding
|
|
46
50
|
// a mention when "sanitizePrivateContent" is enabled in the editor on safari.
|
|
47
51
|
// This affects both insertion and paste behaviour it is applied to the component.
|
|
@@ -49,29 +53,20 @@ const Mention = props => {
|
|
|
49
53
|
if (browser.safari) {
|
|
50
54
|
setTimeout(refreshBrowserSelection, 0);
|
|
51
55
|
}
|
|
52
|
-
}, []);
|
|
53
|
-
const actionHandlers = {};
|
|
54
|
-
['onClick', 'onMouseEnter', 'onMouseLeave'].forEach(handler => {
|
|
55
|
-
actionHandlers[handler] = eventHandlers && eventHandlers[handler] || (() => {});
|
|
56
|
-
});
|
|
57
|
-
if (getBooleanFF('platform.editor.mentions-in-editor-popup-on-click') && profilecardProvider) {
|
|
58
|
-
return /*#__PURE__*/React.createElement(MentionWithProfileCard, _extends({
|
|
59
|
-
id: id,
|
|
60
|
-
text: text,
|
|
61
|
-
accessLevel: accessLevel,
|
|
62
|
-
mentionProvider: mentionProvider,
|
|
63
|
-
profilecardProvider: profilecardProvider,
|
|
64
|
-
localId: localId
|
|
65
|
-
}, actionHandlers));
|
|
66
|
-
} else {
|
|
67
|
-
return /*#__PURE__*/React.createElement(ResourcedMention, _extends({
|
|
68
|
-
id: id,
|
|
69
|
-
text: text,
|
|
70
|
-
accessLevel: accessLevel,
|
|
71
|
-
mentionProvider: mentionProvider,
|
|
72
|
-
localId: localId
|
|
73
|
-
}, actionHandlers));
|
|
74
56
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
57
|
+
componentWillUnmount() {
|
|
58
|
+
if (!this.props.providers) {
|
|
59
|
+
// new ProviderFactory is created if no `providers` has been set
|
|
60
|
+
// in this case when component is unmounted it's safe to destroy this providerFactory
|
|
61
|
+
this.providerFactory.destroy();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
render() {
|
|
65
|
+
return /*#__PURE__*/React.createElement(WithProviders, {
|
|
66
|
+
providers: ['mentionProvider', 'profilecardProvider'],
|
|
67
|
+
providerFactory: this.providerFactory,
|
|
68
|
+
renderNode: this.renderWithProvider
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
_defineProperty(Mention, "displayName", 'Mention');
|
|
@@ -2,15 +2,18 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
3
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
4
4
|
import React, { useEffect, useState } from 'react';
|
|
5
|
-
import {
|
|
5
|
+
import { WithProviders } from '@atlaskit/editor-common/provider-factory';
|
|
6
6
|
import { isResolvingMentionProvider, MentionNameStatus } from '@atlaskit/mention';
|
|
7
7
|
import { isPromise } from '@atlaskit/mention/types';
|
|
8
8
|
import Mention from '../ui/Mention';
|
|
9
9
|
var UNKNOWN_USER_ID = '_|unknown|_';
|
|
10
|
-
var
|
|
10
|
+
var MentionAssistiveTextComponent = function MentionAssistiveTextComponent(_ref) {
|
|
11
11
|
var id = _ref.id,
|
|
12
12
|
text = _ref.text,
|
|
13
|
-
|
|
13
|
+
providers = _ref.providers,
|
|
14
|
+
accessLevel = _ref.accessLevel,
|
|
15
|
+
mentionProvider = _ref.mentionProvider,
|
|
16
|
+
localId = _ref.localId;
|
|
14
17
|
var _useState = useState(text),
|
|
15
18
|
_useState2 = _slicedToArray(_useState, 2),
|
|
16
19
|
resolvedName = _useState2[0],
|
|
@@ -66,28 +69,36 @@ var useResolvedName = function useResolvedName(_ref) {
|
|
|
66
69
|
});
|
|
67
70
|
}
|
|
68
71
|
}, [id, text, mentionProvider]);
|
|
69
|
-
return
|
|
72
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Mention, {
|
|
73
|
+
id: id,
|
|
74
|
+
text: resolvedName,
|
|
75
|
+
accessLevel: accessLevel,
|
|
76
|
+
providers: providers,
|
|
77
|
+
localId: localId
|
|
78
|
+
})));
|
|
70
79
|
};
|
|
71
80
|
export var MentionNodeView = function MentionNodeView(props) {
|
|
72
|
-
var
|
|
81
|
+
var providerFactory = props.providerFactory;
|
|
73
82
|
var _props$node$attrs = props.node.attrs,
|
|
74
83
|
id = _props$node$attrs.id,
|
|
75
84
|
text = _props$node$attrs.text,
|
|
76
85
|
accessLevel = _props$node$attrs.accessLevel,
|
|
77
86
|
localId = _props$node$attrs.localId;
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
87
|
+
var renderAssistiveTextWithProviders = function renderAssistiveTextWithProviders(providers) {
|
|
88
|
+
var _ref3 = providers,
|
|
89
|
+
mentionProvider = _ref3.mentionProvider;
|
|
90
|
+
return /*#__PURE__*/React.createElement(MentionAssistiveTextComponent, {
|
|
91
|
+
mentionProvider: mentionProvider,
|
|
92
|
+
id: id,
|
|
93
|
+
text: text,
|
|
94
|
+
providers: providerFactory,
|
|
95
|
+
accessLevel: accessLevel,
|
|
96
|
+
localId: localId
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
return /*#__PURE__*/React.createElement(WithProviders, {
|
|
100
|
+
providers: ['mentionProvider', 'profilecardProvider'],
|
|
101
|
+
providerFactory: providerFactory,
|
|
102
|
+
renderNode: renderAssistiveTextWithProviders
|
|
84
103
|
});
|
|
85
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Mention, {
|
|
86
|
-
id: id,
|
|
87
|
-
text: resolvedName,
|
|
88
|
-
accessLevel: accessLevel,
|
|
89
|
-
mentionProvider: mentionProvider,
|
|
90
|
-
profilecardProvider: profilecardProvider,
|
|
91
|
-
localId: localId
|
|
92
|
-
})));
|
|
93
104
|
};
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
4
|
+
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
|
|
5
|
+
import _inherits from "@babel/runtime/helpers/inherits";
|
|
6
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
7
|
+
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
8
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
9
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
10
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import { PureComponent } from 'react';
|
|
13
|
+
import { ProviderFactory, WithProviders } from '@atlaskit/editor-common/provider-factory';
|
|
5
14
|
import { browser } from '@atlaskit/editor-common/utils';
|
|
6
15
|
import { ResourcedMention } from '@atlaskit/mention/element';
|
|
7
|
-
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
8
|
-
|
|
9
16
|
// Workaround for a firefox issue where dom selection is off sync
|
|
10
17
|
// https://product-fabric.atlassian.net/browse/ED-12442
|
|
11
18
|
var refreshBrowserSelection = function refreshBrowserSelection() {
|
|
@@ -18,62 +25,68 @@ var refreshBrowserSelection = function refreshBrowserSelection() {
|
|
|
18
25
|
}
|
|
19
26
|
}
|
|
20
27
|
};
|
|
21
|
-
var Mention = function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
setProfilecardProvider(null);
|
|
28
|
+
var Mention = /*#__PURE__*/function (_PureComponent) {
|
|
29
|
+
_inherits(Mention, _PureComponent);
|
|
30
|
+
var _super = _createSuper(Mention);
|
|
31
|
+
function Mention(props) {
|
|
32
|
+
var _this;
|
|
33
|
+
_classCallCheck(this, Mention);
|
|
34
|
+
_this = _super.call(this, props);
|
|
35
|
+
_defineProperty(_assertThisInitialized(_this), "renderWithProvider", function (providers) {
|
|
36
|
+
var _this$props = _this.props,
|
|
37
|
+
accessLevel = _this$props.accessLevel,
|
|
38
|
+
eventHandlers = _this$props.eventHandlers,
|
|
39
|
+
id = _this$props.id,
|
|
40
|
+
text = _this$props.text,
|
|
41
|
+
localId = _this$props.localId;
|
|
42
|
+
var _ref = providers,
|
|
43
|
+
mentionProvider = _ref.mentionProvider;
|
|
44
|
+
var actionHandlers = {};
|
|
45
|
+
['onClick', 'onMouseEnter', 'onMouseLeave'].forEach(function (handler) {
|
|
46
|
+
actionHandlers[handler] = eventHandlers && eventHandlers[handler] || function () {};
|
|
41
47
|
});
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
return /*#__PURE__*/React.createElement(ResourcedMention, _extends({
|
|
49
|
+
id: id,
|
|
50
|
+
text: text,
|
|
51
|
+
accessLevel: accessLevel,
|
|
52
|
+
localId: localId,
|
|
53
|
+
mentionProvider: mentionProvider
|
|
54
|
+
}, actionHandlers));
|
|
55
|
+
});
|
|
56
|
+
_this.providerFactory = props.providers || new ProviderFactory();
|
|
57
|
+
return _this;
|
|
58
|
+
}
|
|
59
|
+
_createClass(Mention, [{
|
|
60
|
+
key: "componentDidMount",
|
|
61
|
+
value: function componentDidMount() {
|
|
62
|
+
// Workaround an issue where the selection is not updated immediately after adding
|
|
63
|
+
// a mention when "sanitizePrivateContent" is enabled in the editor on safari.
|
|
64
|
+
// This affects both insertion and paste behaviour it is applied to the component.
|
|
65
|
+
// https://product-fabric.atlassian.net/browse/ED-14859
|
|
66
|
+
if (browser.safari) {
|
|
67
|
+
setTimeout(refreshBrowserSelection, 0);
|
|
68
|
+
}
|
|
44
69
|
}
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
70
|
+
}, {
|
|
71
|
+
key: "componentWillUnmount",
|
|
72
|
+
value: function componentWillUnmount() {
|
|
73
|
+
if (!this.props.providers) {
|
|
74
|
+
// new ProviderFactory is created if no `providers` has been set
|
|
75
|
+
// in this case when component is unmounted it's safe to destroy this providerFactory
|
|
76
|
+
this.providerFactory.destroy();
|
|
77
|
+
}
|
|
53
78
|
}
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
} else {
|
|
69
|
-
return /*#__PURE__*/React.createElement(ResourcedMention, _extends({
|
|
70
|
-
id: id,
|
|
71
|
-
text: text,
|
|
72
|
-
accessLevel: accessLevel,
|
|
73
|
-
mentionProvider: mentionProvider,
|
|
74
|
-
localId: localId
|
|
75
|
-
}, actionHandlers));
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
Mention.displayName = 'Mention';
|
|
79
|
-
export default Mention;
|
|
79
|
+
}, {
|
|
80
|
+
key: "render",
|
|
81
|
+
value: function render() {
|
|
82
|
+
return /*#__PURE__*/React.createElement(WithProviders, {
|
|
83
|
+
providers: ['mentionProvider', 'profilecardProvider'],
|
|
84
|
+
providerFactory: this.providerFactory,
|
|
85
|
+
renderNode: this.renderWithProvider
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}]);
|
|
89
|
+
return Mention;
|
|
90
|
+
}(PureComponent);
|
|
91
|
+
_defineProperty(Mention, "displayName", 'Mention');
|
|
92
|
+
export { Mention as default };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import {
|
|
2
|
+
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
3
3
|
import type { InlineNodeViewComponentProps } from '@atlaskit/editor-common/react-node-view';
|
|
4
4
|
import type { MentionPluginOptions } from '../types';
|
|
5
5
|
export type Props = InlineNodeViewComponentProps & {
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { AnalyticsEventPayload } from '@atlaskit/analytics-next';
|
|
3
|
-
import { type ProfilecardProvider } from '@atlaskit/editor-common/src/provider-factory/profile-card-provider';
|
|
4
3
|
import type { NextEditorPlugin, OptionalPlugin, TypeAheadHandler } from '@atlaskit/editor-common/types';
|
|
5
4
|
import type { AnalyticsPlugin } from '@atlaskit/editor-plugin-analytics';
|
|
6
5
|
import type { ContextIdentifierPlugin } from '@atlaskit/editor-plugin-context-identifier';
|
|
@@ -14,7 +13,6 @@ export interface TeamInfoAttrAnalytics {
|
|
|
14
13
|
export interface MentionPluginConfig {
|
|
15
14
|
HighlightComponent?: React.ComponentType<React.PropsWithChildren<unknown>>;
|
|
16
15
|
insertDisplayName?: boolean;
|
|
17
|
-
profilecardProvider?: Promise<ProfilecardProvider>;
|
|
18
16
|
}
|
|
19
17
|
export interface MentionPluginOptions extends MentionPluginConfig {
|
|
20
18
|
sanitizePrivateContent?: boolean;
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
import { PureComponent } from 'react';
|
|
2
|
+
import { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
3
3
|
import type { MentionEventHandlers } from '@atlaskit/editor-common/ui';
|
|
4
|
-
import type { MentionProvider } from '@atlaskit/mention/resource';
|
|
5
4
|
export interface MentionProps {
|
|
6
5
|
id: string;
|
|
6
|
+
providers?: ProviderFactory;
|
|
7
7
|
eventHandlers?: MentionEventHandlers;
|
|
8
8
|
text: string;
|
|
9
9
|
accessLevel?: string;
|
|
10
10
|
localId?: string;
|
|
11
|
-
mentionProvider?: Promise<MentionProvider>;
|
|
12
|
-
profilecardProvider?: Promise<ProfilecardProvider>;
|
|
13
11
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
export default class Mention extends PureComponent<MentionProps, {}> {
|
|
13
|
+
static displayName: string;
|
|
14
|
+
private providerFactory;
|
|
15
|
+
constructor(props: MentionProps);
|
|
16
|
+
componentDidMount(): void;
|
|
17
|
+
componentWillUnmount(): void;
|
|
18
|
+
private renderWithProvider;
|
|
19
|
+
render(): JSX.Element;
|
|
20
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import {
|
|
2
|
+
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
3
3
|
import type { InlineNodeViewComponentProps } from '@atlaskit/editor-common/react-node-view';
|
|
4
4
|
import type { MentionPluginOptions } from '../types';
|
|
5
5
|
export type Props = InlineNodeViewComponentProps & {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { AnalyticsEventPayload } from '@atlaskit/analytics-next';
|
|
3
|
-
import { type ProfilecardProvider } from '@atlaskit/editor-common/src/provider-factory/profile-card-provider';
|
|
4
3
|
import type { NextEditorPlugin, OptionalPlugin, TypeAheadHandler } from '@atlaskit/editor-common/types';
|
|
5
4
|
import type { AnalyticsPlugin } from '@atlaskit/editor-plugin-analytics';
|
|
6
5
|
import type { ContextIdentifierPlugin } from '@atlaskit/editor-plugin-context-identifier';
|
|
@@ -14,7 +13,6 @@ export interface TeamInfoAttrAnalytics {
|
|
|
14
13
|
export interface MentionPluginConfig {
|
|
15
14
|
HighlightComponent?: React.ComponentType<React.PropsWithChildren<unknown>>;
|
|
16
15
|
insertDisplayName?: boolean;
|
|
17
|
-
profilecardProvider?: Promise<ProfilecardProvider>;
|
|
18
16
|
}
|
|
19
17
|
export interface MentionPluginOptions extends MentionPluginConfig {
|
|
20
18
|
sanitizePrivateContent?: boolean;
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
import { PureComponent } from 'react';
|
|
2
|
+
import { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
3
3
|
import type { MentionEventHandlers } from '@atlaskit/editor-common/ui';
|
|
4
|
-
import type { MentionProvider } from '@atlaskit/mention/resource';
|
|
5
4
|
export interface MentionProps {
|
|
6
5
|
id: string;
|
|
6
|
+
providers?: ProviderFactory;
|
|
7
7
|
eventHandlers?: MentionEventHandlers;
|
|
8
8
|
text: string;
|
|
9
9
|
accessLevel?: string;
|
|
10
10
|
localId?: string;
|
|
11
|
-
mentionProvider?: Promise<MentionProvider>;
|
|
12
|
-
profilecardProvider?: Promise<ProfilecardProvider>;
|
|
13
11
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
export default class Mention extends PureComponent<MentionProps, {}> {
|
|
13
|
+
static displayName: string;
|
|
14
|
+
private providerFactory;
|
|
15
|
+
constructor(props: MentionProps);
|
|
16
|
+
componentDidMount(): void;
|
|
17
|
+
componentWillUnmount(): void;
|
|
18
|
+
private renderWithProvider;
|
|
19
|
+
render(): JSX.Element;
|
|
20
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-plugin-mentions",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Mentions plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -35,14 +35,13 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@atlaskit/adf-schema": "^36.8.0",
|
|
37
37
|
"@atlaskit/analytics-gas-types": "^5.1.0",
|
|
38
|
-
"@atlaskit/editor-common": "^80.
|
|
38
|
+
"@atlaskit/editor-common": "^80.5.0",
|
|
39
39
|
"@atlaskit/editor-plugin-analytics": "^1.2.0",
|
|
40
40
|
"@atlaskit/editor-plugin-context-identifier": "^1.1.0",
|
|
41
41
|
"@atlaskit/editor-plugin-type-ahead": "^1.2.0",
|
|
42
42
|
"@atlaskit/editor-prosemirror": "4.0.1",
|
|
43
43
|
"@atlaskit/icon": "^22.3.0",
|
|
44
44
|
"@atlaskit/mention": "^23.0.0",
|
|
45
|
-
"@atlaskit/platform-feature-flags": "^0.2.5",
|
|
46
45
|
"@atlaskit/theme": "^12.8.0",
|
|
47
46
|
"@atlaskit/tokens": "^1.49.0",
|
|
48
47
|
"@babel/runtime": "^7.0.0",
|
|
@@ -105,10 +104,5 @@
|
|
|
105
104
|
"@atlassian/tangerine/project-structure"
|
|
106
105
|
]
|
|
107
106
|
},
|
|
108
|
-
"prettier": "@atlassian/atlassian-frontend-prettier-config-1.0.0"
|
|
109
|
-
"platform-feature-flags": {
|
|
110
|
-
"platform.editor.mentions-in-editor-popup-on-click": {
|
|
111
|
-
"type": "boolean"
|
|
112
|
-
}
|
|
113
|
-
}
|
|
107
|
+
"prettier": "@atlassian/atlassian-frontend-prettier-config-1.0.0"
|
|
114
108
|
}
|