@atlaskit/editor-plugin-breakout 2.1.6 → 2.1.8

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,24 @@
1
1
  # @atlaskit/editor-plugin-breakout
2
2
 
3
+ ## 2.1.8
4
+
5
+ ### Patch Changes
6
+
7
+ - [#144898](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/144898)
8
+ [`b9a10d6716ef4`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b9a10d6716ef4) -
9
+ Enable useSharedPluginStateSelector in block-controls, block-type and breakout plugins
10
+ - Updated dependencies
11
+
12
+ ## 2.1.7
13
+
14
+ ### Patch Changes
15
+
16
+ - [#137211](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/137211)
17
+ [`d00cb55d6fa4b`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/d00cb55d6fa4b) -
18
+ [ux] ED27118 Increase pull page editor gutter to allow more space for new floating insert button -
19
+ https://hello.atlassian.net/wiki/spaces/EDITOR/pages/5120694962/Editor+DACI+New+insert+button+and+full-width+screens+2.0
20
+ - Updated dependencies
21
+
3
22
  ## 2.1.6
4
23
 
5
24
  ### Patch Changes
@@ -1,23 +1,30 @@
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.breakoutPlugin = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
8
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
- var _react = _interopRequireDefault(require("react"));
13
+ var _react = _interopRequireWildcard(require("react"));
12
14
  var _adfSchema = require("@atlaskit/adf-schema");
13
15
  var _hooks = require("@atlaskit/editor-common/hooks");
14
16
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
15
17
  var _styles = require("@atlaskit/editor-common/styles");
18
+ var _usePluginStateEffect = require("@atlaskit/editor-common/use-plugin-state-effect");
19
+ var _useSharedPluginStateSelector = require("@atlaskit/editor-common/use-shared-plugin-state-selector");
16
20
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
17
21
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
18
22
  var _pluginKey = require("./pm-plugins/plugin-key");
19
23
  var _findBreakoutNode = require("./pm-plugins/utils/find-breakout-node");
24
+ var _getBreakoutMode = require("./pm-plugins/utils/get-breakout-mode");
20
25
  var _LayoutButton = _interopRequireDefault(require("./ui/LayoutButton"));
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); }
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; }
21
28
  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; }
22
29
  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; }
23
30
  var BreakoutView = /*#__PURE__*/(0, _createClass2.default)(function BreakoutView(
@@ -108,37 +115,92 @@ function createPlugin(pluginInjectionApi, _ref) {
108
115
  });
109
116
  }
110
117
  var LayoutButtonWrapper = function LayoutButtonWrapper(_ref2) {
111
- var _breakoutState$breako, _breakoutState$breako2;
118
+ var _breakoutState$breako2, _breakoutState$breako3;
112
119
  var api = _ref2.api,
113
120
  editorView = _ref2.editorView,
114
121
  boundariesElement = _ref2.boundariesElement,
115
122
  scrollableElement = _ref2.scrollableElement,
116
123
  mountPoint = _ref2.mountPoint;
117
124
  // Re-render with `width` (but don't use state) due to https://bitbucket.org/atlassian/%7Bc8e2f021-38d2-46d0-9b7a-b3f7b428f724%7D/pull-requests/24272
118
- var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['width', 'breakout', 'editorViewMode', 'editorDisabled', 'blockControls']),
125
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['width', 'breakout', 'editorViewMode', 'editorDisabled', 'blockControls'], {
126
+ disabled: (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', true)
127
+ }),
119
128
  breakoutState = _useSharedPluginState.breakoutState,
120
129
  editorViewModeState = _useSharedPluginState.editorViewModeState,
121
130
  editorDisabledState = _useSharedPluginState.editorDisabledState,
122
131
  blockControlsState = _useSharedPluginState.blockControlsState;
