@atlaskit/editor-plugin-synced-block 3.5.0 → 3.6.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 (55) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/nodeviews/bodiedLazySyncedBlock.js +26 -0
  3. package/dist/cjs/nodeviews/bodiedSyncedBlock.js +87 -0
  4. package/dist/cjs/nodeviews/syncedBlock.js +8 -115
  5. package/dist/cjs/pm-plugins/actions.js +48 -40
  6. package/dist/cjs/pm-plugins/main.js +8 -2
  7. package/dist/cjs/pm-plugins/utils/track-sync-blocks.js +8 -0
  8. package/dist/cjs/pm-plugins/utils/utils.js +12 -2
  9. package/dist/cjs/syncedBlockPlugin.js +3 -0
  10. package/dist/cjs/ui/BodiedSyncBlockWrapper.js +25 -0
  11. package/dist/cjs/ui/CreateSyncedBlockDropdownItem.js +15 -2
  12. package/dist/cjs/ui/SyncBlockLabel.js +3 -2
  13. package/dist/cjs/ui/floating-toolbar.js +5 -3
  14. package/dist/es2019/nodeviews/bodiedLazySyncedBlock.js +16 -0
  15. package/dist/es2019/nodeviews/bodiedSyncedBlock.js +62 -0
  16. package/dist/es2019/nodeviews/syncedBlock.js +7 -96
  17. package/dist/es2019/pm-plugins/actions.js +56 -46
  18. package/dist/es2019/pm-plugins/main.js +8 -2
  19. package/dist/es2019/pm-plugins/utils/track-sync-blocks.js +8 -0
  20. package/dist/es2019/pm-plugins/utils/utils.js +11 -1
  21. package/dist/es2019/syncedBlockPlugin.js +4 -1
  22. package/dist/es2019/ui/BodiedSyncBlockWrapper.js +19 -0
  23. package/dist/es2019/ui/CreateSyncedBlockDropdownItem.js +16 -2
  24. package/dist/es2019/ui/SyncBlockLabel.js +3 -2
  25. package/dist/es2019/ui/floating-toolbar.js +12 -4
  26. package/dist/esm/nodeviews/bodiedLazySyncedBlock.js +15 -0
  27. package/dist/esm/nodeviews/bodiedSyncedBlock.js +80 -0
  28. package/dist/esm/nodeviews/syncedBlock.js +9 -116
  29. package/dist/esm/pm-plugins/actions.js +47 -39
  30. package/dist/esm/pm-plugins/main.js +8 -2
  31. package/dist/esm/pm-plugins/utils/track-sync-blocks.js +8 -0
  32. package/dist/esm/pm-plugins/utils/utils.js +11 -1
  33. package/dist/esm/syncedBlockPlugin.js +4 -1
  34. package/dist/esm/ui/BodiedSyncBlockWrapper.js +18 -0
  35. package/dist/esm/ui/CreateSyncedBlockDropdownItem.js +15 -2
  36. package/dist/esm/ui/SyncBlockLabel.js +3 -2
  37. package/dist/esm/ui/floating-toolbar.js +6 -4
  38. package/dist/types/nodeviews/bodiedLazySyncedBlock.d.ts +3 -0
  39. package/dist/types/nodeviews/bodiedSyncedBlock.d.ts +25 -0
  40. package/dist/types/nodeviews/syncedBlock.d.ts +1 -20
  41. package/dist/types/pm-plugins/utils/utils.d.ts +6 -2
  42. package/dist/types/syncedBlockPluginType.d.ts +2 -0
  43. package/dist/types/ui/BodiedSyncBlockWrapper.d.ts +9 -0
  44. package/dist/types-ts4.5/nodeviews/bodiedLazySyncedBlock.d.ts +3 -0
  45. package/dist/types-ts4.5/nodeviews/bodiedSyncedBlock.d.ts +25 -0
  46. package/dist/types-ts4.5/nodeviews/syncedBlock.d.ts +1 -20
  47. package/dist/types-ts4.5/pm-plugins/utils/utils.d.ts +6 -2
  48. package/dist/types-ts4.5/syncedBlockPluginType.d.ts +2 -0
  49. package/dist/types-ts4.5/ui/BodiedSyncBlockWrapper.d.ts +9 -0
  50. package/package.json +3 -3
  51. package/dist/cjs/ui/SyncBlockEditorWrapper.js +0 -45
  52. package/dist/es2019/ui/SyncBlockEditorWrapper.js +0 -29
  53. package/dist/esm/ui/SyncBlockEditorWrapper.js +0 -36
  54. package/dist/types/ui/SyncBlockEditorWrapper.d.ts +0 -16
  55. package/dist/types-ts4.5/ui/SyncBlockEditorWrapper.d.ts +0 -16
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @atlaskit/editor-plugin-synced-block
2
2
 
