@atlaskit/renderer 151.0.2 → 151.0.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.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/react/nodes/table/cached-cell-edges.js +52 -0
- package/dist/cjs/react/nodes/table.js +15 -0
- package/dist/cjs/ui/Renderer/index.js +1 -1
- package/dist/es2019/react/nodes/table/cached-cell-edges.js +27 -0
- package/dist/es2019/react/nodes/table.js +15 -0
- package/dist/es2019/ui/Renderer/index.js +1 -1
- package/dist/esm/react/nodes/table/cached-cell-edges.js +45 -0
- package/dist/esm/react/nodes/table.js +15 -0
- package/dist/esm/ui/Renderer/index.js +1 -1
- package/dist/types/react/nodes/table/cached-cell-edges.d.ts +8 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/renderer
|
|
2
2
|
|
|
3
|
+
## 151.0.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`72696d778e3ae`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/72696d778e3ae) -
|
|
8
|
+
Reduce renderer table cell cloning and map active cell highlights through document changes behind
|
|
9
|
+
platform_editor_table_q4_perf_patch.
|
|
10
|
+
|
|
11
|
+
Only evaluate the performance patch when platform_editor_table_q4_loveability is enabled.
|
|
12
|
+
|
|
13
|
+
- Updated dependencies
|
|
14
|
+
|
|
3
15
|
## 151.0.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.withTableCellEdgeProps = exports.getCachedTableEdges = exports.cacheTableEdges = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
11
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
12
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
13
|
+
// The table node includes the number-column setting. Cache only its edge data.
|
|
14
|
+
var edgeCache = new WeakMap();
|
|
15
|
+
var noEdges = {
|
|
16
|
+
reachesTop: false,
|
|
17
|
+
reachesBottom: false,
|
|
18
|
+
reachesLeft: false,
|
|
19
|
+
reachesRight: false
|
|
20
|
+
};
|
|
21
|
+
var getCachedTableEdges = exports.getCachedTableEdges = function getCachedTableEdges(node) {
|
|
22
|
+
return edgeCache.get(node);
|
|
23
|
+
};
|
|
24
|
+
var cacheTableEdges = exports.cacheTableEdges = function cacheTableEdges(node, edges) {
|
|
25
|
+
// The existing geometry builder provides every cell; retain only the perimeter.
|
|
26
|
+
var _iterator = _createForOfIteratorHelper(edges),
|
|
27
|
+
_step;
|
|
28
|
+
try {
|
|
29
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
30
|
+
var _step$value = (0, _slicedToArray2.default)(_step.value, 2),
|
|
31
|
+
offset = _step$value[0],
|
|
32
|
+
props = _step$value[1];
|
|
33
|
+
if (!props.reachesTop && !props.reachesBottom && !props.reachesLeft && !props.reachesRight) {
|
|
34
|
+
edges.delete(offset);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
} catch (err) {
|
|
38
|
+
_iterator.e(err);
|
|
39
|
+
} finally {
|
|
40
|
+
_iterator.f();
|
|
41
|
+
}
|
|
42
|
+
edgeCache.set(node, edges);
|
|
43
|
+
};
|
|
44
|
+
var withTableCellEdgeProps = exports.withTableCellEdgeProps = function withTableCellEdgeProps(element) {
|
|
45
|
+
var edges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noEdges;
|
|
46
|
+
var current = element.props;
|
|
47
|
+
if (Boolean(current.reachesTop) === edges.reachesTop && Boolean(current.reachesBottom) === edges.reachesBottom && Boolean(current.reachesLeft) === edges.reachesLeft && Boolean(current.reachesRight) === edges.reachesRight) {
|
|
48
|
+
return element;
|
|
49
|
+
}
|
|
50
|
+
// Also clears stale edges when a previously decorated element becomes an interior cell.
|
|
51
|
+
return /*#__PURE__*/_react.default.cloneElement(element, edges);
|
|
52
|
+
};
|
|
@@ -24,6 +24,7 @@ var _utils = require("@atlaskit/editor-common/utils");
|
|
|
24
24
|
var _compareNodes = require("@atlaskit/editor-common/utils/compareNodes");
|
|
25
25
|
var _compose = require("@atlaskit/editor-common/utils/compose");
|
|
26
26
|
var _constants = require("@atlaskit/editor-shared-styles/constants");
|
|
27
|
+
var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
|
|
27
28
|
var _fg = require("@atlaskit/platform-feature-flags/fg");
|
|
28
29
|
var _editorExperiment = require("@atlaskit/tmp-editor-statsig/editor-experiment");
|
|
29
30
|
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
@@ -32,6 +33,7 @@ var _rendererContext = require("../../renderer-context");
|
|
|
32
33
|
var _style = require("../../ui/Renderer/style");
|
|
33
34
|
var _SmartCardStorage = require("../../ui/SmartCardStorage");
|
|
34
35
|
var _appearance = require("../utils/appearance");
|
|
36
|
+
var _cachedCellEdges = require("./table/cached-cell-edges");
|
|
35
37
|
var _contentMode2 = require("./table/content-mode");
|
|
36
38
|
var _sticky = require("./table/sticky");
|
|
37
39
|
var _table2 = require("./table/table");
|
|
@@ -796,6 +798,12 @@ var TableContainer = exports.TableContainer = /*#__PURE__*/function (_React$Comp
|
|
|
796
798
|
}]);
|
|
797
799
|
}(_react.default.Component);
|
|
798
800
|
var getCellEdgePropsByCellOffset = function getCellEdgePropsByCellOffset(tableNode, isNumberColumnEnabled) {
|
|
801
|
+
// The serializer uses the node attribute. Other callers can supply a different render prop.
|
|
802
|
+
var useCachedEdges = (0, _expValEquals.expValEquals)('platform_editor_table_q4_loveability', 'isEnabled', true) && (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_table_q4_perf_patch') && Boolean(isNumberColumnEnabled) === Boolean(tableNode.attrs.isNumberColumnEnabled);
|
|
803
|
+
var cached = useCachedEdges ? (0, _cachedCellEdges.getCachedTableEdges)(tableNode) : undefined;
|
|
804
|
+
if (cached) {
|
|
805
|
+
return cached;
|
|
806
|
+
}
|
|
799
807
|
var cellEdgePropsByCellOffset = new Map();
|
|
800
808
|
var cellRightByCellOffset = new Map();
|
|
801
809
|
var occupiedGrid = [];
|
|
@@ -843,6 +851,9 @@ var getCellEdgePropsByCellOffset = function getCellEdgePropsByCellOffset(tableNo
|
|
|
843
851
|
edgeProps.reachesRight = cellRight >= tableWidth;
|
|
844
852
|
}
|
|
845
853
|
});
|
|
854
|
+
if (useCachedEdges) {
|
|
855
|
+
(0, _cachedCellEdges.cacheTableEdges)(tableNode, cellEdgePropsByCellOffset);
|
|
856
|
+
}
|
|
846
857
|
return cellEdgePropsByCellOffset;
|
|
847
858
|
};
|
|
848
859
|
var isRenderedTableCell = function isRenderedTableCell(element) {
|
|
@@ -851,6 +862,7 @@ var isRenderedTableCell = function isRenderedTableCell(element) {
|
|
|
851
862
|
return nodeType === 'tableCell' || nodeType === 'tableHeader' || element.type === _tableCell.TableCell || element.type === _tableCell.TableHeader;
|
|
852
863
|
};
|
|
853
864
|
var addTableCellEdgePropsThroughWrappers = function addTableCellEdgePropsThroughWrappers(rows, tableNode, isNumberColumnEnabled) {
|
|
865
|
+
var useCachedEdges = (0, _expValEquals.expValEquals)('platform_editor_table_q4_loveability', 'isEnabled', true) && (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_table_q4_perf_patch');
|
|
854
866
|
try {
|
|
855
867
|
if (!tableNode) {
|
|
856
868
|
return rows;
|
|
@@ -867,6 +879,9 @@ var addTableCellEdgePropsThroughWrappers = function addTableCellEdgePropsThrough
|
|
|
867
879
|
var edgeProps = cellEdgePropsByCellOffset.get(cellOffset);
|
|
868
880
|
cellIndex += 1;
|
|
869
881
|
cellOffset += cellNode.nodeSize;
|
|
882
|
+
if (useCachedEdges) {
|
|
883
|
+
return (0, _cachedCellEdges.withTableCellEdgeProps)(element, edgeProps);
|
|
884
|
+
}
|
|
870
885
|
return edgeProps ? /*#__PURE__*/_react.default.cloneElement(element, edgeProps) : element;
|
|
871
886
|
}
|
|
872
887
|
var _ref5 = element.props,
|
|
@@ -79,7 +79,7 @@ var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
|
79
79
|
var TABLE_INFO_TIMEOUT = 10000;
|
|
80
80
|
var RENDER_EVENT_SAMPLE_RATE = 0.1;
|
|
81
81
|
var packageName = "@atlaskit/renderer";
|
|
82
|
-
var packageVersion = "151.0.
|
|
82
|
+
var packageVersion = "151.0.2";
|
|
83
83
|
var setAsQueryContainerStyles = (0, _react2.css)({
|
|
84
84
|
containerName: 'ak-renderer-wrapper',
|
|
85
85
|
containerType: 'inline-size'
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
// The table node includes the number-column setting. Cache only its edge data.
|
|
3
|
+
const edgeCache = new WeakMap();
|
|
4
|
+
const noEdges = {
|
|
5
|
+
reachesTop: false,
|
|
6
|
+
reachesBottom: false,
|
|
7
|
+
reachesLeft: false,
|
|
8
|
+
reachesRight: false
|
|
9
|
+
};
|
|
10
|
+
export const getCachedTableEdges = node => edgeCache.get(node);
|
|
11
|
+
export const cacheTableEdges = (node, edges) => {
|
|
12
|
+
// The existing geometry builder provides every cell; retain only the perimeter.
|
|
13
|
+
for (const [offset, props] of edges) {
|
|
14
|
+
if (!props.reachesTop && !props.reachesBottom && !props.reachesLeft && !props.reachesRight) {
|
|
15
|
+
edges.delete(offset);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
edgeCache.set(node, edges);
|
|
19
|
+
};
|
|
20
|
+
export const withTableCellEdgeProps = (element, edges = noEdges) => {
|
|
21
|
+
const current = element.props;
|
|
22
|
+
if (Boolean(current.reachesTop) === edges.reachesTop && Boolean(current.reachesBottom) === edges.reachesBottom && Boolean(current.reachesLeft) === edges.reachesLeft && Boolean(current.reachesRight) === edges.reachesRight) {
|
|
23
|
+
return element;
|
|
24
|
+
}
|
|
25
|
+
// Also clears stale edges when a previously decorated element becomes an interior cell.
|
|
26
|
+
return /*#__PURE__*/React.cloneElement(element, edges);
|
|
27
|
+
};
|
|
@@ -13,6 +13,7 @@ import { convertProsemirrorTableNodeToArrayOfRows, hasMergedCell } from '@atlask
|
|
|
13
13
|
import { createCompareNodes } from '@atlaskit/editor-common/utils/compareNodes';
|
|
14
14
|
import { compose } from '@atlaskit/editor-common/utils/compose';
|
|
15
15
|
import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorMaxWidthLayoutWidth } from '@atlaskit/editor-shared-styles/constants';
|
|
16
|
+
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
16
17
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
17
18
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
|
|
18
19
|
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
@@ -21,6 +22,7 @@ import { useRendererContext } from '../../renderer-context';
|
|
|
21
22
|
import { FullPagePadding } from '../../ui/Renderer/style';
|
|
22
23
|
import { withSmartCardStorage } from '../../ui/SmartCardStorage';
|
|
23
24
|
import { isCommentAppearance, isFullWidthOrFullPageAppearance, isFullWidthAppearance, isMaxWidthAppearance, isFullPageAppearance } from '../utils/appearance';
|
|
25
|
+
import { cacheTableEdges, getCachedTableEdges, withTableCellEdgeProps } from './table/cached-cell-edges';
|
|
24
26
|
import { isContentModeSupported } from './table/content-mode';
|
|
25
27
|
import { StickyTable, tableStickyPadding, OverflowParent } from './table/sticky';
|
|
26
28
|
import { Table } from './table/table';
|
|
@@ -735,6 +737,12 @@ export class TableContainer extends React.Component {
|
|
|
735
737
|
}
|
|
736
738
|
}
|
|
737
739
|
const getCellEdgePropsByCellOffset = (tableNode, isNumberColumnEnabled) => {
|
|
740
|
+
// The serializer uses the node attribute. Other callers can supply a different render prop.
|
|
741
|
+
const useCachedEdges = expValEquals('platform_editor_table_q4_loveability', 'isEnabled', true) && isExperimentEnabled('platform_editor_table_q4_perf_patch') && Boolean(isNumberColumnEnabled) === Boolean(tableNode.attrs.isNumberColumnEnabled);
|
|
742
|
+
const cached = useCachedEdges ? getCachedTableEdges(tableNode) : undefined;
|
|
743
|
+
if (cached) {
|
|
744
|
+
return cached;
|
|
745
|
+
}
|
|
738
746
|
const cellEdgePropsByCellOffset = new Map();
|
|
739
747
|
const cellRightByCellOffset = new Map();
|
|
740
748
|
const occupiedGrid = [];
|
|
@@ -782,6 +790,9 @@ const getCellEdgePropsByCellOffset = (tableNode, isNumberColumnEnabled) => {
|
|
|
782
790
|
edgeProps.reachesRight = cellRight >= tableWidth;
|
|
783
791
|
}
|
|
784
792
|
});
|
|
793
|
+
if (useCachedEdges) {
|
|
794
|
+
cacheTableEdges(tableNode, cellEdgePropsByCellOffset);
|
|
795
|
+
}
|
|
785
796
|
return cellEdgePropsByCellOffset;
|
|
786
797
|
};
|
|
787
798
|
const isRenderedTableCell = element => {
|
|
@@ -791,6 +802,7 @@ const isRenderedTableCell = element => {
|
|
|
791
802
|
return nodeType === 'tableCell' || nodeType === 'tableHeader' || element.type === TableCell || element.type === TableHeader;
|
|
792
803
|
};
|
|
793
804
|
const addTableCellEdgePropsThroughWrappers = (rows, tableNode, isNumberColumnEnabled) => {
|
|
805
|
+
const useCachedEdges = expValEquals('platform_editor_table_q4_loveability', 'isEnabled', true) && isExperimentEnabled('platform_editor_table_q4_perf_patch');
|
|
794
806
|
try {
|
|
795
807
|
if (!tableNode) {
|
|
796
808
|
return rows;
|
|
@@ -807,6 +819,9 @@ const addTableCellEdgePropsThroughWrappers = (rows, tableNode, isNumberColumnEna
|
|
|
807
819
|
const edgeProps = cellEdgePropsByCellOffset.get(cellOffset);
|
|
808
820
|
cellIndex += 1;
|
|
809
821
|
cellOffset += cellNode.nodeSize;
|
|
822
|
+
if (useCachedEdges) {
|
|
823
|
+
return withTableCellEdgeProps(element, edgeProps);
|
|
824
|
+
}
|
|
810
825
|
return edgeProps ? /*#__PURE__*/React.cloneElement(element, edgeProps) : element;
|
|
811
826
|
}
|
|
812
827
|
const {
|
|
@@ -64,7 +64,7 @@ export const DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
|
64
64
|
const TABLE_INFO_TIMEOUT = 10000;
|
|
65
65
|
const RENDER_EVENT_SAMPLE_RATE = 0.1;
|
|
66
66
|
const packageName = "@atlaskit/renderer";
|
|
67
|
-
const packageVersion = "151.0.
|
|
67
|
+
const packageVersion = "151.0.2";
|
|
68
68
|
const setAsQueryContainerStyles = css({
|
|
69
69
|
containerName: 'ak-renderer-wrapper',
|
|
70
70
|
containerType: 'inline-size'
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
import React from 'react';
|
|
6
|
+
// The table node includes the number-column setting. Cache only its edge data.
|
|
7
|
+
var edgeCache = new WeakMap();
|
|
8
|
+
var noEdges = {
|
|
9
|
+
reachesTop: false,
|
|
10
|
+
reachesBottom: false,
|
|
11
|
+
reachesLeft: false,
|
|
12
|
+
reachesRight: false
|
|
13
|
+
};
|
|
14
|
+
export var getCachedTableEdges = function getCachedTableEdges(node) {
|
|
15
|
+
return edgeCache.get(node);
|
|
16
|
+
};
|
|
17
|
+
export var cacheTableEdges = function cacheTableEdges(node, edges) {
|
|
18
|
+
// The existing geometry builder provides every cell; retain only the perimeter.
|
|
19
|
+
var _iterator = _createForOfIteratorHelper(edges),
|
|
20
|
+
_step;
|
|
21
|
+
try {
|
|
22
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
23
|
+
var _step$value = _slicedToArray(_step.value, 2),
|
|
24
|
+
offset = _step$value[0],
|
|
25
|
+
props = _step$value[1];
|
|
26
|
+
if (!props.reachesTop && !props.reachesBottom && !props.reachesLeft && !props.reachesRight) {
|
|
27
|
+
edges.delete(offset);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
} catch (err) {
|
|
31
|
+
_iterator.e(err);
|
|
32
|
+
} finally {
|
|
33
|
+
_iterator.f();
|
|
34
|
+
}
|
|
35
|
+
edgeCache.set(node, edges);
|
|
36
|
+
};
|
|
37
|
+
export var withTableCellEdgeProps = function withTableCellEdgeProps(element) {
|
|
38
|
+
var edges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noEdges;
|
|
39
|
+
var current = element.props;
|
|
40
|
+
if (Boolean(current.reachesTop) === edges.reachesTop && Boolean(current.reachesBottom) === edges.reachesBottom && Boolean(current.reachesLeft) === edges.reachesLeft && Boolean(current.reachesRight) === edges.reachesRight) {
|
|
41
|
+
return element;
|
|
42
|
+
}
|
|
43
|
+
// Also clears stale edges when a previously decorated element becomes an interior cell.
|
|
44
|
+
return /*#__PURE__*/React.cloneElement(element, edges);
|
|
45
|
+
};
|
|
@@ -26,6 +26,7 @@ import { convertProsemirrorTableNodeToArrayOfRows, hasMergedCell } from '@atlask
|
|
|
26
26
|
import { createCompareNodes } from '@atlaskit/editor-common/utils/compareNodes';
|
|
27
27
|
import { compose } from '@atlaskit/editor-common/utils/compose';
|
|
28
28
|
import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorMaxWidthLayoutWidth } from '@atlaskit/editor-shared-styles/constants';
|
|
29
|
+
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
29
30
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
30
31
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
|
|
31
32
|
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
@@ -34,6 +35,7 @@ import { useRendererContext } from '../../renderer-context';
|
|
|
34
35
|
import { FullPagePadding } from '../../ui/Renderer/style';
|
|
35
36
|
import { withSmartCardStorage } from '../../ui/SmartCardStorage';
|
|
36
37
|
import { isCommentAppearance, isFullWidthOrFullPageAppearance, isFullWidthAppearance, isMaxWidthAppearance, isFullPageAppearance } from '../utils/appearance';
|
|
38
|
+
import { cacheTableEdges, getCachedTableEdges, withTableCellEdgeProps } from './table/cached-cell-edges';
|
|
37
39
|
import { isContentModeSupported } from './table/content-mode';
|
|
38
40
|
import { StickyTable, tableStickyPadding, OverflowParent } from './table/sticky';
|
|
39
41
|
import { Table } from './table/table';
|
|
@@ -791,6 +793,12 @@ export var TableContainer = /*#__PURE__*/function (_React$Component) {
|
|
|
791
793
|
}]);
|
|
792
794
|
}(React.Component);
|
|
793
795
|
var getCellEdgePropsByCellOffset = function getCellEdgePropsByCellOffset(tableNode, isNumberColumnEnabled) {
|
|
796
|
+
// The serializer uses the node attribute. Other callers can supply a different render prop.
|
|
797
|
+
var useCachedEdges = expValEquals('platform_editor_table_q4_loveability', 'isEnabled', true) && isExperimentEnabled('platform_editor_table_q4_perf_patch') && Boolean(isNumberColumnEnabled) === Boolean(tableNode.attrs.isNumberColumnEnabled);
|
|
798
|
+
var cached = useCachedEdges ? getCachedTableEdges(tableNode) : undefined;
|
|
799
|
+
if (cached) {
|
|
800
|
+
return cached;
|
|
801
|
+
}
|
|
794
802
|
var cellEdgePropsByCellOffset = new Map();
|
|
795
803
|
var cellRightByCellOffset = new Map();
|
|
796
804
|
var occupiedGrid = [];
|
|
@@ -838,6 +846,9 @@ var getCellEdgePropsByCellOffset = function getCellEdgePropsByCellOffset(tableNo
|
|
|
838
846
|
edgeProps.reachesRight = cellRight >= tableWidth;
|
|
839
847
|
}
|
|
840
848
|
});
|
|
849
|
+
if (useCachedEdges) {
|
|
850
|
+
cacheTableEdges(tableNode, cellEdgePropsByCellOffset);
|
|
851
|
+
}
|
|
841
852
|
return cellEdgePropsByCellOffset;
|
|
842
853
|
};
|
|
843
854
|
var isRenderedTableCell = function isRenderedTableCell(element) {
|
|
@@ -846,6 +857,7 @@ var isRenderedTableCell = function isRenderedTableCell(element) {
|
|
|
846
857
|
return nodeType === 'tableCell' || nodeType === 'tableHeader' || element.type === TableCell || element.type === TableHeader;
|
|
847
858
|
};
|
|
848
859
|
var addTableCellEdgePropsThroughWrappers = function addTableCellEdgePropsThroughWrappers(rows, tableNode, isNumberColumnEnabled) {
|
|
860
|
+
var useCachedEdges = expValEquals('platform_editor_table_q4_loveability', 'isEnabled', true) && isExperimentEnabled('platform_editor_table_q4_perf_patch');
|
|
849
861
|
try {
|
|
850
862
|
if (!tableNode) {
|
|
851
863
|
return rows;
|
|
@@ -862,6 +874,9 @@ var addTableCellEdgePropsThroughWrappers = function addTableCellEdgePropsThrough
|
|
|
862
874
|
var edgeProps = cellEdgePropsByCellOffset.get(cellOffset);
|
|
863
875
|
cellIndex += 1;
|
|
864
876
|
cellOffset += cellNode.nodeSize;
|
|
877
|
+
if (useCachedEdges) {
|
|
878
|
+
return withTableCellEdgeProps(element, edgeProps);
|
|
879
|
+
}
|
|
865
880
|
return edgeProps ? /*#__PURE__*/React.cloneElement(element, edgeProps) : element;
|
|
866
881
|
}
|
|
867
882
|
var _ref5 = element.props,
|
|
@@ -69,7 +69,7 @@ export var DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
|
69
69
|
var TABLE_INFO_TIMEOUT = 10000;
|
|
70
70
|
var RENDER_EVENT_SAMPLE_RATE = 0.1;
|
|
71
71
|
var packageName = "@atlaskit/renderer";
|
|
72
|
-
var packageVersion = "151.0.
|
|
72
|
+
var packageVersion = "151.0.2";
|
|
73
73
|
var setAsQueryContainerStyles = css({
|
|
74
74
|
containerName: 'ak-renderer-wrapper',
|
|
75
75
|
containerType: 'inline-size'
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
|
|
3
|
+
import type { TableCellEdgeProps } from '../tableCell';
|
|
4
|
+
type EdgeMap = Map<number, TableCellEdgeProps>;
|
|
5
|
+
export declare const getCachedTableEdges: (node: PMNode) => EdgeMap | undefined;
|
|
6
|
+
export declare const cacheTableEdges: (node: PMNode, edges: EdgeMap) => void;
|
|
7
|
+
export declare const withTableCellEdgeProps: (element: React.ReactElement, edges?: TableCellEdgeProps) => React.ReactElement;
|
|
8
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/renderer",
|
|
3
|
-
"version": "151.0.
|
|
3
|
+
"version": "151.0.3",
|
|
4
4
|
"description": "Renderer component",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@atlaskit/status": "^5.13.0",
|
|
74
74
|
"@atlaskit/task-decision": "^21.12.0",
|
|
75
75
|
"@atlaskit/theme": "^28.2.0",
|
|
76
|
-
"@atlaskit/tmp-editor-statsig": "^
|
|
76
|
+
"@atlaskit/tmp-editor-statsig": "^241.0.0",
|
|
77
77
|
"@atlaskit/tokens": "^20.6.0",
|
|
78
78
|
"@atlaskit/tooltip": "^24.4.0",
|
|
79
79
|
"@atlaskit/visually-hidden": "^4.4.0",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"@atlaskit/modal-dialog": "^17.1.0",
|
|
116
116
|
"@atlaskit/navigation-system": "^11.3.0",
|
|
117
117
|
"@atlaskit/primitives": "^22.6.0",
|
|
118
|
-
"@atlaskit/profilecard": "^27.
|
|
118
|
+
"@atlaskit/profilecard": "^27.2.0",
|
|
119
119
|
"@atlaskit/radio": "^10.2.0",
|
|
120
120
|
"@atlaskit/range": "^12.2.0",
|
|
121
121
|
"@atlaskit/section-message": "^10.2.0",
|