@atlaskit/editor-plugin-table 7.6.2 → 7.6.3

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 (93) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/nodeviews/TableComponent.js +25 -11
  3. package/dist/cjs/nodeviews/TableComponentWithSharedState.js +87 -0
  4. package/dist/cjs/nodeviews/TableContainer.js +8 -4
  5. package/dist/cjs/nodeviews/TableResizer.js +4 -5
  6. package/dist/cjs/nodeviews/table.js +21 -1
  7. package/dist/cjs/plugin.js +24 -2
  8. package/dist/cjs/types.js +3 -0
  9. package/dist/cjs/ui/TableFloatingColumnControls/ColumnControls/index.js +6 -2
  10. package/dist/cjs/ui/TableFloatingColumnControls/index.js +5 -2
  11. package/dist/cjs/ui/TableFloatingControls/CornerControls/DragCornerControls.js +48 -1
  12. package/dist/cjs/ui/TableFloatingControls/CornerControls/index.js +6 -0
  13. package/dist/cjs/ui/TableFloatingControls/FloatingControlsWithSelection.js +47 -0
  14. package/dist/cjs/ui/TableFloatingControls/RowControls/ClassicControls.js +3 -2
  15. package/dist/cjs/ui/TableFloatingControls/index.js +25 -3
  16. package/dist/cjs/ui/common-styles.js +11 -6
  17. package/dist/es2019/nodeviews/TableComponent.js +27 -12
  18. package/dist/es2019/nodeviews/TableComponentWithSharedState.js +83 -0
  19. package/dist/es2019/nodeviews/TableContainer.js +8 -4
  20. package/dist/es2019/nodeviews/TableResizer.js +2 -4
  21. package/dist/es2019/nodeviews/table.js +21 -1
  22. package/dist/es2019/plugin.js +25 -3
  23. package/dist/es2019/types.js +3 -0
  24. package/dist/es2019/ui/TableFloatingColumnControls/ColumnControls/index.js +7 -2
  25. package/dist/es2019/ui/TableFloatingColumnControls/index.js +5 -2
  26. package/dist/es2019/ui/TableFloatingControls/CornerControls/DragCornerControls.js +55 -0
  27. package/dist/es2019/ui/TableFloatingControls/CornerControls/index.js +1 -1
  28. package/dist/es2019/ui/TableFloatingControls/FloatingControlsWithSelection.js +42 -0
  29. package/dist/es2019/ui/TableFloatingControls/RowControls/ClassicControls.js +3 -2
  30. package/dist/es2019/ui/TableFloatingControls/index.js +26 -4
  31. package/dist/es2019/ui/common-styles.js +589 -588
  32. package/dist/esm/nodeviews/TableComponent.js +25 -11
  33. package/dist/esm/nodeviews/TableComponentWithSharedState.js +80 -0
  34. package/dist/esm/nodeviews/TableContainer.js +8 -4
  35. package/dist/esm/nodeviews/TableResizer.js +4 -5
  36. package/dist/esm/nodeviews/table.js +21 -1
  37. package/dist/esm/plugin.js +25 -3
  38. package/dist/esm/types.js +3 -0
  39. package/dist/esm/ui/TableFloatingColumnControls/ColumnControls/index.js +6 -2
  40. package/dist/esm/ui/TableFloatingColumnControls/index.js +5 -2
  41. package/dist/esm/ui/TableFloatingControls/CornerControls/DragCornerControls.js +47 -0
  42. package/dist/esm/ui/TableFloatingControls/CornerControls/index.js +1 -1
  43. package/dist/esm/ui/TableFloatingControls/FloatingControlsWithSelection.js +40 -0
  44. package/dist/esm/ui/TableFloatingControls/RowControls/ClassicControls.js +3 -2
  45. package/dist/esm/ui/TableFloatingControls/index.js +26 -4
  46. package/dist/esm/ui/common-styles.js +10 -5
  47. package/dist/types/nodeviews/TableComponent.d.ts +7 -2
  48. package/dist/types/nodeviews/TableComponentWithSharedState.d.ts +27 -0
  49. package/dist/types/nodeviews/TableContainer.d.ts +4 -2
  50. package/dist/types/nodeviews/TableResizer.d.ts +2 -1
  51. package/dist/types/nodeviews/types.d.ts +1 -0
  52. package/dist/types/plugin.d.ts +11 -7
  53. package/dist/types/types.d.ts +8 -2
  54. package/dist/types/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +113 -1
  55. package/dist/types/ui/TableFloatingColumnControls/index.d.ts +3 -2
  56. package/dist/types/ui/TableFloatingControls/CornerControls/DragCornerControls.d.ts +223 -0
  57. package/dist/types/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  58. package/dist/types/ui/TableFloatingControls/FloatingControlsWithSelection.d.ts +20 -0
  59. package/dist/types/ui/TableFloatingControls/RowControls/ClassicControls.d.ts +2 -0
  60. package/dist/types/ui/TableFloatingControls/index.d.ts +113 -1
  61. package/dist/types/ui/common-styles.d.ts +3 -0
  62. package/dist/types-ts4.5/nodeviews/TableComponent.d.ts +7 -2
  63. package/dist/types-ts4.5/nodeviews/TableComponentWithSharedState.d.ts +27 -0
  64. package/dist/types-ts4.5/nodeviews/TableContainer.d.ts +4 -2
  65. package/dist/types-ts4.5/nodeviews/TableResizer.d.ts +2 -1
  66. package/dist/types-ts4.5/nodeviews/types.d.ts +1 -0
  67. package/dist/types-ts4.5/plugin.d.ts +11 -7
  68. package/dist/types-ts4.5/types.d.ts +8 -2
  69. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +144 -1
  70. package/dist/types-ts4.5/ui/TableFloatingColumnControls/index.d.ts +3 -2
  71. package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/DragCornerControls.d.ts +285 -0
  72. package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  73. package/dist/types-ts4.5/ui/TableFloatingControls/FloatingControlsWithSelection.d.ts +20 -0
  74. package/dist/types-ts4.5/ui/TableFloatingControls/RowControls/ClassicControls.d.ts +2 -0
  75. package/dist/types-ts4.5/ui/TableFloatingControls/index.d.ts +144 -1
  76. package/dist/types-ts4.5/ui/common-styles.d.ts +3 -0
  77. package/package.json +6 -3
  78. package/src/nodeviews/TableComponent.tsx +36 -7
  79. package/src/nodeviews/TableComponentWithSharedState.tsx +125 -0
  80. package/src/nodeviews/TableContainer.tsx +6 -0
  81. package/src/nodeviews/TableResizer.tsx +2 -1
  82. package/src/nodeviews/table.tsx +22 -1
  83. package/src/nodeviews/types.ts +1 -0
  84. package/src/plugin.tsx +46 -6
  85. package/src/types.ts +27 -2
  86. package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +10 -2
  87. package/src/ui/TableFloatingColumnControls/index.tsx +13 -1
  88. package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +58 -0
  89. package/src/ui/TableFloatingControls/CornerControls/index.tsx +4 -1
  90. package/src/ui/TableFloatingControls/FloatingControlsWithSelection.tsx +68 -0
  91. package/src/ui/TableFloatingControls/RowControls/ClassicControls.tsx +4 -1
  92. package/src/ui/TableFloatingControls/index.tsx +42 -8
  93. package/src/ui/common-styles.ts +611 -610
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/editor-plugin-table
2
2
 