3
+ ## 3.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`10882b2fab738`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/10882b2fab738) -
8
+ [ux] Introduced bodiedSyncBlock nodeview
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies
13
+
14
+ ## 3.5.1
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies
19
+
3
20
  ## 3.5.0
4
21
 
5
22
  ### Minor Changes
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.lazyBodiedSyncBlockView = void 0;
8
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
+ var _lazyNodeView = require("@atlaskit/editor-common/lazy-node-view");
10
+ 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" != (0, _typeof2.default)(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); }
11
+ var lazyBodiedSyncBlockView = exports.lazyBodiedSyncBlockView = function lazyBodiedSyncBlockView(props) {
12
+ return (0, _lazyNodeView.withLazyLoading)({
13
+ nodeName: 'bodiedSyncBlock',
14
+ getNodeViewOptions: function getNodeViewOptions() {},
15
+ loader: function loader() {
16
+ var result = Promise.resolve().then(function () {
17
+ return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_editor-plugin-bodied-synced-block-nodeview" */
18
+ './bodiedSyncedBlock'));
19
+ }).then(function (_ref) {
20
+ var bodiedSyncBlockNodeView = _ref.bodiedSyncBlockNodeView;
21
+ return bodiedSyncBlockNodeView(props);
22
+ });
23
+ return result;
24
+ }
25
+ });
26
+ };
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.bodiedSyncBlockNodeView = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
+ var _react = _interopRequireDefault(require("react"));
14
+ var _reactNodeView = _interopRequireDefault(require("@atlaskit/editor-common/react-node-view"));
15
+ var _syncBlock = require("@atlaskit/editor-common/sync-block");
16
+ var _model = require("@atlaskit/editor-prosemirror/model");
17
+ var _BodiedSyncBlockWrapper = require("../ui/BodiedSyncBlockWrapper");
18
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
19
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
20
+ var toDOM = function toDOM() {
21
+ return ['div', {
22
+ class: _syncBlock.BodiedSyncBlockSharedCssClassName.content,
23
+ contenteditable: true
24
+ }, 0];
25
+ };
26
+ var BodiedSyncBlock = /*#__PURE__*/function (_ReactNodeView) {
27
+ function BodiedSyncBlock(props) {
28
+ var _this;
29
+ (0, _classCallCheck2.default)(this, BodiedSyncBlock);
30
+ _this = _callSuper(this, BodiedSyncBlock, [props.node, props.view, props.getPos, props.portalProviderAPI, props.eventDispatcher, props]);
31
+ _this.pluginOptions = props.pluginOptions;
32
+ return _this;
33
+ }
34
+ (0, _inherits2.default)(BodiedSyncBlock, _ReactNodeView);
35
+ return (0, _createClass2.default)(BodiedSyncBlock, [{
36
+ key: "createDomRef",
37
+ value: function createDomRef() {
38
+ var domRef = document.createElement('div');
39
+ domRef.classList.add(_syncBlock.BodiedSyncBlockSharedCssClassName.prefix);
40
+ return domRef;
41
+ }
42
+ }, {
43
+ key: "render",
44
+ value: function render(_props, forwardRef) {
45
+ var _this$pluginOptions;
46
+ return /*#__PURE__*/_react.default.createElement(_BodiedSyncBlockWrapper.BodiedSyncBlockWrapper, {
47
+ ref: forwardRef,
48
+ dataProvider: (_this$pluginOptions = this.pluginOptions) === null || _this$pluginOptions === void 0 ? void 0 : _this$pluginOptions.dataProvider,
49
+ node: this.node
50
+ });
51
+ }
52
+ }, {
53
+ key: "getContentDOM",
54
+ value: function getContentDOM() {
55
+ var _DOMSerializer$render = _model.DOMSerializer.renderSpec(document, toDOM()),
56
+ dom = _DOMSerializer$render.dom,
57
+ contentDOM = _DOMSerializer$render.contentDOM;
58
+ if (dom instanceof HTMLElement) {
59
+ return {
60
+ dom: dom,
61
+ contentDOM: contentDOM
62
+ };
63
+ }
64
+ return undefined;
65
+ }
66
+ }]);
67
+ }(_reactNodeView.default);
68
+ var bodiedSyncBlockNodeView = exports.bodiedSyncBlockNodeView = function bodiedSyncBlockNodeView(_ref) {
69
+ var pluginOptions = _ref.pluginOptions,
70
+ pmPluginFactoryParams = _ref.pmPluginFactoryParams,
71
+ api = _ref.api,
72
+ syncBlockStore = _ref.syncBlockStore;
73
+ return function (node, view, getPos) {
74
+ var portalProviderAPI = pmPluginFactoryParams.portalProviderAPI,
75
+ eventDispatcher = pmPluginFactoryParams.eventDispatcher;
76
+ return new BodiedSyncBlock({
77
+ api: api,
78
+ pluginOptions: pluginOptions,
79
+ node: node,
80
+ view: view,
81
+ getPos: getPos,
82
+ portalProviderAPI: portalProviderAPI,
83
+ eventDispatcher: eventDispatcher,
84
+ syncBlockStore: syncBlockStore
85
+ }).init();
86
+ };
87
+ };
@@ -14,24 +14,11 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
14
14
  var _react = _interopRequireDefault(require("react"));
