@atlaskit/editor-plugin-mentions 2.10.9 → 2.11.1
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 +25 -0
- package/dist/cjs/mentionsPlugin.js +135 -10
- package/dist/cjs/nodeviews/mention.js +8 -4
- package/dist/cjs/pm-plugins/main.js +24 -13
- package/dist/cjs/ui/type-ahead/index.js +23 -6
- package/dist/es2019/mentionsPlugin.js +112 -4
- package/dist/es2019/nodeviews/mention.js +9 -5
- package/dist/es2019/pm-plugins/main.js +15 -4
- package/dist/es2019/ui/type-ahead/index.js +23 -6
- package/dist/esm/mentionsPlugin.js +134 -12
- package/dist/esm/nodeviews/mention.js +8 -4
- package/dist/esm/pm-plugins/main.js +23 -13
- package/dist/esm/ui/type-ahead/index.js +23 -6
- package/dist/types/mentionsPluginType.d.ts +11 -1
- package/dist/types/nodeviews/mention.d.ts +3 -0
- package/dist/types/pm-plugins/main.d.ts +13 -2
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types-ts4.5/mentionsPluginType.d.ts +11 -1
- package/dist/types-ts4.5/nodeviews/mention.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +13 -2
- package/dist/types-ts4.5/types/index.d.ts +2 -0
- package/package.json +12 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-mentions
|
|
2
2
|
|
|
3
|
+
## 2.11.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#97984](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/97984)
|
|
8
|
+
[`8ffeab9aaf1ab`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/8ffeab9aaf1ab) -
|
|
9
|
+
[ux] [ED-23573] Added new actions (resolveMarks and registerMarks) to basePlugin. Callbacks added
|
|
10
|
+
to mentions, card, emoji and base plugins to handle conversion to inline code. Deprecated code
|
|
11
|
+
removed from editor-common.
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
|
|
14
|
+
## 2.11.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- [#99344](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/99344)
|
|
19
|
+
[`fbeb84f180cd2`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/fbeb84f180cd2) -
|
|
20
|
+
Added optional `isEligibleXProductUserInvite` and `inviteXProductUser` props which will be used in
|
|
21
|
+
CCEDITIONS-4746 (x-product-user-invite experiment). Project poster link -
|
|
22
|
+
https://hello.atlassian.net/wiki/spaces/CV1/pages/3685626022/Project+poster+-+Cross+Product+User+Search+Invites
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- Updated dependencies
|
|
27
|
+
|
|
3
28
|
## 2.10.9
|
|
4
29
|
|
|
5
30
|
### Patch Changes
|
|
@@ -1,27 +1,89 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.mentionsPlugin = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
8
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
-
var
|
|
11
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
var _reactIntlNext = require("react-intl-next");
|
|
10
14
|
var _uuid = _interopRequireDefault(require("uuid"));
|
|
11
15
|
var _adfSchema = require("@atlaskit/adf-schema");
|
|
12
16
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
13
17
|
var _messages = require("@atlaskit/editor-common/messages");
|
|
18
|
+
var _providerFactory = require("@atlaskit/editor-common/provider-factory");
|
|
14
19
|
var _quickInsert = require("@atlaskit/editor-common/quick-insert");
|
|
20
|
+
var _resource = require("@atlaskit/mention/resource");
|
|
21
|
+
var _types = require("@atlaskit/mention/types");
|
|
22
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
15
23
|
var _key = require("./pm-plugins/key");
|
|
16
24
|
var _main = require("./pm-plugins/main");
|
|
17
25
|
var _SecondaryToolbarComponent = require("./ui/SecondaryToolbarComponent");
|
|
18
26
|
var _typeAhead = require("./ui/type-ahead");
|
|
27
|
+
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); }
|
|
28
|
+
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 && {}.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
29
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
20
30
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
21
|
-
var
|
|
22
|
-
var
|
|
31
|
+
var processName = function processName(name, intl) {
|
|
32
|
+
var unknownLabel = intl.formatMessage(_messages.mentionMessages.unknownLabel);
|
|
33
|
+
if (name.status === _types.MentionNameStatus.OK) {
|
|
34
|
+
return "@".concat(name.name || unknownLabel);
|
|
35
|
+
} else {
|
|
36
|
+
return "@".concat(unknownLabel);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* We will need to clean this up once mentionProvider is
|
|
42
|
+
* put inside mention plugin.
|
|
43
|
+
* See: https://product-fabric.atlassian.net/browse/ED-26011
|
|
44
|
+
*/
|
|
45
|
+
function Component(_ref) {
|
|
46
|
+
var mentionProvider = _ref.mentionProvider,
|
|
23
47
|
api = _ref.api;
|
|
48
|
+
var mentionProviderMemo = (0, _react.useMemo)(function () {
|
|
49
|
+
return mentionProvider;
|
|
50
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
51
|
+
}, []);
|
|
52
|
+
var intl = (0, _reactIntlNext.useIntl)();
|
|
53
|
+
(0, _react.useEffect)(function () {
|
|
54
|
+
mentionProviderMemo === null || mentionProviderMemo === void 0 || mentionProviderMemo.then(function (mentionProviderSync) {
|
|
55
|
+
var _api$base;
|
|
56
|
+
api === null || api === void 0 || (_api$base = api.base) === null || _api$base === void 0 || (_api$base = _api$base.actions) === null || _api$base === void 0 || _api$base.registerMarks(function (_ref2) {
|
|
57
|
+
var tr = _ref2.tr,
|
|
58
|
+
node = _ref2.node,
|
|
59
|
+
pos = _ref2.pos;
|
|
60
|
+
var doc = tr.doc;
|
|
61
|
+
var schema = doc.type.schema;
|
|
62
|
+
var mentionNodeType = schema.nodes.mention;
|
|
63
|
+
var id = node.attrs.id;
|
|
64
|
+
if (node.type === mentionNodeType) {
|
|
65
|
+
if ((0, _resource.isResolvingMentionProvider)(mentionProviderSync)) {
|
|
66
|
+
var nameDetail = mentionProviderSync === null || mentionProviderSync === void 0 ? void 0 : mentionProviderSync.resolveMentionName(id);
|
|
67
|
+
var newText;
|
|
68
|
+
if ((0, _types.isPromise)(nameDetail)) {
|
|
69
|
+
newText = "@".concat(intl.formatMessage(_messages.mentionMessages.unknownLabel));
|
|
70
|
+
} else {
|
|
71
|
+
newText = processName(nameDetail, intl);
|
|
72
|
+
}
|
|
73
|
+
var currentPos = tr.mapping.map(pos);
|
|
74
|
+
tr.replaceWith(currentPos, currentPos + node.nodeSize, schema.text(newText, node.marks));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
}, [mentionProviderMemo, api, intl]);
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
var mentionsPlugin = exports.mentionsPlugin = function mentionsPlugin(_ref3) {
|
|
83
|
+
var options = _ref3.config,
|
|
84
|
+
api = _ref3.api;
|
|
24
85
|
var sessionId = (0, _uuid.default)();
|
|
86
|
+
var previousMediaProvider;
|
|
25
87
|
var fireEvent = function fireEvent(payload, channel) {
|
|
26
88
|
var _api$analytics;
|
|
27
89
|
var fireAnalyticsEvent = api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.actions) === null || _api$analytics === void 0 ? void 0 : _api$analytics.fireAnalyticsEvent;
|
|
@@ -53,13 +115,32 @@ var mentionsPlugin = exports.mentionsPlugin = function mentionsPlugin(_ref) {
|
|
|
53
115
|
return [{
|
|
54
116
|
name: 'mention',
|
|
55
117
|
plugin: function plugin(pmPluginFactoryParams) {
|
|
56
|
-
return (0, _main.createMentionPlugin)(
|
|
118
|
+
return (0, _main.createMentionPlugin)({
|
|
119
|
+
pmPluginFactoryParams: pmPluginFactoryParams,
|
|
120
|
+
fireEvent: fireEvent,
|
|
121
|
+
options: options,
|
|
122
|
+
api: api
|
|
123
|
+
});
|
|
57
124
|
}
|
|
58
125
|
}];
|
|
59
126
|
},
|
|
60
|
-
|
|
61
|
-
var
|
|
62
|
-
|
|
127
|
+
contentComponent: function contentComponent(_ref4) {
|
|
128
|
+
var providerFactory = _ref4.providerFactory;
|
|
129
|
+
return /*#__PURE__*/_react.default.createElement(_providerFactory.WithProviders, {
|
|
130
|
+
providers: ['mentionProvider'],
|
|
131
|
+
providerFactory: providerFactory,
|
|
132
|
+
renderNode: function renderNode(_ref5) {
|
|
133
|
+
var mentionProvider = _ref5.mentionProvider;
|
|
134
|
+
return /*#__PURE__*/_react.default.createElement(Component, {
|
|
135
|
+
mentionProvider: mentionProvider,
|
|
136
|
+
api: api
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
},
|
|
141
|
+
secondaryToolbarComponent: function secondaryToolbarComponent(_ref6) {
|
|
142
|
+
var editorView = _ref6.editorView,
|
|
143
|
+
disabled = _ref6.disabled;
|
|
63
144
|
return /*#__PURE__*/_react.default.createElement(_SecondaryToolbarComponent.SecondaryToolbarComponent, {
|
|
64
145
|
editorView: editorView,
|
|
65
146
|
api: api,
|
|
@@ -79,7 +160,51 @@ var mentionsPlugin = exports.mentionsPlugin = function mentionsPlugin(_ref) {
|
|
|
79
160
|
if (options !== null && options !== void 0 && options.handleMentionsChanged) {
|
|
80
161
|
options.handleMentionsChanged(mentionChanges);
|
|
81
162
|
}
|
|
82
|
-
}
|
|
163
|
+
},
|
|
164
|
+
setProvider: function () {
|
|
165
|
+
var _setProvider = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(providerPromise) {
|
|
166
|
+
var _api$core$actions$exe;
|
|
167
|
+
var provider;
|
|
168
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
169
|
+
while (1) switch (_context.prev = _context.next) {
|
|
170
|
+
case 0:
|
|
171
|
+
if ((0, _platformFeatureFlags.fg)('platform_editor_mention_provider_via_plugin_config')) {
|
|
172
|
+
_context.next = 2;
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
return _context.abrupt("return", false);
|
|
176
|
+
case 2:
|
|
177
|
+
_context.next = 4;
|
|
178
|
+
return providerPromise;
|
|
179
|
+
case 4:
|
|
180
|
+
provider = _context.sent;
|
|
181
|
+
if (!(previousMediaProvider === provider)) {
|
|
182
|
+
_context.next = 7;
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
return _context.abrupt("return", false);
|
|
186
|
+
case 7:
|
|
187
|
+
previousMediaProvider = provider;
|
|
188
|
+
return _context.abrupt("return", (_api$core$actions$exe = api === null || api === void 0 ? void 0 : api.core.actions.execute(function (_ref7) {
|
|
189
|
+
var tr = _ref7.tr;
|
|
190
|
+
return tr.setMeta(_key.mentionPluginKey, {
|
|
191
|
+
action: _main.ACTIONS.SET_PROVIDER,
|
|
192
|
+
params: {
|
|
193
|
+
provider: provider
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
})) !== null && _api$core$actions$exe !== void 0 ? _api$core$actions$exe : false);
|
|
197
|
+
case 9:
|
|
198
|
+
case "end":
|
|
199
|
+
return _context.stop();
|
|
200
|
+
}
|
|
201
|
+
}, _callee);
|
|
202
|
+
}));
|
|
203
|
+
function setProvider(_x) {
|
|
204
|
+
return _setProvider.apply(this, arguments);
|
|
205
|
+
}
|
|
206
|
+
return setProvider;
|
|
207
|
+
}()
|
|
83
208
|
},
|
|
84
209
|
getSharedState: function getSharedState(editorState) {
|
|
85
210
|
if (!editorState) {
|
|
@@ -91,8 +216,8 @@ var mentionsPlugin = exports.mentionsPlugin = function mentionsPlugin(_ref) {
|
|
|
91
216
|
});
|
|
92
217
|
},
|
|
93
218
|
pluginsOptions: {
|
|
94
|
-
quickInsert: function quickInsert(
|
|
95
|
-
var formatMessage =
|
|
219
|
+
quickInsert: function quickInsert(_ref8) {
|
|
220
|
+
var formatMessage = _ref8.formatMessage;
|
|
96
221
|
return [{
|
|
97
222
|
id: 'mention',
|
|
98
223
|
title: formatMessage(_messages.toolbarInsertBlockMessages.mention),
|
|
@@ -6,25 +6,29 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.MentionNodeView = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _hooks = require("@atlaskit/editor-common/hooks");
|
|
9
10
|
var _providerFactory = require("@atlaskit/editor-common/provider-factory");
|
|
10
11
|
var _Mention = require("../ui/Mention");
|
|
11
12
|
var MentionNodeView = exports.MentionNodeView = function MentionNodeView(props) {
|
|
12
|
-
var providerFactory = props.providerFactory
|
|
13
|
+
var providerFactory = props.providerFactory,
|
|
14
|
+
pluginInjectionApi = props.pluginInjectionApi;
|
|
13
15
|
var _props$node$attrs = props.node.attrs,
|
|
14
16
|
id = _props$node$attrs.id,
|
|
15
17
|
text = _props$node$attrs.text,
|
|
16
18
|
accessLevel = _props$node$attrs.accessLevel,
|
|
17
19
|
localId = _props$node$attrs.localId;
|
|
20
|
+
var _useSharedPluginState = (0, _hooks.useSharedPluginState)(pluginInjectionApi, ['mention']),
|
|
21
|
+
mentionState = _useSharedPluginState.mentionState;
|
|
22
|
+
var mentionProvider = mentionState === null || mentionState === void 0 ? void 0 : mentionState.mentionProvider;
|
|
18
23
|
var renderAssistiveTextWithProviders = function renderAssistiveTextWithProviders(providers) {
|
|
19
24
|
var _props$options;
|
|
20
|
-
var
|
|
21
|
-
mentionProvider = _ref.mentionProvider;
|
|
25
|
+
var mentionProviderPromise = mentionProvider ? Promise.resolve(mentionProvider) : providers.mentionProvider;
|
|
22
26
|
var profilecardProvider = (_props$options = props.options) === null || _props$options === void 0 ? void 0 : _props$options.profilecardProvider;
|
|
23
27
|
return /*#__PURE__*/_react.default.createElement(_Mention.Mention, {
|
|
24
28
|
id: id,
|
|
25
29
|
text: text,
|
|
26
30
|
accessLevel: accessLevel,
|
|
27
|
-
mentionProvider:
|
|
31
|
+
mentionProvider: mentionProviderPromise,
|
|
28
32
|
profilecardProvider: profilecardProvider,
|
|
29
33
|
localId: localId
|
|
30
34
|
});
|
|
@@ -4,6 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
exports.ACTIONS = void 0;
|
|
7
8
|
exports.createMentionPlugin = createMentionPlugin;
|
|
8
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
10
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
@@ -19,11 +20,11 @@ var _key = require("./key");
|
|
|
19
20
|
var _utils2 = require("./utils");
|
|
20
21
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
21
22
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
22
|
-
var ACTIONS = {
|
|
23
|
+
var ACTIONS = exports.ACTIONS = {
|
|
23
24
|
SET_PROVIDER: 'SET_PROVIDER'
|
|
24
25
|
};
|
|
25
26
|
var PACKAGE_NAME = "@atlaskit/editor-plugin-mentions";
|
|
26
|
-
var PACKAGE_VERSION = "2.
|
|
27
|
+
var PACKAGE_VERSION = "2.11.1";
|
|
27
28
|
var setProvider = function setProvider(provider) {
|
|
28
29
|
return function (state, dispatch) {
|
|
29
30
|
if (dispatch) {
|
|
@@ -37,7 +38,11 @@ var setProvider = function setProvider(provider) {
|
|
|
37
38
|
return true;
|
|
38
39
|
};
|
|
39
40
|
};
|
|
40
|
-
function createMentionPlugin(
|
|
41
|
+
function createMentionPlugin(_ref) {
|
|
42
|
+
var pmPluginFactoryParams = _ref.pmPluginFactoryParams,
|
|
43
|
+
fireEvent = _ref.fireEvent,
|
|
44
|
+
options = _ref.options,
|
|
45
|
+
api = _ref.api;
|
|
41
46
|
var mentionProvider;
|
|
42
47
|
var sendAnalytics = function sendAnalytics(event, actionSubject, action, attributes
|
|
43
48
|
// Ignored via go/ees005
|
|
@@ -68,12 +73,12 @@ function createMentionPlugin(pmPluginFactoryParams, fireEvent, options) {
|
|
|
68
73
|
// Ignored via go/ees005
|
|
69
74
|
// eslint-disable-next-line @typescript-eslint/max-params
|
|
70
75
|
apply: function apply(tr, pluginState, oldState, newState) {
|
|
71
|
-
var
|
|
76
|
+
var _ref2 = tr.getMeta(_key.mentionPluginKey) || {
|
|
72
77
|
action: null,
|
|
73
78
|
params: null
|
|
74
79
|
},
|
|
75
|
-
action =
|
|
76
|
-
params =
|
|
80
|
+
action = _ref2.action,
|
|
81
|
+
params = _ref2.params;
|
|
77
82
|
var hasNewPluginState = false;
|
|
78
83
|
var newPluginState = pluginState;
|
|
79
84
|
var hasPositionChanged = oldState.selection.from !== newState.selection.from || oldState.selection.to !== newState.selection.to;
|
|
@@ -104,6 +109,7 @@ function createMentionPlugin(pmPluginFactoryParams, fireEvent, options) {
|
|
|
104
109
|
Component: _mention.MentionNodeView,
|
|
105
110
|
extraComponentProps: {
|
|
106
111
|
providerFactory: pmPluginFactoryParams.providerFactory,
|
|
112
|
+
pluginInjectionApi: api,
|
|
107
113
|
options: options
|
|
108
114
|
}
|
|
109
115
|
})
|
|
@@ -148,7 +154,12 @@ function createMentionPlugin(pmPluginFactoryParams, fireEvent, options) {
|
|
|
148
154
|
}
|
|
149
155
|
return;
|
|
150
156
|
};
|
|
151
|
-
|
|
157
|
+
var providerViaConfig = (0, _platformFeatureFlags.fg)('platform_editor_mention_provider_via_plugin_config');
|
|
158
|
+
if (providerViaConfig && options !== null && options !== void 0 && options.mentionProvider) {
|
|
159
|
+
providerHandler('mentionProvider', options === null || options === void 0 ? void 0 : options.mentionProvider);
|
|
160
|
+
} else {
|
|
161
|
+
pmPluginFactoryParams.providerFactory.subscribe('mentionProvider', providerHandler);
|
|
162
|
+
}
|
|
152
163
|
return {
|
|
153
164
|
destroy: function destroy() {
|
|
154
165
|
if (pmPluginFactoryParams.providerFactory) {
|
|
@@ -163,16 +174,16 @@ function createMentionPlugin(pmPluginFactoryParams, fireEvent, options) {
|
|
|
163
174
|
if (options !== null && options !== void 0 && options.handleMentionsChanged && (0, _platformFeatureFlags.fg)('confluence_updated_mentions_livepages')) {
|
|
164
175
|
var mentionSchema = newState.schema.nodes.mention;
|
|
165
176
|
var mentionNodesBefore = (0, _utils.findChildrenByType)(prevState.doc, mentionSchema);
|
|
166
|
-
var mentionLocalIdsAfter = new Set((0, _utils.findChildrenByType)(newState.doc, mentionSchema).map(function (
|
|
167
|
-
var node =
|
|
177
|
+
var mentionLocalIdsAfter = new Set((0, _utils.findChildrenByType)(newState.doc, mentionSchema).map(function (_ref3) {
|
|
178
|
+
var node = _ref3.node;
|
|
168
179
|
return node.attrs.localId;
|
|
169
180
|
}));
|
|
170
181
|
if (mentionNodesBefore.length > mentionLocalIdsAfter.size) {
|
|
171
|
-
var deletedMentions = mentionNodesBefore.filter(function (
|
|
172
|
-
var node = _ref3.node;
|
|
173
|
-
return !mentionLocalIdsAfter.has(node.attrs.localId);
|
|
174
|
-
}).map(function (_ref4) {
|
|
182
|
+
var deletedMentions = mentionNodesBefore.filter(function (_ref4) {
|
|
175
183
|
var node = _ref4.node;
|
|
184
|
+
return !mentionLocalIdsAfter.has(node.attrs.localId);
|
|
185
|
+
}).map(function (_ref5) {
|
|
186
|
+
var node = _ref5.node;
|
|
176
187
|
return {
|
|
177
188
|
type: 'deleted',
|
|
178
189
|
id: node.attrs.id,
|
|
@@ -167,6 +167,7 @@ var buildNodesForTeamMention = function buildNodesForTeamMention(schema, selecte
|
|
|
167
167
|
// build team link
|
|
168
168
|
var defaultTeamLink = "".concat(window.location.origin, "/people/team/").concat(teamId);
|
|
169
169
|
var teamLink = context && context.teamLink ? context.teamLink : defaultTeamLink;
|
|
170
|
+
// eslint-disable-next-line @atlaskit/platform/ensure-feature-flag-prefix
|
|
170
171
|
var teamLinkNode = (0, _platformFeatureFlags.fg)('team-mention-inline-smartlink') ? schema.nodes.inlineCard.create({
|
|
171
172
|
url: teamLink
|
|
172
173
|
}) :
|
|
@@ -238,7 +239,7 @@ var createTypeAheadConfig = exports.createTypeAheadConfig = function createTypeA
|
|
|
238
239
|
var mentionProvider = pluginState.mentionProvider;
|
|
239
240
|
var _ref8 = (_api$contextIdentifie = api === null || api === void 0 || (_api$contextIdentifie2 = api.contextIdentifier) === null || _api$contextIdentifie2 === void 0 ? void 0 : _api$contextIdentifie2.sharedState.currentState()) !== null && _api$contextIdentifie !== void 0 ? _api$contextIdentifie : {},
|
|
240
241
|
contextIdentifierProvider = _ref8.contextIdentifierProvider;
|
|
241
|
-
return new Promise(function (resolve) {
|
|
242
|
+
return new Promise(function (resolve, reject) {
|
|
242
243
|
var key = "loadingMentionsForTypeAhead_".concat((0, _uuid.default)());
|
|
243
244
|
var mentionsSubscribeCallback = function mentionsSubscribeCallback(mentions) {
|
|
244
245
|
var resultQuery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
@@ -274,7 +275,13 @@ var createTypeAheadConfig = exports.createTypeAheadConfig = function createTypeA
|
|
|
274
275
|
}
|
|
275
276
|
};
|
|
276
277
|
subscriptionKeys.add(key);
|
|
277
|
-
mentionProvider.subscribe(key, mentionsSubscribeCallback)
|
|
278
|
+
mentionProvider.subscribe(key, mentionsSubscribeCallback, function () {
|
|
279
|
+
if ((0, _platformFeatureFlags.fg)('platform_editor_offline_editing_ga')) {
|
|
280
|
+
mentionProvider.unsubscribe(key);
|
|
281
|
+
subscriptionKeys.delete(key);
|
|
282
|
+
reject('FETCH_ERROR');
|
|
283
|
+
}
|
|
284
|
+
});
|
|
278
285
|
mentionProvider.filter(query || '', _objectSpread(_objectSpread({}, contextIdentifierProvider), {}, {
|
|
279
286
|
sessionId: sessionId
|
|
280
287
|
}));
|
|
@@ -299,7 +306,8 @@ var createTypeAheadConfig = exports.createTypeAheadConfig = function createTypeA
|
|
|
299
306
|
name = _item$mention.name,
|
|
300
307
|
nickname = _item$mention.nickname,
|
|
301
308
|
accessLevel = _item$mention.accessLevel,
|
|
302
|
-
userType = _item$mention.userType
|
|
309
|
+
userType = _item$mention.userType,
|
|
310
|
+
isXProductUser = _item$mention.isXProductUser;
|
|
303
311
|
var trimmedNickname = nickname && nickname.startsWith('@') ? nickname.slice(1) : nickname;
|
|
304
312
|
var renderName = mentionInsertDisplayName || !trimmedNickname ? name : trimmedNickname;
|
|
305
313
|
var _ref10 = (_api$contextIdentifie3 = api === null || api === void 0 || (_api$contextIdentifie4 = api.contextIdentifier) === null || _api$contextIdentifie4 === void 0 ? void 0 : _api$contextIdentifie4.sharedState.currentState()) !== null && _api$contextIdentifie3 !== void 0 ? _api$contextIdentifie3 : {},
|
|
@@ -356,6 +364,9 @@ var createTypeAheadConfig = exports.createTypeAheadConfig = function createTypeA
|
|
|
356
364
|
if (mentionProvider && (0, _utils4.isTeamType)(userType)) {
|
|
357
365
|
return insert(buildNodesForTeamMention(schema, item.mention, mentionProvider, sanitizePrivateContent));
|
|
358
366
|
}
|
|
367
|
+
if (isXProductUser && mentionProvider && mentionProvider.inviteXProductUser) {
|
|
368
|
+
mentionProvider.inviteXProductUser(id);
|
|
369
|
+
}
|
|
359
370
|
|
|
360
371
|
// Don't insert into document if document data is sanitized.
|
|
361
372
|
var text = sanitizePrivateContent ? '' : "@".concat(renderName);
|
|
@@ -363,15 +374,21 @@ var createTypeAheadConfig = exports.createTypeAheadConfig = function createTypeA
|
|
|
363
374
|
// Cache (locally) for later rendering
|
|
364
375
|
mentionProvider.cacheMentionName(id, renderName);
|
|
365
376
|
}
|
|
366
|
-
var annotationMarksForPos = (0, _platformFeatureFlags.fg)(
|
|
377
|
+
var annotationMarksForPos = (0, _platformFeatureFlags.fg)(
|
|
378
|
+
// eslint-disable-next-line @atlaskit/platform/ensure-feature-flag-prefix
|
|
379
|
+
'editor_inline_comments_paste_insert_nodes') ? (0, _utils.getAnnotationMarksForPos)(state.tr.selection.$head) : undefined;
|
|
367
380
|
var mentionNode = schema.nodes.mention.createChecked({
|
|
368
381
|
text: text,
|
|
369
382
|
id: id,
|
|
370
383
|
accessLevel: accessLevel,
|
|
371
384
|
userType: userType === 'DEFAULT' ? null : userType,
|
|
372
385
|
localId: mentionLocalId
|
|
373
|
-
}, null,
|
|
374
|
-
|
|
386
|
+
}, null,
|
|
387
|
+
// eslint-disable-next-line @atlaskit/platform/ensure-feature-flag-prefix
|
|
388
|
+
(0, _platformFeatureFlags.fg)('editor_inline_comments_paste_insert_nodes') ? annotationMarksForPos : undefined);
|
|
389
|
+
var space = schema.text(' ',
|
|
390
|
+
// eslint-disable-next-line @atlaskit/platform/ensure-feature-flag-prefix
|
|
391
|
+
(0, _platformFeatureFlags.fg)('editor_inline_comments_paste_insert_nodes') ? annotationMarksForPos : undefined);
|
|
375
392
|
return insert(_model.Fragment.from([mentionNode, space]));
|
|
376
393
|
},
|
|
377
394
|
dismiss: function dismiss(_ref11) {
|
|
@@ -1,18 +1,85 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useEffect, useMemo } from 'react';
|
|
2
|
+
import { useIntl } from 'react-intl-next';
|
|
2
3
|
import uuid from 'uuid';
|
|
3
4
|
import { mention } from '@atlaskit/adf-schema';
|
|
4
5
|
import { INPUT_METHOD } from '@atlaskit/editor-common/analytics';
|
|
5
|
-
import { toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
|
|
6
|
+
import { toolbarInsertBlockMessages as messages, mentionMessages } from '@atlaskit/editor-common/messages';
|
|
7
|
+
import { WithProviders } from '@atlaskit/editor-common/provider-factory';
|
|
6
8
|
import { IconMention } from '@atlaskit/editor-common/quick-insert';
|
|
9
|
+
import { isResolvingMentionProvider } from '@atlaskit/mention/resource';
|
|
10
|
+
import { MentionNameStatus, isPromise } from '@atlaskit/mention/types';
|
|
11
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
7
12
|
import { mentionPluginKey } from './pm-plugins/key';
|
|
8
|
-
import { createMentionPlugin } from './pm-plugins/main';
|
|
13
|
+
import { ACTIONS, createMentionPlugin } from './pm-plugins/main';
|
|
9
14
|
import { SecondaryToolbarComponent } from './ui/SecondaryToolbarComponent';
|
|
10
15
|
import { createTypeAheadConfig } from './ui/type-ahead';
|
|
16
|
+
const processName = (name, intl) => {
|
|
17
|
+
const unknownLabel = intl.formatMessage(mentionMessages.unknownLabel);
|
|
18
|
+
if (name.status === MentionNameStatus.OK) {
|
|
19
|
+
return `@${name.name || unknownLabel}`;
|
|
20
|
+
} else {
|
|
21
|
+
return `@${unknownLabel}`;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* We will need to clean this up once mentionProvider is
|
|
27
|
+
* put inside mention plugin.
|
|
28
|
+
* See: https://product-fabric.atlassian.net/browse/ED-26011
|
|
29
|
+
*/
|
|
30
|
+
function Component({
|
|
31
|
+
mentionProvider,
|
|
32
|
+
api
|
|
33
|
+
}) {
|
|
34
|
+
const mentionProviderMemo = useMemo(() => {
|
|
35
|
+
return mentionProvider;
|
|
36
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
37
|
+
}, []);
|
|
38
|
+
const intl = useIntl();
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
mentionProviderMemo === null || mentionProviderMemo === void 0 ? void 0 : mentionProviderMemo.then(mentionProviderSync => {
|
|
41
|
+
var _api$base, _api$base$actions;
|
|
42
|
+
api === null || api === void 0 ? void 0 : (_api$base = api.base) === null || _api$base === void 0 ? void 0 : (_api$base$actions = _api$base.actions) === null || _api$base$actions === void 0 ? void 0 : _api$base$actions.registerMarks(({
|
|
43
|
+
tr,
|
|
44
|
+
node,
|
|
45
|
+
pos
|
|
46
|
+
}) => {
|
|
47
|
+
const {
|
|
48
|
+
doc
|
|
49
|
+
} = tr;
|
|
50
|
+
const {
|
|
51
|
+
schema
|
|
52
|
+
} = doc.type;
|
|
53
|
+
const {
|
|
54
|
+
mention: mentionNodeType
|
|
55
|
+
} = schema.nodes;
|
|
56
|
+
const {
|
|
57
|
+
id
|
|
58
|
+
} = node.attrs;
|
|
59
|
+
if (node.type === mentionNodeType) {
|
|
60
|
+
if (isResolvingMentionProvider(mentionProviderSync)) {
|
|
61
|
+
const nameDetail = mentionProviderSync === null || mentionProviderSync === void 0 ? void 0 : mentionProviderSync.resolveMentionName(id);
|
|
62
|
+
let newText;
|
|
63
|
+
if (isPromise(nameDetail)) {
|
|
64
|
+
newText = `@${intl.formatMessage(mentionMessages.unknownLabel)}`;
|
|
65
|
+
} else {
|
|
66
|
+
newText = processName(nameDetail, intl);
|
|
67
|
+
}
|
|
68
|
+
const currentPos = tr.mapping.map(pos);
|
|
69
|
+
tr.replaceWith(currentPos, currentPos + node.nodeSize, schema.text(newText, node.marks));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}, [mentionProviderMemo, api, intl]);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
11
77
|
const mentionsPlugin = ({
|
|
12
78
|
config: options,
|
|
13
79
|
api
|
|
14
80
|
}) => {
|
|
15
81
|
const sessionId = uuid();
|
|
82
|
+
let previousMediaProvider;
|
|
16
83
|
const fireEvent = (payload, channel) => {
|
|
17
84
|
var _api$analytics, _api$analytics$action;
|
|
18
85
|
const fireAnalyticsEvent = api === null || api === void 0 ? void 0 : (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : (_api$analytics$action = _api$analytics.actions) === null || _api$analytics$action === void 0 ? void 0 : _api$analytics$action.fireAnalyticsEvent;
|
|
@@ -43,9 +110,30 @@ const mentionsPlugin = ({
|
|
|
43
110
|
pmPlugins() {
|
|
44
111
|
return [{
|
|
45
112
|
name: 'mention',
|
|
46
|
-
plugin: pmPluginFactoryParams => createMentionPlugin(
|
|
113
|
+
plugin: pmPluginFactoryParams => createMentionPlugin({
|
|
114
|
+
pmPluginFactoryParams,
|
|
115
|
+
fireEvent,
|
|
116
|
+
options,
|
|
117
|
+
api
|
|
118
|
+
})
|
|
47
119
|
}];
|
|
48
120
|
},
|
|
121
|
+
contentComponent({
|
|
122
|
+
providerFactory
|
|
123
|
+
}) {
|
|
124
|
+
return /*#__PURE__*/React.createElement(WithProviders, {
|
|
125
|
+
providers: ['mentionProvider'],
|
|
126
|
+
providerFactory: providerFactory,
|
|
127
|
+
renderNode: ({
|
|
128
|
+
mentionProvider
|
|
129
|
+
}) => {
|
|
130
|
+
return /*#__PURE__*/React.createElement(Component, {
|
|
131
|
+
mentionProvider: mentionProvider,
|
|
132
|
+
api: api
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
},
|
|
49
137
|
secondaryToolbarComponent({
|
|
50
138
|
editorView,
|
|
51
139
|
disabled
|
|
@@ -69,6 +157,26 @@ const mentionsPlugin = ({
|
|
|
69
157
|
if (options !== null && options !== void 0 && options.handleMentionsChanged) {
|
|
70
158
|
options.handleMentionsChanged(mentionChanges);
|
|
71
159
|
}
|
|
160
|
+
},
|
|
161
|
+
setProvider: async providerPromise => {
|
|
162
|
+
var _api$core$actions$exe;
|
|
163
|
+
if (!fg('platform_editor_mention_provider_via_plugin_config')) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
const provider = await providerPromise;
|
|
167
|
+
// Prevent someone trying to set the exact same provider twice for performance reasons
|
|
168
|
+
if (previousMediaProvider === provider) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
previousMediaProvider = provider;
|
|
172
|
+
return (_api$core$actions$exe = api === null || api === void 0 ? void 0 : api.core.actions.execute(({
|
|
173
|
+
tr
|
|
174
|
+
}) => tr.setMeta(mentionPluginKey, {
|
|
175
|
+
action: ACTIONS.SET_PROVIDER,
|
|
176
|
+
params: {
|
|
177
|
+
provider
|
|
178
|
+
}
|
|
179
|
+
}))) !== null && _api$core$actions$exe !== void 0 ? _api$core$actions$exe : false;
|
|
72
180
|
}
|
|
73
181
|
},
|
|
74
182
|
getSharedState(editorState) {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
|
|
2
3
|
import { WithProviders } from '@atlaskit/editor-common/provider-factory';
|
|
3
4
|
import { Mention } from '../ui/Mention';
|
|
4
5
|
export const MentionNodeView = props => {
|
|
5
6
|
const {
|
|
6
|
-
providerFactory
|
|
7
|
+
providerFactory,
|
|
8
|
+
pluginInjectionApi
|
|
7
9
|
} = props;
|
|
8
10
|
const {
|
|
9
11
|
id,
|
|
@@ -11,17 +13,19 @@ export const MentionNodeView = props => {
|
|
|
11
13
|
accessLevel,
|
|
12
14
|
localId
|
|
13
15
|
} = props.node.attrs;
|
|
16
|
+
const {
|
|
17
|
+
mentionState
|
|
18
|
+
} = useSharedPluginState(pluginInjectionApi, ['mention']);
|
|
19
|
+
const mentionProvider = mentionState === null || mentionState === void 0 ? void 0 : mentionState.mentionProvider;
|
|
14
20
|
const renderAssistiveTextWithProviders = providers => {
|
|
15
21
|
var _props$options;
|
|
16
|
-
const
|
|
17
|
-
mentionProvider
|
|
18
|
-
} = providers;
|
|
22
|
+
const mentionProviderPromise = mentionProvider ? Promise.resolve(mentionProvider) : providers.mentionProvider;
|
|
19
23
|
const profilecardProvider = (_props$options = props.options) === null || _props$options === void 0 ? void 0 : _props$options.profilecardProvider;
|
|
20
24
|
return /*#__PURE__*/React.createElement(Mention, {
|
|
21
25
|
id: id,
|
|
22
26
|
text: text,
|
|
23
27
|
accessLevel: accessLevel,
|
|
24
|
-
mentionProvider:
|
|
28
|
+
mentionProvider: mentionProviderPromise,
|
|
25
29
|
profilecardProvider: profilecardProvider,
|
|
26
30
|
localId: localId
|
|
27
31
|
});
|
|
@@ -9,11 +9,11 @@ import { MentionNodeView } from '../nodeviews/mention';
|
|
|
9
9
|
import { MENTION_PROVIDER_REJECTED, MENTION_PROVIDER_UNDEFINED } from '../types';
|
|
10
10
|
import { mentionPluginKey } from './key';
|
|
11
11
|
import { canMentionBeCreatedInRange } from './utils';
|
|
12
|
-
const ACTIONS = {
|
|
12
|
+
export const ACTIONS = {
|
|
13
13
|
SET_PROVIDER: 'SET_PROVIDER'
|
|
14
14
|
};
|
|
15
15
|
const PACKAGE_NAME = "@atlaskit/editor-plugin-mentions";
|
|
16
|
-
const PACKAGE_VERSION = "2.
|
|
16
|
+
const PACKAGE_VERSION = "2.11.1";
|
|
17
17
|
const setProvider = provider => (state, dispatch) => {
|
|
18
18
|
if (dispatch) {
|
|
19
19
|
dispatch(state.tr.setMeta(mentionPluginKey, {
|
|
@@ -25,7 +25,12 @@ const setProvider = provider => (state, dispatch) => {
|
|
|
25
25
|
}
|
|
26
26
|
return true;
|
|
27
27
|
};
|
|
28
|
-
export function createMentionPlugin(
|
|
28
|
+
export function createMentionPlugin({
|
|
29
|
+
pmPluginFactoryParams,
|
|
30
|
+
fireEvent,
|
|
31
|
+
options,
|
|
32
|
+
api
|
|
33
|
+
}) {
|
|
29
34
|
let mentionProvider;
|
|
30
35
|
const sendAnalytics = (event, actionSubject, action, attributes
|
|
31
36
|
// Ignored via go/ees005
|
|
@@ -96,6 +101,7 @@ export function createMentionPlugin(pmPluginFactoryParams, fireEvent, options) {
|
|
|
96
101
|
Component: MentionNodeView,
|
|
97
102
|
extraComponentProps: {
|
|
98
103
|
providerFactory: pmPluginFactoryParams.providerFactory,
|
|
104
|
+
pluginInjectionApi: api,
|
|
99
105
|
options
|
|
100
106
|
}
|
|
101
107
|
})
|
|
@@ -140,7 +146,12 @@ export function createMentionPlugin(pmPluginFactoryParams, fireEvent, options) {
|
|
|
140
146
|
}
|
|
141
147
|
return;
|
|
142
148
|
};
|
|
143
|
-
|
|
149
|
+
const providerViaConfig = fg('platform_editor_mention_provider_via_plugin_config');
|
|
150
|
+
if (providerViaConfig && options !== null && options !== void 0 && options.mentionProvider) {
|
|
151
|
+
providerHandler('mentionProvider', options === null || options === void 0 ? void 0 : options.mentionProvider);
|
|
152
|
+
} else {
|
|
153
|
+
pmPluginFactoryParams.providerFactory.subscribe('mentionProvider', providerHandler);
|
|
154
|
+
}
|
|
144
155
|
return {
|
|
145
156
|
destroy() {
|
|
146
157
|
if (pmPluginFactoryParams.providerFactory) {
|