3
+ ## 7.6.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#82198](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/82198) [`fb41831c5371`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/fb41831c5371) - Remove WithPluginState behind a feature flag and introduce basic gemini tests
8
+
3
9
  ## 7.6.2
4
10
 
5
11
  ### Patch Changes
@@ -505,9 +505,12 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
505
505
  options = _this$props10.options,
506
506
  isTableScalingEnabled = _this$props10.isTableScalingEnabled,
507
507
  getPos = _this$props10.getPos;
508
- var _getPluginState = (0, _pluginFactory.getPluginState)(view.state),
509
- isInDanger = _getPluginState.isInDanger;
508
+ var isInDanger = this.props.isInDanger;
510
509
  var table = (0, _utils2.findTable)(view.state.selection);
510
+ if (!(0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.use-shared-state-hook')) {
511
+ var pluginState = (0, _pluginFactory.getPluginState)(view.state);
512
+ isInDanger = pluginState.isInDanger;
513
+ }
511
514
  if (isTableScalingEnabled) {
512
515
  this.handleColgroupUpdates();
513
516
  }
@@ -609,16 +612,24 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
609
612
  isDragAndDropEnabled = _this$props11.isDragAndDropEnabled,
610
613
  getEditorFeatureFlags = _this$props11.getEditorFeatureFlags,
611
614
  isTableScalingEnabled = _this$props11.isTableScalingEnabled;
615
+ var _this$props12 = this.props,
616
+ isInDanger = _this$props12.isInDanger,
617
+ hoveredRows = _this$props12.hoveredRows,
618
+ hoveredCell = _this$props12.hoveredCell,
619
+ isTableHovered = _this$props12.isTableHovered,
620
+ isWholeTableInDanger = _this$props12.isWholeTableInDanger;
612
621
  var _this$state3 = this.state,
613
622
  showBeforeShadow = _this$state3.showBeforeShadow,
614
623
  showAfterShadow = _this$state3.showAfterShadow;
615
624
  var node = getNode();
616
- // doesn't work well with WithPluginState
617
- var _getPluginState2 = (0, _pluginFactory.getPluginState)(view.state),
618
- isInDanger = _getPluginState2.isInDanger,
619
- hoveredRows = _getPluginState2.hoveredRows,
620
- hoveredCell = _getPluginState2.hoveredCell,
621
- isTableHovered = _getPluginState2.isTableHovered;
625
+ if (!(0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.use-shared-state-hook')) {
626
+ var pluginState = (0, _pluginFactory.getPluginState)(view.state);
627
+ isInDanger = pluginState.isInDanger;
628
+ hoveredRows = pluginState.hoveredRows;
629
+ hoveredCell = pluginState.hoveredCell;
630
+ isTableHovered = pluginState.isTableHovered;
631
+ isWholeTableInDanger = pluginState.isWholeTableInDanger;
632
+ }
622
633
  var tableRef = this.table || undefined;
623
634
  var headerRow = tableRef ? tableRef.querySelector('tr[data-header-row]') : undefined;
624
635
  var hasHeaderRow = (0, _utils5.containsHeaderRow)(node);
@@ -643,7 +654,8 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
643
654
  selection: view.state.selection,
644
655
  headerRowHeight: headerRow ? headerRow.offsetHeight : undefined,
645
656
  stickyHeader: this.state.stickyHeader,
646
- tableWrapperWidth: this.state.tableWrapperWidth
657
+ tableWrapperWidth: this.state.tableWrapperWidth,
658
+ api: pluginInjectionApi
647
659
  });