15
15
  var _reactNodeView = _interopRequireDefault(require("@atlaskit/editor-common/react-node-view"));
16
16
  var _syncBlock = require("@atlaskit/editor-common/sync-block");
17
- var _state = require("@atlaskit/editor-prosemirror/state");
18
17
  var _editorSyncedBlockProvider = require("@atlaskit/editor-synced-block-provider");
19
- var _SyncBlockEditorWrapper = require("../ui/SyncBlockEditorWrapper");
20
18
  var _SyncBlockRendererWrapper = require("../ui/SyncBlockRendererWrapper");
21
19
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
22
20
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
23
21
  function _superPropGet(t, o, e, r) { var p = (0, _get2.default)((0, _getPrototypeOf2.default)(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
24
- var defaultSyncBlockEditorDocument = {
25
- version: 1,
26
- type: 'doc',
27
- content: [{
28
- type: 'paragraph',
29
- content: [{
30
- type: 'text',
31
- text: 'This is a source sync block. Edit me to update the content.'
32
- }]
33
- }]
34
- };
35
22
  var defaultSyncBlockRendererDocument = {
36
23
  version: 1,
37
24
  type: 'doc',
@@ -62,60 +49,12 @@ var SyncBlock = /*#__PURE__*/function (_ReactNodeView) {
62
49
  return domRef;
63
50
  }
64
51
  }, {
65
- key: "isSource",
66
- value: function isSource() {
67
- return this.syncBlockStore.isSourceBlock(this.node);
68
- }
69
- }, {
70
- key: "setInnerEditorView",
71
- value: function setInnerEditorView(editorView) {
72
- var _this$options;
73
- // set inner editor view
74
- this.syncBlockStore.setSyncBlockNestedEditorView(editorView);
75
- var nodes = [(0, _editorSyncedBlockProvider.convertSyncBlockPMNodeToSyncBlockData)(this.node, false)];
76
- (_this$options = this.options) === null || _this$options === void 0 || (_this$options = _this$options.dataProvider) === null || _this$options === void 0 || _this$options.fetchNodesData(nodes).then(function (data) {
77
- var _data$;
78
- var tr = editorView.state.tr;
79
- if (data && (_data$ = data[0]) !== null && _data$ !== void 0 && _data$.content) {
80
- var newNode = editorView.state.schema.nodeFromJSON(data[0].content);
81
- editorView.dispatch(tr.replaceWith(0, editorView.state.doc.nodeSize - 2, newNode));
82
- }
83
- });
84
- }
85
- }, {
86
- key: "renderEditor",
87
- value: function renderEditor() {
88
- var _this$options2,
52
+ key: "render",
53
+ value: function render() {
54
+ var _this$options,
89
55
  _this2 = this,
90
- _this$options3;
91
- var fabricEditorPopupScrollParent = this.view.dom.closest('.fabric-editor-popup-scroll-parent');
92
- if (!(fabricEditorPopupScrollParent instanceof HTMLElement)) {
93
- return null;
94
- }
95
- if (!((_this$options2 = this.options) !== null && _this$options2 !== void 0 && _this$options2.getSyncedBlockEditor)) {
96
- return null;
97
- }
98
- return /*#__PURE__*/_react.default.createElement(_SyncBlockEditorWrapper.SyncBlockEditorWrapper, {
99
- popupsBoundariesElement: fabricEditorPopupScrollParent,
100
- popupsMountPoint: fabricEditorPopupScrollParent,
101
- defaultDocument: defaultSyncBlockEditorDocument,
102
- useHandleContentChanges: function useHandleContentChanges(updatedDoc) {
103
- var _this2$options;
104
- return (0, _editorSyncedBlockProvider.useHandleContentChanges)(updatedDoc, _this2.isSource(), _this2.node, (_this2$options = _this2.options) === null || _this2$options === void 0 ? void 0 : _this2$options.dataProvider);
105
- },
106
- setInnerEditorView: function setInnerEditorView(editorView) {
107
- return _this2.setInnerEditorView(editorView);
108
- },
109
- getSyncedBlockEditor: (_this$options3 = this.options) === null || _this$options3 === void 0 ? void 0 : _this$options3.getSyncedBlockEditor
110
- });
111
- }
112
- }, {
113
- key: "renderRenderer",
114
- value: function renderRenderer() {
115
- var _this$options4,
116
- _this3 = this,
117
- _this$options5;
118
- if (!((_this$options4 = this.options) !== null && _this$options4 !== void 0 && _this$options4.getSyncedBlockRenderer)) {
56
+ _this$options2;
57
+ if (!((_this$options = this.options) !== null && _this$options !== void 0 && _this$options.getSyncedBlockRenderer)) {
119
58
  return null;
120
59
  }
121
60
 
@@ -123,40 +62,12 @@ var SyncBlock = /*#__PURE__*/function (_ReactNodeView) {
123
62
 
124
63
  return /*#__PURE__*/_react.default.createElement(_SyncBlockRendererWrapper.SyncBlockRendererWrapper, {
125
64
  useFetchDocNode: function useFetchDocNode() {
126
- var _this3$options;
127
- return (0, _editorSyncedBlockProvider.useFetchDocNode)(_this3.view, _this3.node, defaultSyncBlockRendererDocument, (_this3$options = _this3.options) === null || _this3$options === void 0 ? void 0 : _this3$options.dataProvider);
65
+ var _this2$options;
66
+ return (0, _editorSyncedBlockProvider.useFetchDocNode)(_this2.view, _this2.node, defaultSyncBlockRendererDocument, (_this2$options = _this2.options) === null || _this2$options === void 0 ? void 0 : _this2$options.dataProvider);
128
67
  },
129
- getSyncedBlockRenderer: (_this$options5 = this.options) === null || _this$options5 === void 0 ? void 0 : _this$options5.getSyncedBlockRenderer
68
+ getSyncedBlockRenderer: (_this$options2 = this.options) === null || _this$options2 === void 0 ? void 0 : _this$options2.getSyncedBlockRenderer
130
69
  });
131
70
  }
132
- }, {
133
- key: "render",
134
- value: function render() {
135
- if (this.isSource()) {
136
- return this.renderEditor();
137
- }
138
- return this.renderRenderer();
139
- }
140
- }, {
141
- key: "stopEvent",
142
- value: function stopEvent(event) {
143
- var _target$closest;
144
- var target = event.target;
145
- if (!target) {
146
- return false;
147
- }
148
- var isInNestedEditor = ((_target$closest = target.closest) === null || _target$closest === void 0 ? void 0 : _target$closest.call(target, "[data-testid=\"".concat(_SyncBlockEditorWrapper.SyncBlockEditorWrapperDataId, "\"]"))) != null;
149
- if (isInNestedEditor) {
150
- this.selectNode();
151
- return true;
152
- }
153
- return false;
154
- }
155
- }, {
156
- key: "selectNode",
157
- value: function selectNode() {
158
- this.selectSyncBlockNode(undefined);
159
- }
160
71
  }, {
161
72
  key: "destroy",
162
73
  value: function destroy() {
@@ -164,27 +75,9 @@ var SyncBlock = /*#__PURE__*/function (_ReactNodeView) {
164
75
  if (this.fetchIntervalId) {
165
76
  window.clearInterval(this.fetchIntervalId);
166
77
  }
167
- this.syncBlockStore.setSyncBlockNestedEditorView(undefined);
168
78
  (_this$unsubscribe = this.unsubscribe) === null || _this$unsubscribe === void 0 || _this$unsubscribe.call(this);
169
79
  _superPropGet(SyncBlock, "destroy", this, 3)([]);
170
80
  }
171
- }, {
172
- key: "selectSyncBlockNode",
173
- value: function selectSyncBlockNode(relativeSelectionPos) {
174
- var _this$reactComponentP;
175
- var getPos = typeof this.getPos === 'function' ? this.getPos() : 0;
176
- var selectionAPI = (_this$reactComponentP = this.reactComponentProps.api) === null || _this$reactComponentP === void 0 || (_this$reactComponentP = _this$reactComponentP.selection) === null || _this$reactComponentP === void 0 ? void 0 : _this$reactComponentP.actions;
177
- if (!selectionAPI) {
178
- return;
179
- }
180
- var tr = selectionAPI.selectNearNode({
181
- selectionRelativeToNode: relativeSelectionPos,
182
- selection: _state.NodeSelection.create(this.view.state.doc, getPos !== null && getPos !== void 0 ? getPos : 0)
183
- })(this.view.state);
184
- if (tr) {
185
- this.view.dispatch(tr);
186
- }
187
- }
188
81
  }]);
189
82
  }(_reactNodeView.default);
190
83
  var syncBlockNodeView = exports.syncBlockNodeView = function syncBlockNodeView(_ref) {
@@ -7,8 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.removeSyncedBlock = exports.editSyncedBlockSource = exports.createSyncedBlock = exports.copySyncedBlockReferenceToClipboard = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _analytics = require("@atlaskit/editor-common/analytics");
10
- var _utils = require("@atlaskit/editor-prosemirror/utils");
11
- var _utils2 = require("./utils/utils");
10
+ var _copyButton = require("@atlaskit/editor-common/copy-button");
11
+ var _utils = require("./utils/utils");
12
12
  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; }
13
13
  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; }
14
14
  var createSyncedBlock = exports.createSyncedBlock = function createSyncedBlock(_ref) {
@@ -16,66 +16,74 @@ var createSyncedBlock = exports.createSyncedBlock = function createSyncedBlock(_
16
16
  syncBlockStore = _ref.syncBlockStore,
17
17
  typeAheadInsert = _ref.typeAheadInsert;
18
18
  var _tr$doc$type$schema$n = tr.doc.type.schema.nodes,
19
- syncBlock = _tr$doc$type$schema$n.syncBlock,
20
- doc = _tr$doc$type$schema$n.doc;
21
- var syncBlockNode = syncBlockStore.createSyncBlockNode();
22
- var node = syncBlock.createAndFill(_objectSpread({}, syncBlockNode.attrs));
23
- if (!node) {
24
- return false;
25
- }
19
+ bodiedSyncBlock = _tr$doc$type$schema$n.bodiedSyncBlock,
20
+ paragraph = _tr$doc$type$schema$n.paragraph;
26
21
 
27
22
  // If the selection is empty, we want to insert the sync block on a new line
28
23
  if (tr.selection.empty) {
24
+ var storeSyncBlockNode = syncBlockStore.createSyncBlockNode();
25
+ var paragraphNode = paragraph.createAndFill({});
26
+ var newBodiedSyncBlockNode = bodiedSyncBlock.createAndFill(_objectSpread({}, storeSyncBlockNode.attrs), paragraphNode ? [paragraphNode] : []);
27
+ if (!newBodiedSyncBlockNode) {
28
+ return false;
29
+ }
29
30
  if (typeAheadInsert) {
30
- tr = typeAheadInsert(node);
31
+ tr = typeAheadInsert(newBodiedSyncBlockNode);
31
32
  } else {
32
- tr = tr.replaceSelectionWith(node).scrollIntoView();
33
+ tr = tr.replaceSelectionWith(newBodiedSyncBlockNode).scrollIntoView();
33
34
  }
34
35
  } else {
35
- var conversionInfo = (0, _utils2.canBeConvertedToSyncBlock)(tr.selection);
36
- if (conversionInfo) {
37
- tr.replaceWith(conversionInfo.from, conversionInfo.to, node).scrollIntoView();
38
- var innerNodeJson = doc.create({}, conversionInfo.contentToInclude).toJSON();
39
-
40
- // TMP solution to wait for the nested editor view to be set
41
- // this will be removed once we have a proper architecture settled
42
- setTimeout(function () {
43
- var editorView = syncBlockStore.getSyncBlockNestedEditorView();
44
- if (editorView) {
45
- var innerTr = editorView.state.tr;
46
- var innerNode = editorView.state.schema.nodeFromJSON(innerNodeJson);
47
- editorView.dispatch(innerTr.replaceWith(0, editorView.state.doc.nodeSize - 2, innerNode));
48
- }
49
- }, 1000);
36
+ var conversionInfo = (0, _utils.canBeConvertedToSyncBlock)(tr.selection);
37
+ if (!conversionInfo) {
38
+ // TODO: EDITOR-1665 - Raise an error analytics event
39
+ return false;
50
40
  } else {
51
- var _safeInsert;
52
- // still insert an empty sync block if conversion is not possible
53
- (_safeInsert = (0, _utils.safeInsert)(syncBlock.createAndFill(syncBlockNode.attrs))(tr)) === null || _safeInsert === void 0 || _safeInsert.scrollIntoView();
41
+ var _storeSyncBlockNode = syncBlockStore.createSyncBlockNode();
42
+ var _newBodiedSyncBlockNode = bodiedSyncBlock.createAndFill(_objectSpread({}, _storeSyncBlockNode.attrs), conversionInfo.contentToInclude);
43
+ if (!_newBodiedSyncBlockNode) {
44
+ return false;
45
+ }
46
+ tr.replaceWith(conversionInfo.from - 1, conversionInfo.to, _newBodiedSyncBlockNode).scrollIntoView();
54
47
  }
55
48
  }
56
49
  return tr;
57
50
  };
58
51
  var copySyncedBlockReferenceToClipboard = exports.copySyncedBlockReferenceToClipboard = function copySyncedBlockReferenceToClipboard(api) {
59
- return function (state, dispatch, _view) {
60
- if (!(api !== null && api !== void 0 && api.floatingToolbar) || !dispatch) {
52
+ return function (state, _dispatch, _view) {
53
+ if (!(api !== null && api !== void 0 && api.floatingToolbar)) {
61
54
  return false;
62
55
  }
63
- var syncBlock = state.schema.nodes.syncBlock,
64
- tr = state.tr;
65
- var newTr = api.floatingToolbar.commands.copyNode(syncBlock, _analytics.INPUT_METHOD.FLOATING_TB)({
66
- tr: tr
67
- });
68
- if (!newTr) {
56
+ var syncBlockFindResult = (0, _utils.findSyncBlockOrBodiedSyncBlock)(state);
57
+ if (!syncBlockFindResult) {
69
58
  return false;
70
59
  }
71
- dispatch(newTr);
60
+ var isBodiedSyncBlock = (0, _utils.isBodiedSyncBlockNode)(syncBlockFindResult.node, state.schema.nodes.bodiedSyncBlock);
61
+ var referenceSyncBlockNode = null;
62
+ if (isBodiedSyncBlock) {
63
+ var syncBlock = state.tr.doc.type.schema.nodes.syncBlock;
64
+
65
+ // create sync block reference node
66
+ referenceSyncBlockNode = syncBlock.createAndFill({
67
+ resourceId: syncBlockFindResult.node.attrs.resourceId
68
+ });
69
+ if (!referenceSyncBlockNode) {
70
+ return false;
71
+ }
72
+ } else {
73
+ referenceSyncBlockNode = syncBlockFindResult.node;
74
+ }
75
+ if (!referenceSyncBlockNode) {
76
+ return false;
77
+ }
78
+ var domNode = (0, _copyButton.toDOM)(referenceSyncBlockNode, state.tr.doc.type.schema);
79
+ (0, _copyButton.copyDomNode)(domNode, referenceSyncBlockNode.type, state.tr.selection);
72
80
  return true;
73
81
  };
74
82
  };
75
83
  var editSyncedBlockSource = exports.editSyncedBlockSource = function editSyncedBlockSource(syncBlockStore, api) {
76
84
  return function (state, dispatch, _view) {
77
85
  var _syncBlock$node;
78
- var syncBlock = (0, _utils2.findSyncBlock)(state);
86
+ var syncBlock = (0, _utils.findSyncBlock)(state);
79
87
  var resourceId = syncBlock === null || syncBlock === void 0 || (_syncBlock$node = syncBlock.node) === null || _syncBlock$node === void 0 || (_syncBlock$node = _syncBlock$node.attrs) === null || _syncBlock$node === void 0 ? void 0 : _syncBlock$node.resourceId;
80
88
  if (!resourceId) {
81
89
  return false;
@@ -106,7 +114,7 @@ var removeSyncedBlock = exports.removeSyncedBlock = function removeSyncedBlock(a
106
114
  from = _state$selection.$from.pos,
107
115
  to = _state$selection.$to.pos,
108
116
  tr = state.tr;
109
- var syncBlock = (0, _utils2.findSyncBlock)(state);
117
+ var syncBlock = (0, _utils.findSyncBlockOrBodiedSyncBlock)(state);
110
118
  if (!syncBlock) {
111
119
  return false;
112
120
  }
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.syncedBlockPluginKey = exports.createPlugin = void 0;
7
7
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
8
8
  var _state = require("@atlaskit/editor-prosemirror/state");
9
+ var _bodiedLazySyncedBlock = require("../nodeviews/bodiedLazySyncedBlock");
9
10
  var _lazySyncedBlock = require("../nodeviews/lazySyncedBlock");
10
11
  var _trackSyncBlocks2 = require("./utils/track-sync-blocks");
11
12
  var syncedBlockPluginKey = exports.syncedBlockPluginKey = new _state.PluginKey('syncedBlockPlugin');
@@ -34,6 +35,12 @@ var createPlugin = exports.createPlugin = function createPlugin(options, pmPlugi
34
35
  pmPluginFactoryParams: pmPluginFactoryParams,
35
36
  api: api,
36
37
  syncBlockStore: syncBlockStore
38
+ }),
39
+ bodiedSyncBlock: (0, _bodiedLazySyncedBlock.lazyBodiedSyncBlockView)({
40
+ pluginOptions: options,
41
+ pmPluginFactoryParams: pmPluginFactoryParams,
42
+ api: api,
43
+ syncBlockStore: syncBlockStore
37
44
  })
38
45
  }
39
46
  },
@@ -42,7 +49,6 @@ var createPlugin = exports.createPlugin = function createPlugin(options, pmPlugi
42
49
  return {
43
50
  destroy: function destroy() {
44
51
  syncBlockStore.setEditorView(undefined);
45
- syncBlockStore.setSyncBlockNestedEditorView(undefined);
46
52
  }
47
53
  };
48
54
  },
@@ -66,7 +72,7 @@ var createPlugin = exports.createPlugin = function createPlugin(options, pmPlugi
66
72
  }
67
73
  return true;
68
74
  },
69
- appendTransaction: function appendTransaction(trs, oldState, newState) {
75
+ appendTransaction: function appendTransaction(trs, _oldState, newState) {
70
76
  trs.filter(function (tr) {
71
77
  return tr.docChanged;
72
78
  }).forEach(function (tr) {
@@ -6,6 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.trackSyncBlocks = void 0;
7
7
  var _transform = require("@atlaskit/editor-prosemirror/transform");
8
8
  var trackSyncBlocks = exports.trackSyncBlocks = function trackSyncBlocks(storeManager, tr, state) {
9
+ // TODO: EDITOR-2430 - Disable tracking for now, it will be updated to handle the new bodied sync block
10
+ var dontTrack = true;
11
+ if (dontTrack) {
12
+ return {
13
+ removed: [],
14
+ added: []
15
+ };
16
+ }
9
17
  var sourceSyncBlockRemoved = {};
10
18
  var sourceSyncBlockAdded = {};
11
19
 
@@ -3,14 +3,24 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.findSyncBlock = exports.canBeConvertedToSyncBlock = void 0;
6
+ exports.isBodiedSyncBlockNode = exports.findSyncBlockOrBodiedSyncBlock = exports.findSyncBlock = exports.findBodiedSyncBlock = exports.canBeConvertedToSyncBlock = void 0;
7
7
  var _model = require("@atlaskit/editor-prosemirror/model");
8
8
  var _utils = require("@atlaskit/editor-prosemirror/utils");
9
9
  var _editorSyncedBlockProvider = require("@atlaskit/editor-synced-block-provider");
10
10
  var _editorTables = require("@atlaskit/editor-tables");
11
11
  var findSyncBlock = exports.findSyncBlock = function findSyncBlock(state, selection) {
12
12
  var syncBlock = state.schema.nodes.syncBlock;
13
- return (0, _utils.findSelectedNodeOfType)(syncBlock)(selection || state.selection) || (0, _utils.findParentNodeOfType)(syncBlock)(selection || state.selection);
13
+ return (0, _utils.findSelectedNodeOfType)(syncBlock)(selection || state.selection);
14
+ };
15
+ var findBodiedSyncBlock = exports.findBodiedSyncBlock = function findBodiedSyncBlock(state, selection) {
16
+ var bodiedSyncBlock = state.schema.nodes.bodiedSyncBlock;
17
+ return (0, _utils.findSelectedNodeOfType)(bodiedSyncBlock)(selection || state.selection) || (0, _utils.findParentNodeOfType)(bodiedSyncBlock)(selection || state.selection);
18
+ };
19
+ var findSyncBlockOrBodiedSyncBlock = exports.findSyncBlockOrBodiedSyncBlock = function findSyncBlockOrBodiedSyncBlock(state, selection) {
20
+ return findSyncBlock(state, selection) || findBodiedSyncBlock(state, selection);
21
+ };
22
+ var isBodiedSyncBlockNode = exports.isBodiedSyncBlockNode = function isBodiedSyncBlockNode(node, bodiedSyncBlock) {
23
+ return node.type === bodiedSyncBlock;
14
24
  };
15
25
  var canBeConvertedToSyncBlock = exports.canBeConvertedToSyncBlock = function canBeConvertedToSyncBlock(selection) {
16
26
  var from = selection.from;
@@ -27,6 +27,9 @@ var syncedBlockPlugin = exports.syncedBlockPlugin = function syncedBlockPlugin(_
27
27
  return [{
28
28
  name: 'syncBlock',
29
29
  node: _adfSchema.syncBlock
30
+ }, {
31
+ name: 'bodiedSyncBlock',
32
+ node: _adfSchema.bodiedSyncBlock
30
33
  }];
31
34
  },
32
35
  pmPlugins: function pmPlugins() {
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.BodiedSyncBlockWrapper = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _editorSyncedBlockProvider = require("@atlaskit/editor-synced-block-provider");
10
+ var _SyncBlockLabel = require("./SyncBlockLabel");
11
+ var BodiedSyncBlockWrapper = exports.BodiedSyncBlockWrapper = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
12
+ var node = _ref.node,
13
+ dataProvider = _ref.dataProvider;
14
+ // TODO: EDITOR-2429 - this should be debounced (either here or in the data provider) to avoid excessive API writes
15
+ var docJSON = {
16
+ version: 1,
17
+ type: 'doc',
18
+ content: node.content.toJSON()
19
+ };
20
+ (0, _editorSyncedBlockProvider.useHandleContentChanges)(docJSON, true, node, dataProvider);
21
+ return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_SyncBlockLabel.SyncBlockLabel, null), /*#__PURE__*/_react.default.createElement("div", {
22
+ "data-testid": "bodied-sync-block-wrapper",
23
+ ref: ref
24
+ }));
25
+ });
@@ -21,8 +21,21 @@ var CreateSyncedBlockDropdownItem = exports.CreateSyncedBlockDropdownItem = func
21
21
  return null;
22
22
  }
23
23
  var onClick = function onClick() {
24
- var _api$core;
25
- api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(api === null || api === void 0 ? void 0 : api.syncedBlock.commands.insertSyncedBlock());
24
+ var _api$core, _api$core2;
25
+ api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(function (_ref2) {
26
+ var _api$blockControls;
27
+ var tr = _ref2.tr;
28
+ api === null || api === void 0 || api.syncedBlock.commands.insertSyncedBlock()({
29
+ tr: tr
30
+ });
31
+ api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || (_api$blockControls = _api$blockControls.commands) === null || _api$blockControls === void 0 || _api$blockControls.toggleBlockMenu({
32
+ closeMenu: true
33
+ })({
34
+ tr: tr
35
+ });
36
+ return tr;
37
+ });
38
+ api === null || api === void 0 || (_api$core2 = api.core) === null || _api$core2 === void 0 || _api$core2.actions.focus();
26
39
  };
27
40
  return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
28
41
  elemBefore: /*#__PURE__*/_react.default.createElement(_editorToolbar.SyncBlocksIcon, {
@@ -8,15 +8,16 @@ exports.SyncBlockLabel = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  var _reactIntlNext = require("react-intl-next");
10
10
  var _messages = require("@atlaskit/editor-common/messages");
11
+ var _syncBlock = require("@atlaskit/editor-common/sync-block");
11
12
  var SyncBlockLabelDataId = 'sync-block-label';
12
13
  var SyncBlockLabelComponent = function SyncBlockLabelComponent() {
13
14
  var _useIntl = (0, _reactIntlNext.useIntl)(),
14
15
  formatMessage = _useIntl.formatMessage;
15
16
  return /*#__PURE__*/_react.default.createElement("div", {
16
- "data-testId": SyncBlockLabelDataId
17
+ "data-testid": SyncBlockLabelDataId
17
18
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
18
19
  ,
19
- className: "ak-editor-sync-block__label"
20
+ className: _syncBlock.SyncBlockLabelSharedCssClassName.labelClassName
20
21
  }, formatMessage(_messages.syncBlockMessages.syncedBlockLabel));
21
22
  };
22
23
  var SyncBlockLabel = exports.SyncBlockLabel = /*#__PURE__*/_react.default.memo(SyncBlockLabelComponent);
@@ -25,12 +25,14 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig(stat
25
25
  var _providerFactory = arguments.length > 3 ? arguments[3] : undefined;
26
26
  var api = arguments.length > 4 ? arguments[4] : undefined;
27
27
  var syncBlockStore = arguments.length > 5 ? arguments[5] : undefined;
28
- var syncBlockObject = (0, _utils2.findSyncBlock)(state);
28
+ var syncBlockObject = (0, _utils2.findSyncBlockOrBodiedSyncBlock)(state);
29
29
  if (!syncBlockObject) {
30
30
  return;
31
31
  }
32
+ var bodiedSyncBlock = state.schema.nodes.bodiedSyncBlock;
33
+ var isBodiedSyncBlock = (0, _utils2.isBodiedSyncBlockNode)(syncBlockObject.node, bodiedSyncBlock);
32
34
  var formatMessage = intl.formatMessage;
33
- var nodeType = state.schema.nodes.syncBlock;
35
+ var nodeType = syncBlockObject.node.type;
34
36
  var hoverDecoration = api === null || api === void 0 || (_api$decorations = api.decorations) === null || _api$decorations === void 0 ? void 0 : _api$decorations.actions.hoverDecoration;
35
37
  var hoverDecorationProps = function hoverDecorationProps(nodeType, className) {
36
38
  return {
@@ -53,7 +55,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig(stat
53
55
  }, hoverDecorationProps(nodeType, _consts.akEditorSelectedNodeClassName));
54
56
  items.push(copyButton);
55
57
  var disabled = !syncBlockStore.getSyncBlockURL(syncBlockObject.node.attrs.resourceId);
56
- if (!syncBlockStore.isSourceBlock(syncBlockObject.node)) {
58
+ if (!isBodiedSyncBlock) {
57
59
  var editSourceButton = _objectSpread({
58
60
  id: 'editor.syncedBlock.editSource',
59
61
  type: 'button',
@@ -0,0 +1,16 @@
1
+ import { withLazyLoading } from '@atlaskit/editor-common/lazy-node-view';
2
+ export const lazyBodiedSyncBlockView = props => {
3
+ return withLazyLoading({
4
+ nodeName: 'bodiedSyncBlock',
5
+ getNodeViewOptions: () => {},
6
+ loader: () => {
7
+ const result = import( /* webpackChunkName: "@atlaskit-internal_editor-plugin-bodied-synced-block-nodeview" */
8
+ './bodiedSyncedBlock').then(({
9
+ bodiedSyncBlockNodeView
10
+ }) => {
11
+ return bodiedSyncBlockNodeView(props);
12
+ });
13
+ return result;
14
+ }
15
+ });
16
+ };