123
- if (blockControlsState !== null && blockControlsState !== void 0 && blockControlsState.isDragging || blockControlsState !== null && blockControlsState !== void 0 && blockControlsState.isPMDragging) {
132
+
133
+ // isDragging
134
+ var isDraggingSelector = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'blockControls.isDragging', {
135
+ disabled: (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', false)
136
+ });
137
+ var isDragging = (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', true) ? isDraggingSelector : blockControlsState === null || blockControlsState === void 0 ? void 0 : blockControlsState.isDragging;
138
+
139
+ // isPMDragging
140
+ var isPMDraggingSelector = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'blockControls.isPMDragging', {
141
+ disabled: (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', false)
142
+ });
143
+ var isPMDragging = (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', true) ? isPMDraggingSelector : blockControlsState === null || blockControlsState === void 0 ? void 0 : blockControlsState.isPMDragging;
144
+
145
+ // mode
146
+ var modeSelector = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'editorViewMode.mode', {
147
+ disabled: (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', false)
148
+ });
149
+ var mode = (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', true) ? modeSelector : editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode;
150
+
151
+ // editorDisabled
152
+ var editorDisabledSelector = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'editorDisabled.editorDisabled', {
153
+ disabled: (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', false)
154
+ });
155
+ var editorDisabled = (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', true) ? editorDisabledSelector : editorDisabledState === null || editorDisabledState === void 0 ? void 0 : editorDisabledState.editorDisabled;
156
+ var _useState = (0, _react.useState)(function () {
157
+ var breakoutNode = (0, _findBreakoutNode.findSupportedNodeForBreakout)(editorView.state.selection);
158
+ return breakoutNode !== undefined;
159
+ }),
160
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
161
+ isBreakoutNodePresent = _useState2[0],
162
+ setIsBreakoutNodePresent = _useState2[1];
163
+ var _useState3 = (0, _react.useState)((0, _getBreakoutMode.getBreakoutMode)(editorView.state)),
164
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
165
+ breakoutMode = _useState4[0],
166
+ setBreakoutMode = _useState4[1];
167
+ (0, _usePluginStateEffect.usePluginStateEffect)(api, ['breakout'], function (_ref3) {
168
+ var _breakoutState$breako;
169
+ var breakoutState = _ref3.breakoutState;
170
+ if ((0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', false)) {
171
+ return;
172
+ }
173
+ var breakoutNode = (_breakoutState$breako = breakoutState === null || breakoutState === void 0 ? void 0 : breakoutState.breakoutNode) !== null && _breakoutState$breako !== void 0 ? _breakoutState$breako : null;
174
+ var isBreakoutNodeNull = breakoutNode !== null;
175
+ if (isBreakoutNodePresent !== isBreakoutNodeNull) {
176
+ setIsBreakoutNodePresent(isBreakoutNodeNull);
177
+ }
178
+ var nextBreakoutMode = (0, _getBreakoutMode.getBreakoutMode)(editorView.state);
179
+ if (nextBreakoutMode !== breakoutMode) {
180
+ setBreakoutMode(nextBreakoutMode);
181
+ }
182
+ });
183
+ if (isDragging || isPMDragging) {
124
184
  if ((0, _experiments.editorExperiment)('advanced_layouts', true)) {
125
185
  return null;
126
186
  }
127
187
  }
128
- var isViewMode = (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'view';
129
- var isEditMode = (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'edit';
130
- return !isViewMode && editorDisabledState !== undefined && !(editorDisabledState !== null && editorDisabledState !== void 0 && editorDisabledState.editorDisabled) ? /*#__PURE__*/_react.default.createElement(_LayoutButton.default, {
188
+ var isViewMode = mode === 'view';
189
+ var isEditMode = mode === 'edit';
190
+ return !isViewMode && editorDisabled === false ? /*#__PURE__*/_react.default.createElement(_LayoutButton.default, {
131
191
  editorView: editorView,
132
192
  mountPoint: mountPoint,
133
193
  boundariesElement: boundariesElement,
134
194
  scrollableElement: scrollableElement,
135
- node: (_breakoutState$breako = breakoutState === null || breakoutState === void 0 || (_breakoutState$breako2 = breakoutState.breakoutNode) === null || _breakoutState$breako2 === void 0 ? void 0 : _breakoutState$breako2.node) !== null && _breakoutState$breako !== void 0 ? _breakoutState$breako : null,
136
- isLivePage: isEditMode
195
+ node: (_breakoutState$breako2 = breakoutState === null || breakoutState === void 0 || (_breakoutState$breako3 = breakoutState.breakoutNode) === null || _breakoutState$breako3 === void 0 ? void 0 : _breakoutState$breako3.node) !== null && _breakoutState$breako2 !== void 0 ? _breakoutState$breako2 : null,
196
+ isLivePage: isEditMode,
197
+ breakoutMode: breakoutMode,
198
+ isBreakoutNodePresent: isBreakoutNodePresent
137
199
  }) : null;
138
200
  };
139
- var breakoutPlugin = exports.breakoutPlugin = function breakoutPlugin(_ref3) {
140
- var options = _ref3.config,
141
- api = _ref3.api;
201
+ var breakoutPlugin = exports.breakoutPlugin = function breakoutPlugin(_ref4) {
202
+ var options = _ref4.config,
203
+ api = _ref4.api;
142
204
  return {
143
205
  name: 'breakout',
144
206
  pmPlugins: function pmPlugins() {
@@ -169,11 +231,11 @@ var breakoutPlugin = exports.breakoutPlugin = function breakoutPlugin(_ref3) {
169
231
  }
170
232
  return pluginState;
171
233
  },
172
- contentComponent: function contentComponent(_ref4) {
173
- var editorView = _ref4.editorView,
174
- popupsMountPoint = _ref4.popupsMountPoint,
175
- popupsBoundariesElement = _ref4.popupsBoundariesElement,
176
- popupsScrollableElement = _ref4.popupsScrollableElement;
234
+ contentComponent: function contentComponent(_ref5) {
235
+ var editorView = _ref5.editorView,
236
+ popupsMountPoint = _ref5.popupsMountPoint,
237
+ popupsBoundariesElement = _ref5.popupsBoundariesElement,
238
+ popupsScrollableElement = _ref5.popupsScrollableElement;
177
239
  // This is a bit crappy, but should be resolved once we move to a static schema.
178
240
  if (options && !options.allowBreakoutButton) {
179
241
  return null;
@@ -20,6 +20,7 @@ var _collapse = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/coll
20
20
  var _expand = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/expand"));
21
21
  var _colors = require("@atlaskit/theme/colors");
22
22
  var _constants = require("@atlaskit/theme/constants");
23
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
23
24
  var _removeBreakout = require("../editor-commands/remove-breakout");
24
25
  var _setBreakoutMode = require("../editor-commands/set-breakout-mode");
25
26
  var _pluginKey = require("../pm-plugins/plugin-key");
@@ -66,7 +67,9 @@ var LayoutButton = function LayoutButton(_ref) {
66
67
  scrollableElement = _ref.scrollableElement,
67
68
  editorView = _ref.editorView,
68
69
  node = _ref.node,
69
- isLivePage = _ref.isLivePage;
70
+ isLivePage = _ref.isLivePage,
71
+ breakoutModeProp = _ref.breakoutMode,
72
+ isBreakoutNodePresent = _ref.isBreakoutNodePresent;
70
73
  var handleClick = (0, _react.useCallback)(function (breakoutMode) {
71
74
  var state = editorView.state,
72
75
  dispatch = editorView.dispatch;
@@ -77,10 +80,11 @@ var LayoutButton = function LayoutButton(_ref) {
77
80
  }
78
81
  }, [editorView, isLivePage]);
79
82
  var state = editorView.state;
80
- if (!node || !(0, _isBreakoutMarkAllowed.isBreakoutMarkAllowed)(state)) {
83
+ var exitEarly = (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', true) ? !isBreakoutNodePresent : !node;
84
+ if (exitEarly || !(0, _isBreakoutMarkAllowed.isBreakoutMarkAllowed)(state)) {
81
85
  return null;
82
86
  }
83
- var breakoutMode = (0, _getBreakoutMode.getBreakoutMode)(editorView.state);
87
+ var breakoutMode = (0, _experiments.editorExperiment)('platform_editor_usesharedpluginstateselector', true) ? breakoutModeProp : (0, _getBreakoutMode.getBreakoutMode)(editorView.state);
84
88
  var titleMessage = (0, _utils.getTitle)(breakoutMode);
85
89
  var title = formatMessage(titleMessage);
86
90
  var nextBreakoutMode = (0, _utils.getNextBreakoutMode)(breakoutMode);
@@ -1,12 +1,15 @@
1
- import React from 'react';
1
+ import React, { useState } from 'react';
2
2
  import { breakout } from '@atlaskit/adf-schema';
3
3
  import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
4
4
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
5
5
  import { BreakoutCssClassName } from '@atlaskit/editor-common/styles';
6
+ import { usePluginStateEffect } from '@atlaskit/editor-common/use-plugin-state-effect';
7
+ import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
6
8
  import { akEditorSwoopCubicBezier } from '@atlaskit/editor-shared-styles';
7
9
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
8
10
  import { pluginKey } from './pm-plugins/plugin-key';
9
11
  import { findSupportedNodeForBreakout } from './pm-plugins/utils/find-breakout-node';
12
+ import { getBreakoutMode } from './pm-plugins/utils/get-breakout-mode';
10
13
  import LayoutButton from './ui/LayoutButton';
11
14
  class BreakoutView {
12
15
  constructor(
@@ -105,28 +108,78 @@ const LayoutButtonWrapper = ({
105
108
  scrollableElement,
106
109
  mountPoint
107
110
  }) => {
108
- var _breakoutState$breako, _breakoutState$breako2;
111
+ var _breakoutState$breako2, _breakoutState$breako3;
109
112
  // Re-render with `width` (but don't use state) due to https://bitbucket.org/atlassian/%7Bc8e2f021-38d2-46d0-9b7a-b3f7b428f724%7D/pull-requests/24272
110
113
  const {
111
114
  breakoutState,
112
115
  editorViewModeState,
113
116
  editorDisabledState,
114
117
  blockControlsState
115
- } = useSharedPluginState(api, ['width', 'breakout', 'editorViewMode', 'editorDisabled', 'blockControls']);
116
- if (blockControlsState !== null && blockControlsState !== void 0 && blockControlsState.isDragging || blockControlsState !== null && blockControlsState !== void 0 && blockControlsState.isPMDragging) {
118
+ } = useSharedPluginState(api, ['width', 'breakout', 'editorViewMode', 'editorDisabled', 'blockControls'], {
119
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', true)
120
+ });
121
+
122
+ // isDragging
123
+ const isDraggingSelector = useSharedPluginStateSelector(api, 'blockControls.isDragging', {
124
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
125
+ });
126
+ const isDragging = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? isDraggingSelector : blockControlsState === null || blockControlsState === void 0 ? void 0 : blockControlsState.isDragging;
127
+
128
+ // isPMDragging
129
+ const isPMDraggingSelector = useSharedPluginStateSelector(api, 'blockControls.isPMDragging', {
130
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
131
+ });
132
+ const isPMDragging = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? isPMDraggingSelector : blockControlsState === null || blockControlsState === void 0 ? void 0 : blockControlsState.isPMDragging;
133
+
134
+ // mode
135
+ const modeSelector = useSharedPluginStateSelector(api, 'editorViewMode.mode', {
136
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
137
+ });
138
+ const mode = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? modeSelector : editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode;
139
+
140
+ // editorDisabled
141
+ const editorDisabledSelector = useSharedPluginStateSelector(api, 'editorDisabled.editorDisabled', {
142
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
143
+ });
144
+ const editorDisabled = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? editorDisabledSelector : editorDisabledState === null || editorDisabledState === void 0 ? void 0 : editorDisabledState.editorDisabled;
145
+ const [isBreakoutNodePresent, setIsBreakoutNodePresent] = useState(() => {
146
+ const breakoutNode = findSupportedNodeForBreakout(editorView.state.selection);
147
+ return breakoutNode !== undefined;
148
+ });
149
+ const [breakoutMode, setBreakoutMode] = useState(getBreakoutMode(editorView.state));
150
+ usePluginStateEffect(api, ['breakout'], ({
151
+ breakoutState
152
+ }) => {
153
+ var _breakoutState$breako;
154
+ if (editorExperiment('platform_editor_usesharedpluginstateselector', false)) {
155
+ return;
156
+ }
157
+ const breakoutNode = (_breakoutState$breako = breakoutState === null || breakoutState === void 0 ? void 0 : breakoutState.breakoutNode) !== null && _breakoutState$breako !== void 0 ? _breakoutState$breako : null;
158
+ const isBreakoutNodeNull = breakoutNode !== null;
159
+ if (isBreakoutNodePresent !== isBreakoutNodeNull) {
160
+ setIsBreakoutNodePresent(isBreakoutNodeNull);
161
+ }
162
+ const nextBreakoutMode = getBreakoutMode(editorView.state);
163
+ if (nextBreakoutMode !== breakoutMode) {
164
+ setBreakoutMode(nextBreakoutMode);
165
+ }
166
+ });
167
+ if (isDragging || isPMDragging) {
117
168
  if (editorExperiment('advanced_layouts', true)) {
118
169
  return null;
119
170
  }
120
171
  }
121
- const isViewMode = (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'view';
122
- const isEditMode = (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'edit';
123
- return !isViewMode && editorDisabledState !== undefined && !(editorDisabledState !== null && editorDisabledState !== void 0 && editorDisabledState.editorDisabled) ? /*#__PURE__*/React.createElement(LayoutButton, {
172
+ const isViewMode = mode === 'view';
173
+ const isEditMode = mode === 'edit';
174
+ return !isViewMode && editorDisabled === false ? /*#__PURE__*/React.createElement(LayoutButton, {
124
175
  editorView: editorView,
125
176
  mountPoint: mountPoint,
126
177
  boundariesElement: boundariesElement,
127
178
  scrollableElement: scrollableElement,
128
- node: (_breakoutState$breako = breakoutState === null || breakoutState === void 0 ? void 0 : (_breakoutState$breako2 = breakoutState.breakoutNode) === null || _breakoutState$breako2 === void 0 ? void 0 : _breakoutState$breako2.node) !== null && _breakoutState$breako !== void 0 ? _breakoutState$breako : null,
129
- isLivePage: isEditMode
179
+ node: (_breakoutState$breako2 = breakoutState === null || breakoutState === void 0 ? void 0 : (_breakoutState$breako3 = breakoutState.breakoutNode) === null || _breakoutState$breako3 === void 0 ? void 0 : _breakoutState$breako3.node) !== null && _breakoutState$breako2 !== void 0 ? _breakoutState$breako2 : null,
180
+ isLivePage: isEditMode,
181
+ breakoutMode: breakoutMode,
182
+ isBreakoutNodePresent: isBreakoutNodePresent
130
183
  }) : null;
131
184
  };
132
185
  export const breakoutPlugin = ({
@@ -19,6 +19,7 @@ import CollapseIcon from '@atlaskit/icon/glyph/editor/collapse';
19
19
  import ExpandIcon from '@atlaskit/icon/glyph/editor/expand';
20
20
  import { B300, N20A, N300 } from '@atlaskit/theme/colors';
21
21
  import { layers } from '@atlaskit/theme/constants';
22
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
22
23
  import { removeBreakout } from '../editor-commands/remove-breakout';
23
24
  import { setBreakoutMode } from '../editor-commands/set-breakout-mode';
24
25
  import { getPluginState } from '../pm-plugins/plugin-key';
@@ -60,7 +61,9 @@ const LayoutButton = ({
60
61
  scrollableElement,
61
62
  editorView,
62
63
  node,
63
- isLivePage
64
+ isLivePage,
65
+ breakoutMode: breakoutModeProp,
66
+ isBreakoutNodePresent
64
67
  }) => {
65
68
  const handleClick = useCallback(breakoutMode => {
66
69
  const {
@@ -76,10 +79,11 @@ const LayoutButton = ({
76
79
  const {
77
80
  state
78
81
  } = editorView;
79
- if (!node || !isBreakoutMarkAllowed(state)) {
82
+ const exitEarly = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? !isBreakoutNodePresent : !node;
83
+ if (exitEarly || !isBreakoutMarkAllowed(state)) {
80
84
  return null;
81
85
  }
82
- const breakoutMode = getBreakoutMode(editorView.state);
86
+ const breakoutMode = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? breakoutModeProp : getBreakoutMode(editorView.state);
83
87
  const titleMessage = getTitle(breakoutMode);
84
88
  const title = formatMessage(titleMessage);
85
89
  const nextBreakoutMode = getNextBreakoutMode(breakoutMode);
@@ -1,17 +1,21 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
3
  import _createClass from "@babel/runtime/helpers/createClass";
3
4
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
5
  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; }
5
6
  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) { _defineProperty(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; }
6
- import React from 'react';
7
+ import React, { useState } from 'react';
7
8
  import { breakout } from '@atlaskit/adf-schema';
8
9
  import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
9
10
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
10
11
  import { BreakoutCssClassName } from '@atlaskit/editor-common/styles';
12
+ import { usePluginStateEffect } from '@atlaskit/editor-common/use-plugin-state-effect';
13
+ import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
11
14
  import { akEditorSwoopCubicBezier } from '@atlaskit/editor-shared-styles';
12
15
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
13
16
  import { pluginKey } from './pm-plugins/plugin-key';
14
17
  import { findSupportedNodeForBreakout } from './pm-plugins/utils/find-breakout-node';
18
+ import { getBreakoutMode } from './pm-plugins/utils/get-breakout-mode';
15
19
  import LayoutButton from './ui/LayoutButton';
16
20
  var BreakoutView = /*#__PURE__*/_createClass(function BreakoutView(
17
21
  /**
@@ -101,37 +105,92 @@ function createPlugin(pluginInjectionApi, _ref) {
101
105
  });
102
106
  }
103
107
  var LayoutButtonWrapper = function LayoutButtonWrapper(_ref2) {
104
- var _breakoutState$breako, _breakoutState$breako2;
108
+ var _breakoutState$breako2, _breakoutState$breako3;
105
109
  var api = _ref2.api,
106
110
  editorView = _ref2.editorView,
107
111
  boundariesElement = _ref2.boundariesElement,
108
112
  scrollableElement = _ref2.scrollableElement,
109
113
  mountPoint = _ref2.mountPoint;
110
114
  // Re-render with `width` (but don't use state) due to https://bitbucket.org/atlassian/%7Bc8e2f021-38d2-46d0-9b7a-b3f7b428f724%7D/pull-requests/24272
111
- var _useSharedPluginState = useSharedPluginState(api, ['width', 'breakout', 'editorViewMode', 'editorDisabled', 'blockControls']),
115
+ var _useSharedPluginState = useSharedPluginState(api, ['width', 'breakout', 'editorViewMode', 'editorDisabled', 'blockControls'], {
116
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', true)
117
+ }),
112
118
  breakoutState = _useSharedPluginState.breakoutState,
113
119
  editorViewModeState = _useSharedPluginState.editorViewModeState,
114
120
  editorDisabledState = _useSharedPluginState.editorDisabledState,
115
121
  blockControlsState = _useSharedPluginState.blockControlsState;
116
- if (blockControlsState !== null && blockControlsState !== void 0 && blockControlsState.isDragging || blockControlsState !== null && blockControlsState !== void 0 && blockControlsState.isPMDragging) {
122
+
123
+ // isDragging
124
+ var isDraggingSelector = useSharedPluginStateSelector(api, 'blockControls.isDragging', {
125
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
126
+ });
127
+ var isDragging = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? isDraggingSelector : blockControlsState === null || blockControlsState === void 0 ? void 0 : blockControlsState.isDragging;
128
+
129
+ // isPMDragging
130
+ var isPMDraggingSelector = useSharedPluginStateSelector(api, 'blockControls.isPMDragging', {
131
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
132
+ });
133
+ var isPMDragging = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? isPMDraggingSelector : blockControlsState === null || blockControlsState === void 0 ? void 0 : blockControlsState.isPMDragging;
134
+
135
+ // mode
136
+ var modeSelector = useSharedPluginStateSelector(api, 'editorViewMode.mode', {
137
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
138
+ });
139
+ var mode = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? modeSelector : editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode;
140
+
141
+ // editorDisabled
142
+ var editorDisabledSelector = useSharedPluginStateSelector(api, 'editorDisabled.editorDisabled', {
143
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
144
+ });
145
+ var editorDisabled = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? editorDisabledSelector : editorDisabledState === null || editorDisabledState === void 0 ? void 0 : editorDisabledState.editorDisabled;
146
+ var _useState = useState(function () {
147
+ var breakoutNode = findSupportedNodeForBreakout(editorView.state.selection);
148
+ return breakoutNode !== undefined;
149
+ }),
150
+ _useState2 = _slicedToArray(_useState, 2),
151
+ isBreakoutNodePresent = _useState2[0],
152
+ setIsBreakoutNodePresent = _useState2[1];
153
+ var _useState3 = useState(getBreakoutMode(editorView.state)),
154
+ _useState4 = _slicedToArray(_useState3, 2),
155
+ breakoutMode = _useState4[0],
156
+ setBreakoutMode = _useState4[1];
157
+ usePluginStateEffect(api, ['breakout'], function (_ref3) {
158
+ var _breakoutState$breako;
159
+ var breakoutState = _ref3.breakoutState;
160
+ if (editorExperiment('platform_editor_usesharedpluginstateselector', false)) {
161
+ return;
162
+ }
163
+ var breakoutNode = (_breakoutState$breako = breakoutState === null || breakoutState === void 0 ? void 0 : breakoutState.breakoutNode) !== null && _breakoutState$breako !== void 0 ? _breakoutState$breako : null;
164
+ var isBreakoutNodeNull = breakoutNode !== null;
165
+ if (isBreakoutNodePresent !== isBreakoutNodeNull) {
166
+ setIsBreakoutNodePresent(isBreakoutNodeNull);
167
+ }
168
+ var nextBreakoutMode = getBreakoutMode(editorView.state);
169
+ if (nextBreakoutMode !== breakoutMode) {
170
+ setBreakoutMode(nextBreakoutMode);
171
+ }
172
+ });
173
+ if (isDragging || isPMDragging) {
117
174
  if (editorExperiment('advanced_layouts', true)) {
118
175
  return null;
119
176
  }
120
177
  }
121
- var isViewMode = (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'view';
122
- var isEditMode = (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'edit';
123
- return !isViewMode && editorDisabledState !== undefined && !(editorDisabledState !== null && editorDisabledState !== void 0 && editorDisabledState.editorDisabled) ? /*#__PURE__*/React.createElement(LayoutButton, {
178
+ var isViewMode = mode === 'view';
179
+ var isEditMode = mode === 'edit';
180
+ return !isViewMode && editorDisabled === false ? /*#__PURE__*/React.createElement(LayoutButton, {
124
181
  editorView: editorView,
125
182
  mountPoint: mountPoint,
126
183
  boundariesElement: boundariesElement,
127
184
  scrollableElement: scrollableElement,
128
- node: (_breakoutState$breako = breakoutState === null || breakoutState === void 0 || (_breakoutState$breako2 = breakoutState.breakoutNode) === null || _breakoutState$breako2 === void 0 ? void 0 : _breakoutState$breako2.node) !== null && _breakoutState$breako !== void 0 ? _breakoutState$breako : null,
129
- isLivePage: isEditMode
185
+ node: (_breakoutState$breako2 = breakoutState === null || breakoutState === void 0 || (_breakoutState$breako3 = breakoutState.breakoutNode) === null || _breakoutState$breako3 === void 0 ? void 0 : _breakoutState$breako3.node) !== null && _breakoutState$breako2 !== void 0 ? _breakoutState$breako2 : null,
186
+ isLivePage: isEditMode,
187
+ breakoutMode: breakoutMode,
188
+ isBreakoutNodePresent: isBreakoutNodePresent
130
189
  }) : null;
131
190
  };
132
- export var breakoutPlugin = function breakoutPlugin(_ref3) {
133
- var options = _ref3.config,
134
- api = _ref3.api;
191
+ export var breakoutPlugin = function breakoutPlugin(_ref4) {
192
+ var options = _ref4.config,
193
+ api = _ref4.api;
135
194
  return {
136
195
  name: 'breakout',
137
196
  pmPlugins: function pmPlugins() {
@@ -162,11 +221,11 @@ export var breakoutPlugin = function breakoutPlugin(_ref3) {
162
221
  }
163
222
  return pluginState;
164
223
  },
165
- contentComponent: function contentComponent(_ref4) {
166
- var editorView = _ref4.editorView,
167
- popupsMountPoint = _ref4.popupsMountPoint,
168
- popupsBoundariesElement = _ref4.popupsBoundariesElement,
169
- popupsScrollableElement = _ref4.popupsScrollableElement;
224
+ contentComponent: function contentComponent(_ref5) {
225
+ var editorView = _ref5.editorView,
226
+ popupsMountPoint = _ref5.popupsMountPoint,
227
+ popupsBoundariesElement = _ref5.popupsBoundariesElement,
228
+ popupsScrollableElement = _ref5.popupsScrollableElement;
170
229
  // This is a bit crappy, but should be resolved once we move to a static schema.
171
230
  if (options && !options.allowBreakoutButton) {
172
231
  return null;
@@ -19,6 +19,7 @@ import CollapseIcon from '@atlaskit/icon/glyph/editor/collapse';
19
19
  import ExpandIcon from '@atlaskit/icon/glyph/editor/expand';
20
20
  import { B300, N20A, N300 } from '@atlaskit/theme/colors';
21
21
  import { layers } from '@atlaskit/theme/constants';
22
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
22
23
  import { removeBreakout } from '../editor-commands/remove-breakout';
23
24
  import { setBreakoutMode } from '../editor-commands/set-breakout-mode';
24
25
  import { getPluginState } from '../pm-plugins/plugin-key';
@@ -58,7 +59,9 @@ var LayoutButton = function LayoutButton(_ref) {
58
59
  scrollableElement = _ref.scrollableElement,
59
60
  editorView = _ref.editorView,
60
61
  node = _ref.node,
61
- isLivePage = _ref.isLivePage;
62
+ isLivePage = _ref.isLivePage,
63
+ breakoutModeProp = _ref.breakoutMode,
64
+ isBreakoutNodePresent = _ref.isBreakoutNodePresent;
62
65
  var handleClick = useCallback(function (breakoutMode) {
63
66
  var state = editorView.state,
64
67
  dispatch = editorView.dispatch;
@@ -69,10 +72,11 @@ var LayoutButton = function LayoutButton(_ref) {
69
72
  }
70
73
  }, [editorView, isLivePage]);
71
74
  var state = editorView.state;
72
- if (!node || !isBreakoutMarkAllowed(state)) {
75
+ var exitEarly = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? !isBreakoutNodePresent : !node;
76
+ if (exitEarly || !isBreakoutMarkAllowed(state)) {
73
77
  return null;
74
78
  }
75
- var breakoutMode = getBreakoutMode(editorView.state);
79
+ var breakoutMode = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? breakoutModeProp : getBreakoutMode(editorView.state);
76
80
  var titleMessage = getTitle(breakoutMode);
77
81
  var title = formatMessage(titleMessage);
78
82
  var nextBreakoutMode = getNextBreakoutMode(breakoutMode);
@@ -1,5 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import type { WrappedComponentProps } from 'react-intl-next';
3
+ import type { BreakoutMode } from '@atlaskit/editor-common/types';
3
4
  import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
4
5
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
5
6
  export interface Props {
@@ -10,6 +11,8 @@ export interface Props {
10
11
  scrollableElement?: HTMLElement;
11
12
  handleClick?: Function;
12
13
  isLivePage?: boolean;
14
+ breakoutMode: BreakoutMode | undefined;
15
+ isBreakoutNodePresent: boolean;
13
16
  }
14
17
  declare const _default: import("react").FC<import("react-intl-next").WithIntlProps<Props & WrappedComponentProps>> & {
15
18
  WrappedComponent: import("react").ComponentType<Props & WrappedComponentProps>;
@@ -1,5 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import type { WrappedComponentProps } from 'react-intl-next';
3
+ import type { BreakoutMode } from '@atlaskit/editor-common/types';
3
4
  import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
4
5
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
5
6
  export interface Props {
@@ -10,6 +11,8 @@ export interface Props {
10
11
  scrollableElement?: HTMLElement;
11
12
  handleClick?: Function;
12
13
  isLivePage?: boolean;
14
+ breakoutMode: BreakoutMode | undefined;
15
+ isBreakoutNodePresent: boolean;
13
16
  }
14
17
  declare const _default: import("react").FC<import("react-intl-next").WithIntlProps<Props & WrappedComponentProps>> & {
15
18
  WrappedComponent: import("react").ComponentType<Props & WrappedComponentProps>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-breakout",
3
- "version": "2.1.6",
3
+ "version": "2.1.8",
4
4
  "description": "Breakout plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -34,18 +34,18 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@atlaskit/adf-schema": "^47.6.0",
37
- "@atlaskit/editor-common": "^103.0.0",
38
- "@atlaskit/editor-plugin-block-controls": "^3.8.0",
37
+ "@atlaskit/editor-common": "^103.16.0",
38
+ "@atlaskit/editor-plugin-block-controls": "^3.11.0",
39
39
  "@atlaskit/editor-plugin-editor-disabled": "^2.0.0",
40
- "@atlaskit/editor-plugin-editor-viewmode": "^3.0.0",
40
+ "@atlaskit/editor-plugin-editor-viewmode": "^3.1.0",
41
41
  "@atlaskit/editor-plugin-width": "^3.0.0",
42
42
  "@atlaskit/editor-prosemirror": "7.0.0",
43
43
  "@atlaskit/editor-shared-styles": "^3.4.0",
44
- "@atlaskit/icon": "^25.5.0",
44
+ "@atlaskit/icon": "^25.6.0",
45
45
  "@atlaskit/platform-feature-flags": "^1.1.0",
46
46
  "@atlaskit/theme": "^18.0.0",
47
- "@atlaskit/tmp-editor-statsig": "^4.6.0",
48
- "@atlaskit/tokens": "^4.7.0",
47
+ "@atlaskit/tmp-editor-statsig": "^4.14.0",
48
+ "@atlaskit/tokens": "^4.8.0",
49
49
  "@babel/runtime": "^7.0.0",
50
50
  "@emotion/react": "^11.7.1"
51
51
  },
@@ -57,7 +57,7 @@
57
57
  "devDependencies": {
58
58
  "@af/integration-testing": "^0.5.0",
59
59
  "@af/visual-regression": "^1.3.0",
60
- "@atlaskit/editor-plugin-code-block": "^4.2.0",
60
+ "@atlaskit/editor-plugin-code-block": "^4.4.0",
61
61
  "@atlaskit/editor-plugin-composition": "^1.3.0",
62
62
  "@atlaskit/editor-plugin-decorations": "^2.0.0",
63
63
  "@atlaskit/ssr": "^0.4.0",
@@ -105,9 +105,6 @@
105
105
  "platform-feature-flags": {
106
106
  "platform-editor-single-player-expand": {
107
107
  "type": "boolean"
108
- },
109
- "platform_editor_core_increase_full_page_guttering": {
110
- "type": "boolean"
111
108
  }
112
109
  }
113
110
  }