648
660
  var tableContainerWidth = (0, _nodeWidth.getTableContainerWidth)(node);
649
661
  var colControls = isDragAndDropEnabled ? /*#__PURE__*/_react.default.createElement(_TableFloatingColumnControls.default, {
@@ -670,7 +682,8 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
670
682
  var _this4$wrapper;
671
683
  return ((_this4$wrapper = _this4.wrapper) === null || _this4$wrapper === void 0 ? void 0 : _this4$wrapper.scrollLeft) || 0;
672
684
  },
673
- tableWrapperHeight: this.state.tableWrapperHeight
685
+ tableWrapperHeight: this.state.tableWrapperHeight,
686
+ api: pluginInjectionApi
674
687
  }) : null;
675
688
  var shadowPadding = allowControls && tableActive ? -_editorSharedStyles.akEditorTableToolbarSize : _styles.tableMarginSides;
676
689
  var shadowStyle = (0, _memoizeOne.default)(function (visible) {
@@ -707,7 +720,8 @@ var TableComponent = /*#__PURE__*/function (_React$Component) {
707
720
  tableWrapperHeight: this.state.tableWrapperHeight,
708
721
  isTableResizingEnabled: options === null || options === void 0 ? void 0 : options.isTableResizingEnabled,
709
722
  isResizing: isResizing,
710
- isTableScalingEnabled: isTableScalingEnabled
723
+ isTableScalingEnabled: isTableScalingEnabled,
724
+ isWholeTableInDanger: isWholeTableInDanger
711
725
  }, /*#__PURE__*/_react.default.createElement("div", {
712
726
  className: _types.TableCssClassName.TABLE_STICKY_SENTINEL_TOP,
713
727
  "data-testid": "sticky-sentinel-top"
@@ -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.TableComponentWithSharedState = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _hooks = require("@atlaskit/editor-common/hooks");
10
+ var _editorTables = require("@atlaskit/editor-tables");
11
+ var _TableComponent = _interopRequireDefault(require("./TableComponent"));
12
+ /**
13
+ * Use useSharedPluginState to control re-renders from plugin dependencies
14
+ */
15
+ var TableComponentWithSharedState = exports.TableComponentWithSharedState = function TableComponentWithSharedState(_ref) {
16
+ var view = _ref.view,
17
+ options = _ref.options,
18
+ getNode = _ref.getNode,
19
+ dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
20
+ api = _ref.api,
21
+ getEditorFeatureFlags = _ref.getEditorFeatureFlags,
22
+ eventDispatcher = _ref.eventDispatcher,
23
+ allowColumnResizing = _ref.allowColumnResizing,
24
+ allowControls = _ref.allowControls,
25
+ getPos = _ref.getPos,
26
+ forwardRef = _ref.forwardRef;
27
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['width', 'table', 'media']),
28
+ widthState = _useSharedPluginState.widthState,
29
+ tableState = _useSharedPluginState.tableState,
30
+ mediaState = _useSharedPluginState.mediaState;
31
+ if (!tableState) {
32
+ return null;
33
+ }
34
+ var _ref2 = tableState,
35
+ isTableResizing = _ref2.isTableResizing,
36
+ isHeaderColumnEnabled = _ref2.isHeaderColumnEnabled,
37
+ isHeaderRowEnabled = _ref2.isHeaderRowEnabled,
38
+ ordering = _ref2.ordering,
39
+ isResizing = _ref2.isResizing,
40
+ isInDanger = _ref2.isInDanger,
41
+ hoveredCell = _ref2.hoveredCell,
42
+ hoveredRows = _ref2.hoveredRows,
43
+ isTableHovered = _ref2.isTableHovered,
44
+ isWholeTableInDanger = _ref2.isWholeTableInDanger;
45
+
46
+ /**
47
+ * ED-19810
48
+ * There is a getPos issue coming from this code. We need to apply this workaround for now and apply a patch
49
+ * directly to confluence since this bug is now in production.
50
+ */
51
+ var currentTablePos;
52
+ try {
53
+ currentTablePos = getPos ? getPos() : undefined;
54
+ } catch (e) {
55
+ currentTablePos = undefined;
56
+ }
57
+ var selectedTable = (0, _editorTables.findTable)(view.state.selection);
58
+ var tablePos = selectedTable && selectedTable.start - 1;
59
+ var tableActive = typeof currentTablePos === 'number' && typeof tablePos === 'number' && currentTablePos === tablePos && !isTableResizing;
60
+ return /*#__PURE__*/_react.default.createElement(_TableComponent.default, {
61
+ view: view,
62
+ allowColumnResizing: allowColumnResizing,
63
+ eventDispatcher: eventDispatcher,
64
+ getPos: getPos,
65
+ isMediaFullscreen: mediaState === null || mediaState === void 0 ? void 0 : mediaState.isFullscreen,
66
+ options: options,
67
+ allowControls: !!allowControls,
68
+ isHeaderRowEnabled: isHeaderRowEnabled,
69
+ isHeaderColumnEnabled: isHeaderColumnEnabled,
70
+ isDragAndDropEnabled: options === null || options === void 0 ? void 0 : options.isDragAndDropEnabled,
71
+ isTableScalingEnabled: options === null || options === void 0 ? void 0 : options.isTableScalingEnabled,
72
+ tableActive: tableActive,
73
+ ordering: ordering,
74
+ isResizing: isResizing,
75
+ getNode: getNode,
76
+ containerWidth: widthState,
77
+ contentDOM: forwardRef,
78
+ getEditorFeatureFlags: getEditorFeatureFlags,
79
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
80
+ pluginInjectionApi: api,
81
+ isInDanger: !!isInDanger,
82
+ hoveredRows: hoveredRows,
83
+ hoveredCell: hoveredCell,
84
+ isTableHovered: isTableHovered,
85
+ isWholeTableInDanger: isWholeTableInDanger
86
+ });
87
+ };
@@ -56,7 +56,8 @@ var ResizableTableContainer = exports.ResizableTableContainer = /*#__PURE__*/_re
56
56
  isResizing = _ref2.isResizing,
57
57
  pluginInjectionApi = _ref2.pluginInjectionApi,
58
58
  isTableScalingEnabled = _ref2.isTableScalingEnabled,
59
- tableWrapperHeight = _ref2.tableWrapperHeight;
59
+ tableWrapperHeight = _ref2.tableWrapperHeight,
60
+ isWholeTableInDanger = _ref2.isWholeTableInDanger;
60
61
  var containerRef = (0, _react.useRef)(null);
61
62
  var tableWidthRef = (0, _react.useRef)(_editorSharedStyles.akEditorDefaultLayoutWidth);
62
63
  var _useState = (0, _react.useState)(false),
@@ -135,7 +136,8 @@ var ResizableTableContainer = exports.ResizableTableContainer = /*#__PURE__*/_re
135
136
  displayGuideline: displayGuideline,
136
137
  attachAnalyticsEvent: attachAnalyticsEvent,
137
138
  displayGapCursor: displayGapCursor,
138
- isTableScalingEnabled: isTableScalingEnabled
139
+ isTableScalingEnabled: isTableScalingEnabled,
140
+ isWholeTableInDanger: isWholeTableInDanger
139
141
  };
140
142
  if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.resizing-table-height-improvement')) {
141
143
  tableResizerProps = _objectSpread(_objectSpread({}, tableResizerProps), {}, {
@@ -176,7 +178,8 @@ var TableContainer = exports.TableContainer = function TableContainer(_ref3) {
176
178
  tableWrapperHeight = _ref3.tableWrapperHeight,
177
179
  isResizing = _ref3.isResizing,
178
180
  pluginInjectionApi = _ref3.pluginInjectionApi,
179
- isTableScalingEnabled = _ref3.isTableScalingEnabled;
181
+ isTableScalingEnabled = _ref3.isTableScalingEnabled,
182
+ isWholeTableInDanger = _ref3.isWholeTableInDanger;
180
183
  if (isTableResizingEnabled && !isNested) {
181
184
  return /*#__PURE__*/_react.default.createElement(ResizableTableContainer, {
182
185
  className: className,
@@ -188,7 +191,8 @@ var TableContainer = exports.TableContainer = function TableContainer(_ref3) {
188
191
  tableWrapperHeight: tableWrapperHeight,
189
192
  isResizing: isResizing,
190
193
  pluginInjectionApi: pluginInjectionApi,
191
- isTableScalingEnabled: isTableScalingEnabled
194
+ isTableScalingEnabled: isTableScalingEnabled,
195
+ isWholeTableInDanger: isWholeTableInDanger
192
196
  }, children);
193
197
  }
194
198
  var tableWidth = isBreakoutEnabled ? (0, _styles.calcTableWidth)(node.attrs.layout, editorWidth) : 'inherit';
@@ -100,7 +100,8 @@ var TableResizer = exports.TableResizer = function TableResizer(_ref) {
100
100
  displayGuideline = _ref.displayGuideline,
101
101
  attachAnalyticsEvent = _ref.attachAnalyticsEvent,
102
102
  displayGapCursor = _ref.displayGapCursor,
103
- isTableScalingEnabled = _ref.isTableScalingEnabled;
103
+ isTableScalingEnabled = _ref.isTableScalingEnabled,
104
+ isWholeTableInDanger = _ref.isWholeTableInDanger;
104
105
  var currentGap = (0, _react.useRef)(0);
105
106
  // track resizing state - use ref over state to avoid re-render
106
107
  var isResizing = (0, _react.useRef)(false);
@@ -136,8 +137,6 @@ var TableResizer = exports.TableResizer = function TableResizer(_ref) {
136
137
  var isTableSelected = ((_findTable = (0, _utils2.findTable)((_editorView$state = editorView.state) === null || _editorView$state === void 0 ? void 0 : _editorView$state.selection)) === null || _findTable === void 0 ? void 0 : _findTable.pos) === getPos();
137
138
  var resizerMinWidth = getResizerMinWidth(node);
138
139
  var handleSize = getResizerHandleHeight(tableRef);
139
- var _getPluginState = (0, _pluginFactory.getPluginState)(editorView.state),
140
- isWholeTableInDanger = _getPluginState.isWholeTableInDanger;
141
140
  var _useMeasureFramerate = (0, _analytics2.useMeasureFramerate)(),
142
141
  startMeasure = _useMeasureFramerate.startMeasure,
143
142
  endMeasure = _useMeasureFramerate.endMeasure,
@@ -233,8 +232,8 @@ var TableResizer = exports.TableResizer = function TableResizer(_ref) {
233
232
  var state = editorView.state,
234
233
  dispatch = editorView.dispatch;
235
234
  var pos = getPos();
236
- var _getPluginState2 = (0, _pluginFactory.getPluginState)(editorView.state),
237
- widthToWidest = _getPluginState2.widthToWidest;
235
+ var _getPluginState = (0, _pluginFactory.getPluginState)(editorView.state),
236
+ widthToWidest = _getPluginState.widthToWidest;
238
237
  newWidth = widthToWidest ? _editorSharedStyles.akEditorFullWidthLayoutWidth : newWidth;
239
238
  var tr = state.tr.setMeta(_tableWidth.pluginKey, {
240
239
  resizing: false
@@ -22,6 +22,7 @@ var _withPluginState = require("@atlaskit/editor-common/with-plugin-state");
22
22
  var _model = require("@atlaskit/editor-prosemirror/model");
23
23
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
24
24
  var _tableMap = require("@atlaskit/editor-tables/table-map");
25
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
25
26
  var _createPluginConfig = require("../create-plugin-config");
26
27
  var _dragAndDrop = require("../pm-plugins/drag-and-drop");
27
28
  var _pluginFactory = require("../pm-plugins/plugin-factory");
@@ -31,6 +32,7 @@ var _utils = require("../pm-plugins/table-resizing/utils");
31
32
  var _tableWidth = require("../pm-plugins/table-width");
32
33
  var _utils2 = require("../utils");
33
34
  var _TableComponent = _interopRequireDefault(require("./TableComponent"));
35
+ var _TableComponentWithSharedState = require("./TableComponentWithSharedState");
34
36
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
35
37
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
36
38
  var tableAttributes = function tableAttributes(node) {
@@ -123,6 +125,22 @@ var TableView = exports.default = /*#__PURE__*/function (_ReactNodeView) {
123
125
  key: "render",
124
126
  value: function render(props, forwardRef) {
125
127
  var _this3 = this;
128
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.use-shared-state-hook')) {
129
+ return /*#__PURE__*/_react.default.createElement(_TableComponentWithSharedState.TableComponentWithSharedState, {
130
+ forwardRef: forwardRef,
131
+ getNode: this.getNode,
132
+ view: props.view,
133
+ options: props.options,
134
+ eventDispatcher: props.eventDispatcher,
135
+ api: props.pluginInjectionApi,
136
+ allowColumnResizing: props.allowColumnResizing,
137
+ allowControls: props.allowControls,
138
+ getPos: props.getPos,
139
+ getEditorFeatureFlags: props.getEditorFeatureFlags,
140
+ dispatchAnalyticsEvent: props.dispatchAnalyticsEvent
141
+ });
142
+ }
143
+
126
144
  // TODO: ED-15663
127
145
  // Please, do not copy or use this kind of code below
128
146
  // @ts-ignore
@@ -268,12 +286,14 @@ var createTableView = exports.createTableView = function createTableView(node, v
268
286
  isDragAndDropEnabled = _getPluginState2.isDragAndDropEnabled,
269
287
  isTableScalingEnabled = _getPluginState2.isTableScalingEnabled;
270
288
  var _getPluginConfig = (0, _createPluginConfig.pluginConfig)(pluginConfig),
271
- allowColumnResizing = _getPluginConfig.allowColumnResizing;
289
+ allowColumnResizing = _getPluginConfig.allowColumnResizing,
290
+ allowControls = _getPluginConfig.allowControls;
272
291
  var hasIntlContext = true;
273
292
  return new TableView({
274
293
  node: node,
275
294
  view: view,
276
295
  allowColumnResizing: allowColumnResizing,
296
+ allowControls: allowControls,
277
297
  portalProviderAPI: portalProviderAPI,
278
298
  eventDispatcher: eventDispatcher,
279
299
  getPos: getPos,
@@ -45,6 +45,9 @@ var _utils2 = require("./utils");
45
45
  var defaultGetEditorFeatureFlags = function defaultGetEditorFeatureFlags() {
46
46
  return {};
47
47
  };
48
+
49
+ // TODO: duplicating type instead of importing media plugin causing a circular dependency
50
+
48
51
  /**
49
52
  * Table plugin to be added to an `EditorPresetBuilder` and used with `ComposableEditor`
50
53
  * from `@atlaskit/editor-core`.
@@ -67,10 +70,29 @@ var tablesPlugin = function tablesPlugin(_ref) {
67
70
  name: 'table',
68
71
  // Use getSharedState to store fullWidthEnabled and wasFullWidthModeEnabled to guarantee access
69
72
  // to most up to date values - passing to createPluginState will not re-initialise the state
70
- getSharedState: function getSharedState() {
73
+ getSharedState: function getSharedState(editorState) {
74
+ if (!editorState) {
75
+ return undefined;
76
+ }
77
+ var tablePluginState = (0, _pluginFactory.getPluginState)(editorState);
78
+ var tableResizingPluginState = (0, _tableResizing.getPluginState)(editorState);
79
+ var tableWidthResizingPluginState = _tableWidth.pluginKey.getState(editorState);
71
80
  return {
72
81
  isFullWidthModeEnabled: !!(options !== null && options !== void 0 && options.fullWidthEnabled),
73
- wasFullWidthModeEnabled: !!(options !== null && options !== void 0 && options.wasFullWidthEnabled)
82
+ wasFullWidthModeEnabled: !!(options !== null && options !== void 0 && options.wasFullWidthEnabled),
83
+ isHeaderRowEnabled: tablePluginState.isHeaderRowEnabled,
84
+ isHeaderColumnEnabled: tablePluginState.isHeaderColumnEnabled,
85
+ ordering: tablePluginState.ordering,
86
+ isResizing: !!(tableResizingPluginState !== null && tableResizingPluginState !== void 0 && tableResizingPluginState.dragging || tableWidthResizingPluginState !== null && tableWidthResizingPluginState !== void 0 && tableWidthResizingPluginState.resizing),
87
+ isTableResizing: tableWidthResizingPluginState === null || tableWidthResizingPluginState === void 0 ? void 0 : tableWidthResizingPluginState.resizing,
88
+ isInDanger: tablePluginState.isInDanger,
89
+ hoveredRows: tablePluginState.hoveredRows,
90
+ hoveredCell: tablePluginState.hoveredCell,
91
+ isTableHovered: tablePluginState.isTableHovered,
92
+ isWholeTableInDanger: tablePluginState.isWholeTableInDanger,
93
+ // IMPORTANT: Need to continue to pass tableNode to control re-renders
94
+ // TableComponent listens for node attribute changes to update colgroups
95
+ tableNode: tablePluginState.tableNode
74
96
  };
75
97
  },
76
98
  actions: {
package/dist/cjs/types.js CHANGED
@@ -16,6 +16,9 @@ var RESIZE_HANDLE_AREA_DECORATION_GAP = exports.RESIZE_HANDLE_AREA_DECORATION_GA
16
16
  * @deprecated {@link https://hello.atlassian.net/browse/ENGHEALTH-6877 Internal documentation for deprecation (no external access)}
17
17
  **/
18
18
 
19
+ // override getPluginState but do not expose publicly as this type is experimental and will change
20
+ // in the future
21
+
19
22
  /*
20
23
  * This type represents the start and end from a cell in a column,
21
24
  * for example, on this table the cell C1 will have
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = exports.ColumnControls = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _hooks = require("@atlaskit/editor-common/hooks");
9
10
  var _styles = require("@atlaskit/editor-common/styles");
10
11
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
11
12
  var _editorTables = require("@atlaskit/editor-tables");
@@ -45,8 +46,11 @@ var ColumnControls = exports.ColumnControls = function ColumnControls(_ref) {
45
46
  tableContainerWidth = _ref.tableContainerWidth,
46
47
  isNumberColumnEnabled = _ref.isNumberColumnEnabled,
47
48
  isDragging = _ref.isDragging,
48
- getScrollOffset = _ref.getScrollOffset;
49
+ getScrollOffset = _ref.getScrollOffset,
50
+ api = _ref.api;
49
51
  var columnControlsRef = (0, _react.useRef)(null);
52
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['selection']),
53
+ selectionState = _useSharedPluginState.selectionState;
50
54
  var widths = (_colWidths$map$join = colWidths === null || colWidths === void 0 ? void 0 : colWidths.map(function (width) {
51
55
  return (
52
56
  // when there is sticky header, a `margin-right: -1px` applied to `tr.sticky th` so it causes colWidths to be 1px wider
@@ -57,7 +61,7 @@ var ColumnControls = exports.ColumnControls = function ColumnControls(_ref) {
57
61
  // TODO: reusing getRowsParams here because it's generic enough to work for columns -> rename
58
62
  var columnParams = (0, _utils2.getRowsParams)(colWidths !== null && colWidths !== void 0 ? colWidths : []);
59
63
  var colIndex = hoveredCell === null || hoveredCell === void 0 ? void 0 : hoveredCell.colIndex;
60
- var selectedColIndexes = getSelectedColumns(editorView.state.selection);
64
+ var selectedColIndexes = getSelectedColumns((selectionState === null || selectionState === void 0 ? void 0 : selectionState.selection) || editorView.state.selection);
61
65
  var firstRow = tableRef.querySelector('tr');
62
66
  var hasHeaderRow = firstRow ? firstRow.getAttribute('data-header-row') : false;
63
67
  var marginTop = hasHeaderRow && stickyTop !== undefined ? (_rowHeights$ = rowHeights === null || rowHeights === void 0 ? void 0 : rowHeights[0]) !== null && _rowHeights$ !== void 0 ? _rowHeights$ : 0 : 0;
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.default = exports.TableFloatingColumnControls = void 0;
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
12
  var _adapter = require("@atlaskit/pragmatic-drag-and-drop/element/adapter");
12
13
  var _types = require("../../types");
13
14
  var _utils = require("../../utils");
@@ -30,7 +31,8 @@ var TableFloatingColumnControls = exports.TableFloatingColumnControls = function
30
31
  tableContainerWidth = _ref.tableContainerWidth,
31
32
  isNumberColumnEnabled = _ref.isNumberColumnEnabled,
32
33
  getScrollOffset = _ref.getScrollOffset,
33
- tableWrapperHeight = _ref.tableWrapperHeight;
34
+ tableWrapperHeight = _ref.tableWrapperHeight,
35
+ api = _ref.api;
34
36
  var _useState = (0, _react.useState)(false),
35
37
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
36
38
  isDragging = _useState2[0],
@@ -97,7 +99,8 @@ var TableFloatingColumnControls = exports.TableFloatingColumnControls = function
97
99
  tableContainerWidth: tableContainerWidth,
98
100
  isNumberColumnEnabled: isNumberColumnEnabled,
99
101
  isDragging: isDragging,
100
- getScrollOffset: getScrollOffset
102
+ getScrollOffset: getScrollOffset,
103
+ api: (0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.use-shared-state-hook') ? api : undefined
101
104
  }), isDragging && /*#__PURE__*/_react.default.createElement(_ColumnDropTargets.ColumnDropTargets, {
102
105
  tableRef: tableRef,
103
106
  isHeaderSticky: (stickyHeader === null || stickyHeader === void 0 ? void 0 : stickyHeader.sticky) && hasHeaderRow,
@@ -5,10 +5,11 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.DragCornerControls = void 0;
8
+ exports.DragCornerControlsWithSelection = exports.DragCornerControls = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _classnames = _interopRequireDefault(require("classnames"));
11
11
  var _reactIntlNext = require("react-intl-next");
12
+ var _hooks = require("@atlaskit/editor-common/hooks");
12
13
  var _messages = require("@atlaskit/editor-common/messages");
13
14
  var _utils = require("@atlaskit/editor-tables/utils");
14
15
  var _commands = require("../../../commands");
@@ -55,4 +56,50 @@ var DragCornerControlsComponent = function DragCornerControlsComponent(_ref) {
55
56
  className: _types.TableCssClassName.DRAG_CORNER_BUTTON_INNER
56
57
  }));
57
58
  };
59
+ var DragCornerControlsComponentWithSelection = function DragCornerControlsComponentWithSelection(_ref2) {
60
+ var editorView = _ref2.editorView,
61
+ isInDanger = _ref2.isInDanger,
62
+ isResizing = _ref2.isResizing,
63
+ formatMessage = _ref2.intl.formatMessage,
64
+ api = _ref2.api;
65
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['selection']),
66
+ selectionState = _useSharedPluginState.selectionState;
67
+ var handleOnClick = function handleOnClick() {
68
+ var state = editorView.state,
69
+ dispatch = editorView.dispatch;
70
+ dispatch((0, _utils.selectTable)(state.tr).setMeta('addToHistory', false));
71
+ };
72
+ var handleMouseOut = function handleMouseOut() {
73
+ var state = editorView.state,
74
+ dispatch = editorView.dispatch;
75
+ (0, _commands.clearHoverSelection)()(state, dispatch);
76
+ };
77
+ var isActive = (0, _react.useMemo)(function () {
78
+ if (!(selectionState !== null && selectionState !== void 0 && selectionState.selection)) {
79
+ return;
80
+ }
81
+ var table = (0, _utils.findTable)(selectionState.selection);
82
+ if (!table) {
83
+ return false;
84
+ }
85
+ return (0, _utils.isTableSelected)(selectionState.selection);
86
+ }, [selectionState]);
87
+ if (isResizing) {
88
+ return null;
89
+ }
90
+ return /*#__PURE__*/_react.default.createElement("button", {
91
+ className: (0, _classnames.default)(_types.TableCssClassName.DRAG_CORNER_BUTTON, {
92
+ active: isActive,
93
+ danger: isActive && isInDanger
94
+ }),
95
+ "aria-label": formatMessage(_messages.tableMessages.cornerControl),
96
+ type: "button",
97
+ onClick: handleOnClick,
98
+ onMouseOut: handleMouseOut,
99
+ contentEditable: false
100
+ }, /*#__PURE__*/_react.default.createElement("div", {
101
+ className: _types.TableCssClassName.DRAG_CORNER_BUTTON_INNER
102
+ }));
103
+ };
104
+ var DragCornerControlsWithSelection = exports.DragCornerControlsWithSelection = (0, _reactIntlNext.injectIntl)(DragCornerControlsComponentWithSelection);
58
105
  var DragCornerControls = exports.DragCornerControls = (0, _reactIntlNext.injectIntl)(DragCornerControlsComponent);
@@ -15,5 +15,11 @@ Object.defineProperty(exports, "DragCornerControls", {
15
15
  return _DragCornerControls.DragCornerControls;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "DragCornerControlsWithSelection", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _DragCornerControls.DragCornerControlsWithSelection;
22
+ }
23
+ });
18
24
  var _ClassicCornerControls = require("./ClassicCornerControls");
19
25
  var _DragCornerControls = require("./DragCornerControls");
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.FloatingControlsWithSelection = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _hooks = require("@atlaskit/editor-common/hooks");
10
+ var _CornerControls = require("./CornerControls");
11
+ var _RowControls = require("./RowControls");
12
+ var FloatingControlsWithSelection = exports.FloatingControlsWithSelection = function FloatingControlsWithSelection(_ref) {
13
+ var editorView = _ref.editorView,
14
+ tableRef = _ref.tableRef,
15
+ isInDanger = _ref.isInDanger,
16
+ isResizing = _ref.isResizing,
17
+ isHeaderRowEnabled = _ref.isHeaderRowEnabled,
18
+ isHeaderColumnEnabled = _ref.isHeaderColumnEnabled,
19
+ hoveredRows = _ref.hoveredRows,
20
+ stickyTop = _ref.stickyTop,
21
+ hoverRows = _ref.hoverRows,
22
+ selectRow = _ref.selectRow,
23
+ tableActive = _ref.tableActive,
24
+ api = _ref.api;
25
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['selection']),
26
+ selectionState = _useSharedPluginState.selectionState;
27
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CornerControls.CornerControls, {
28
+ editorView: editorView,
29
+ tableRef: tableRef,
30
+ isInDanger: isInDanger,
31
+ isResizing: isResizing,
32
+ isHeaderRowEnabled: isHeaderRowEnabled,
33
+ isHeaderColumnEnabled: isHeaderColumnEnabled,
34
+ hoveredRows: hoveredRows,
35
+ stickyTop: tableActive ? stickyTop : undefined
36
+ }), /*#__PURE__*/_react.default.createElement(_RowControls.RowControls, {
37
+ selection: selectionState === null || selectionState === void 0 ? void 0 : selectionState.selection,
38
+ editorView: editorView,
39
+ tableRef: tableRef,
40
+ hoverRows: hoverRows,
41
+ hoveredRows: hoveredRows,
42
+ isInDanger: isInDanger,
43
+ isResizing: isResizing,
44
+ selectRow: selectRow,
45
+ stickyTop: tableActive ? stickyTop : undefined
46
+ }));
47
+ };
@@ -52,7 +52,8 @@ var RowControlsComponent = /*#__PURE__*/function (_Component) {
52
52
  hoveredRows = _this$props.hoveredRows,
53
53
  isInDanger = _this$props.isInDanger,
54
54
  isResizing = _this$props.isResizing,
55
- formatMessage = _this$props.intl.formatMessage;
55
+ formatMessage = _this$props.intl.formatMessage,
56
+ selectionState = _this$props.selection;
56
57
  if (!tableRef) {
57
58
  return null;
58
59
  }
@@ -76,7 +77,7 @@ var RowControlsComponent = /*#__PURE__*/function (_Component) {
76
77
  }
77
78
  var thisRowSticky = _this2.props.stickyTop !== undefined && index === 0 && hasHeaderRow;
78
79
  return /*#__PURE__*/_react.default.createElement("div", {
79
- className: "".concat(_types.TableCssClassName.ROW_CONTROLS_BUTTON_WRAP, " ").concat((0, _utils.getRowClassNames)(startIndex, selection, hoveredRows, isInDanger, isResizing), " ").concat(thisRowSticky ? 'sticky' : ''),
80
+ className: "".concat(_types.TableCssClassName.ROW_CONTROLS_BUTTON_WRAP, " ").concat((0, _utils.getRowClassNames)(startIndex, selectionState || selection, hoveredRows, isInDanger, isResizing), " ").concat(thisRowSticky ? 'sticky' : ''),
80
81
  key: startIndex,
81
82
  style: {
82
83
  height: height,
@@ -8,9 +8,11 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.default = exports.TableFloatingControls = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _utils = require("@atlaskit/editor-common/utils");
11
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
12
  var _commands = require("../../commands");
12
13
  var _types = require("../../types");
13
14
  var _CornerControls = require("./CornerControls");
15
+ var _FloatingControlsWithSelection = require("./FloatingControlsWithSelection");
14
16
  var _NumberColumn = _interopRequireDefault(require("./NumberColumn"));
15
17
  var _RowControls = require("./RowControls");
16
18
  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); }
@@ -31,7 +33,8 @@ var TableFloatingControls = exports.TableFloatingControls = function TableFloati
31
33
  isDragAndDropEnabled = _ref.isDragAndDropEnabled,
32
34
  hoveredCell = _ref.hoveredCell,
33
35
  isTableHovered = _ref.isTableHovered,
34
- tableWrapperWidth = _ref.tableWrapperWidth;
36
+ tableWrapperWidth = _ref.tableWrapperWidth,
37
+ api = _ref.api;
35
38
  var _selectRow = (0, _react.useCallback)(function (row, expand) {
36
39
  var state = editorView.state,
37
40
  dispatch = editorView.dispatch;
@@ -92,7 +95,13 @@ var TableFloatingControls = exports.TableFloatingControls = function TableFloati
92
95
  updateCellHoverLocation: updateCellHoverLocation,
93
96
  stickyTop: stickyTop,
94
97
  isDragAndDropEnabled: isDragAndDropEnabled
95
- }) : null, tableActive && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isDragAndDropEnabled ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CornerControls.DragCornerControls, {
98
+ }) : null, tableActive && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isDragAndDropEnabled ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.use-shared-state-hook') ? /*#__PURE__*/_react.default.createElement(_CornerControls.DragCornerControlsWithSelection, {
99
+ editorView: editorView,
100
+ tableRef: tableRef,
101
+ isInDanger: isInDanger,
102
+ isResizing: isResizing,
103
+ api: api
104
+ }) : /*#__PURE__*/_react.default.createElement(_CornerControls.DragCornerControls, {
96
105
  editorView: editorView,
97
106
  tableRef: tableRef,
98
107
  isInDanger: isInDanger,
@@ -111,7 +120,20 @@ var TableFloatingControls = exports.TableFloatingControls = function TableFloati
111
120
  selectRow: _selectRow,
112
121
  selectRows: _selectRows,
113
122
  updateCellHoverLocation: updateCellHoverLocation
114
- })) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CornerControls.CornerControls, {
123
+ })) : (0, _platformFeatureFlags.getBooleanFF)('platform.editor.table.use-shared-state-hook') ? /*#__PURE__*/_react.default.createElement(_FloatingControlsWithSelection.FloatingControlsWithSelection, {
124
+ editorView: editorView,
125
+ tableRef: tableRef,
126
+ isInDanger: isInDanger,
127
+ isResizing: isResizing,
128
+ isHeaderRowEnabled: isHeaderRowEnabled,
129
+ isHeaderColumnEnabled: isHeaderColumnEnabled,
130
+ hoveredRows: hoveredRows,
131
+ stickyTop: tableActive ? stickyTop : undefined,
132
+ tableActive: tableActive,
133
+ hoverRows: _hoverRows,
134
+ selectRow: _selectRow,
135
+ api: api
136
+ }) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CornerControls.CornerControls, {
115
137
  editorView: editorView,
116
138
  tableRef: tableRef,
117
139
  isInDanger: isInDanger,