@atlaskit/renderer 130.2.18 → 130.3.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.
- package/CHANGELOG.md +11 -0
- package/dist/cjs/react/nodes/bodiedExtension.js +6 -3
- package/dist/cjs/react/nodes/extension.js +41 -11
- package/dist/cjs/ui/Renderer/index.js +1 -1
- package/dist/es2019/react/nodes/bodiedExtension.js +6 -3
- package/dist/es2019/react/nodes/extension.js +33 -4
- package/dist/es2019/ui/Renderer/index.js +1 -1
- package/dist/esm/react/nodes/bodiedExtension.js +6 -3
- package/dist/esm/react/nodes/extension.js +39 -11
- package/dist/esm/ui/Renderer/index.js +1 -1
- package/dist/types/analytics/events.d.ts +6 -2
- package/dist/types/react/nodes/bodiedExtension.d.ts +2 -0
- package/dist/types/react/nodes/extension.d.ts +2 -0
- package/dist/types-ts4.5/analytics/events.d.ts +6 -2
- package/dist/types-ts4.5/react/nodes/bodiedExtension.d.ts +2 -0
- package/dist/types-ts4.5/react/nodes/extension.d.ts +2 -0
- package/package.json +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @atlaskit/renderer
|
|
2
2
|
|
|
3
|
+
## 130.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`800992939bc88`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/800992939bc88) -
|
|
8
|
+
EDITOR-6751 - Inline bodied extension: fire analytics event when rendering
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
|
|
3
14
|
## 130.2.18
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
|
@@ -28,7 +28,8 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
28
28
|
parameters = props.parameters,
|
|
29
29
|
extensionViewportSizes = props.extensionViewportSizes,
|
|
30
30
|
localId = props.localId,
|
|
31
|
-
shouldDisplayExtensionAsInline = props.shouldDisplayExtensionAsInline
|
|
31
|
+
shouldDisplayExtensionAsInline = props.shouldDisplayExtensionAsInline,
|
|
32
|
+
fireAnalyticsEvent = props.fireAnalyticsEvent;
|
|
32
33
|
var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
33
34
|
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
34
35
|
var removeOverflow = _react.default.Children.toArray(children)
|
|
@@ -66,7 +67,8 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
66
67
|
// Return the content directly if it's a valid JSX.Element
|
|
67
68
|
return (0, _extension.renderExtension)(result, layout, {
|
|
68
69
|
isTopLevel: path.length < 1,
|
|
69
|
-
rendererAppearance: props.rendererAppearance
|
|
70
|
+
rendererAppearance: props.rendererAppearance,
|
|
71
|
+
fireAnalyticsEvent: fireAnalyticsEvent
|
|
70
72
|
}, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node);
|
|
71
73
|
}
|
|
72
74
|
} catch (_unused) {
|
|
@@ -77,7 +79,8 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
77
79
|
// Always return default content if anything goes wrong
|
|
78
80
|
return (0, _extension.renderExtension)(children, layout, {
|
|
79
81
|
isTopLevel: path.length < 1,
|
|
80
|
-
rendererAppearance: props.rendererAppearance
|
|
82
|
+
rendererAppearance: props.rendererAppearance,
|
|
83
|
+
fireAnalyticsEvent: fireAnalyticsEvent
|
|
81
84
|
}, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node);
|
|
82
85
|
}))));
|
|
83
86
|
};
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.renderExtension = exports.default = void 0;
|
|
8
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
10
|
var _react = require("@emotion/react");
|
|
10
|
-
var _react2 =
|
|
11
|
+
var _react2 = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
11
13
|
var _ExtensionRenderer = _interopRequireDefault(require("../../ui/ExtensionRenderer"));
|
|
12
14
|
var _ui = require("@atlaskit/editor-common/ui");
|
|
13
15
|
var _utils = require("@atlaskit/editor-common/utils");
|
|
@@ -15,6 +17,7 @@ var _consts = require("../../consts");
|
|
|
15
17
|
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
16
18
|
var _breakout = require("../utils/breakout");
|
|
17
19
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
20
|
+
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" != _typeof(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); }
|
|
18
21
|
/**
|
|
19
22
|
* @jsxRuntime classic
|
|
20
23
|
* @jsx jsx
|
|
@@ -46,6 +49,28 @@ var getViewportSize = function getViewportSize(extensionId, extensionViewportSiz
|
|
|
46
49
|
var containerStyle = (0, _react.css)({
|
|
47
50
|
containerType: 'inline-size'
|
|
48
51
|
});
|
|
52
|
+
/**
|
|
53
|
+
* Fires an analytics event once on mount when a bodied extension is rendered as an inline element.
|
|
54
|
+
* The node is stored in a ref to avoid re-firing if the node reference changes.
|
|
55
|
+
*/
|
|
56
|
+
var FireExtensionAsInlineAnalytics = function FireExtensionAsInlineAnalytics(_ref) {
|
|
57
|
+
var fireAnalyticsEvent = _ref.fireAnalyticsEvent,
|
|
58
|
+
node = _ref.node;
|
|
59
|
+
var nodeRef = (0, _react2.useRef)(node);
|
|
60
|
+
(0, _react2.useEffect)(function () {
|
|
61
|
+
fireAnalyticsEvent({
|
|
62
|
+
action: _analytics.ACTION.RENDERED,
|
|
63
|
+
actionSubject: _analytics.ACTION_SUBJECT.EXTENSION_AS_INLINE,
|
|
64
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.EXTENSION_BODIED,
|
|
65
|
+
attributes: {
|
|
66
|
+
extensionKey: nodeRef.current.extensionKey,
|
|
67
|
+
extensionType: nodeRef.current.extensionType
|
|
68
|
+
},
|
|
69
|
+
eventType: _analytics.EVENT_TYPE.OPERATIONAL
|
|
70
|
+
});
|
|
71
|
+
}, [fireAnalyticsEvent]);
|
|
72
|
+
return null;
|
|
73
|
+
};
|
|
49
74
|
var renderExtension = exports.renderExtension = function renderExtension(content, layout) {
|
|
50
75
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
51
76
|
var removeOverflow = arguments.length > 3 ? arguments[3] : undefined;
|
|
@@ -59,10 +84,11 @@ var renderExtension = exports.renderExtension = function renderExtension(content
|
|
|
59
84
|
var overflowContainerClass = !removeOverflow ? _consts.RendererCssClassName.EXTENSION_OVERFLOW_CONTAINER : '';
|
|
60
85
|
|
|
61
86
|
// by default, we assume the extension is at top level, (direct child of doc node)
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
isTopLevel =
|
|
65
|
-
rendererAppearance =
|
|
87
|
+
var _ref2 = options || {},
|
|
88
|
+
_ref2$isTopLevel = _ref2.isTopLevel,
|
|
89
|
+
isTopLevel = _ref2$isTopLevel === void 0 ? true : _ref2$isTopLevel,
|
|
90
|
+
rendererAppearance = _ref2.rendererAppearance,
|
|
91
|
+
fireAnalyticsEvent = _ref2.fireAnalyticsEvent;
|
|
66
92
|
// we should only use custom layout for full-page appearance
|
|
67
93
|
var canUseCustomLayout = (0, _expValEquals.expValEquals)('platform_editor_remove_important_in_render_ext', 'isEnabled', true) ? rendererAppearance === 'full-page' : true;
|
|
68
94
|
var isCustomLayout = isTopLevel && ['wide', 'full-width'].includes(layout) && canUseCustomLayout;
|
|
@@ -77,6 +103,10 @@ var renderExtension = exports.renderExtension = function renderExtension(content
|
|
|
77
103
|
var extensionHeight = nodeHeight || viewportSize;
|
|
78
104
|
var isInline = (shouldDisplayExtensionAsInline === null || shouldDisplayExtensionAsInline === void 0 ? void 0 : shouldDisplayExtensionAsInline(node)) && (0, _expValEquals.expValEquals)('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true);
|
|
79
105
|
var inlineClassName = isInline ? _consts.RendererCssClassName.EXTENSION_AS_INLINE : '';
|
|
106
|
+
var asInlineAnalytics = isInline && fireAnalyticsEvent && node && (0, _platformFeatureFlags.fg)('platform_editor_render_inline_extension_analytics') ? (0, _react.jsx)(FireExtensionAsInlineAnalytics, {
|
|
107
|
+
fireAnalyticsEvent: fireAnalyticsEvent,
|
|
108
|
+
node: node
|
|
109
|
+
}) : null;
|
|
80
110
|
if ((0, _expValEquals.expValEquals)('platform_editor_renderer_extension_width_fix', 'isEnabled', true)) {
|
|
81
111
|
var extensionDiv = (0, _react.jsx)("div", {
|
|
82
112
|
ref: options.handleRef
|
|
@@ -100,14 +130,14 @@ var renderExtension = exports.renderExtension = function renderExtension(content
|
|
|
100
130
|
,
|
|
101
131
|
className: "".concat(_consts.RendererCssClassName.EXTENSION_INNER_WRAPPER, " ").concat(overflowContainerClass),
|
|
102
132
|
css: [!isInsideOfInlineExtension && (0, _platformFeatureFlags.fg)('platform_fix_macro_renders_in_layouts') && containerStyle]
|
|
103
|
-
}, content));
|
|
133
|
+
}, asInlineAnalytics, content));
|
|
104
134
|
return centerAlignClass && (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true) ? (0, _react.jsx)("div", {
|
|
105
135
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
|
|
106
136
|
className: _consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + _consts.RendererCssClassName.FLEX_CENTER_WRAPPER
|
|
107
137
|
}, extensionDiv) : extensionDiv;
|
|
108
138
|
}
|
|
109
|
-
return (0, _react.jsx)(_ui.WidthConsumer, null, function (
|
|
110
|
-
var width =
|
|
139
|
+
return (0, _react.jsx)(_ui.WidthConsumer, null, function (_ref3) {
|
|
140
|
+
var width = _ref3.width;
|
|
111
141
|
var extensionDiv = (0, _react.jsx)("div", {
|
|
112
142
|
ref: options.handleRef
|
|
113
143
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
|
|
@@ -129,7 +159,7 @@ var renderExtension = exports.renderExtension = function renderExtension(content
|
|
|
129
159
|
,
|
|
130
160
|
className: "".concat(_consts.RendererCssClassName.EXTENSION_INNER_WRAPPER, " ").concat(overflowContainerClass),
|
|
131
161
|
css: [!isInsideOfInlineExtension && (0, _platformFeatureFlags.fg)('platform_fix_macro_renders_in_layouts') && containerStyle]
|
|
132
|
-
}, content));
|
|
162
|
+
}, asInlineAnalytics, content));
|
|
133
163
|
return centerAlignClass && (0, _expValEquals.expValEquals)('platform_editor_flex_based_centering', 'isEnabled', true) ? (0, _react.jsx)("div", {
|
|
134
164
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
|
|
135
165
|
className: _consts.RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + _consts.RendererCssClassName.FLEX_CENTER_WRAPPER
|
|
@@ -154,8 +184,8 @@ var Extension = function Extension(props) {
|
|
|
154
184
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
155
185
|
, (0, _extends2.default)({}, props, {
|
|
156
186
|
type: "extension"
|
|
157
|
-
}), function (
|
|
158
|
-
var result =
|
|
187
|
+
}), function (_ref4) {
|
|
188
|
+
var result = _ref4.result;
|
|
159
189
|
try {
|
|
160
190
|
// Return the result directly if it's a valid JSX.Element
|
|
161
191
|
if (result && /*#__PURE__*/_react2.default.isValidElement(result)) {
|
|
@@ -71,7 +71,7 @@ var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
|
71
71
|
var TABLE_INFO_TIMEOUT = 10000;
|
|
72
72
|
var RENDER_EVENT_SAMPLE_RATE = 0.2;
|
|
73
73
|
var packageName = "@atlaskit/renderer";
|
|
74
|
-
var packageVersion = "
|
|
74
|
+
var packageVersion = "130.2.18";
|
|
75
75
|
var setAsQueryContainerStyles = (0, _react2.css)({
|
|
76
76
|
containerName: 'ak-renderer-wrapper',
|
|
77
77
|
containerType: 'inline-size'
|
|
@@ -18,7 +18,8 @@ const BodiedExtension = props => {
|
|
|
18
18
|
parameters,
|
|
19
19
|
extensionViewportSizes,
|
|
20
20
|
localId,
|
|
21
|
-
shouldDisplayExtensionAsInline
|
|
21
|
+
shouldDisplayExtensionAsInline,
|
|
22
|
+
fireAnalyticsEvent
|
|
22
23
|
} = props;
|
|
23
24
|
const {
|
|
24
25
|
createAnalyticsEvent
|
|
@@ -55,7 +56,8 @@ const BodiedExtension = props => {
|
|
|
55
56
|
// Return the content directly if it's a valid JSX.Element
|
|
56
57
|
return renderExtension(result, layout, {
|
|
57
58
|
isTopLevel: path.length < 1,
|
|
58
|
-
rendererAppearance: props.rendererAppearance
|
|
59
|
+
rendererAppearance: props.rendererAppearance,
|
|
60
|
+
fireAnalyticsEvent
|
|
59
61
|
}, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node);
|
|
60
62
|
}
|
|
61
63
|
} catch {
|
|
@@ -66,7 +68,8 @@ const BodiedExtension = props => {
|
|
|
66
68
|
// Always return default content if anything goes wrong
|
|
67
69
|
return renderExtension(children, layout, {
|
|
68
70
|
isTopLevel: path.length < 1,
|
|
69
|
-
rendererAppearance: props.rendererAppearance
|
|
71
|
+
rendererAppearance: props.rendererAppearance,
|
|
72
|
+
fireAnalyticsEvent
|
|
70
73
|
}, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node);
|
|
71
74
|
}))));
|
|
72
75
|
};
|
|
@@ -6,7 +6,8 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
|
6
6
|
|
|
7
7
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
8
8
|
import { jsx, css } from '@emotion/react';
|
|
9
|
-
import React from 'react';
|
|
9
|
+
import React, { useEffect, useRef } from 'react';
|
|
10
|
+
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
|
|
10
11
|
import ExtensionRenderer from '../../ui/ExtensionRenderer';
|
|
11
12
|
import { overflowShadow, WidthConsumer } from '@atlaskit/editor-common/ui';
|
|
12
13
|
import { calcBreakoutWidth } from '@atlaskit/editor-common/utils';
|
|
@@ -36,13 +37,37 @@ const getViewportSize = (extensionId, extensionViewportSizes) => {
|
|
|
36
37
|
const containerStyle = css({
|
|
37
38
|
containerType: 'inline-size'
|
|
38
39
|
});
|
|
40
|
+
/**
|
|
41
|
+
* Fires an analytics event once on mount when a bodied extension is rendered as an inline element.
|
|
42
|
+
* The node is stored in a ref to avoid re-firing if the node reference changes.
|
|
43
|
+
*/
|
|
44
|
+
const FireExtensionAsInlineAnalytics = ({
|
|
45
|
+
fireAnalyticsEvent,
|
|
46
|
+
node
|
|
47
|
+
}) => {
|
|
48
|
+
const nodeRef = useRef(node);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
fireAnalyticsEvent({
|
|
51
|
+
action: ACTION.RENDERED,
|
|
52
|
+
actionSubject: ACTION_SUBJECT.EXTENSION_AS_INLINE,
|
|
53
|
+
actionSubjectId: ACTION_SUBJECT_ID.EXTENSION_BODIED,
|
|
54
|
+
attributes: {
|
|
55
|
+
extensionKey: nodeRef.current.extensionKey,
|
|
56
|
+
extensionType: nodeRef.current.extensionType
|
|
57
|
+
},
|
|
58
|
+
eventType: EVENT_TYPE.OPERATIONAL
|
|
59
|
+
});
|
|
60
|
+
}, [fireAnalyticsEvent]);
|
|
61
|
+
return null;
|
|
62
|
+
};
|
|
39
63
|
export const renderExtension = (content, layout, options = {}, removeOverflow, extensionId, extensionViewportSizes, nodeHeight, localId, shouldDisplayExtensionAsInline, node, isInsideOfInlineExtension) => {
|
|
40
64
|
const overflowContainerClass = !removeOverflow ? RendererCssClassName.EXTENSION_OVERFLOW_CONTAINER : '';
|
|
41
65
|
|
|
42
66
|
// by default, we assume the extension is at top level, (direct child of doc node)
|
|
43
67
|
const {
|
|
44
68
|
isTopLevel = true,
|
|
45
|
-
rendererAppearance
|
|
69
|
+
rendererAppearance,
|
|
70
|
+
fireAnalyticsEvent
|
|
46
71
|
} = options || {};
|
|
47
72
|
// we should only use custom layout for full-page appearance
|
|
48
73
|
const canUseCustomLayout = expValEquals('platform_editor_remove_important_in_render_ext', 'isEnabled', true) ? rendererAppearance === 'full-page' : true;
|
|
@@ -58,6 +83,10 @@ export const renderExtension = (content, layout, options = {}, removeOverflow, e
|
|
|
58
83
|
const extensionHeight = nodeHeight || viewportSize;
|
|
59
84
|
const isInline = (shouldDisplayExtensionAsInline === null || shouldDisplayExtensionAsInline === void 0 ? void 0 : shouldDisplayExtensionAsInline(node)) && expValEquals('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true);
|
|
60
85
|
const inlineClassName = isInline ? RendererCssClassName.EXTENSION_AS_INLINE : '';
|
|
86
|
+
const asInlineAnalytics = isInline && fireAnalyticsEvent && node && fg('platform_editor_render_inline_extension_analytics') ? jsx(FireExtensionAsInlineAnalytics, {
|
|
87
|
+
fireAnalyticsEvent: fireAnalyticsEvent,
|
|
88
|
+
node: node
|
|
89
|
+
}) : null;
|
|
61
90
|
if (expValEquals('platform_editor_renderer_extension_width_fix', 'isEnabled', true)) {
|
|
62
91
|
const extensionDiv = jsx("div", {
|
|
63
92
|
ref: options.handleRef
|
|
@@ -81,7 +110,7 @@ export const renderExtension = (content, layout, options = {}, removeOverflow, e
|
|
|
81
110
|
,
|
|
82
111
|
className: `${RendererCssClassName.EXTENSION_INNER_WRAPPER} ${overflowContainerClass}`,
|
|
83
112
|
css: [!isInsideOfInlineExtension && fg('platform_fix_macro_renders_in_layouts') && containerStyle]
|
|
84
|
-
}, content));
|
|
113
|
+
}, asInlineAnalytics, content));
|
|
85
114
|
return centerAlignClass && expValEquals('platform_editor_flex_based_centering', 'isEnabled', true) ? jsx("div", {
|
|
86
115
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
|
|
87
116
|
className: RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + RendererCssClassName.FLEX_CENTER_WRAPPER
|
|
@@ -111,7 +140,7 @@ export const renderExtension = (content, layout, options = {}, removeOverflow, e
|
|
|
111
140
|
,
|
|
112
141
|
className: `${RendererCssClassName.EXTENSION_INNER_WRAPPER} ${overflowContainerClass}`,
|
|
113
142
|
css: [!isInsideOfInlineExtension && fg('platform_fix_macro_renders_in_layouts') && containerStyle]
|
|
114
|
-
}, content));
|
|
143
|
+
}, asInlineAnalytics, content));
|
|
115
144
|
return centerAlignClass && expValEquals('platform_editor_flex_based_centering', 'isEnabled', true) ? jsx("div", {
|
|
116
145
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
|
|
117
146
|
className: RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + RendererCssClassName.FLEX_CENTER_WRAPPER
|
|
@@ -57,7 +57,7 @@ export const DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
|
57
57
|
const TABLE_INFO_TIMEOUT = 10000;
|
|
58
58
|
const RENDER_EVENT_SAMPLE_RATE = 0.2;
|
|
59
59
|
const packageName = "@atlaskit/renderer";
|
|
60
|
-
const packageVersion = "
|
|
60
|
+
const packageVersion = "130.2.18";
|
|
61
61
|
const setAsQueryContainerStyles = css({
|
|
62
62
|
containerName: 'ak-renderer-wrapper',
|
|
63
63
|
containerType: 'inline-size'
|
|
@@ -19,7 +19,8 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
19
19
|
parameters = props.parameters,
|
|
20
20
|
extensionViewportSizes = props.extensionViewportSizes,
|
|
21
21
|
localId = props.localId,
|
|
22
|
-
shouldDisplayExtensionAsInline = props.shouldDisplayExtensionAsInline
|
|
22
|
+
shouldDisplayExtensionAsInline = props.shouldDisplayExtensionAsInline,
|
|
23
|
+
fireAnalyticsEvent = props.fireAnalyticsEvent;
|
|
23
24
|
var _useAnalyticsEvents = useAnalyticsEvents(),
|
|
24
25
|
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
25
26
|
var removeOverflow = React.Children.toArray(children)
|
|
@@ -57,7 +58,8 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
57
58
|
// Return the content directly if it's a valid JSX.Element
|
|
58
59
|
return renderExtension(result, layout, {
|
|
59
60
|
isTopLevel: path.length < 1,
|
|
60
|
-
rendererAppearance: props.rendererAppearance
|
|
61
|
+
rendererAppearance: props.rendererAppearance,
|
|
62
|
+
fireAnalyticsEvent: fireAnalyticsEvent
|
|
61
63
|
}, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node);
|
|
62
64
|
}
|
|
63
65
|
} catch (_unused) {
|
|
@@ -68,7 +70,8 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
68
70
|
// Always return default content if anything goes wrong
|
|
69
71
|
return renderExtension(children, layout, {
|
|
70
72
|
isTopLevel: path.length < 1,
|
|
71
|
-
rendererAppearance: props.rendererAppearance
|
|
73
|
+
rendererAppearance: props.rendererAppearance,
|
|
74
|
+
fireAnalyticsEvent: fireAnalyticsEvent
|
|
72
75
|
}, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node);
|
|
73
76
|
}))));
|
|
74
77
|
};
|
|
@@ -6,7 +6,8 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
|
6
6
|
|
|
7
7
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
8
8
|
import { jsx, css } from '@emotion/react';
|
|
9
|
-
import React from 'react';
|
|
9
|
+
import React, { useEffect, useRef } from 'react';
|
|
10
|
+
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
|
|
10
11
|
import ExtensionRenderer from '../../ui/ExtensionRenderer';
|
|
11
12
|
import { overflowShadow, WidthConsumer } from '@atlaskit/editor-common/ui';
|
|
12
13
|
import { calcBreakoutWidth } from '@atlaskit/editor-common/utils';
|
|
@@ -38,6 +39,28 @@ var getViewportSize = function getViewportSize(extensionId, extensionViewportSiz
|
|
|
38
39
|
var containerStyle = css({
|
|
39
40
|
containerType: 'inline-size'
|
|
40
41
|
});
|
|
42
|
+
/**
|
|
43
|
+
* Fires an analytics event once on mount when a bodied extension is rendered as an inline element.
|
|
44
|
+
* The node is stored in a ref to avoid re-firing if the node reference changes.
|
|
45
|
+
*/
|
|
46
|
+
var FireExtensionAsInlineAnalytics = function FireExtensionAsInlineAnalytics(_ref) {
|
|
47
|
+
var fireAnalyticsEvent = _ref.fireAnalyticsEvent,
|
|
48
|
+
node = _ref.node;
|
|
49
|
+
var nodeRef = useRef(node);
|
|
50
|
+
useEffect(function () {
|
|
51
|
+
fireAnalyticsEvent({
|
|
52
|
+
action: ACTION.RENDERED,
|
|
53
|
+
actionSubject: ACTION_SUBJECT.EXTENSION_AS_INLINE,
|
|
54
|
+
actionSubjectId: ACTION_SUBJECT_ID.EXTENSION_BODIED,
|
|
55
|
+
attributes: {
|
|
56
|
+
extensionKey: nodeRef.current.extensionKey,
|
|
57
|
+
extensionType: nodeRef.current.extensionType
|
|
58
|
+
},
|
|
59
|
+
eventType: EVENT_TYPE.OPERATIONAL
|
|
60
|
+
});
|
|
61
|
+
}, [fireAnalyticsEvent]);
|
|
62
|
+
return null;
|
|
63
|
+
};
|
|
41
64
|
export var renderExtension = function renderExtension(content, layout) {
|
|
42
65
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
43
66
|
var removeOverflow = arguments.length > 3 ? arguments[3] : undefined;
|
|
@@ -51,10 +74,11 @@ export var renderExtension = function renderExtension(content, layout) {
|
|
|
51
74
|
var overflowContainerClass = !removeOverflow ? RendererCssClassName.EXTENSION_OVERFLOW_CONTAINER : '';
|
|
52
75
|
|
|
53
76
|
// by default, we assume the extension is at top level, (direct child of doc node)
|
|
54
|
-
var
|
|
55
|
-
|
|
56
|
-
isTopLevel =
|
|
57
|
-
rendererAppearance =
|
|
77
|
+
var _ref2 = options || {},
|
|
78
|
+
_ref2$isTopLevel = _ref2.isTopLevel,
|
|
79
|
+
isTopLevel = _ref2$isTopLevel === void 0 ? true : _ref2$isTopLevel,
|
|
80
|
+
rendererAppearance = _ref2.rendererAppearance,
|
|
81
|
+
fireAnalyticsEvent = _ref2.fireAnalyticsEvent;
|
|
58
82
|
// we should only use custom layout for full-page appearance
|
|
59
83
|
var canUseCustomLayout = expValEquals('platform_editor_remove_important_in_render_ext', 'isEnabled', true) ? rendererAppearance === 'full-page' : true;
|
|
60
84
|
var isCustomLayout = isTopLevel && ['wide', 'full-width'].includes(layout) && canUseCustomLayout;
|
|
@@ -69,6 +93,10 @@ export var renderExtension = function renderExtension(content, layout) {
|
|
|
69
93
|
var extensionHeight = nodeHeight || viewportSize;
|
|
70
94
|
var isInline = (shouldDisplayExtensionAsInline === null || shouldDisplayExtensionAsInline === void 0 ? void 0 : shouldDisplayExtensionAsInline(node)) && expValEquals('platform_editor_render_bodied_extension_as_inline', 'isEnabled', true);
|
|
71
95
|
var inlineClassName = isInline ? RendererCssClassName.EXTENSION_AS_INLINE : '';
|
|
96
|
+
var asInlineAnalytics = isInline && fireAnalyticsEvent && node && fg('platform_editor_render_inline_extension_analytics') ? jsx(FireExtensionAsInlineAnalytics, {
|
|
97
|
+
fireAnalyticsEvent: fireAnalyticsEvent,
|
|
98
|
+
node: node
|
|
99
|
+
}) : null;
|
|
72
100
|
if (expValEquals('platform_editor_renderer_extension_width_fix', 'isEnabled', true)) {
|
|
73
101
|
var extensionDiv = jsx("div", {
|
|
74
102
|
ref: options.handleRef
|
|
@@ -92,14 +120,14 @@ export var renderExtension = function renderExtension(content, layout) {
|
|
|
92
120
|
,
|
|
93
121
|
className: "".concat(RendererCssClassName.EXTENSION_INNER_WRAPPER, " ").concat(overflowContainerClass),
|
|
94
122
|
css: [!isInsideOfInlineExtension && fg('platform_fix_macro_renders_in_layouts') && containerStyle]
|
|
95
|
-
}, content));
|
|
123
|
+
}, asInlineAnalytics, content));
|
|
96
124
|
return centerAlignClass && expValEquals('platform_editor_flex_based_centering', 'isEnabled', true) ? jsx("div", {
|
|
97
125
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
|
|
98
126
|
className: RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + RendererCssClassName.FLEX_CENTER_WRAPPER
|
|
99
127
|
}, extensionDiv) : extensionDiv;
|
|
100
128
|
}
|
|
101
|
-
return jsx(WidthConsumer, null, function (
|
|
102
|
-
var width =
|
|
129
|
+
return jsx(WidthConsumer, null, function (_ref3) {
|
|
130
|
+
var width = _ref3.width;
|
|
103
131
|
var extensionDiv = jsx("div", {
|
|
104
132
|
ref: options.handleRef
|
|
105
133
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
|
|
@@ -121,7 +149,7 @@ export var renderExtension = function renderExtension(content, layout) {
|
|
|
121
149
|
,
|
|
122
150
|
className: "".concat(RendererCssClassName.EXTENSION_INNER_WRAPPER, " ").concat(overflowContainerClass),
|
|
123
151
|
css: [!isInsideOfInlineExtension && fg('platform_fix_macro_renders_in_layouts') && containerStyle]
|
|
124
|
-
}, content));
|
|
152
|
+
}, asInlineAnalytics, content));
|
|
125
153
|
return centerAlignClass && expValEquals('platform_editor_flex_based_centering', 'isEnabled', true) ? jsx("div", {
|
|
126
154
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
|
|
127
155
|
className: RendererCssClassName.STICKY_SAFE_CENTER_WRAPPER + ' ' + RendererCssClassName.FLEX_CENTER_WRAPPER
|
|
@@ -146,8 +174,8 @@ var Extension = function Extension(props) {
|
|
|
146
174
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
147
175
|
, _extends({}, props, {
|
|
148
176
|
type: "extension"
|
|
149
|
-
}), function (
|
|
150
|
-
var result =
|
|
177
|
+
}), function (_ref4) {
|
|
178
|
+
var result = _ref4.result;
|
|
151
179
|
try {
|
|
152
180
|
// Return the result directly if it's a valid JSX.Element
|
|
153
181
|
if (result && /*#__PURE__*/React.isValidElement(result)) {
|
|
@@ -62,7 +62,7 @@ export var DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
|
62
62
|
var TABLE_INFO_TIMEOUT = 10000;
|
|
63
63
|
var RENDER_EVENT_SAMPLE_RATE = 0.2;
|
|
64
64
|
var packageName = "@atlaskit/renderer";
|
|
65
|
-
var packageVersion = "
|
|
65
|
+
var packageVersion = "130.2.18";
|
|
66
66
|
var setAsQueryContainerStyles = css({
|
|
67
67
|
containerName: 'ak-renderer-wrapper',
|
|
68
68
|
containerType: 'inline-size'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, OperationalAEP, ExperienceEventPayload, TABLE_ACTION, SyncedBlockSSRErrorAEP } from '@atlaskit/editor-common/analytics';
|
|
1
|
+
import type { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, OperationalAEP, ExperienceEventPayload, TABLE_ACTION, SyncedBlockSSRErrorAEP, ExtensionType } from '@atlaskit/editor-common/analytics';
|
|
2
2
|
import type { AEP } from './enums';
|
|
3
3
|
import type { SortOrder } from '@atlaskit/editor-common/types';
|
|
4
4
|
import type { SEVERITY, UNSUPPORTED_CONTENT_LEVEL_SEVERITY, UnsupportedContentPayload, UnsupportedContentTooltipPayload } from '@atlaskit/editor-common/utils';
|
|
@@ -172,6 +172,10 @@ type ReferenceSyncedBlockUpdateErrorAEP = OperationalAEP<ACTION.ERROR, ACTION_SU
|
|
|
172
172
|
error: string;
|
|
173
173
|
resourceId?: string;
|
|
174
174
|
}>;
|
|
175
|
-
|
|
175
|
+
type ExtensionRenderedAsInlineAEP = OperationalAEP<ACTION.RENDERED, ACTION_SUBJECT.EXTENSION_AS_INLINE, ExtensionType, {
|
|
176
|
+
extensionKey: string;
|
|
177
|
+
extensionType: string;
|
|
178
|
+
}>;
|
|
179
|
+
export type AnalyticsEventPayload<_T = void> = RendererStartAEP | RendererRenderedAEP | RendererRenderedSampledAEP | ComponentCrashErrorAEP | RendererUnsupportedContentLevelsTrackingSucceeded | RendererUnsupportedContentLevelsTrackingErrored | RendererSelectAllCaughtAEP | RendererSelectAllEscapedAEP | CodeBlockCopyAEP | CodeBlockWrapAEP | HeadingAnchorLinkButtonAEP | HoverLabelAEP | AnchorLinkAEP | TableSortColumnNotAllowedAEP | TableSortColumnAEP | TableWidthInfoAEP | TableRendererHeightInfoAEP | VisitLinkAEP | VisitMediaLinkAEP | ExpandAEP | UnsupportedContentPayload | UnsupportedContentTooltipPayload | AnnotationAEP | AnnotationDeleteAEP | MediaLnkTransformedAEP | InvalidProsemirrorDocumentErrorAEP | NestedTableTransformedAEP | NativeEmbedsTransformedAEP | MediaRenderErrorEvent | SyncedBlockFetchErrorAEP | SyncedBlockGetSourceInfoErrorAEP | SyncedBlockSSRErrorAEP | ReferenceSyncedBlockUpdateErrorAEP | SyncedBlockFetchSuccessAEP | ExperienceEventPayload | ExtensionRenderedAsInlineAEP;
|
|
176
180
|
export type FireAnalyticsCallback = <T = void>(payload: AnalyticsEventPayload<T>) => void | undefined;
|
|
177
181
|
export {};
|
|
@@ -6,12 +6,14 @@ import type { ExtensionLayout } from '@atlaskit/adf-schema';
|
|
|
6
6
|
import type { ExtensionHandlers, ExtensionParams, Parameters } from '@atlaskit/editor-common/extensions';
|
|
7
7
|
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
8
8
|
import type { RendererAppearance } from '../../ui/Renderer/types';
|
|
9
|
+
import type { AnalyticsEventPayload } from '../../analytics/events';
|
|
9
10
|
interface Props {
|
|
10
11
|
content?: any;
|
|
11
12
|
extensionHandlers?: ExtensionHandlers;
|
|
12
13
|
extensionKey: string;
|
|
13
14
|
extensionType: string;
|
|
14
15
|
extensionViewportSizes?: ExtensionViewportSize[];
|
|
16
|
+
fireAnalyticsEvent?: (event: AnalyticsEventPayload) => void;
|
|
15
17
|
layout?: ExtensionLayout;
|
|
16
18
|
localId?: string;
|
|
17
19
|
marks?: PMMark[];
|
|
@@ -10,6 +10,7 @@ import type { ExtensionHandlers, ExtensionParams, Parameters } from '@atlaskit/e
|
|
|
10
10
|
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
11
11
|
import type { OverflowShadowProps, OverflowShadowState, ShadowObserver } from '@atlaskit/editor-common/ui';
|
|
12
12
|
import type { RendererAppearance } from '../../ui/Renderer/types';
|
|
13
|
+
import type { AnalyticsEventPayload } from '../../analytics/events';
|
|
13
14
|
interface Props {
|
|
14
15
|
extensionHandlers?: ExtensionHandlers;
|
|
15
16
|
extensionKey: string;
|
|
@@ -32,6 +33,7 @@ type AllOrNone<T> = T | {
|
|
|
32
33
|
[K in keyof T]?: never;
|
|
33
34
|
};
|
|
34
35
|
type RenderExtensionOptions = {
|
|
36
|
+
fireAnalyticsEvent?: (event: AnalyticsEventPayload) => void;
|
|
35
37
|
isTopLevel?: boolean;
|
|
36
38
|
rendererAppearance?: RendererAppearance;
|
|
37
39
|
} & AllOrNone<OverflowShadowProps>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, OperationalAEP, ExperienceEventPayload, TABLE_ACTION, SyncedBlockSSRErrorAEP } from '@atlaskit/editor-common/analytics';
|
|
1
|
+
import type { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, OperationalAEP, ExperienceEventPayload, TABLE_ACTION, SyncedBlockSSRErrorAEP, ExtensionType } from '@atlaskit/editor-common/analytics';
|
|
2
2
|
import type { AEP } from './enums';
|
|
3
3
|
import type { SortOrder } from '@atlaskit/editor-common/types';
|
|
4
4
|
import type { SEVERITY, UNSUPPORTED_CONTENT_LEVEL_SEVERITY, UnsupportedContentPayload, UnsupportedContentTooltipPayload } from '@atlaskit/editor-common/utils';
|
|
@@ -172,6 +172,10 @@ type ReferenceSyncedBlockUpdateErrorAEP = OperationalAEP<ACTION.ERROR, ACTION_SU
|
|
|
172
172
|
error: string;
|
|
173
173
|
resourceId?: string;
|
|
174
174
|
}>;
|
|
175
|
-
|
|
175
|
+
type ExtensionRenderedAsInlineAEP = OperationalAEP<ACTION.RENDERED, ACTION_SUBJECT.EXTENSION_AS_INLINE, ExtensionType, {
|
|
176
|
+
extensionKey: string;
|
|
177
|
+
extensionType: string;
|
|
178
|
+
}>;
|
|
179
|
+
export type AnalyticsEventPayload<_T = void> = RendererStartAEP | RendererRenderedAEP | RendererRenderedSampledAEP | ComponentCrashErrorAEP | RendererUnsupportedContentLevelsTrackingSucceeded | RendererUnsupportedContentLevelsTrackingErrored | RendererSelectAllCaughtAEP | RendererSelectAllEscapedAEP | CodeBlockCopyAEP | CodeBlockWrapAEP | HeadingAnchorLinkButtonAEP | HoverLabelAEP | AnchorLinkAEP | TableSortColumnNotAllowedAEP | TableSortColumnAEP | TableWidthInfoAEP | TableRendererHeightInfoAEP | VisitLinkAEP | VisitMediaLinkAEP | ExpandAEP | UnsupportedContentPayload | UnsupportedContentTooltipPayload | AnnotationAEP | AnnotationDeleteAEP | MediaLnkTransformedAEP | InvalidProsemirrorDocumentErrorAEP | NestedTableTransformedAEP | NativeEmbedsTransformedAEP | MediaRenderErrorEvent | SyncedBlockFetchErrorAEP | SyncedBlockGetSourceInfoErrorAEP | SyncedBlockSSRErrorAEP | ReferenceSyncedBlockUpdateErrorAEP | SyncedBlockFetchSuccessAEP | ExperienceEventPayload | ExtensionRenderedAsInlineAEP;
|
|
176
180
|
export type FireAnalyticsCallback = <T = void>(payload: AnalyticsEventPayload<T>) => void | undefined;
|
|
177
181
|
export {};
|
|
@@ -6,12 +6,14 @@ import type { ExtensionLayout } from '@atlaskit/adf-schema';
|
|
|
6
6
|
import type { ExtensionHandlers, ExtensionParams, Parameters } from '@atlaskit/editor-common/extensions';
|
|
7
7
|
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
8
8
|
import type { RendererAppearance } from '../../ui/Renderer/types';
|
|
9
|
+
import type { AnalyticsEventPayload } from '../../analytics/events';
|
|
9
10
|
interface Props {
|
|
10
11
|
content?: any;
|
|
11
12
|
extensionHandlers?: ExtensionHandlers;
|
|
12
13
|
extensionKey: string;
|
|
13
14
|
extensionType: string;
|
|
14
15
|
extensionViewportSizes?: ExtensionViewportSize[];
|
|
16
|
+
fireAnalyticsEvent?: (event: AnalyticsEventPayload) => void;
|
|
15
17
|
layout?: ExtensionLayout;
|
|
16
18
|
localId?: string;
|
|
17
19
|
marks?: PMMark[];
|
|
@@ -10,6 +10,7 @@ import type { ExtensionHandlers, ExtensionParams, Parameters } from '@atlaskit/e
|
|
|
10
10
|
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
11
11
|
import type { OverflowShadowProps, OverflowShadowState, ShadowObserver } from '@atlaskit/editor-common/ui';
|
|
12
12
|
import type { RendererAppearance } from '../../ui/Renderer/types';
|
|
13
|
+
import type { AnalyticsEventPayload } from '../../analytics/events';
|
|
13
14
|
interface Props {
|
|
14
15
|
extensionHandlers?: ExtensionHandlers;
|
|
15
16
|
extensionKey: string;
|
|
@@ -32,6 +33,7 @@ type AllOrNone<T> = T | {
|
|
|
32
33
|
[K in keyof T]?: never;
|
|
33
34
|
};
|
|
34
35
|
type RenderExtensionOptions = {
|
|
36
|
+
fireAnalyticsEvent?: (event: AnalyticsEventPayload) => void;
|
|
35
37
|
isTopLevel?: boolean;
|
|
36
38
|
rendererAppearance?: RendererAppearance;
|
|
37
39
|
} & AllOrNone<OverflowShadowProps>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/renderer",
|
|
3
|
-
"version": "130.
|
|
3
|
+
"version": "130.3.0",
|
|
4
4
|
"description": "Renderer component",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"uuid": "^3.1.0"
|
|
81
81
|
},
|
|
82
82
|
"peerDependencies": {
|
|
83
|
-
"@atlaskit/editor-common": "^114.
|
|
83
|
+
"@atlaskit/editor-common": "^114.16.0",
|
|
84
84
|
"@atlaskit/link-provider": "^4.3.0",
|
|
85
85
|
"@atlaskit/media-core": "^37.0.0",
|
|
86
86
|
"react": "^18.2.0",
|
|
@@ -140,6 +140,9 @@
|
|
|
140
140
|
}
|
|
141
141
|
},
|
|
142
142
|
"platform-feature-flags": {
|
|
143
|
+
"platform_editor_render_inline_extension_analytics": {
|
|
144
|
+
"type": "boolean"
|
|
145
|
+
},
|
|
143
146
|
"confluence_frontend_fix_date_hydration_error": {
|
|
144
147
|
"type": "boolean"
|
|
145
148
|
},
|