@atlaskit/editor-synced-block-renderer 5.1.0 → 5.2.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 CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaskit/editor-synced-block-renderer
2
2
 
3
+ ## 5.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`8100ae00326b4`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8100ae00326b4) -
8
+ EDITOR-2850-add media ssr support for sync blocks
9
+
10
+ ### Patch Changes
11
+
12
+ - [`fff45a651440a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/fff45a651440a) -
13
+ EDITOR-1665 add experience tracking analytics for sync block save, fetch and delete
14
+ - Updated dependencies
15
+
3
16
  ## 5.1.0
4
17
 
5
18
  ### Minor Changes
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "../../../../tsconfig.entry-points.confluence.json",
2
+ "extends": "../../../../tsconfig.local-consumption.json",
3
3
  "compilerOptions": {
4
4
  "target": "es5",
5
5
  "outDir": "../../../../../confluence/tsDist/@atlaskit__editor-synced-block-renderer",
@@ -47,6 +47,9 @@
47
47
  {
48
48
  "path": "../../../design-system/image/afm-jira/tsconfig.json"
49
49
  },
50
+ {
51
+ "path": "../../../platform/feature-flags/afm-jira/tsconfig.json"
52
+ },
50
53
  {
51
54
  "path": "../../../design-system/primitives/afm-jira/tsconfig.json"
52
55
  },
@@ -47,6 +47,9 @@
47
47
  {
48
48
  "path": "../../../design-system/image/afm-products/tsconfig.json"
49
49
  },
50
+ {
51
+ "path": "../../../platform/feature-flags/afm-products/tsconfig.json"
52
+ },
50
53
  {
51
54
  "path": "../../../design-system/primitives/afm-products/tsconfig.json"
52
55
  },
@@ -10,6 +10,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
  var _syncBlock = require("@atlaskit/editor-common/sync-block");
12
12
  var _editorSyncedBlockProvider = require("@atlaskit/editor-synced-block-provider");
13
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
14
+ var _experienceTracking = require("../utils/experience-tracking");
13
15
  var _AKRendererWrapper = require("./AKRendererWrapper");
14
16
  var _SyncedBlockErrorComponent = require("./SyncedBlockErrorComponent");
15
17
  var _SyncedBlockLoadingState = require("./SyncedBlockLoadingState");
@@ -21,6 +23,9 @@ var SyncedBlockNodeComponentRenderer = exports.SyncedBlockNodeComponentRenderer
21
23
  localId = nodeProps.localId,
22
24
  fireAnalyticsEvent = nodeProps.fireAnalyticsEvent;
23
25
  syncBlockStoreManager.referenceManager.updateFireAnalyticsEvent(fireAnalyticsEvent);
26
+ if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
27
+ (0, _experienceTracking.setupExperienceTracking)(syncBlockStoreManager, fireAnalyticsEvent);
28
+ }
24
29
  var _useFetchSyncBlockDat = (0, _editorSyncedBlockProvider.useFetchSyncBlockData)(syncBlockStoreManager, resourceId, localId, fireAnalyticsEvent),
25
30
  syncBlockInstance = _useFetchSyncBlockDat.syncBlockInstance,
26
31
  isLoading = _useFetchSyncBlockDat.isLoading,
@@ -1,17 +1,23 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.SyncedBlockRenderer = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
10
  var _react = _interopRequireWildcard(require("react"));
11
+ var _coreUtils = require("@atlaskit/editor-common/core-utils");
9
12
  var _hooks = require("@atlaskit/editor-common/hooks");
10
13
  var _editorSyncedBlockProvider = require("@atlaskit/editor-synced-block-provider");
14
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
15
  var _AKRendererWrapper = require("./AKRendererWrapper");
12
16
  var _SyncedBlockErrorComponent = require("./SyncedBlockErrorComponent");
13
17
  var _SyncedBlockLoadingState = require("./SyncedBlockLoadingState");
14
18
  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); }
19
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
21
  var SyncedBlockRendererComponent = function SyncedBlockRendererComponent(_ref) {
16
22
  var useFetchSyncBlockData = _ref.useFetchSyncBlockData,
17
23
  syncBlockRendererOptions = _ref.syncBlockRendererOptions,
@@ -20,7 +26,25 @@ var SyncedBlockRendererComponent = function SyncedBlockRendererComponent(_ref) {
20
26
  syncBlockInstance = _useFetchSyncBlockDat.syncBlockInstance,
21
27
  providerFactory = _useFetchSyncBlockDat.providerFactory,
22
28
  isLoading = _useFetchSyncBlockDat.isLoading,
23
- reloadData = _useFetchSyncBlockDat.reloadData;
29
+ reloadData = _useFetchSyncBlockDat.reloadData,
30
+ ssrProviders = _useFetchSyncBlockDat.ssrProviders;
31
+ var rendererOptions = (0, _react.useMemo)(function () {
32
+ var _syncBlockRendererOpt, _ssrProviders$media;
33
+ if (!(0, _coreUtils.isSSR)() || syncBlockRendererOptions !== null && syncBlockRendererOptions !== void 0 && (_syncBlockRendererOpt = syncBlockRendererOptions.media) !== null && _syncBlockRendererOpt !== void 0 && _syncBlockRendererOpt.ssr ||
34
+ // already has ssr config
35
+ !(ssrProviders !== null && ssrProviders !== void 0 && (_ssrProviders$media = ssrProviders.media) !== null && _ssrProviders$media !== void 0 && _ssrProviders$media.viewMediaClientConfig) || !(0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
36
+ return syncBlockRendererOptions;
37
+ }
38
+ var mediaSSR = {
39
+ mode: 'server',
40
+ config: ssrProviders === null || ssrProviders === void 0 ? void 0 : ssrProviders.media.viewMediaClientConfig
41
+ };
42
+ return _objectSpread(_objectSpread({}, syncBlockRendererOptions), {}, {
43
+ media: _objectSpread(_objectSpread({}, (syncBlockRendererOptions === null || syncBlockRendererOptions === void 0 ? void 0 : syncBlockRendererOptions.media) || {}), {}, {
44
+ ssr: mediaSSR
45
+ })
46
+ });
47
+ }, [syncBlockRendererOptions, ssrProviders]);
24
48
  var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['connectivity'], function (_ref2) {
25
49
  var connectivityState = _ref2.connectivityState;
26
50
  return {
@@ -54,7 +78,7 @@ var SyncedBlockRendererComponent = function SyncedBlockRendererComponent(_ref) {
54
78
  return /*#__PURE__*/_react.default.createElement(_AKRendererWrapper.AKRendererWrapper, {
55
79
  doc: syncBlockDoc,
56
80
  dataProviders: providerFactory,
57
- options: syncBlockRendererOptions
81
+ options: rendererOptions
58
82
  });
59
83
  };
60
84
  var SyncedBlockRenderer = exports.SyncedBlockRenderer = /*#__PURE__*/(0, _react.memo)(SyncedBlockRendererComponent);
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setupExperienceTracking = exports.getSaveReferenceExperience = exports.getFetchSourceInfoExperience = exports.getFetchExperience = exports.createExperienceDispatcher = void 0;
7
+ var _analytics = require("@atlaskit/editor-common/analytics");
8
+ var _experiences = require("@atlaskit/editor-common/experiences");
9
+ var setupExperienceTracking = exports.setupExperienceTracking = function setupExperienceTracking(syncBlockStoreManager, fireAnalyticsEvent) {
10
+ if (!fireAnalyticsEvent) {
11
+ return;
12
+ }
13
+ var dispatchAnalyticsEvent = createExperienceDispatcher(fireAnalyticsEvent);
14
+ syncBlockStoreManager.referenceManager.setExperiences(getFetchExperience(dispatchAnalyticsEvent), getFetchSourceInfoExperience(dispatchAnalyticsEvent), getSaveReferenceExperience(dispatchAnalyticsEvent));
15
+ };
16
+ var createExperienceDispatcher = exports.createExperienceDispatcher = function createExperienceDispatcher(fireAnalyticsEvent) {
17
+ return function (payload) {
18
+ // Runtime type guard - only forward experience events
19
+ if (payload.action === 'experienceMeasured' || payload.action === 'experienceSampled') {
20
+ fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 || fireAnalyticsEvent(payload);
21
+ }
22
+ };
23
+ };
24
+
25
+ /**
26
+ * This experience tracks when a reference sync block data is fetched from the BE.
27
+ *
28
+ * Start: When the fetchNodesData function is called.
29
+ * Success: When the fetching the data is successful within 1500ms of start.
30
+ * Failure: When 1500ms passes without the data being successfully fetched, or the fetch fails
31
+ */
32
+ var getFetchExperience = exports.getFetchExperience = function getFetchExperience(dispatchAnalyticsEvent) {
33
+ return new _experiences.Experience(_analytics.ACTION_SUBJECT.SYNCED_BLOCK, {
34
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH,
35
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
36
+ checks: [new _experiences.ExperienceCheckTimeout({
37
+ durationMs: 1500
38
+ })]
39
+ });
40
+ };
41
+
42
+ /**
43
+ * This experience tracks when a reference sync block source info data (title, url) is fetched from the BE.
44
+ *
45
+ * Start: When the fetchSourceInfo function is called.
46
+ * Success: When the fetching the data is successful within 2500ms of start.
47
+ * Failure: When 2500ms passes without the data being successfully fetched, or the fetch fails
48
+ */
49
+ var getFetchSourceInfoExperience = exports.getFetchSourceInfoExperience = function getFetchSourceInfoExperience(dispatchAnalyticsEvent) {
50
+ return new _experiences.Experience(_analytics.ACTION_SUBJECT.SYNCED_BLOCK, {
51
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_GET_SOURCE_INFO,
52
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
53
+ checks: [new _experiences.ExperienceCheckTimeout({
54
+ durationMs: 2500
55
+ })]
56
+ });
57
+ };
58
+
59
+ /**
60
+ * This experience tracks when a reference sync block is saved to the BE.
61
+ *
62
+ * Start: When the flush sync block function is called.
63
+ * Success: When the sync block save is successful within 1500ms of start.
64
+ * Failure: When 1500ms passes before the sync block save is marked as successful
65
+ */
66
+ var getSaveReferenceExperience = exports.getSaveReferenceExperience = function getSaveReferenceExperience(dispatchAnalyticsEvent) {
67
+ return new _experiences.Experience(_analytics.ACTION_SUBJECT.SYNCED_BLOCK, {
68
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_UPDATE,
69
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
70
+ checks: [new _experiences.ExperienceCheckTimeout({
71
+ durationMs: 1500
72
+ })]
73
+ });
74
+ };
@@ -1,6 +1,8 @@
1
1
  import React from 'react';
2
2
  import { SyncBlockSharedCssClassName, SyncBlockRendererDataAttributeName } from '@atlaskit/editor-common/sync-block';
3
3
  import { SyncBlockError, useFetchSyncBlockData } from '@atlaskit/editor-synced-block-provider';
4
+ import { fg } from '@atlaskit/platform-feature-flags';
5
+ import { setupExperienceTracking } from '../utils/experience-tracking';
4
6
  import { AKRendererWrapper } from './AKRendererWrapper';
5
7
  import { SyncedBlockErrorComponent } from './SyncedBlockErrorComponent';
6
8
  import { SyncedBlockLoadingState } from './SyncedBlockLoadingState';
@@ -15,6 +17,9 @@ export const SyncedBlockNodeComponentRenderer = ({
15
17
  fireAnalyticsEvent
16
18
  } = nodeProps;
17
19
  syncBlockStoreManager.referenceManager.updateFireAnalyticsEvent(fireAnalyticsEvent);
20
+ if (fg('platform_synced_block_dogfooding')) {
21
+ setupExperienceTracking(syncBlockStoreManager, fireAnalyticsEvent);
22
+ }
18
23
  const {
19
24
  syncBlockInstance,
20
25
  isLoading,
@@ -1,6 +1,8 @@
1
- import React, { memo } from 'react';
1
+ import React, { memo, useMemo } from 'react';
2
+ import { isSSR } from '@atlaskit/editor-common/core-utils';
2
3
  import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
3
4
  import { SyncBlockError } from '@atlaskit/editor-synced-block-provider';
5
+ import { fg } from '@atlaskit/platform-feature-flags';
4
6
  import { AKRendererWrapper } from './AKRendererWrapper';
5
7
  import { SyncedBlockErrorComponent } from './SyncedBlockErrorComponent';
6
8
  import { SyncedBlockLoadingState } from './SyncedBlockLoadingState';
@@ -13,8 +15,28 @@ const SyncedBlockRendererComponent = ({
13
15
  syncBlockInstance,
14
16
  providerFactory,
15
17
  isLoading,
16
- reloadData
18
+ reloadData,
19
+ ssrProviders
17
20
  } = useFetchSyncBlockData();
21
+ const rendererOptions = useMemo(() => {
22
+ var _syncBlockRendererOpt, _ssrProviders$media;
23
+ if (!isSSR() || syncBlockRendererOptions !== null && syncBlockRendererOptions !== void 0 && (_syncBlockRendererOpt = syncBlockRendererOptions.media) !== null && _syncBlockRendererOpt !== void 0 && _syncBlockRendererOpt.ssr ||
24
+ // already has ssr config
25
+ !(ssrProviders !== null && ssrProviders !== void 0 && (_ssrProviders$media = ssrProviders.media) !== null && _ssrProviders$media !== void 0 && _ssrProviders$media.viewMediaClientConfig) || !fg('platform_synced_block_dogfooding')) {
26
+ return syncBlockRendererOptions;
27
+ }
28
+ const mediaSSR = {
29
+ mode: 'server',
30
+ config: ssrProviders === null || ssrProviders === void 0 ? void 0 : ssrProviders.media.viewMediaClientConfig
31
+ };
32
+ return {
33
+ ...syncBlockRendererOptions,
34
+ media: {
35
+ ...((syncBlockRendererOptions === null || syncBlockRendererOptions === void 0 ? void 0 : syncBlockRendererOptions.media) || {}),
36
+ ssr: mediaSSR
37
+ }
38
+ };
39
+ }, [syncBlockRendererOptions, ssrProviders]);
18
40
  const {
19
41
  isInternetOffline
20
42
  } = useSharedPluginStateWithSelector(api, ['connectivity'], ({
@@ -48,7 +70,7 @@ const SyncedBlockRendererComponent = ({
48
70
  return /*#__PURE__*/React.createElement(AKRendererWrapper, {
49
71
  doc: syncBlockDoc,
50
72
  dataProviders: providerFactory,
51
- options: syncBlockRendererOptions
73
+ options: rendererOptions
52
74
  });
53
75
  };
54
76
  export const SyncedBlockRenderer = /*#__PURE__*/memo(SyncedBlockRendererComponent);
@@ -0,0 +1,68 @@
1
+ import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
2
+ import { Experience, ExperienceCheckTimeout } from '@atlaskit/editor-common/experiences';
3
+ export const setupExperienceTracking = (syncBlockStoreManager, fireAnalyticsEvent) => {
4
+ if (!fireAnalyticsEvent) {
5
+ return;
6
+ }
7
+ const dispatchAnalyticsEvent = createExperienceDispatcher(fireAnalyticsEvent);
8
+ syncBlockStoreManager.referenceManager.setExperiences(getFetchExperience(dispatchAnalyticsEvent), getFetchSourceInfoExperience(dispatchAnalyticsEvent), getSaveReferenceExperience(dispatchAnalyticsEvent));
9
+ };
10
+ export const createExperienceDispatcher = fireAnalyticsEvent => {
11
+ return payload => {
12
+ // Runtime type guard - only forward experience events
13
+ if (payload.action === 'experienceMeasured' || payload.action === 'experienceSampled') {
14
+ fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 ? void 0 : fireAnalyticsEvent(payload);
15
+ }
16
+ };
17
+ };
18
+
19
+ /**
20
+ * This experience tracks when a reference sync block data is fetched from the BE.
21
+ *
22
+ * Start: When the fetchNodesData function is called.
23
+ * Success: When the fetching the data is successful within 1500ms of start.
24
+ * Failure: When 1500ms passes without the data being successfully fetched, or the fetch fails
25
+ */
26
+ export const getFetchExperience = dispatchAnalyticsEvent => {
27
+ return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
28
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH,
29
+ dispatchAnalyticsEvent,
30
+ checks: [new ExperienceCheckTimeout({
31
+ durationMs: 1500
32
+ })]
33
+ });
34
+ };
35
+
36
+ /**
37
+ * This experience tracks when a reference sync block source info data (title, url) is fetched from the BE.
38
+ *
39
+ * Start: When the fetchSourceInfo function is called.
40
+ * Success: When the fetching the data is successful within 2500ms of start.
41
+ * Failure: When 2500ms passes without the data being successfully fetched, or the fetch fails
42
+ */
43
+ export const getFetchSourceInfoExperience = dispatchAnalyticsEvent => {
44
+ return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
45
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_GET_SOURCE_INFO,
46
+ dispatchAnalyticsEvent,
47
+ checks: [new ExperienceCheckTimeout({
48
+ durationMs: 2500
49
+ })]
50
+ });
51
+ };
52
+
53
+ /**
54
+ * This experience tracks when a reference sync block is saved to the BE.
55
+ *
56
+ * Start: When the flush sync block function is called.
57
+ * Success: When the sync block save is successful within 1500ms of start.
58
+ * Failure: When 1500ms passes before the sync block save is marked as successful
59
+ */
60
+ export const getSaveReferenceExperience = dispatchAnalyticsEvent => {
61
+ return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
62
+ actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_UPDATE,
63
+ dispatchAnalyticsEvent,
64
+ checks: [new ExperienceCheckTimeout({
65
+ durationMs: 1500
66
+ })]
67
+ });
68
+ };
@@ -3,6 +3,8 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import React from 'react';
4
4
  import { SyncBlockSharedCssClassName, SyncBlockRendererDataAttributeName } from '@atlaskit/editor-common/sync-block';
5
5
  import { SyncBlockError, useFetchSyncBlockData } from '@atlaskit/editor-synced-block-provider';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
7
+ import { setupExperienceTracking } from '../utils/experience-tracking';
6
8
  import { AKRendererWrapper } from './AKRendererWrapper';
7
9
  import { SyncedBlockErrorComponent } from './SyncedBlockErrorComponent';
8
10
  import { SyncedBlockLoadingState } from './SyncedBlockLoadingState';
@@ -14,6 +16,9 @@ export var SyncedBlockNodeComponentRenderer = function SyncedBlockNodeComponentR
14
16
  localId = nodeProps.localId,
15
17
  fireAnalyticsEvent = nodeProps.fireAnalyticsEvent;
16
18
  syncBlockStoreManager.referenceManager.updateFireAnalyticsEvent(fireAnalyticsEvent);
19
+ if (fg('platform_synced_block_dogfooding')) {
20
+ setupExperienceTracking(syncBlockStoreManager, fireAnalyticsEvent);
21
+ }
17
22
  var _useFetchSyncBlockDat = useFetchSyncBlockData(syncBlockStoreManager, resourceId, localId, fireAnalyticsEvent),
18
23
  syncBlockInstance = _useFetchSyncBlockDat.syncBlockInstance,
19
24
  isLoading = _useFetchSyncBlockDat.isLoading,
@@ -1,6 +1,11 @@
1
- import React, { memo } from 'react';
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import React, { memo, useMemo } from 'react';
5
+ import { isSSR } from '@atlaskit/editor-common/core-utils';
2
6
  import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
3
7
  import { SyncBlockError } from '@atlaskit/editor-synced-block-provider';
8
+ import { fg } from '@atlaskit/platform-feature-flags';
4
9
  import { AKRendererWrapper } from './AKRendererWrapper';
5
10
  import { SyncedBlockErrorComponent } from './SyncedBlockErrorComponent';
6
11
  import { SyncedBlockLoadingState } from './SyncedBlockLoadingState';
@@ -12,7 +17,25 @@ var SyncedBlockRendererComponent = function SyncedBlockRendererComponent(_ref) {
12
17
  syncBlockInstance = _useFetchSyncBlockDat.syncBlockInstance,
13
18
  providerFactory = _useFetchSyncBlockDat.providerFactory,
14
19
  isLoading = _useFetchSyncBlockDat.isLoading,
15
- reloadData = _useFetchSyncBlockDat.reloadData;
20
+ reloadData = _useFetchSyncBlockDat.reloadData,
21
+ ssrProviders = _useFetchSyncBlockDat.ssrProviders;
22
+ var rendererOptions = useMemo(function () {
23
+ var _syncBlockRendererOpt, _ssrProviders$media;
24
+ if (!isSSR() || syncBlockRendererOptions !== null && syncBlockRendererOptions !== void 0 && (_syncBlockRendererOpt = syncBlockRendererOptions.media) !== null && _syncBlockRendererOpt !== void 0 && _syncBlockRendererOpt.ssr ||
25
+ // already has ssr config
26
+ !(ssrProviders !== null && ssrProviders !== void 0 && (_ssrProviders$media = ssrProviders.media) !== null && _ssrProviders$media !== void 0 && _ssrProviders$media.viewMediaClientConfig) || !fg('platform_synced_block_dogfooding')) {
27
+ return syncBlockRendererOptions;
28
+ }
29
+ var mediaSSR = {
30
+ mode: 'server',
31
+ config: ssrProviders === null || ssrProviders === void 0 ? void 0 : ssrProviders.media.viewMediaClientConfig
32
+ };
33
+ return _objectSpread(_objectSpread({}, syncBlockRendererOptions), {}, {
34
+ media: _objectSpread(_objectSpread({}, (syncBlockRendererOptions === null || syncBlockRendererOptions === void 0 ? void 0 : syncBlockRendererOptions.media) || {}), {}, {
35
+ ssr: mediaSSR
36
+ })
37
+ });
38
+ }, [syncBlockRendererOptions, ssrProviders]);
16
39
  var _useSharedPluginState = useSharedPluginStateWithSelector(api, ['connectivity'], function (_ref2) {
17
40
  var connectivityState = _ref2.connectivityState;
18
41
  return {
@@ -46,7 +69,7 @@ var SyncedBlockRendererComponent = function SyncedBlockRendererComponent(_ref) {
46
69
  return /*#__PURE__*/React.createElement(AKRendererWrapper, {
47
70
  doc: syncBlockDoc,
48
71
  dataProviders: providerFactory,
49
- options: syncBlockRendererOptions
72
+ options: rendererOptions
50
73
  });
51
74
  };
52
75
  export var SyncedBlockRenderer = /*#__PURE__*/memo(SyncedBlockRendererComponent);
@@ -0,0 +1,68 @@
1
+ import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
2
+ import { Experience, ExperienceCheckTimeout } from '@atlaskit/editor-common/experiences';
3
+ export var setupExperienceTracking = function setupExperienceTracking(syncBlockStoreManager, fireAnalyticsEvent) {
4
+ if (!fireAnalyticsEvent) {
5
+ return;
6
+ }
7
+ var dispatchAnalyticsEvent = createExperienceDispatcher(fireAnalyticsEvent);
8
+ syncBlockStoreManager.referenceManager.setExperiences(getFetchExperience(dispatchAnalyticsEvent), getFetchSourceInfoExperience(dispatchAnalyticsEvent), getSaveReferenceExperience(dispatchAnalyticsEvent));
9
+ };
10
+ export var createExperienceDispatcher = function createExperienceDispatcher(fireAnalyticsEvent) {
11
+ return function (payload) {
12
+ // Runtime type guard - only forward experience events
13
+ if (payload.action === 'experienceMeasured' || payload.action === 'experienceSampled') {
14
+ fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 || fireAnalyticsEvent(payload);
15
+ }
16
+ };
17
+ };
18
+
19
+ /**
20
+ * This experience tracks when a reference sync block data is fetched from the BE.
21
+ *
22
+ * Start: When the fetchNodesData function is called.
23
+ * Success: When the fetching the data is successful within 1500ms of start.
24
+ * Failure: When 1500ms passes without the data being successfully fetched, or the fetch fails
25
+ */
26
+ export var getFetchExperience = function getFetchExperience(dispatchAnalyticsEvent) {
27
+ return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
28
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH,
29
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
30
+ checks: [new ExperienceCheckTimeout({
31
+ durationMs: 1500
32
+ })]
33
+ });
34
+ };
35
+
36
+ /**
37
+ * This experience tracks when a reference sync block source info data (title, url) is fetched from the BE.
38
+ *
39
+ * Start: When the fetchSourceInfo function is called.
40
+ * Success: When the fetching the data is successful within 2500ms of start.
41
+ * Failure: When 2500ms passes without the data being successfully fetched, or the fetch fails
42
+ */
43
+ export var getFetchSourceInfoExperience = function getFetchSourceInfoExperience(dispatchAnalyticsEvent) {
44
+ return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
45
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_GET_SOURCE_INFO,
46
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
47
+ checks: [new ExperienceCheckTimeout({
48
+ durationMs: 2500
49
+ })]
50
+ });
51
+ };
52
+
53
+ /**
54
+ * This experience tracks when a reference sync block is saved to the BE.
55
+ *
56
+ * Start: When the flush sync block function is called.
57
+ * Success: When the sync block save is successful within 1500ms of start.
58
+ * Failure: When 1500ms passes before the sync block save is marked as successful
59
+ */
60
+ export var getSaveReferenceExperience = function getSaveReferenceExperience(dispatchAnalyticsEvent) {
61
+ return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
62
+ actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_UPDATE,
63
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
64
+ checks: [new ExperienceCheckTimeout({
65
+ durationMs: 1500
66
+ })]
67
+ });
68
+ };
@@ -0,0 +1,30 @@
1
+ import { type DispatchAnalyticsEvent } from '@atlaskit/editor-common/analytics';
2
+ import { Experience } from '@atlaskit/editor-common/experiences';
3
+ import type { SyncBlockStoreManager } from '@atlaskit/editor-synced-block-provider';
4
+ import type { AnalyticsEventPayload as RendererAnalyticsEventPayload } from '@atlaskit/renderer';
5
+ export declare const setupExperienceTracking: (syncBlockStoreManager: SyncBlockStoreManager, fireAnalyticsEvent?: ((payload: RendererAnalyticsEventPayload) => void)) => void;
6
+ export declare const createExperienceDispatcher: (fireAnalyticsEvent?: ((payload: RendererAnalyticsEventPayload) => void)) => DispatchAnalyticsEvent;
7
+ /**
8
+ * This experience tracks when a reference sync block data is fetched from the BE.
9
+ *
10
+ * Start: When the fetchNodesData function is called.
11
+ * Success: When the fetching the data is successful within 1500ms of start.
12
+ * Failure: When 1500ms passes without the data being successfully fetched, or the fetch fails
13
+ */
14
+ export declare const getFetchExperience: (dispatchAnalyticsEvent: DispatchAnalyticsEvent) => Experience;
15
+ /**
16
+ * This experience tracks when a reference sync block source info data (title, url) is fetched from the BE.
17
+ *
18
+ * Start: When the fetchSourceInfo function is called.
19
+ * Success: When the fetching the data is successful within 2500ms of start.
20
+ * Failure: When 2500ms passes without the data being successfully fetched, or the fetch fails
21
+ */
22
+ export declare const getFetchSourceInfoExperience: (dispatchAnalyticsEvent: DispatchAnalyticsEvent) => Experience;
23
+ /**
24
+ * This experience tracks when a reference sync block is saved to the BE.
25
+ *
26
+ * Start: When the flush sync block function is called.
27
+ * Success: When the sync block save is successful within 1500ms of start.
28
+ * Failure: When 1500ms passes before the sync block save is marked as successful
29
+ */
30
+ export declare const getSaveReferenceExperience: (dispatchAnalyticsEvent: DispatchAnalyticsEvent) => Experience;
@@ -0,0 +1,30 @@
1
+ import { type DispatchAnalyticsEvent } from '@atlaskit/editor-common/analytics';
2
+ import { Experience } from '@atlaskit/editor-common/experiences';
3
+ import type { SyncBlockStoreManager } from '@atlaskit/editor-synced-block-provider';
4
+ import type { AnalyticsEventPayload as RendererAnalyticsEventPayload } from '@atlaskit/renderer';
5
+ export declare const setupExperienceTracking: (syncBlockStoreManager: SyncBlockStoreManager, fireAnalyticsEvent?: ((payload: RendererAnalyticsEventPayload) => void)) => void;
6
+ export declare const createExperienceDispatcher: (fireAnalyticsEvent?: ((payload: RendererAnalyticsEventPayload) => void)) => DispatchAnalyticsEvent;
7
+ /**
8
+ * This experience tracks when a reference sync block data is fetched from the BE.
9
+ *
10
+ * Start: When the fetchNodesData function is called.
11
+ * Success: When the fetching the data is successful within 1500ms of start.
12
+ * Failure: When 1500ms passes without the data being successfully fetched, or the fetch fails
13
+ */
14
+ export declare const getFetchExperience: (dispatchAnalyticsEvent: DispatchAnalyticsEvent) => Experience;
15
+ /**
16
+ * This experience tracks when a reference sync block source info data (title, url) is fetched from the BE.
17
+ *
18
+ * Start: When the fetchSourceInfo function is called.
19
+ * Success: When the fetching the data is successful within 2500ms of start.
20
+ * Failure: When 2500ms passes without the data being successfully fetched, or the fetch fails
21
+ */
22
+ export declare const getFetchSourceInfoExperience: (dispatchAnalyticsEvent: DispatchAnalyticsEvent) => Experience;
23
+ /**
24
+ * This experience tracks when a reference sync block is saved to the BE.
25
+ *
26
+ * Start: When the flush sync block function is called.
27
+ * Success: When the sync block save is successful within 1500ms of start.
28
+ * Failure: When 1500ms passes before the sync block save is marked as successful
29
+ */
30
+ export declare const getSaveReferenceExperience: (dispatchAnalyticsEvent: DispatchAnalyticsEvent) => Experience;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-synced-block-renderer",
3
- "version": "5.1.0",
3
+ "version": "5.2.0",
4
4
  "description": "SyncedBlockRenderer for @atlaskit/editor-plugin-synced-block",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -31,23 +31,23 @@
31
31
  "@atlaskit/button": "^23.9.0",
32
32
  "@atlaskit/css": "^0.19.0",
33
33
  "@atlaskit/editor-plugin-synced-block": "^5.1.0",
34
- "@atlaskit/editor-synced-block-provider": "^3.5.0",
34
+ "@atlaskit/editor-synced-block-provider": "^3.6.0",
35
35
  "@atlaskit/heading": "^5.2.0",
36
36
  "@atlaskit/icon": "^29.4.0",
37
37
  "@atlaskit/icon-lab": "^5.14.0",
38
38
  "@atlaskit/image": "^3.0.0",
39
39
  "@atlaskit/platform-feature-flags": "^1.1.0",
40
40
  "@atlaskit/primitives": "^17.0.0",
41
- "@atlaskit/renderer": "^125.2.0",
41
+ "@atlaskit/renderer": "^125.4.0",
42
42
  "@atlaskit/spinner": "^19.0.0",
43
43
  "@atlaskit/tokens": "^9.1.0",
44
- "@atlaskit/tooltip": "^20.12.0",
44
+ "@atlaskit/tooltip": "^20.14.0",
45
45
  "@babel/runtime": "^7.0.0",
46
46
  "react-relay": "npm:atl-react-relay@0.0.0-main-39e79f66",
47
47
  "relay-runtime": "npm:atl-relay-runtime@0.0.0-main-39e79f66"
48
48
  },
49
49
  "peerDependencies": {
50
- "@atlaskit/editor-common": "^111.7.0",
50
+ "@atlaskit/editor-common": "^111.8.0",
51
51
  "react": "^18.2.0",
52
52
  "react-intl-next": "npm:react-intl@^5.18.1"
53
53
  },
@@ -1,22 +0,0 @@
1
- {
2
- "extends": "../tsconfig",
3
- "compilerOptions": {
4
- "target": "es5",
5
- "paths": {}
6
- },
7
- "include": [
8
- "../src/**/*.ts",
9
- "../src/**/*.tsx"
10
- ],
11
- "exclude": [
12
- "../src/**/__tests__/*",
13
- "../src/**/*.test.*",
14
- "../src/**/test.*",
15
- "../src/**/examples.*",
16
- "../src/**/examples/*",
17
- "../src/**/examples/**/*",
18
- "../src/**/*.stories.*",
19
- "../src/**/stories/*",
20
- "../src/**/stories/**/*"
21
- ]
22
- }