@atlaskit/editor-plugin-tasks-and-decisions 2.7.7 → 2.9.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 (35) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/commands.js +11 -1
  3. package/dist/cjs/nodeviews/taskItem.js +27 -5
  4. package/dist/cjs/plugin.js +79 -20
  5. package/dist/cjs/pm-plugins/actions.js +20 -0
  6. package/dist/cjs/pm-plugins/main.js +22 -5
  7. package/dist/cjs/pm-plugins/types.js +4 -2
  8. package/dist/cjs/ui/Task/index.js +26 -6
  9. package/dist/es2019/commands.js +8 -0
  10. package/dist/es2019/nodeviews/taskItem.js +23 -6
  11. package/dist/es2019/plugin.js +37 -5
  12. package/dist/es2019/pm-plugins/actions.js +12 -0
  13. package/dist/es2019/pm-plugins/main.js +23 -7
  14. package/dist/es2019/pm-plugins/types.js +7 -2
  15. package/dist/es2019/ui/Task/index.js +25 -4
  16. package/dist/esm/commands.js +10 -0
  17. package/dist/esm/nodeviews/taskItem.js +28 -6
  18. package/dist/esm/plugin.js +80 -21
  19. package/dist/esm/pm-plugins/actions.js +13 -0
  20. package/dist/esm/pm-plugins/main.js +22 -5
  21. package/dist/esm/pm-plugins/types.js +7 -2
  22. package/dist/esm/ui/Task/index.js +26 -6
  23. package/dist/types/commands.d.ts +2 -0
  24. package/dist/types/pm-plugins/actions.d.ts +4 -0
  25. package/dist/types/pm-plugins/main.d.ts +2 -2
  26. package/dist/types/pm-plugins/types.d.ts +17 -1
  27. package/dist/types/types.d.ts +21 -4
  28. package/dist/types/ui/Task/index.d.ts +8 -2
  29. package/dist/types-ts4.5/commands.d.ts +2 -0
  30. package/dist/types-ts4.5/pm-plugins/actions.d.ts +4 -0
  31. package/dist/types-ts4.5/pm-plugins/main.d.ts +2 -2
  32. package/dist/types-ts4.5/pm-plugins/types.d.ts +17 -1
  33. package/dist/types-ts4.5/types.d.ts +21 -4
  34. package/dist/types-ts4.5/ui/Task/index.d.ts +8 -2
  35. package/package.json +7 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atlaskit/editor-plugin-tasks-and-decisions
2
2
 
3
+ ## 2.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#137506](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/137506)
8
+ [`75c4ebf9d7515`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/75c4ebf9d7515) -
9
+ Pass TaskDecisionProvider via preset
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
15
+ ## 2.8.0
16
+
17
+ ### Minor Changes
18
+
19
+ - [#148391](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/148391)
20
+ [`3588af87c8dc3`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/3588af87c8dc3) -
21
+ [ux] ED-24964 Sync up request to edit between plugin and confluence
22
+
3
23
  ## 2.7.7
4
24
 
5
25
  ### Patch Changes
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.isSupportedSourceNode = exports.insertTaskDecisionWithAnalytics = exports.insertTaskDecisionCommand = exports.insertTaskDecisionAction = exports.getListTypes = exports.createListAtSelection = exports.changeInDepth = void 0;
7
+ exports.setProvider = exports.isSupportedSourceNode = exports.insertTaskDecisionWithAnalytics = exports.insertTaskDecisionCommand = exports.insertTaskDecisionAction = exports.getListTypes = exports.createListAtSelection = exports.changeInDepth = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _adfSchema = require("@atlaskit/adf-schema");
10
10
  var _analytics = require("@atlaskit/editor-common/analytics");
@@ -14,6 +14,8 @@ var _model = require("@atlaskit/editor-prosemirror/model");
14
14
  var _state = require("@atlaskit/editor-prosemirror/state");
15
15
  var _transform = require("@atlaskit/editor-prosemirror/transform");
16
16
  var _utils2 = require("@atlaskit/editor-prosemirror/utils");
17
+ var _pluginKey = require("./pm-plugins/plugin-key");
18
+ var _types = require("./pm-plugins/types");
17
19
  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; }
18
20
  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; }
19
21
  var getContextData = function getContextData() {
@@ -285,4 +287,12 @@ var createListAtSelection = exports.createListAtSelection = function createListA
285
287
  }
286
288
  }
287
289
  return (0, _utils2.safeInsert)(emptyList)(tr);
