@atlaskit/renderer 138.0.0 → 138.0.1

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,17 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 138.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`8d65b130dff43`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8d65b130dff43) -
8
+ Behind the `platform_renderer_on_complete_after_commit` experiment, `onComplete` is invoked from
9
+ an effect after the rendered document is committed instead of synchronously during render. Calling
10
+ it during render let consumers set state on other components mid-render, which React forbids and
11
+ which could feed a render loop on pages that never reached commit. With the experiment off the
12
+ callback fires exactly as before.
13
+ - Updated dependencies
14
+
3
15
  ## 138.0.0
4
16
 
5
17
  ### Patch Changes
@@ -73,7 +73,7 @@ var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
73
73
  var TABLE_INFO_TIMEOUT = 10000;
74
74
  var RENDER_EVENT_SAMPLE_RATE = 0.1;
75
75
  var packageName = "@atlaskit/renderer";
76
- var packageVersion = "137.4.6";
76
+ var packageVersion = "138.0.0";
77
77
  var setAsQueryContainerStyles = (0, _react2.css)({
78
78
  containerName: 'ak-renderer-wrapper',
79
79
  containerType: 'inline-size'
@@ -486,6 +486,21 @@ var RendererFunctionalComponent = exports.RendererFunctionalComponent = function
486
486
  // render; elsewhere both arms are already identical. Control keeps the copy-per-render
487
487
  // behaviour, which is what makes `renderDocument`'s validation memo miss.
488
488
  var validationOverrides = stableValidationOverrides.allowTableInPanel && !(0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_adf_validator_perf') ? _objectSpread({}, stableValidationOverrides) : stableValidationOverrides;
489
+
490
+ // Invoking `onComplete` during render lets consumers set state on other components mid-render,
491
+ // so the stat is parked here and delivered once the rendered document has been committed.
492
+ // No dependency array: `renderDocument` produces a new stat on every render, so the callback
493
+ // must run after every commit to keep its historical once-per-render cadence.
494
+ var pendingOnCompleteStatRef = (0, _react.useRef)(null);
495
+ var onComplete = props.onComplete;
496
+ (0, _react.useEffect)(function () {
497
+ var stat = pendingOnCompleteStatRef.current;
498
+ if (stat === null || !onComplete) {
499
+ return;
500
+ }
501
+ pendingOnCompleteStatRef.current = null;
502
+ onComplete(stat);
503
+ });
489
504
  try {
490
505
  var _rendererContext$feat, _props$media;
491
506
  var schema = getSchema(props.schema, props.adfStage);
@@ -494,7 +509,11 @@ var RendererFunctionalComponent = exports.RendererFunctionalComponent = function
494
509
  stat = _renderDocument.stat,
495
510
  pmDoc = _renderDocument.pmDoc;
496
511
  if (props.onComplete) {
497
- props.onComplete(stat);
512
+ if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_renderer_on_complete_after_commit')) {
513
+ pendingOnCompleteStatRef.current = stat;
514
+ } else {
515
+ props.onComplete(stat);
516
+ }
498
517
  }
499
518
  var rendererOutput = (0, _react2.jsx)(_rendererContext.RendererContextProvider, {
500
519
  value: rendererContext
@@ -59,7 +59,7 @@ export const DEGRADED_SEVERITY_THRESHOLD = 3000;
59
59
  const TABLE_INFO_TIMEOUT = 10000;
60
60
  const RENDER_EVENT_SAMPLE_RATE = 0.1;
61
61
  const packageName = "@atlaskit/renderer";
62
- const packageVersion = "137.4.6";
62
+ const packageVersion = "138.0.0";
63
63
  const setAsQueryContainerStyles = css({
64
64
  containerName: 'ak-renderer-wrapper',
65
65
  containerType: 'inline-size'
@@ -479,6 +479,23 @@ export const RendererFunctionalComponent = props => {
479
479
  const validationOverrides = stableValidationOverrides.allowTableInPanel && !isExperimentEnabled('platform_editor_adf_validator_perf') ? {
480
480
  ...stableValidationOverrides
481
481
  } : stableValidationOverrides;
482
+
483
+ // Invoking `onComplete` during render lets consumers set state on other components mid-render,
484
+ // so the stat is parked here and delivered once the rendered document has been committed.
485
+ // No dependency array: `renderDocument` produces a new stat on every render, so the callback
486
+ // must run after every commit to keep its historical once-per-render cadence.
487
+ const pendingOnCompleteStatRef = useRef(null);
488
+ const {
489
+ onComplete
490
+ } = props;
491
+ useEffect(() => {
492
+ const stat = pendingOnCompleteStatRef.current;
493
+ if (stat === null || !onComplete) {
494
+ return;
495
+ }
496
+ pendingOnCompleteStatRef.current = null;
497
+ onComplete(stat);
498
+ });
482
499
  try {
483
500
  var _rendererContext$feat, _props$media;
484
501
  const schema = getSchema(props.schema, props.adfStage);
@@ -488,7 +505,11 @@ export const RendererFunctionalComponent = props => {
488
505
  pmDoc
489
506
  } = 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);
490
507
  if (props.onComplete) {
491
- props.onComplete(stat);
508
+ if (isExperimentEnabled('platform_renderer_on_complete_after_commit')) {
509
+ pendingOnCompleteStatRef.current = stat;
510
+ } else {
511
+ props.onComplete(stat);
512
+ }
492
513
  }
493
514
  const rendererOutput = jsx(RendererContextProvider, {
494
515
  value: rendererContext
@@ -64,7 +64,7 @@ export var DEGRADED_SEVERITY_THRESHOLD = 3000;
64
64
  var TABLE_INFO_TIMEOUT = 10000;
65
65
  var RENDER_EVENT_SAMPLE_RATE = 0.1;
66
66
  var packageName = "@atlaskit/renderer";
67
- var packageVersion = "137.4.6";
67
+ var packageVersion = "138.0.0";
68
68
  var setAsQueryContainerStyles = css({
69
69
  containerName: 'ak-renderer-wrapper',
70
70
  containerType: 'inline-size'
@@ -477,6 +477,21 @@ export var RendererFunctionalComponent = function RendererFunctionalComponent(pr
477
477
  // render; elsewhere both arms are already identical. Control keeps the copy-per-render
478
478
  // behaviour, which is what makes `renderDocument`'s validation memo miss.
479
479
  var validationOverrides = stableValidationOverrides.allowTableInPanel && !isExperimentEnabled('platform_editor_adf_validator_perf') ? _objectSpread({}, stableValidationOverrides) : stableValidationOverrides;
480
+
481
+ // Invoking `onComplete` during render lets consumers set state on other components mid-render,
482
+ // so the stat is parked here and delivered once the rendered document has been committed.
483
+ // No dependency array: `renderDocument` produces a new stat on every render, so the callback
484
+ // must run after every commit to keep its historical once-per-render cadence.
485
+ var pendingOnCompleteStatRef = useRef(null);
486
+ var onComplete = props.onComplete;
487
+ useEffect(function () {
488
+ var stat = pendingOnCompleteStatRef.current;
489
+ if (stat === null || !onComplete) {
490
+ return;
491
+ }
492
+ pendingOnCompleteStatRef.current = null;
493
+ onComplete(stat);
494
+ });
480
495
  try {
481
496
  var _rendererContext$feat, _props$media;
482
497
  var schema = getSchema(props.schema, props.adfStage);
@@ -485,7 +500,11 @@ export var RendererFunctionalComponent = function RendererFunctionalComponent(pr
485
500
  stat = _renderDocument.stat,
486
501
  pmDoc = _renderDocument.pmDoc;
487
502
  if (props.onComplete) {
488
- props.onComplete(stat);
503
+ if (isExperimentEnabled('platform_renderer_on_complete_after_commit')) {
504
+ pendingOnCompleteStatRef.current = stat;
505
+ } else {
506
+ props.onComplete(stat);
507
+ }
489
508
  }
490
509
  var rendererOutput = jsx(RendererContextProvider, {
491
510
  value: rendererContext
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/renderer",
3
- "version": "138.0.0",
3
+ "version": "138.0.1",
4
4
  "description": "Renderer component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -85,7 +85,7 @@
85
85
  "uuid": "^11.1.1"
86
86
  },
87
87
  "peerDependencies": {
88
- "@atlaskit/editor-common": "^121.0.0",
88
+ "@atlaskit/editor-common": "^121.1.0",
89
89
  "@atlaskit/link-provider": "^5.5.0",
90
90
  "@atlaskit/media-core": "^38.2.0",
91
91
  "react": "^18.2.0",
@@ -97,7 +97,7 @@
97
97
  "@af/visual-regression": "workspace:^",
98
98
  "@atlaskit/analytics-gas-types": "^6.2.0",
99
99
  "@atlaskit/checkbox": "^19.2.0",
100
- "@atlaskit/editor-plugin-media": "^19.0.0",
100
+ "@atlaskit/editor-plugin-media": "^19.1.0",
101
101
  "@atlaskit/editor-test-helpers": "workspace:^",
102
102
  "@atlaskit/inline-edit": "^16.4.0",
103
103
  "@atlaskit/json-ld-types": "^2.0.0",