@atlaskit/editor-plugin-tasks-and-decisions 9.0.3 → 9.0.4

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/editor-plugin-tasks-and-decisions
2
2
 
3
+ ## 9.0.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`f2edf4a20927d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f2edf4a20927d) -
8
+ ED-29303 Move TaskListMenuItem component to taskAndDecision plugin
9
+ - Updated dependencies
10
+
3
11
  ## 9.0.3
4
12
 
5
13
  ### Patch Changes
@@ -24,6 +24,7 @@ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
24
24
  var _commands2 = require("./commands");
25
25
  var _helpers = require("./helpers");
26
26
  var _insertCommands = require("./insert-commands");
27
+ var _toggleTasklistCommands = require("./toggle-tasklist-commands");
27
28
  var _utils3 = require("./utils");
28
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; }
29
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; }
@@ -703,12 +704,31 @@ function keymapPlugin(schema, api, allowNestedTasks, consumeTabs) {
703
704
  'Shift-Tab': _helpers.isInsideTaskOrDecisionItem,
704
705
  Tab: _helpers.isInsideTaskOrDecisionItem
705
706
  } : {};
706
- var keymaps = _objectSpread((0, _defineProperty2.default)({
707
+ var toggleTaskListShortcut = function toggleTaskListShortcut(state, dispatch) {
708
+ if (!(0, _expValEquals.expValEquals)('platform_editor_toolbar_aifc_patch_6', 'isEnabled', true)) {
709
+ return false;
710
+ }
711
+ if (!state.schema.nodes.taskItem) {
712
+ return false;
713
+ }
714
+ if (dispatch) {
715
+ var command = (0, _toggleTasklistCommands.toggleTaskList)();
716
+ var tr = command({
717
+ tr: state.tr
718
+ });
719
+ if (tr) {
720
+ dispatch(tr);
721
+ return true;
722
+ }
723
+ }
724
+ return false;
725
+ };
726
+ var keymaps = _objectSpread((0, _defineProperty2.default)((0, _defineProperty2.default)({
707
727
  Backspace: backspace(api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions),
708
728
  Delete: deleteForwards,
709
729
  'Ctrl-d': deleteForwards,
710
730
  Enter: enter(api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions, getContextIdentifier)
711
- }, _keymaps.toggleTaskItemCheckbox.common, cmdOptEnter), allowNestedTasks ? indentHandlers : defaultHandlers);
731
+ }, _keymaps.toggleTaskItemCheckbox.common, cmdOptEnter), _keymaps.toggleTaskList.common, toggleTaskListShortcut), allowNestedTasks ? indentHandlers : defaultHandlers);
712
732
  return (0, _keymap.keymap)(keymaps);
713
733
  }
714
734
  var _default = exports.default = keymapPlugin;
@@ -24,6 +24,7 @@ var _utils = require("@atlaskit/editor-prosemirror/utils");
24
24
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
25
25
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
26
26
  var _expValEqualsNoExposure = require("@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure");
27
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
27
28
  var _taskItemNodeSpec = require("./nodeviews/taskItemNodeSpec");
28
29
  var _decisionItem = require("./nodeviews/toDOM-fixes/decisionItem");
29
30
  var _helpers = require("./pm-plugins/helpers");
@@ -35,6 +36,7 @@ var _pluginKey = require("./pm-plugins/plugin-key");
35
36
  var _toggleTasklistCommands = require("./pm-plugins/toggle-tasklist-commands");
36
37
  var _RequestToEditPopup = require("./ui/Task/RequestToEditPopup");
37
38
  var _TaskListBlockMenuItem = require("./ui/TaskListBlockMenuItem/TaskListBlockMenuItem");
39
+ var _toolbarComponents = require("./ui/toolbar-components");
38
40
  var _ToolbarDecision = _interopRequireDefault(require("./ui/ToolbarDecision"));
39
41
  var _ToolbarTask = _interopRequireDefault(require("./ui/ToolbarTask"));
40
42
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
@@ -109,6 +111,15 @@ var tasksAndDecisionsPlugin = exports.tasksAndDecisionsPlugin = function tasksAn
109
111
  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;
110
112
  };
111
113
  var previousTaskAndDecisionProvider;
