@atlaskit/renderer 136.2.1 → 136.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 136.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`e2be8a7b1a21b`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/e2be8a7b1a21b) -
8
+ Under experiment `platform_editor_adf_validator_perf`, `validationOverrides` (including the
9
+ `allowTableInPanel` override) is built in a single `useMemo` instead of a fresh object literal per
10
+ render. The unstable reference made `renderDocument`'s validation memo miss, re-validating an
11
+ unchanged document on every render. Added a test asserting the reference stays stable across
12
+ re-renders.
13
+
14
+ `RendererFunctionalComponent` now takes an `allowNestedTables` boolean in place of the
15
+ `validationOverrides` object prop, and derives the overrides itself.
16
+
17
+ - Updated dependencies
18
+
3
19
  ## 136.2.1
4
20
 
5
21
  ### Patch Changes
@@ -24,6 +24,7 @@ var _measureRender = require("@atlaskit/editor-common/performance/measure-render
24
24
  var _navigation = require("@atlaskit/editor-common/performance/navigation");
25
25
  var _useScrollToBlock = require("../hooks/useScrollToBlock");
26
26
  var _utils = require("@atlaskit/editor-common/utils");
27
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
27
28
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
28
29
  var _types = require("@atlaskit/analytics-listeners/types");
29
30
  var _analyticsNamespacedContext = require("@atlaskit/analytics-namespaced-context");
@@ -73,7 +74,7 @@ var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
73
74
  var TABLE_INFO_TIMEOUT = 10000;
74
75
  var RENDER_EVENT_SAMPLE_RATE = 0.1;
75
76
  var packageName = "@atlaskit/renderer";
76
- var packageVersion = "136.2.0";
77
+ var packageVersion = "136.2.1";
77
78
  var setAsQueryContainerStyles = (0, _react2.css)({
78
79
  containerName: 'ak-renderer-wrapper',
79
80
  containerType: 'inline-size'
@@ -473,13 +474,24 @@ var RendererFunctionalComponent = exports.RendererFunctionalComponent = function
473
474
  }, [props.featureFlags, props.isTopLevelRenderer, createRendererContext, props.timeZone]);
474
475
  var isCollapsibleHeadingsEnabled = props.allowCollapsibleHeadings === true && ['full-page', 'full-width', 'max'].includes(props.appearance || '') && rendererContext.isTopLevelRenderer && (0, _expValEquals.expValEquals)('platform_renderer_collapsible_headings', 'isEnabled', true);
475
476
  (0, _useScrollToBlock.useScrollToBlock)(editorRef, props.document, props.scrollToBlock);
477
+ var allowNestedTables = props.allowNestedTables;
478
+ var stableValidationOverrides = (0, _react.useMemo)(function () {
479
+ var schema = getSchema(props.schema, props.adfStage);
480
+ return (0, _nesting.isPanelNestingTableSupported)(schema) ? {
481
+ allowNestedTables: allowNestedTables,
482
+ allowTableInPanel: true
483
+ } : {
484
+ allowNestedTables: allowNestedTables
485
+ };
486
+ }, [allowNestedTables, getSchema, props.schema, props.adfStage]);
487
+
488
+ // Gate read only on the table-in-panel path, the one that used to build a new object every
489
+ // render; elsewhere both arms are already identical. Control keeps the copy-per-render
490
+ // behaviour, which is what makes `renderDocument`'s validation memo miss.
491
+ var validationOverrides = stableValidationOverrides.allowTableInPanel && !(0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_adf_validator_perf') ? _objectSpread({}, stableValidationOverrides) : stableValidationOverrides;
476
492
  try {
477
493
  var _rendererContext$feat, _props$media;
478
494
  var schema = getSchema(props.schema, props.adfStage);
479
- var allowTableInPanel = (0, _nesting.isPanelNestingTableSupported)(schema);
480
- var validationOverrides = allowTableInPanel ? _objectSpread(_objectSpread({}, props.validationOverrides), {}, {
481
- allowTableInPanel: true
482
- }) : props.validationOverrides;
483
495
  var _renderDocument = (0, _.renderDocument)(props.shouldRemoveEmptySpaceAroundContent ? (0, _rendererHelper.removeEmptySpaceAroundContent)(props.document) : props.document, serializer, schema, props.adfStage, props.useSpecBasedValidator, id, _fireAnalyticsEvent, props.unsupportedContentLevelsTracking, props.appearance, props.includeNodesCountInStats, props.skipValidation, validationOverrides),
484
496
  result = _renderDocument.result,
485
497
  stat = _renderDocument.stat,
@@ -595,11 +607,6 @@ function Renderer(props) {
595
607
  var _ref = (0, _react.useContext)(_ValidationContext.ValidationContext) || {},
596
608
  skipValidation = _ref.skipValidation,
597
609
  allowNestedTables = _ref.allowNestedTables;
598
- var validationOverrides = (0, _react.useMemo)(function () {
599
- return {
600
- allowNestedTables: allowNestedTables
601
- };
602
- }, [allowNestedTables]);
603
610
  return (0, _react2.jsx)(RendererFunctionalComponentWithPortalContext
604
611
  // Ignored via go/ees005
605
612
  // eslint-disable-next-line react/jsx-props-no-spreading
@@ -607,7 +614,7 @@ function Renderer(props) {
607
614
  startPos: startPos,
608
615
  isTopLevelRenderer: (_props$isTopLevelRend = props.isTopLevelRenderer) !== null && _props$isTopLevelRend !== void 0 ? _props$isTopLevelRend : isTopLevelRenderer,
609
616
  skipValidation: skipValidation,
610
- validationOverrides: validationOverrides
617
+ allowNestedTables: allowNestedTables
611
618
  }));
612
619
  }
613
620
 
@@ -18,6 +18,7 @@ import { getDistortedDurationMonitor } from '@atlaskit/editor-common/performance
18
18
  import { getResponseEndTime } from '@atlaskit/editor-common/performance/navigation';
19
19
  import { useScrollToBlock } from '../hooks/useScrollToBlock';
20
20
  import { getAnalyticsAppearance, getAnalyticsEventSeverity, shouldForceTracking } from '@atlaskit/editor-common/utils';
21
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
21
22
  import { fg } from '@atlaskit/platform-feature-flags';
22
23
  import { FabricChannel } from '@atlaskit/analytics-listeners/types';
23
24
  import { FabricEditorAnalyticsContext } from '@atlaskit/analytics-namespaced-context';
@@ -59,7 +60,7 @@ export const DEGRADED_SEVERITY_THRESHOLD = 3000;
59
60
  const TABLE_INFO_TIMEOUT = 10000;
60
61
  const RENDER_EVENT_SAMPLE_RATE = 0.1;
61
62
  const packageName = "@atlaskit/renderer";
62
- const packageVersion = "136.2.0";
63
+ const packageVersion = "136.2.1";
63
64
  const setAsQueryContainerStyles = css({
64
65
  containerName: 'ak-renderer-wrapper',
65
66
  containerType: 'inline-size'
@@ -462,14 +463,28 @@ export const RendererFunctionalComponent = props => {
462
463
  }), [props.featureFlags, props.isTopLevelRenderer, createRendererContext, props.timeZone]);
463
464
  const isCollapsibleHeadingsEnabled = props.allowCollapsibleHeadings === true && ['full-page', 'full-width', 'max'].includes(props.appearance || '') && rendererContext.isTopLevelRenderer && expValEquals('platform_renderer_collapsible_headings', 'isEnabled', true);
464
465
  useScrollToBlock(editorRef, props.document, props.scrollToBlock);
466
+ const {
467
+ allowNestedTables
468
+ } = props;
469
+ const stableValidationOverrides = useMemo(() => {
470
+ const schema = getSchema(props.schema, props.adfStage);
471
+ return isPanelNestingTableSupported(schema) ? {
472
+ allowNestedTables,
473
+ allowTableInPanel: true
474
+ } : {
475
+ allowNestedTables
476
+ };
477
+ }, [allowNestedTables, getSchema, props.schema, props.adfStage]);
478
+
479
+ // Gate read only on the table-in-panel path, the one that used to build a new object every
480
+ // render; elsewhere both arms are already identical. Control keeps the copy-per-render
481
+ // behaviour, which is what makes `renderDocument`'s validation memo miss.
482
+ const validationOverrides = stableValidationOverrides.allowTableInPanel && !isExperimentEnabled('platform_editor_adf_validator_perf') ? {
483
+ ...stableValidationOverrides
484
+ } : stableValidationOverrides;
465
485
  try {
466
486
  var _rendererContext$feat, _props$media;
467
487
  const schema = getSchema(props.schema, props.adfStage);
468
- const allowTableInPanel = isPanelNestingTableSupported(schema);
469
- const validationOverrides = allowTableInPanel ? {
470
- ...props.validationOverrides,
471
- allowTableInPanel: true
472
- } : props.validationOverrides;
473
488
  const {
474
489
  result,
475
490
  stat,
@@ -585,9 +600,6 @@ export function Renderer(props) {
585
600
  skipValidation,
586
601
  allowNestedTables
587
602
  } = useContext(ValidationContext) || {};
588
- const validationOverrides = useMemo(() => ({
589
- allowNestedTables
590
- }), [allowNestedTables]);
591
603
  return jsx(RendererFunctionalComponentWithPortalContext
592
604
  // Ignored via go/ees005
593
605
  // eslint-disable-next-line react/jsx-props-no-spreading
@@ -595,7 +607,7 @@ export function Renderer(props) {
595
607
  startPos: startPos,
596
608
  isTopLevelRenderer: (_props$isTopLevelRend = props.isTopLevelRenderer) !== null && _props$isTopLevelRend !== void 0 ? _props$isTopLevelRend : isTopLevelRenderer,
597
609
  skipValidation: skipValidation,
598
- validationOverrides: validationOverrides
610
+ allowNestedTables: allowNestedTables
599
611
  }));
600
612
  }
601
613
 
@@ -23,6 +23,7 @@ import { getDistortedDurationMonitor } from '@atlaskit/editor-common/performance
23
23
  import { getResponseEndTime } from '@atlaskit/editor-common/performance/navigation';
24
24
  import { useScrollToBlock } from '../hooks/useScrollToBlock';
25
25
  import { getAnalyticsAppearance, getAnalyticsEventSeverity, shouldForceTracking } from '@atlaskit/editor-common/utils';
26
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
26
27
  import { fg } from '@atlaskit/platform-feature-flags';
27
28
  import { FabricChannel } from '@atlaskit/analytics-listeners/types';
28
29
  import { FabricEditorAnalyticsContext } from '@atlaskit/analytics-namespaced-context';
@@ -64,7 +65,7 @@ export var DEGRADED_SEVERITY_THRESHOLD = 3000;
64
65
  var TABLE_INFO_TIMEOUT = 10000;
65
66
  var RENDER_EVENT_SAMPLE_RATE = 0.1;
66
67
  var packageName = "@atlaskit/renderer";
67
- var packageVersion = "136.2.0";
68
+ var packageVersion = "136.2.1";
68
69
  var setAsQueryContainerStyles = css({
69
70
  containerName: 'ak-renderer-wrapper',
70
71
  containerType: 'inline-size'
@@ -464,13 +465,24 @@ export var RendererFunctionalComponent = function RendererFunctionalComponent(pr
464
465
  }, [props.featureFlags, props.isTopLevelRenderer, createRendererContext, props.timeZone]);
465
466
  var isCollapsibleHeadingsEnabled = props.allowCollapsibleHeadings === true && ['full-page', 'full-width', 'max'].includes(props.appearance || '') && rendererContext.isTopLevelRenderer && expValEquals('platform_renderer_collapsible_headings', 'isEnabled', true);
466
467
  useScrollToBlock(editorRef, props.document, props.scrollToBlock);
468
+ var allowNestedTables = props.allowNestedTables;
469
+ var stableValidationOverrides = useMemo(function () {
470
+ var schema = getSchema(props.schema, props.adfStage);
471
+ return isPanelNestingTableSupported(schema) ? {
472
+ allowNestedTables: allowNestedTables,
473
+ allowTableInPanel: true
474
+ } : {
475
+ allowNestedTables: allowNestedTables
476
+ };
477
+ }, [allowNestedTables, getSchema, props.schema, props.adfStage]);
478
+
479
+ // Gate read only on the table-in-panel path, the one that used to build a new object every
480
+ // render; elsewhere both arms are already identical. Control keeps the copy-per-render
481
+ // behaviour, which is what makes `renderDocument`'s validation memo miss.
482
+ var validationOverrides = stableValidationOverrides.allowTableInPanel && !isExperimentEnabled('platform_editor_adf_validator_perf') ? _objectSpread({}, stableValidationOverrides) : stableValidationOverrides;
467
483
  try {
468
484
  var _rendererContext$feat, _props$media;
469
485
  var schema = getSchema(props.schema, props.adfStage);
470
- var allowTableInPanel = isPanelNestingTableSupported(schema);
471
- var validationOverrides = allowTableInPanel ? _objectSpread(_objectSpread({}, props.validationOverrides), {}, {
472
- allowTableInPanel: true
473
- }) : props.validationOverrides;
474
486
  var _renderDocument = renderDocument(props.shouldRemoveEmptySpaceAroundContent ? removeEmptySpaceAroundContent(props.document) : props.document, serializer, schema, props.adfStage, props.useSpecBasedValidator, id, _fireAnalyticsEvent, props.unsupportedContentLevelsTracking, props.appearance, props.includeNodesCountInStats, props.skipValidation, validationOverrides),
475
487
  result = _renderDocument.result,
476
488
  stat = _renderDocument.stat,
@@ -586,11 +598,6 @@ export function Renderer(props) {
586
598
  var _ref = useContext(ValidationContext) || {},
587
599
  skipValidation = _ref.skipValidation,
588
600
  allowNestedTables = _ref.allowNestedTables;
589
- var validationOverrides = useMemo(function () {
590
- return {
591
- allowNestedTables: allowNestedTables
592
- };
593
- }, [allowNestedTables]);
594
601
  return jsx(RendererFunctionalComponentWithPortalContext
595
602
  // Ignored via go/ees005
596
603
  // eslint-disable-next-line react/jsx-props-no-spreading
@@ -598,7 +605,7 @@ export function Renderer(props) {
598
605
  startPos: startPos,
599
606
  isTopLevelRenderer: (_props$isTopLevelRend = props.isTopLevelRenderer) !== null && _props$isTopLevelRend !== void 0 ? _props$isTopLevelRend : isTopLevelRenderer,
600
607
  skipValidation: skipValidation,
601
- validationOverrides: validationOverrides
608
+ allowNestedTables: allowNestedTables
602
609
  }));
603
610
  }
604
611
 
@@ -10,11 +10,9 @@ import type { RendererAppearance, RendererContentMode } from './types';
10
10
  export declare const NORMAL_SEVERITY_THRESHOLD = 2000;
11
11
  export declare const DEGRADED_SEVERITY_THRESHOLD = 3000;
12
12
  export declare const RendererFunctionalComponent: (props: RendererProps & {
13
+ allowNestedTables?: boolean;
13
14
  skipValidation?: boolean;
14
15
  startPos?: number;
15
- validationOverrides?: {
16
- allowNestedTables?: boolean;
17
- };
18
16
  }) => jsx.JSX.Element;
19
17
  /**
20
18
  * Top-level ADF renderer: renders document content with analytics and validation context.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/renderer",
3
- "version": "136.2.1",
3
+ "version": "136.2.2",
4
4
  "description": "Renderer component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -85,7 +85,7 @@
85
85
  "uuid": "^3.1.0"
86
86
  },
87
87
  "peerDependencies": {
88
- "@atlaskit/editor-common": "^119.14.0",
88
+ "@atlaskit/editor-common": "^119.15.0",
89
89
  "@atlaskit/link-provider": "^5.4.0",
90
90
  "@atlaskit/media-core": "^38.0.0",
91
91
  "react": "^18.2.0",