290
+ };
291
+ var setProvider = exports.setProvider = function setProvider(provider) {
292
+ return function (tr) {
293
+ return tr.setMeta(_pluginKey.stateKey, {
294
+ action: _types.ACTIONS.SET_PROVIDER,
295
+ data: provider
296
+ });
297
+ };
288
298
  };
@@ -36,6 +36,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
36
36
  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; }
37
37
  function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = (0, _getPrototypeOf2.default)(t); if (r) { var s = (0, _getPrototypeOf2.default)(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return (0, _possibleConstructorReturn2.default)(this, e); }; }
38
38
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
39
+ var TRYING_REQUEST_TIMEOUT = 3000;
39
40
  var wrapperStyles = (0, _primitives.xcss)({
40
41
  display: 'flex',
41
42
  flexDirection: 'column',
@@ -116,12 +117,31 @@ var TaskItemWrapper = function TaskItemWrapper(_ref2) {
116
117
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
117
118
  isOpen = _useState2[0],
118
119
  setIsOpen = _useState2[1];
119
- var _useState3 = (0, _react.useState)(false),
120
+ var _useState3 = (0, _react.useState)(taskDecisionState === null || taskDecisionState === void 0 ? void 0 : taskDecisionState.hasRequestedEditPermission),
120
121
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
121
122
  requested = _useState4[0],
122
123
  setRequested = _useState4[1];
124
+ var _useState5 = (0, _react.useState)(false),
125
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
126
+ tryingRequest = _useState6[0],
127
+ setTryingRequest = _useState6[1];
123
128
  var _useIntl3 = (0, _reactIntlNext.useIntl)(),
124
129
  formatMessage = _useIntl3.formatMessage;
130
+ (0, _react.useEffect)(function () {
131
+ if ((0, _platformFeatureFlags.fg)('editor_request_to_edit_task')) {
132
+ setRequested(taskDecisionState === null || taskDecisionState === void 0 ? void 0 : taskDecisionState.hasRequestedEditPermission);
133
+ }
134
+ }, [taskDecisionState === null || taskDecisionState === void 0 ? void 0 : taskDecisionState.hasRequestedEditPermission]);
135
+ (0, _react.useEffect)(function () {
136
+ if (!tryingRequest && (0, _platformFeatureFlags.fg)('editor_request_to_edit_task')) {
137
+ var timout = setTimeout(function () {
138
+ setTryingRequest(false);
139
+ }, TRYING_REQUEST_TIMEOUT);
140
+ return function () {
141
+ return clearTimeout(timout);
142
+ };
143
+ }
144
+ }, [tryingRequest]);
125
145
  var showPlaceholder = (0, _useShowPlaceholder.useShowPlaceholder)({
126
146
  editorView: editorView,
127
147
  isContentNodeEmpty: isContentNodeEmpty,
@@ -131,7 +151,7 @@ var TaskItemWrapper = function TaskItemWrapper(_ref2) {
131
151
  var onHandleEdit = function onHandleEdit(editorAnalyticsAPI) {
132
152
  if ((0, _platformFeatureFlags.fg)('editor_request_to_edit_task')) {
133
153
  var _api$taskDecision;
134
- setRequested(true);
154
+ setTryingRequest(true);
135
155
  var tr = editorView.state.tr;
136
156
  var nodePos = getPos();
137
157
  if (typeof nodePos !== 'number') {
@@ -166,7 +186,8 @@ var TaskItemWrapper = function TaskItemWrapper(_ref2) {
166
186
  onChange: onChange,
167
187
  isFocused: isFocused,
168
188
  showPlaceholder: showPlaceholder,
169
- providers: providerFactory
189
+ providers: providerFactory,
190
+ api: api
170
191
  });
171
192
  }
172
193
  return /*#__PURE__*/_react.default.createElement(_popup.default, {
@@ -185,7 +206,7 @@ var TaskItemWrapper = function TaskItemWrapper(_ref2) {
185
206
  size: "xsmall"
186
207
  }, formatMessage(_messages.tasksAndDecisionsMessages.editAccessTitle)), /*#__PURE__*/_react.default.createElement("div", null, formatMessage(_messages.tasksAndDecisionsMessages.requestToEditDescription)), /*#__PURE__*/_react.default.createElement(_primitives.Box, {
187
208
  xcss: wrapperBoxStyles
188
- }, requested ? /*#__PURE__*/_react.default.createElement(RequestedMessage, null) : /*#__PURE__*/_react.default.createElement(RequestToEditButton, {
209
+ }, tryingRequest || requested ? /*#__PURE__*/_react.default.createElement(RequestedMessage, null) : /*#__PURE__*/_react.default.createElement(RequestToEditButton, {
189
210
  onClick: (api === null || api === void 0 || (_api$editorViewMode = api.editorViewMode) === null || _api$editorViewMode === void 0 || (_api$editorViewMode = _api$editorViewMode.sharedState.currentState()) === null || _api$editorViewMode === void 0 ? void 0 : _api$editorViewMode.mode) === 'view' ? function () {
190
211
  var _api$analytics2;
191
212
  return onHandleEdit(api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions);
@@ -212,7 +233,8 @@ var TaskItemWrapper = function TaskItemWrapper(_ref2) {
212
233
  isFocused: isFocused,
213
234
  showPlaceholder: showPlaceholder,
214
235
  providers: providerFactory,
215
- disableOnChange: !(api !== null && api !== void 0 && (_api$taskDecision3 = api.taskDecision) !== null && _api$taskDecision3 !== void 0 && (_api$taskDecision3 = _api$taskDecision3.sharedState.currentState()) !== null && _api$taskDecision3 !== void 0 && _api$taskDecision3.hasEditPermission)
236
+ disableOnChange: !(api !== null && api !== void 0 && (_api$taskDecision3 = api.taskDecision) !== null && _api$taskDecision3 !== void 0 && (_api$taskDecision3 = _api$taskDecision3.sharedState.currentState()) !== null && _api$taskDecision3 !== void 0 && _api$taskDecision3.hasEditPermission),
237
+ api: api
216
238
  });
217
239
  },
218
240
  placement: 'bottom-start'
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.tasksAndDecisionsPlugin = exports.taskItemSpecWithFixedToDOM = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
9
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
12
  var _react = require("@emotion/react");
11
13
  var _adfSchema = require("@atlaskit/adf-schema");
@@ -15,6 +17,7 @@ var _lazyNodeView = require("@atlaskit/editor-common/lazy-node-view");
15
17
  var _messages = require("@atlaskit/editor-common/messages");
16
18
  var _quickInsert = require("@atlaskit/editor-common/quick-insert");
17
19
  var _styles = require("@atlaskit/editor-common/styles");
20
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
18
21
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
19
22
  var _commands = require("./commands");
20
23
  var _helpers = require("./pm-plugins/helpers");
@@ -121,12 +124,25 @@ var tasksAndDecisionsPlugin = exports.tasksAndDecisionsPlugin = function tasksAn
121
124
  consumeTabs = _ref2$config2.consumeTabs,
122
125
  useLongPressSelection = _ref2$config2.useLongPressSelection,
123
126
  hasEditPermission = _ref2$config2.hasEditPermission,
127
+ hasRequestedEditPermission = _ref2$config2.hasRequestedEditPermission,
124
128
  requestToEditContent = _ref2$config2.requestToEditContent,
129
+ taskDecisionProvider = _ref2$config2.taskDecisionProvider,
125
130
  api = _ref2.api;
126
131
  var getIdentifierProvider = function getIdentifierProvider() {
127
132
  var _api$contextIdentifie;
128
133
  return api === null || api === void 0 || (_api$contextIdentifie = api.contextIdentifier) === null || _api$contextIdentifie === void 0 || (_api$contextIdentifie = _api$contextIdentifie.sharedState.currentState()) === null || _api$contextIdentifie === void 0 ? void 0 : _api$contextIdentifie.contextIdentifierProvider;
129
134
  };
135
+ var previousTaskAndDecisionProvider;
136
+ if ((0, _platformFeatureFlags.fg)('platform_editor_td_provider_from_plugin_config')) {
137
+ if (taskDecisionProvider) {
138
+ taskDecisionProvider.then(function (provider) {
139
+ api === null || api === void 0 || api.core.actions.execute(function (_ref3) {
140
+ var tr = _ref3.tr;
141
+ return (0, _commands.setProvider)(provider)(tr);
142
+ });
143
+ });
144
+ }
145
+ }
130
146
  return {
131
147
  name: 'taskDecision',
132
148
  nodes: function nodes() {
@@ -157,54 +173,97 @@ var tasksAndDecisionsPlugin = exports.tasksAndDecisionsPlugin = function tasksAn
157
173
  indentDisabled: itemIndex === 0 || indentLevel >= _indentation.MAX_INDENTATION_LEVEL,
158
174
  outdentDisabled: indentLevel <= 1,
159
175
  hasEditPermission: pluginState === null || pluginState === void 0 ? void 0 : pluginState.hasEditPermission,
160
- requestToEditContent: pluginState === null || pluginState === void 0 ? void 0 : pluginState.requestToEditContent
176
+ requestToEditContent: pluginState === null || pluginState === void 0 ? void 0 : pluginState.requestToEditContent,
177
+ hasRequestedEditPermission: pluginState === null || pluginState === void 0 ? void 0 : pluginState.hasRequestedEditPermission,
178
+ taskDecisionProvider: pluginState === null || pluginState === void 0 ? void 0 : pluginState.taskDecisionProvider
161
179
  };
162
180
  },
163
181
  commands: {
164
182
  updateEditPermission: function updateEditPermission(hasEditPermission) {
165
- return function (_ref3) {
166
- var tr = _ref3.tr;
183
+ return function (_ref4) {
184
+ var tr = _ref4.tr;
167
185
  return tr.setMeta(_pluginKey.stateKey, {
168
186
  hasEditPermission: hasEditPermission
169
187
  });
170
188
  };
189
+ },
190
+ updateHasRequestedEditPermission: function updateHasRequestedEditPermission(hasRequestedEditPermission) {
191
+ return function (_ref5) {
192
+ var tr = _ref5.tr;
193
+ return tr.setMeta(_pluginKey.stateKey, {
194
+ hasRequestedEditPermission: hasRequestedEditPermission
195
+ });
196
+ };
171
197
  }
172
198
  },
173
199
  actions: {
174
200
  insertTaskDecision: (0, _commands.insertTaskDecisionCommand)(api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions, getIdentifierProvider),
175
201
  indentTaskList: (0, _keymaps.getIndentCommand)(api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions),
176
- outdentTaskList: (0, _keymaps.getUnindentCommand)(api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions)
202
+ outdentTaskList: (0, _keymaps.getUnindentCommand)(api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions),
203
+ setProvider: function () {
204
+ var _setProvider2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(providerPromise) {
205
+ var _api$core$actions$exe;
206
+ var provider;
207
+ return _regenerator.default.wrap(function _callee$(_context) {
208
+ while (1) switch (_context.prev = _context.next) {
209
+ case 0:
210
+ _context.next = 2;
211
+ return providerPromise;
212
+ case 2:
213
+ provider = _context.sent;
214
+ if (!(previousTaskAndDecisionProvider === provider || taskDecisionProvider === providerPromise)) {
215
+ _context.next = 5;
216
+ break;
217
+ }
218
+ return _context.abrupt("return", false);
219
+ case 5:
220
+ previousTaskAndDecisionProvider = provider;
221
+ return _context.abrupt("return", (_api$core$actions$exe = api === null || api === void 0 ? void 0 : api.core.actions.execute(function (_ref6) {
222
+ var tr = _ref6.tr;
223
+ return (0, _commands.setProvider)(provider)(tr);
224
+ })) !== null && _api$core$actions$exe !== void 0 ? _api$core$actions$exe : false);
225
+ case 7:
226
+ case "end":
227
+ return _context.stop();
228
+ }
229
+ }, _callee);
230
+ }));
231
+ function setProvider(_x) {
232
+ return _setProvider2.apply(this, arguments);
233
+ }
234
+ return setProvider;
235
+ }()
177
236
  },
178
237
  pmPlugins: function pmPlugins() {
179
238
  return [{
180
239
  name: 'tasksAndDecisions',
181
- plugin: function plugin(_ref4) {
182
- var portalProviderAPI = _ref4.portalProviderAPI,
183
- providerFactory = _ref4.providerFactory,
184
- eventDispatcher = _ref4.eventDispatcher,
185
- dispatch = _ref4.dispatch;
186
- return (0, _main.createPlugin)(portalProviderAPI, eventDispatcher, providerFactory, dispatch, api, useLongPressSelection, hasEditPermission, requestToEditContent);
240
+ plugin: function plugin(_ref7) {
241
+ var portalProviderAPI = _ref7.portalProviderAPI,
242
+ providerFactory = _ref7.providerFactory,
243
+ eventDispatcher = _ref7.eventDispatcher,
244
+ dispatch = _ref7.dispatch;
245
+ return (0, _main.createPlugin)(portalProviderAPI, eventDispatcher, providerFactory, dispatch, api, useLongPressSelection, hasEditPermission, hasRequestedEditPermission, requestToEditContent);
187
246
  }
188
247
  }, {
189
248
  name: 'tasksAndDecisionsInputRule',
190
- plugin: function plugin(_ref5) {
249
+ plugin: function plugin(_ref8) {
191
250
  var _api$analytics4;
192
- var schema = _ref5.schema,
193
- featureFlags = _ref5.featureFlags;
251
+ var schema = _ref8.schema,
252
+ featureFlags = _ref8.featureFlags;
194
253
  return (0, _inputRules.default)(api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions, getIdentifierProvider)(schema, featureFlags);
195
254
  }
196
255
  }, {
197
256
  name: 'tasksAndDecisionsKeyMap',
198
- plugin: function plugin(_ref6) {
199
- var schema = _ref6.schema;
257
+ plugin: function plugin(_ref9) {
258
+ var schema = _ref9.schema;
200
259
  return (0, _keymaps.default)(schema, api, allowNestedTasks, consumeTabs);
201
260
  }
202
261
  } // Needs to be after "save-on-enter"
203
262
  ];
204
263
  },
205
- secondaryToolbarComponent: function secondaryToolbarComponent(_ref7) {
206
- var editorView = _ref7.editorView,
207
- disabled = _ref7.disabled;
264
+ secondaryToolbarComponent: function secondaryToolbarComponent(_ref10) {
265
+ var editorView = _ref10.editorView,
266
+ disabled = _ref10.disabled;
208
267
  return (0, _react.jsx)("div", {
209
268
  css: taskDecisionToolbarGroupStyles
210
269
  }, (0, _react.jsx)(_ToolbarDecision.default, {
@@ -220,8 +279,8 @@ var tasksAndDecisionsPlugin = exports.tasksAndDecisionsPlugin = function tasksAn
220
279
  }));
221
280
  },
222
281
  pluginsOptions: {
223
- quickInsert: function quickInsert(_ref8) {
224
- var formatMessage = _ref8.formatMessage;
282
+ quickInsert: function quickInsert(_ref11) {
283
+ var formatMessage = _ref11.formatMessage;
225
284
  return [{
226
285
  id: 'action',
227
286
  title: formatMessage(_messages.toolbarInsertBlockMessages.action),
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.setProvider = exports.focusTaskDecision = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ 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; }
10
+ 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; }
11
+ var focusTaskDecision = exports.focusTaskDecision = function focusTaskDecision(state, action) {
12
+ return _objectSpread(_objectSpread({}, state), {}, {
13
+ focusedTaskItemLocalId: action.data
14
+ });
15
+ };
16
+ var setProvider = exports.setProvider = function setProvider(state, action) {
17
+ return _objectSpread(_objectSpread({}, state), {}, {
18
+ taskDecisionProvider: action.data
19
+ });
20
+ };
@@ -16,6 +16,7 @@ var _state = require("@atlaskit/editor-prosemirror/state");
16
16
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
17
17
  var _decisionLazyNodeView = require("../nodeviews/decision-lazy-node-view");
18
18
  var _taskLazyNodeView = require("../nodeviews/task-lazy-node-view");
19
+ var _actions = require("./actions");
19
20
  var _helpers = require("./helpers");
20
21
  var _pluginKey = require("./plugin-key");
21
22
  var _types = require("./types");
@@ -32,7 +33,8 @@ function nodesBetweenChanged(tr, f, startPos) {
32
33
  function createPlugin(portalProviderAPI, eventDispatcher, providerFactory, dispatch, api) {
33
34
  var useLongPressSelection = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
34
35
  var hasEditPermission = arguments.length > 6 ? arguments[6] : undefined;
35
- var requestToEditContent = arguments.length > 7 ? arguments[7] : undefined;
36
+ var hasRequestedEditPermission = arguments.length > 7 ? arguments[7] : undefined;
37
+ var requestToEditContent = arguments.length > 8 ? arguments[8] : undefined;
36
38
  return new _safePlugin.SafePlugin({
37
39
  props: {
38
40
  nodeViews: {
@@ -169,12 +171,15 @@ function createPlugin(portalProviderAPI, eventDispatcher, providerFactory, dispa
169
171
  return {
170
172
  insideTaskDecisionItem: false,
171
173
  hasEditPermission: hasEditPermission,
172
- requestToEditContent: requestToEditContent
174
+ hasRequestedEditPermission: hasRequestedEditPermission,
175
+ requestToEditContent: requestToEditContent,
176
+ focusedTaskItemLocalId: null,
177
+ taskDecisionProvider: undefined
173
178
  };
174
179
  },
175
180
  apply: function apply(tr, pluginState) {
176
181
  var metaData = tr.getMeta(_pluginKey.stateKey);
177
- var _ref = metaData || {
182
+ var _ref = metaData !== null && metaData !== void 0 ? metaData : {
178
183
  action: null,
179
184
  data: null
180
185
  },
@@ -185,8 +190,15 @@ function createPlugin(portalProviderAPI, eventDispatcher, providerFactory, dispa
185
190
  // Actions
186
191
  switch (action) {
187
192
  case _types.ACTIONS.FOCUS_BY_LOCALID:
188
- newPluginState = _objectSpread(_objectSpread({}, pluginState), {}, {
189
- focusedTaskItemLocalId: data
193
+ newPluginState = (0, _actions.focusTaskDecision)(newPluginState, {
194
+ action: _types.ACTIONS.FOCUS_BY_LOCALID,
195
+ data: data
196
+ });
197
+ break;
198
+ case _types.ACTIONS.SET_PROVIDER:
199
+ newPluginState = (0, _actions.setProvider)(newPluginState, {
200
+ action: _types.ACTIONS.SET_PROVIDER,
201
+ data: data
190
202
  });
191
203
  break;
192
204
  }
@@ -197,6 +209,11 @@ function createPlugin(portalProviderAPI, eventDispatcher, providerFactory, dispa
197
209
  hasEditPermission: metaData.hasEditPermission
198
210
  });
199
211
  }
212
+ if (metaData && 'hasRequestedEditPermission' in metaData && (0, _platformFeatureFlags.fg)('editor_request_to_edit_task')) {
213
+ newPluginState = _objectSpread(_objectSpread({}, newPluginState), {}, {
214
+ hasRequestedEditPermission: metaData.hasRequestedEditPermission
215
+ });
216
+ }
200
217
 
201
218
  // Dispatch
202
219
  dispatch(_pluginKey.stateKey, newPluginState);
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.ACTIONS = void 0;
7
7
  var ACTIONS = exports.ACTIONS = /*#__PURE__*/function (ACTIONS) {
8
- ACTIONS[ACTIONS["FOCUS_BY_LOCALID"] = 0] = "FOCUS_BY_LOCALID";
8
+ ACTIONS[ACTIONS["SET_PROVIDER"] = 0] = "SET_PROVIDER";
9
+ ACTIONS[ACTIONS["FOCUS_BY_LOCALID"] = 1] = "FOCUS_BY_LOCALID";
9
10
  return ACTIONS;
10
- }({});
11
+ }({}); // actions
12
+ // commands
@@ -17,10 +17,12 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
17
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
18
  var _react = _interopRequireWildcard(require("react"));
19
19
  var _reactIntlNext = require("react-intl-next");
20
+ var _hooks = require("@atlaskit/editor-common/hooks");
20
21
  var _messages = require("@atlaskit/editor-common/messages");
21
22
  var _providerFactory2 = require("@atlaskit/editor-common/provider-factory");
23
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
22
24
  var _taskItemWithProviders = _interopRequireDefault(require("./task-item-with-providers"));
23
- var _excluded = ["providers", "intl"];
25
+ var _excluded = ["providers", "intl", "api"];
24
26
  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); }
25
27
  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; }
26
28
  function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = (0, _getPrototypeOf2.default)(t); if (r) { var s = (0, _getPrototypeOf2.default)(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return (0, _possibleConstructorReturn2.default)(this, e); }; }
@@ -37,13 +39,20 @@ var TaskItem = exports.TaskItem = /*#__PURE__*/function (_PureComponent) {
37
39
  var _this$props = _this.props,
38
40
  _providerFactory = _this$props.providers,
39
41
  formatMessage = _this$props.intl.formatMessage,
42
+ api = _this$props.api,
40
43
  otherProps = (0, _objectWithoutProperties2.default)(_this$props, _excluded);
41
- var taskDecisionProvider = providers.taskDecisionProvider,
42
- contextIdentifierProvider = providers.contextIdentifierProvider;
44
+ var contextIdentifierProvider = providers.contextIdentifierProvider;
43
45
  var placeholder = formatMessage(_messages.tasksAndDecisionsMessages.taskPlaceholder);
46
+ var getTaskDecisionProvider = function getTaskDecisionProvider() {
47
+ if ((0, _platformFeatureFlags.fg)('platform_editor_td_provider_from_plugin_config')) {
48
+ var _this$props$taskDecis;
49
+ return (_this$props$taskDecis = _this.props.taskDecisionState) !== null && _this$props$taskDecis !== void 0 && _this$props$taskDecis.taskDecisionProvider ? Promise.resolve(_this.props.taskDecisionState.taskDecisionProvider) : undefined;
50
+ }
51
+ return providers.taskDecisionProvider;
52
+ };
44
53
  return /*#__PURE__*/_react.default.createElement(_taskItemWithProviders.default, (0, _extends2.default)({}, otherProps, {
45
54
  placeholder: placeholder,
46
- taskDecisionProvider: taskDecisionProvider,
55
+ taskDecisionProvider: getTaskDecisionProvider(),
47
56
  contextIdentifierProvider: contextIdentifierProvider
48
57
  }));
49
58
  });
@@ -62,8 +71,12 @@ var TaskItem = exports.TaskItem = /*#__PURE__*/function (_PureComponent) {
62
71
  }, {
63
72
  key: "render",
64
73
  value: function render() {
74
+ var providers = ['contextIdentifierProvider'];
75
+ if (!(0, _platformFeatureFlags.fg)('platform_editor_td_provider_from_plugin_config')) {
76
+ providers.push('taskDecisionProvider');
77
+ }
65
78
  return /*#__PURE__*/_react.default.createElement(_providerFactory2.WithProviders, {
66
- providers: ['taskDecisionProvider', 'contextIdentifierProvider'],
79
+ providers: providers,
67
80
  providerFactory: this.providerFactory,
68
81
  renderNode: this.renderWithProvider
69
82
  });
@@ -72,4 +85,11 @@ var TaskItem = exports.TaskItem = /*#__PURE__*/function (_PureComponent) {
72
85
  return TaskItem;
73
86
  }(_react.PureComponent);
74
87
  (0, _defineProperty2.default)(TaskItem, "displayName", 'TaskItem');
75
- var _default = exports.default = (0, _reactIntlNext.injectIntl)(TaskItem);
88
+ var TaskItemWrapper = function TaskItemWrapper(props) {
89
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(props.api, ['taskDecision']),
90
+ taskDecisionState = _useSharedPluginState.taskDecisionState;
91
+ return /*#__PURE__*/_react.default.createElement(TaskItem, (0, _extends2.default)({
92
+ taskDecisionState: taskDecisionState
93
+ }, props));
94
+ };
95
+ var _default = exports.default = (0, _reactIntlNext.injectIntl)(TaskItemWrapper);
@@ -6,6 +6,8 @@ import { NodeRange } from '@atlaskit/editor-prosemirror/model';
6
6
  import { TextSelection } from '@atlaskit/editor-prosemirror/state';
7
7
  import { liftTarget } from '@atlaskit/editor-prosemirror/transform';
8
8
  import { findParentNodeOfType, hasParentNodeOfType, replaceParentNodeOfType, safeInsert, setTextSelection } from '@atlaskit/editor-prosemirror/utils';
9
+ import { stateKey } from './pm-plugins/plugin-key';
10
+ import { ACTIONS } from './pm-plugins/types';
9
11
  const getContextData = (contextProvider = {}) => {
10
12
  const {
11
13
  objectId,
@@ -276,4 +278,10 @@ export const createListAtSelection = (tr, list, item, schema, state, listLocalId
276
278
  }
277
279
  }
278
280
  return safeInsert(emptyList)(tr);
281
+ };
282
+ export const setProvider = provider => tr => {
283
+ return tr.setMeta(stateKey, {
284
+ action: ACTIONS.SET_PROVIDER,
285
+ data: provider
286
+ });
279
287
  };
@@ -1,5 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import React, { useState } from 'react';
2
+ import React, { useEffect, useState } from 'react';
3
3
  import { useIntl } from 'react-intl-next';
4
4
  import { SetAttrsStep } from '@atlaskit/adf-schema/steps';
5
5
  import { AnalyticsListener } from '@atlaskit/analytics-next';
@@ -14,6 +14,7 @@ import Popup from '@atlaskit/popup';
14
14
  import { Box, Pressable, Stack, xcss } from '@atlaskit/primitives';
15
15
  import TaskItem from '../ui/Task';
16
16
  import { useShowPlaceholder } from './hooks/use-show-placeholder';
17
+ const TRYING_REQUEST_TIMEOUT = 3000;
17
18
  const wrapperStyles = xcss({
18
19
  display: 'flex',
19
20
  flexDirection: 'column',
@@ -96,10 +97,24 @@ const TaskItemWrapper = ({
96
97
  } = useSharedPluginState(api, ['taskDecision']);
97
98
  const isFocused = Boolean((taskDecisionState === null || taskDecisionState === void 0 ? void 0 : taskDecisionState.focusedTaskItemLocalId) === localId);
98
99
  const [isOpen, setIsOpen] = useState(false);
99
- const [requested, setRequested] = useState(false);
100
+ const [requested, setRequested] = useState(taskDecisionState === null || taskDecisionState === void 0 ? void 0 : taskDecisionState.hasRequestedEditPermission);
101
+ const [tryingRequest, setTryingRequest] = useState(false);
100
102
  const {
101
103
  formatMessage
102
104
  } = useIntl();
105
+ useEffect(() => {
106
+ if (fg('editor_request_to_edit_task')) {
107
+ setRequested(taskDecisionState === null || taskDecisionState === void 0 ? void 0 : taskDecisionState.hasRequestedEditPermission);
108
+ }
109
+ }, [taskDecisionState === null || taskDecisionState === void 0 ? void 0 : taskDecisionState.hasRequestedEditPermission]);
110
+ useEffect(() => {
111
+ if (!tryingRequest && fg('editor_request_to_edit_task')) {
112
+ const timout = setTimeout(() => {
113
+ setTryingRequest(false);
114
+ }, TRYING_REQUEST_TIMEOUT);
115
+ return () => clearTimeout(timout);
116
+ }
117
+ }, [tryingRequest]);
103
118
  const showPlaceholder = useShowPlaceholder({
104
119
  editorView,
105
120
  isContentNodeEmpty,
@@ -109,7 +124,7 @@ const TaskItemWrapper = ({
109
124
  const onHandleEdit = editorAnalyticsAPI => {
110
125
  if (fg('editor_request_to_edit_task')) {
111
126
  var _api$taskDecision, _api$taskDecision$sha;
112
- setRequested(true);
127
+ setTryingRequest(true);
113
128
  const {
114
129
  tr
115
130
  } = editorView.state;
@@ -146,7 +161,8 @@ const TaskItemWrapper = ({
146
161
  onChange: onChange,
147
162
  isFocused: isFocused,
148
163
  showPlaceholder: showPlaceholder,
149
- providers: providerFactory
164
+ providers: providerFactory,
165
+ api: api
150
166
  });
151
167
  }
152
168
  return /*#__PURE__*/React.createElement(Popup, {
@@ -165,7 +181,7 @@ const TaskItemWrapper = ({
165
181
  size: "xsmall"
166
182
  }, formatMessage(tasksAndDecisionsMessages.editAccessTitle)), /*#__PURE__*/React.createElement("div", null, formatMessage(tasksAndDecisionsMessages.requestToEditDescription)), /*#__PURE__*/React.createElement(Box, {
167
183
  xcss: wrapperBoxStyles
168
- }, requested ? /*#__PURE__*/React.createElement(RequestedMessage, null) : /*#__PURE__*/React.createElement(RequestToEditButton, {
184
+ }, tryingRequest || requested ? /*#__PURE__*/React.createElement(RequestedMessage, null) : /*#__PURE__*/React.createElement(RequestToEditButton, {
169
185
  onClick: (api === null || api === void 0 ? void 0 : (_api$editorViewMode = api.editorViewMode) === null || _api$editorViewMode === void 0 ? void 0 : (_api$editorViewMode$s = _api$editorViewMode.sharedState.currentState()) === null || _api$editorViewMode$s === void 0 ? void 0 : _api$editorViewMode$s.mode) === 'view' ? () => {
170
186
  var _api$analytics2;
171
187
  return onHandleEdit(api === null || api === void 0 ? void 0 : (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions);
@@ -192,7 +208,8 @@ const TaskItemWrapper = ({
192
208
  isFocused: isFocused,
193
209
  showPlaceholder: showPlaceholder,
194
210
  providers: providerFactory,
195
- disableOnChange: !(api !== null && api !== void 0 && (_api$taskDecision3 = api.taskDecision) !== null && _api$taskDecision3 !== void 0 && (_api$taskDecision3$sh = _api$taskDecision3.sharedState.currentState()) !== null && _api$taskDecision3$sh !== void 0 && _api$taskDecision3$sh.hasEditPermission)
211
+ disableOnChange: !(api !== null && api !== void 0 && (_api$taskDecision3 = api.taskDecision) !== null && _api$taskDecision3 !== void 0 && (_api$taskDecision3$sh = _api$taskDecision3.sharedState.currentState()) !== null && _api$taskDecision3$sh !== void 0 && _api$taskDecision3$sh.hasEditPermission),
212
+ api: api
196
213
  });
197
214
  },
198
215
  placement: 'bottom-start'