114
+ var isToolbarAIFCEnabled = Boolean(api === null || api === void 0 ? void 0 : api.toolbar) && (0, _experiments.editorExperiment)('platform_editor_toolbar_aifc', true, {
115
+ exposure: true
116
+ });
117
+ if (isToolbarAIFCEnabled && (0, _expValEquals.expValEquals)('platform_editor_toolbar_aifc_patch_6', 'isEnabled', true) && (0, _expValEquals.expValEquals)('platform_editor_toolbar_task_list_menu_item', 'isEnabled', true)) {
118
+ var _api$toolbar;
119
+ api === null || api === void 0 || (_api$toolbar = api.toolbar) === null || _api$toolbar === void 0 || _api$toolbar.actions.registerComponents((0, _toolbarComponents.getTasksAndDecisionsToolbarComponents)({
120
+ api: api
121
+ }));
122
+ }
112
123
  if (taskDecisionProvider) {
113
124
  taskDecisionProvider.then(function (provider) {
114
125
  api === null || api === void 0 || api.core.actions.execute(function (_ref4) {
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.TaskListMenuItem = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _reactIntlNext = require("react-intl-next");
10
+ var _hooks = require("@atlaskit/editor-common/hooks");
11
+ var _keymaps = require("@atlaskit/editor-common/keymaps");
12
+ var _messages = require("@atlaskit/editor-common/messages");
13
+ var _editorToolbar = require("@atlaskit/editor-toolbar");
14
+ var TaskListMenuItem = exports.TaskListMenuItem = function TaskListMenuItem(_ref) {
15
+ var api = _ref.api;
16
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
17
+ formatMessage = _useIntl.formatMessage;
18
+ var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['taskDecision'], function (states) {
19
+ var _states$taskDecisionS;
20
+ return {
21
+ isInsideTask: (_states$taskDecisionS = states.taskDecisionState) === null || _states$taskDecisionS === void 0 ? void 0 : _states$taskDecisionS.isInsideTask
22
+ };
23
+ }),
24
+ isInsideTask = _useSharedPluginState.isInsideTask;
25
+ var handleClick = function handleClick() {
26
+ var _api$taskDecision;
27
+ api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 || (_api$taskDecision = api.taskDecision) === null || _api$taskDecision === void 0 ? void 0 : _api$taskDecision.commands.toggleTaskList());
28
+ };
29
+ return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
30
+ elemBefore: /*#__PURE__*/_react.default.createElement(_editorToolbar.TaskIcon, {
31
+ size: "small",
32
+ label: ""
33
+ }),
34
+ elemAfter: /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarKeyboardShortcutHint, {
35
+ shortcut: (0, _keymaps.formatShortcut)(_keymaps.toggleTaskList)
36
+ }),
37
+ isSelected: isInsideTask,
38
+ isDisabled: false,
39
+ onClick: handleClick,
40
+ ariaKeyshortcuts: (0, _keymaps.formatShortcut)(_keymaps.toggleTaskList)
41
+ }, formatMessage(_messages.tasksAndDecisionsMessages.taskList));
42
+ };
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getTasksAndDecisionsToolbarComponents = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _toolbar = require("@atlaskit/editor-common/toolbar");
10
+ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
11
+ var _TaskListMenuItem = require("./TaskListMenuItem/TaskListMenuItem");
12
+ var getTasksAndDecisionsToolbarComponents = exports.getTasksAndDecisionsToolbarComponents = function getTasksAndDecisionsToolbarComponents(_ref) {
13
+ var api = _ref.api;
14
+ if (!(0, _expValEquals.expValEquals)('platform_editor_toolbar_aifc_patch_6', 'isEnabled', true) || !(0, _expValEquals.expValEquals)('platform_editor_toolbar_task_list_menu_item', 'isEnabled', true)) {
15
+ return [];
16
+ }
17
+ return [{
18
+ type: _toolbar.TASK_LIST_MENU_ITEM.type,
19
+ key: _toolbar.TASK_LIST_MENU_ITEM.key,
20
+ parents: [{
21
+ type: _toolbar.LISTS_INDENTATION_MENU_SECTION.type,
22
+ key: _toolbar.LISTS_INDENTATION_MENU_SECTION.key,
23
+ rank: _toolbar.LISTS_INDENTATION_MENU_SECTION_RANK[_toolbar.TASK_LIST_MENU_ITEM.key]
24
+ }],
25
+ component: function component(_ref2) {
26
+ var parents = _ref2.parents;
27
+ return /*#__PURE__*/_react.default.createElement(_TaskListMenuItem.TaskListMenuItem, {
28
+ api: api,
29
+ parents: parents
30
+ });
31
+ }
32
+ }];
33
+ };
@@ -2,7 +2,7 @@ import { uuid } from '@atlaskit/adf-schema';
2
2
  import { SetAttrsStep } from '@atlaskit/adf-schema/steps';
3
3
  import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INDENT_DIRECTION, INDENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
4
4
  import { withAnalytics } from '@atlaskit/editor-common/editor-analytics';
5
- import { toggleTaskItemCheckbox } from '@atlaskit/editor-common/keymaps';
5
+ import { toggleTaskItemCheckbox, toggleTaskList as toggleTaskListKeymap } from '@atlaskit/editor-common/keymaps';
6
6
  import { GapCursorSelection, Side } from '@atlaskit/editor-common/selection';
7
7
  import { deleteEmptyParagraphAndMoveBlockUp, filterCommand as filter, isEmptySelectionAtEnd, isEmptySelectionAtStart } from '@atlaskit/editor-common/utils';
8
8
  import { autoJoin, chainCommands } from '@atlaskit/editor-prosemirror/commands';
@@ -15,6 +15,7 @@ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
15
15
  import { joinAtCut, liftSelection, wrapSelectionInTaskList } from './commands';
16
16
  import { findFirstParentListNode, getBlockRange, getCurrentIndentLevel, getTaskItemIndex, isActionOrDecisionItem, isActionOrDecisionList, isEmptyTaskDecision, isInFirstTextblockOfBlockTaskItem, isInLastTextblockOfBlockTaskItem, isInsideDecision, isInsideTask, isInsideTaskOrDecisionItem, isTable, liftBlock, walkOut } from './helpers';
17
17
  import { insertTaskDecisionWithAnalytics } from './insert-commands';
18
+ import { toggleTaskList } from './toggle-tasklist-commands';
18
19
  import { findBlockTaskItem, normalizeTaskItemsSelection } from './utils';
19
20
  const indentationAnalytics = (curIndentLevel, direction, inputMethod) => ({
20
21
  action: ACTION.FORMATTED,
@@ -701,6 +702,25 @@ export function keymapPlugin(schema, api, allowNestedTasks, consumeTabs) {
701
702
  'Shift-Tab': isInsideTaskOrDecisionItem,
702
703
  Tab: isInsideTaskOrDecisionItem
703
704
  } : {};
705
+ const toggleTaskListShortcut = (state, dispatch) => {
706
+ if (!expValEquals('platform_editor_toolbar_aifc_patch_6', 'isEnabled', true)) {
707
+ return false;
708
+ }
709
+ if (!state.schema.nodes.taskItem) {
710
+ return false;
711
+ }
712
+ if (dispatch) {
713
+ const command = toggleTaskList();
714
+ const tr = command({
715
+ tr: state.tr
716
+ });
717
+ if (tr) {
718
+ dispatch(tr);
719
+ return true;
720
+ }
721
+ }
722
+ return false;
723
+ };
704
724
  const keymaps = {
705
725
  Backspace: backspace(api === null || api === void 0 ? void 0 : (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions),
706
726
  Delete: deleteForwards,
@@ -709,6 +729,9 @@ export function keymapPlugin(schema, api, allowNestedTasks, consumeTabs) {
709
729
  // Ignored via go/ees005
710
730
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
711
731
  [toggleTaskItemCheckbox.common]: cmdOptEnter,
732
+ // Ignored via go/ees005
733
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
734
+ [toggleTaskListKeymap.common]: toggleTaskListShortcut,
712
735
  ...(allowNestedTasks ? indentHandlers : defaultHandlers)
713
736
  };
714
737
  return keymap(keymaps);
@@ -13,6 +13,7 @@ import { findDomRefAtPos } from '@atlaskit/editor-prosemirror/utils';
13
13
  import { fg } from '@atlaskit/platform-feature-flags';
14
14
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
15
15
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
16
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
16
17
  import { taskItemNodeSpec, blockTaskItemNodeSpec } from './nodeviews/taskItemNodeSpec';
17
18
  import { decisionItemSpecWithFixedToDOM } from './nodeviews/toDOM-fixes/decisionItem';
18
19
  import { closeRequestEditPopupAt, getCurrentIndentLevel, getTaskItemIndex, isInsideTask } from './pm-plugins/helpers';
@@ -26,6 +27,7 @@ import { stateKey as taskPluginKey } from './pm-plugins/plugin-key';
26
27
  import { toggleTaskList } from './pm-plugins/toggle-tasklist-commands';
27
28
  import { RequestToEditPopup } from './ui/Task/RequestToEditPopup';
28
29
  import { TaskListBlockMenuItem } from './ui/TaskListBlockMenuItem/TaskListBlockMenuItem';
30
+ import { getTasksAndDecisionsToolbarComponents } from './ui/toolbar-components';
29
31
  import ToolbarDecision from './ui/ToolbarDecision';
30
32
  import ToolbarTask from './ui/ToolbarTask';
31
33
  const taskDecisionToolbarGroupStyles = null;
@@ -98,6 +100,15 @@ export const tasksAndDecisionsPlugin = ({
98
100
  return api === null || api === void 0 ? void 0 : (_api$contextIdentifie = api.contextIdentifier) === null || _api$contextIdentifie === void 0 ? void 0 : (_api$contextIdentifie2 = _api$contextIdentifie.sharedState.currentState()) === null || _api$contextIdentifie2 === void 0 ? void 0 : _api$contextIdentifie2.contextIdentifierProvider;
99
101
  };
100
102
  let previousTaskAndDecisionProvider;
103
+ const isToolbarAIFCEnabled = Boolean(api === null || api === void 0 ? void 0 : api.toolbar) && editorExperiment('platform_editor_toolbar_aifc', true, {
104
+ exposure: true
105
+ });
106
+ if (isToolbarAIFCEnabled && expValEquals('platform_editor_toolbar_aifc_patch_6', 'isEnabled', true) && expValEquals('platform_editor_toolbar_task_list_menu_item', 'isEnabled', true)) {
107
+ var _api$toolbar;
108
+ api === null || api === void 0 ? void 0 : (_api$toolbar = api.toolbar) === null || _api$toolbar === void 0 ? void 0 : _api$toolbar.actions.registerComponents(getTasksAndDecisionsToolbarComponents({
109
+ api
110
+ }));
111
+ }
101
112
  if (taskDecisionProvider) {
102
113
  taskDecisionProvider.then(provider => {
103
114
  api === null || api === void 0 ? void 0 : api.core.actions.execute(({
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import { useIntl } from 'react-intl-next';
3
+ import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
4
+ import { formatShortcut, toggleTaskList } from '@atlaskit/editor-common/keymaps';
5
+ import { tasksAndDecisionsMessages } from '@atlaskit/editor-common/messages';
6
+ import { ToolbarDropdownItem, ToolbarKeyboardShortcutHint, TaskIcon } from '@atlaskit/editor-toolbar';
7
+ export const TaskListMenuItem = ({
8
+ api
9
+ }) => {
10
+ const {
11
+ formatMessage
12
+ } = useIntl();
13
+ const {
14
+ isInsideTask
15
+ } = useSharedPluginStateWithSelector(api, ['taskDecision'], states => {
16
+ var _states$taskDecisionS;
17
+ return {
18
+ isInsideTask: (_states$taskDecisionS = states.taskDecisionState) === null || _states$taskDecisionS === void 0 ? void 0 : _states$taskDecisionS.isInsideTask
19
+ };
20
+ });
21
+ const handleClick = () => {
22
+ var _api$taskDecision;
23
+ api === null || api === void 0 ? void 0 : api.core.actions.execute(api === null || api === void 0 ? void 0 : (_api$taskDecision = api.taskDecision) === null || _api$taskDecision === void 0 ? void 0 : _api$taskDecision.commands.toggleTaskList());
24
+ };
25
+ return /*#__PURE__*/React.createElement(ToolbarDropdownItem, {
26
+ elemBefore: /*#__PURE__*/React.createElement(TaskIcon, {
27
+ size: "small",
28
+ label: ""
29
+ }),
30
+ elemAfter: /*#__PURE__*/React.createElement(ToolbarKeyboardShortcutHint, {
31
+ shortcut: formatShortcut(toggleTaskList)
32
+ }),
33
+ isSelected: isInsideTask,
34
+ isDisabled: false,
35
+ onClick: handleClick,
36
+ ariaKeyshortcuts: formatShortcut(toggleTaskList)
37
+ }, formatMessage(tasksAndDecisionsMessages.taskList));
38
+ };
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { LISTS_INDENTATION_MENU_SECTION, LISTS_INDENTATION_MENU_SECTION_RANK, TASK_LIST_MENU_ITEM } from '@atlaskit/editor-common/toolbar';
3
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
4
+ import { TaskListMenuItem } from './TaskListMenuItem/TaskListMenuItem';
5
+ export const getTasksAndDecisionsToolbarComponents = ({
6
+ api
7
+ }) => {
8
+ if (!expValEquals('platform_editor_toolbar_aifc_patch_6', 'isEnabled', true) || !expValEquals('platform_editor_toolbar_task_list_menu_item', 'isEnabled', true)) {
9
+ return [];
10
+ }
11
+ return [{
12
+ type: TASK_LIST_MENU_ITEM.type,
13
+ key: TASK_LIST_MENU_ITEM.key,
14
+ parents: [{
15
+ type: LISTS_INDENTATION_MENU_SECTION.type,
16
+ key: LISTS_INDENTATION_MENU_SECTION.key,
17
+ rank: LISTS_INDENTATION_MENU_SECTION_RANK[TASK_LIST_MENU_ITEM.key]
18
+ }],
19
+ component: ({
20
+ parents
21
+ }) => /*#__PURE__*/React.createElement(TaskListMenuItem, {
22
+ api: api,
23
+ parents: parents
24
+ })
25
+ }];
26
+ };
@@ -5,7 +5,7 @@ import { uuid } from '@atlaskit/adf-schema';
5
5
  import { SetAttrsStep } from '@atlaskit/adf-schema/steps';
6
6
  import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INDENT_DIRECTION, INDENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
7
7
  import { withAnalytics } from '@atlaskit/editor-common/editor-analytics';
8
- import { toggleTaskItemCheckbox } from '@atlaskit/editor-common/keymaps';
8
+ import { toggleTaskItemCheckbox, toggleTaskList as toggleTaskListKeymap } from '@atlaskit/editor-common/keymaps';
9
9
  import { GapCursorSelection, Side } from '@atlaskit/editor-common/selection';
10
10
  import { deleteEmptyParagraphAndMoveBlockUp, filterCommand as filter, isEmptySelectionAtEnd, isEmptySelectionAtStart } from '@atlaskit/editor-common/utils';
11
11
  import { autoJoin, chainCommands } from '@atlaskit/editor-prosemirror/commands';
@@ -18,6 +18,7 @@ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
18
18
  import { joinAtCut, liftSelection, wrapSelectionInTaskList } from './commands';
19
19
  import { findFirstParentListNode, getBlockRange, getCurrentIndentLevel, getTaskItemIndex, isActionOrDecisionItem, isActionOrDecisionList, isEmptyTaskDecision, isInFirstTextblockOfBlockTaskItem, isInLastTextblockOfBlockTaskItem, isInsideDecision, isInsideTask, isInsideTaskOrDecisionItem, isTable, liftBlock, walkOut } from './helpers';
20
20
  import { insertTaskDecisionWithAnalytics } from './insert-commands';
21
+ import { toggleTaskList } from './toggle-tasklist-commands';
21
22
  import { findBlockTaskItem, normalizeTaskItemsSelection } from './utils';
22
23
  var indentationAnalytics = function indentationAnalytics(curIndentLevel, direction, inputMethod) {
23
24
  return {
@@ -695,12 +696,31 @@ export function keymapPlugin(schema, api, allowNestedTasks, consumeTabs) {
695
696
  'Shift-Tab': isInsideTaskOrDecisionItem,
696
697
  Tab: isInsideTaskOrDecisionItem
697
698
  } : {};
698
- var keymaps = _objectSpread(_defineProperty({
699
+ var toggleTaskListShortcut = function toggleTaskListShortcut(state, dispatch) {
700
+ if (!expValEquals('platform_editor_toolbar_aifc_patch_6', 'isEnabled', true)) {
701
+ return false;
702
+ }
703
+ if (!state.schema.nodes.taskItem) {
704
+ return false;
705
+ }
706
+ if (dispatch) {
707
+ var command = toggleTaskList();
708
+ var tr = command({
709
+ tr: state.tr
710
+ });
711
+ if (tr) {
712
+ dispatch(tr);
713
+ return true;
714
+ }
715
+ }
716
+ return false;
717
+ };
718
+ var keymaps = _objectSpread(_defineProperty(_defineProperty({
699
719
  Backspace: backspace(api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions),
700
720
  Delete: deleteForwards,
701
721
  'Ctrl-d': deleteForwards,
702
722
  Enter: enter(api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions, getContextIdentifier)
703
- }, toggleTaskItemCheckbox.common, cmdOptEnter), allowNestedTasks ? indentHandlers : defaultHandlers);
723
+ }, toggleTaskItemCheckbox.common, cmdOptEnter), toggleTaskListKeymap.common, toggleTaskListShortcut), allowNestedTasks ? indentHandlers : defaultHandlers);
704
724
  return keymap(keymaps);
705
725
  }
706
726
  export default keymapPlugin;
@@ -16,6 +16,7 @@ import { findDomRefAtPos } from '@atlaskit/editor-prosemirror/utils';
16
16
  import { fg } from '@atlaskit/platform-feature-flags';
17
17
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
18
18
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
19
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
19
20
  import { taskItemNodeSpec, blockTaskItemNodeSpec } from './nodeviews/taskItemNodeSpec';
20
21
  import { decisionItemSpecWithFixedToDOM } from './nodeviews/toDOM-fixes/decisionItem';
21
22
  import { closeRequestEditPopupAt, getCurrentIndentLevel, getTaskItemIndex, isInsideTask } from './pm-plugins/helpers';
@@ -29,6 +30,7 @@ import { stateKey as taskPluginKey } from './pm-plugins/plugin-key';
29
30
  import { toggleTaskList } from './pm-plugins/toggle-tasklist-commands';
30
31
  import { RequestToEditPopup } from './ui/Task/RequestToEditPopup';
31
32
  import { TaskListBlockMenuItem } from './ui/TaskListBlockMenuItem/TaskListBlockMenuItem';
33
+ import { getTasksAndDecisionsToolbarComponents } from './ui/toolbar-components';
32
34
  import ToolbarDecision from './ui/ToolbarDecision';
33
35
  import ToolbarTask from './ui/ToolbarTask';
34
36
  var taskDecisionToolbarGroupStyles = null;
@@ -100,6 +102,15 @@ export var tasksAndDecisionsPlugin = function tasksAndDecisionsPlugin(_ref3) {
100
102
  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;
101
103
  };
102
104
  var previousTaskAndDecisionProvider;
105
+ var isToolbarAIFCEnabled = Boolean(api === null || api === void 0 ? void 0 : api.toolbar) && editorExperiment('platform_editor_toolbar_aifc', true, {
106
+ exposure: true
107
+ });
108
+ if (isToolbarAIFCEnabled && expValEquals('platform_editor_toolbar_aifc_patch_6', 'isEnabled', true) && expValEquals('platform_editor_toolbar_task_list_menu_item', 'isEnabled', true)) {
109
+ var _api$toolbar;
110
+ api === null || api === void 0 || (_api$toolbar = api.toolbar) === null || _api$toolbar === void 0 || _api$toolbar.actions.registerComponents(getTasksAndDecisionsToolbarComponents({
111
+ api: api
112
+ }));
113
+ }
103
114
  if (taskDecisionProvider) {
104
115
  taskDecisionProvider.then(function (provider) {
105
116
  api === null || api === void 0 || api.core.actions.execute(function (_ref4) {
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import { useIntl } from 'react-intl-next';
3
+ import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
4
+ import { formatShortcut, toggleTaskList } from '@atlaskit/editor-common/keymaps';
5
+ import { tasksAndDecisionsMessages } from '@atlaskit/editor-common/messages';
6
+ import { ToolbarDropdownItem, ToolbarKeyboardShortcutHint, TaskIcon } from '@atlaskit/editor-toolbar';
7
+ export var TaskListMenuItem = function TaskListMenuItem(_ref) {
8
+ var api = _ref.api;
9
+ var _useIntl = useIntl(),
10
+ formatMessage = _useIntl.formatMessage;
11
+ var _useSharedPluginState = useSharedPluginStateWithSelector(api, ['taskDecision'], function (states) {
12
+ var _states$taskDecisionS;
13
+ return {
14
+ isInsideTask: (_states$taskDecisionS = states.taskDecisionState) === null || _states$taskDecisionS === void 0 ? void 0 : _states$taskDecisionS.isInsideTask
15
+ };
16
+ }),
17
+ isInsideTask = _useSharedPluginState.isInsideTask;
18
+ var handleClick = function handleClick() {
19
+ var _api$taskDecision;
20
+ api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 || (_api$taskDecision = api.taskDecision) === null || _api$taskDecision === void 0 ? void 0 : _api$taskDecision.commands.toggleTaskList());
21
+ };
22
+ return /*#__PURE__*/React.createElement(ToolbarDropdownItem, {
23
+ elemBefore: /*#__PURE__*/React.createElement(TaskIcon, {
24
+ size: "small",
25
+ label: ""
26
+ }),
27
+ elemAfter: /*#__PURE__*/React.createElement(ToolbarKeyboardShortcutHint, {
28
+ shortcut: formatShortcut(toggleTaskList)
29
+ }),
30
+ isSelected: isInsideTask,
31
+ isDisabled: false,
32
+ onClick: handleClick,
33
+ ariaKeyshortcuts: formatShortcut(toggleTaskList)
34
+ }, formatMessage(tasksAndDecisionsMessages.taskList));
35
+ };
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { LISTS_INDENTATION_MENU_SECTION, LISTS_INDENTATION_MENU_SECTION_RANK, TASK_LIST_MENU_ITEM } from '@atlaskit/editor-common/toolbar';
3
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
4
+ import { TaskListMenuItem } from './TaskListMenuItem/TaskListMenuItem';
5
+ export var getTasksAndDecisionsToolbarComponents = function getTasksAndDecisionsToolbarComponents(_ref) {
6
+ var api = _ref.api;
7
+ if (!expValEquals('platform_editor_toolbar_aifc_patch_6', 'isEnabled', true) || !expValEquals('platform_editor_toolbar_task_list_menu_item', 'isEnabled', true)) {
8
+ return [];
9
+ }
10
+ return [{
11
+ type: TASK_LIST_MENU_ITEM.type,
12
+ key: TASK_LIST_MENU_ITEM.key,
13
+ parents: [{
14
+ type: LISTS_INDENTATION_MENU_SECTION.type,
15
+ key: LISTS_INDENTATION_MENU_SECTION.key,
16
+ rank: LISTS_INDENTATION_MENU_SECTION_RANK[TASK_LIST_MENU_ITEM.key]
17
+ }],
18
+ component: function component(_ref2) {
19
+ var parents = _ref2.parents;
20
+ return /*#__PURE__*/React.createElement(TaskListMenuItem, {
21
+ api: api,
22
+ parents: parents
23
+ });
24
+ }
25
+ }];
26
+ };
@@ -4,6 +4,7 @@ import type { BlockMenuPlugin } from '@atlaskit/editor-plugin-block-menu';
4
4
  import type { ContextIdentifierPlugin } from '@atlaskit/editor-plugin-context-identifier';
5
5
  import type { EditorViewModePlugin } from '@atlaskit/editor-plugin-editor-viewmode';
6
6
  import type { SelectionPlugin } from '@atlaskit/editor-plugin-selection';
7
+ import type { ToolbarPlugin } from '@atlaskit/editor-plugin-toolbar';
7
8
  import type { TypeAheadPlugin } from '@atlaskit/editor-plugin-type-ahead';
8
9
  import type { TaskDecisionProvider } from '@atlaskit/task-decision/types';
9
10
  import type { insertTaskDecisionCommand } from './pm-plugins/insert-commands';
@@ -15,7 +16,8 @@ export type TasksAndDecisionsPluginDependencies = [
15
16
  OptionalPlugin<ContextIdentifierPlugin>,
16
17
  OptionalPlugin<EditorViewModePlugin>,
17
18
  OptionalPlugin<BlockMenuPlugin>,
18
- OptionalPlugin<SelectionPlugin>
19
+ OptionalPlugin<SelectionPlugin>,
20
+ OptionalPlugin<ToolbarPlugin>
19
21
  ];
20
22
  export type TasksAndDecisionsPlugin = NextEditorPlugin<'taskDecision', {
21
23
  actions: {
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types';
3
+ import type { ToolbarComponentTypes } from '@atlaskit/editor-toolbar-model';
4
+ import type { TasksAndDecisionsPlugin } from '../../tasksAndDecisionsPluginType';
5
+ type TaskListMenuItemProps = {
6
+ api?: ExtractInjectionAPI<TasksAndDecisionsPlugin>;
7
+ parents?: ToolbarComponentTypes;
8
+ };
9
+ export declare const TaskListMenuItem: ({ api }: TaskListMenuItemProps) => React.JSX.Element;
10
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types';
2
+ import type { RegisterComponent } from '@atlaskit/editor-toolbar-model';
3
+ import type { TasksAndDecisionsPlugin } from '../tasksAndDecisionsPluginType';
4
+ type GetTasksAndDecisionsToolbarComponentsProps = {
5
+ api?: ExtractInjectionAPI<TasksAndDecisionsPlugin>;
6
+ };
7
+ export declare const getTasksAndDecisionsToolbarComponents: ({ api, }: GetTasksAndDecisionsToolbarComponentsProps) => RegisterComponent[];
8
+ export {};
@@ -4,6 +4,7 @@ import type { BlockMenuPlugin } from '@atlaskit/editor-plugin-block-menu';
4
4
  import type { ContextIdentifierPlugin } from '@atlaskit/editor-plugin-context-identifier';
5
5
  import type { EditorViewModePlugin } from '@atlaskit/editor-plugin-editor-viewmode';
6
6
  import type { SelectionPlugin } from '@atlaskit/editor-plugin-selection';
7
+ import type { ToolbarPlugin } from '@atlaskit/editor-plugin-toolbar';
7
8
  import type { TypeAheadPlugin } from '@atlaskit/editor-plugin-type-ahead';
8
9
  import type { TaskDecisionProvider } from '@atlaskit/task-decision/types';
9
10
  import type { insertTaskDecisionCommand } from './pm-plugins/insert-commands';
@@ -15,7 +16,8 @@ export type TasksAndDecisionsPluginDependencies = [
15
16
  OptionalPlugin<ContextIdentifierPlugin>,
16
17
  OptionalPlugin<EditorViewModePlugin>,
17
18
  OptionalPlugin<BlockMenuPlugin>,
18
- OptionalPlugin<SelectionPlugin>
19
+ OptionalPlugin<SelectionPlugin>,
20
+ OptionalPlugin<ToolbarPlugin>
19
21
  ];
20
22
  export type TasksAndDecisionsPlugin = NextEditorPlugin<'taskDecision', {
21
23
  actions: {
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types';
3
+ import type { ToolbarComponentTypes } from '@atlaskit/editor-toolbar-model';
4
+ import type { TasksAndDecisionsPlugin } from '../../tasksAndDecisionsPluginType';
5
+ type TaskListMenuItemProps = {
6
+ api?: ExtractInjectionAPI<TasksAndDecisionsPlugin>;
7
+ parents?: ToolbarComponentTypes;
8
+ };
9
+ export declare const TaskListMenuItem: ({ api }: TaskListMenuItemProps) => React.JSX.Element;
10
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types';
2
+ import type { RegisterComponent } from '@atlaskit/editor-toolbar-model';
3
+ import type { TasksAndDecisionsPlugin } from '../tasksAndDecisionsPluginType';
4
+ type GetTasksAndDecisionsToolbarComponentsProps = {
5
+ api?: ExtractInjectionAPI<TasksAndDecisionsPlugin>;
6
+ };
7
+ export declare const getTasksAndDecisionsToolbarComponents: ({ api, }: GetTasksAndDecisionsToolbarComponentsProps) => RegisterComponent[];
8
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-tasks-and-decisions",
3
- "version": "9.0.3",
3
+ "version": "9.0.4",
4
4
  "description": "Tasks and decisions plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -38,10 +38,12 @@
38
38
  "@atlaskit/editor-plugin-context-identifier": "^6.0.0",
39
39
  "@atlaskit/editor-plugin-editor-viewmode": "^8.0.0",
40
40
  "@atlaskit/editor-plugin-selection": "^6.0.0",
41
+ "@atlaskit/editor-plugin-toolbar": "^3.0.0",
41
42
  "@atlaskit/editor-plugin-type-ahead": "^6.1.0",
42
43
  "@atlaskit/editor-prosemirror": "7.0.0",
43
44
  "@atlaskit/editor-shared-styles": "^3.6.0",
44
45
  "@atlaskit/editor-toolbar": "^0.10.0",
46
+ "@atlaskit/editor-toolbar-model": "^0.2.0",
45
47
  "@atlaskit/heading": "^5.2.0",
46
48
  "@atlaskit/icon": "^28.3.0",
47
49
  "@atlaskit/platform-feature-flags": "^1.1.0",