@atlaskit/smart-card 21.2.0 → 22.1.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.
Files changed (128) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/cjs/extractors/block/index.js +6 -7
  3. package/dist/cjs/extractors/common/actions/extractPreviewAction.js +16 -19
  4. package/dist/cjs/state/actions/index.js +54 -10
  5. package/dist/cjs/state/analytics/types.js +5 -0
  6. package/dist/cjs/state/analytics/useSmartLinkAnalytics.js +429 -109
  7. package/dist/cjs/state/hooks-external/useSmartLinkActions.js +5 -3
  8. package/dist/cjs/utils/analytics/analytics.js +241 -74
  9. package/dist/cjs/utils/analytics/index.js +32 -5
  10. package/dist/cjs/utils/mocks.js +28 -2
  11. package/dist/cjs/version.json +1 -1
  12. package/dist/cjs/view/BlockCard/actions/PreviewAction.js +2 -2
  13. package/dist/cjs/view/BlockCard/index.js +6 -5
  14. package/dist/cjs/view/CardWithUrl/component.js +27 -5
  15. package/dist/cjs/view/CardWithUrl/loader.js +6 -1
  16. package/dist/cjs/view/EmbedCard/index.js +3 -2
  17. package/dist/cjs/view/EmbedModal/components/analytics/index.js +100 -0
  18. package/dist/cjs/view/EmbedModal/components/analytics/types.js +5 -0
  19. package/dist/cjs/view/EmbedModal/components/size-experiment/index.js +5 -10
  20. package/dist/cjs/view/EmbedModal/index.js +54 -15
  21. package/dist/cjs/view/EmbedModal/types.js +9 -1
  22. package/dist/cjs/view/FlexibleCard/components/blocks/block/index.js +17 -3
  23. package/dist/cjs/view/FlexibleCard/components/blocks/preview-block/index.js +5 -2
  24. package/dist/cjs/view/FlexibleCard/components/common/image-icon/index.js +4 -2
  25. package/dist/cjs/view/FlexibleCard/components/common/loading-skeleton/index.js +1 -2
  26. package/dist/cjs/view/FlexibleCard/components/elements/media/index.js +5 -2
  27. package/dist/cjs/view/HoverCard/components/HoverCardComponent.js +11 -3
  28. package/dist/cjs/view/HoverCard/components/HoverCardContent.js +36 -8
  29. package/dist/cjs/view/HoverCard/components/SnippetOrPreview.js +74 -0
  30. package/dist/cjs/view/HoverCard/index.js +6 -1
  31. package/dist/cjs/view/HoverCard/styled.js +11 -3
  32. package/dist/cjs/view/common/Modal.js +29 -4
  33. package/dist/cjs/view/common/ModalHeader.js +3 -2
  34. package/dist/es2019/extractors/block/index.js +6 -7
  35. package/dist/es2019/extractors/common/actions/extractPreviewAction.js +16 -10
  36. package/dist/es2019/state/actions/index.js +54 -10
  37. package/dist/es2019/state/analytics/types.js +1 -0
  38. package/dist/es2019/state/analytics/useSmartLinkAnalytics.js +424 -41
  39. package/dist/es2019/state/hooks-external/useSmartLinkActions.js +5 -3
  40. package/dist/es2019/utils/analytics/analytics.js +254 -79
  41. package/dist/es2019/utils/analytics/index.js +32 -4
  42. package/dist/es2019/utils/mocks.js +26 -1
  43. package/dist/es2019/version.json +1 -1
  44. package/dist/es2019/view/BlockCard/actions/PreviewAction.js +3 -3
  45. package/dist/es2019/view/BlockCard/index.js +5 -4
  46. package/dist/es2019/view/CardWithUrl/component.js +27 -5
  47. package/dist/es2019/view/CardWithUrl/loader.js +6 -1
  48. package/dist/es2019/view/EmbedCard/index.js +3 -2
  49. package/dist/es2019/view/EmbedModal/components/analytics/index.js +80 -0
  50. package/dist/es2019/view/EmbedModal/components/analytics/types.js +1 -0
  51. package/dist/es2019/view/EmbedModal/components/size-experiment/index.js +5 -9
  52. package/dist/es2019/view/EmbedModal/index.js +46 -13
  53. package/dist/es2019/view/EmbedModal/types.js +6 -1
  54. package/dist/es2019/view/FlexibleCard/components/blocks/block/index.js +17 -7
  55. package/dist/es2019/view/FlexibleCard/components/blocks/preview-block/index.js +4 -1
  56. package/dist/es2019/view/FlexibleCard/components/common/image-icon/index.js +4 -2
  57. package/dist/es2019/view/FlexibleCard/components/common/loading-skeleton/index.js +2 -3
  58. package/dist/es2019/view/FlexibleCard/components/elements/media/index.js +5 -2
  59. package/dist/es2019/view/HoverCard/components/HoverCardComponent.js +11 -3
  60. package/dist/es2019/view/HoverCard/components/HoverCardContent.js +36 -10
  61. package/dist/es2019/view/HoverCard/components/SnippetOrPreview.js +42 -0
  62. package/dist/es2019/view/HoverCard/index.js +6 -1
  63. package/dist/es2019/view/HoverCard/styled.js +8 -0
  64. package/dist/es2019/view/common/Modal.js +27 -6
  65. package/dist/es2019/view/common/ModalHeader.js +3 -2
  66. package/dist/esm/extractors/block/index.js +6 -7
  67. package/dist/esm/extractors/common/actions/extractPreviewAction.js +17 -19
  68. package/dist/esm/state/actions/index.js +54 -10
  69. package/dist/esm/state/analytics/types.js +1 -0
  70. package/dist/esm/state/analytics/useSmartLinkAnalytics.js +428 -111
  71. package/dist/esm/state/hooks-external/useSmartLinkActions.js +5 -3
  72. package/dist/esm/utils/analytics/analytics.js +241 -74
  73. package/dist/esm/utils/analytics/index.js +31 -4
  74. package/dist/esm/utils/mocks.js +25 -0
  75. package/dist/esm/version.json +1 -1
  76. package/dist/esm/view/BlockCard/actions/PreviewAction.js +3 -3
  77. package/dist/esm/view/BlockCard/index.js +5 -4
  78. package/dist/esm/view/CardWithUrl/component.js +27 -5
  79. package/dist/esm/view/CardWithUrl/loader.js +6 -1
  80. package/dist/esm/view/EmbedCard/index.js +3 -2
  81. package/dist/esm/view/EmbedModal/components/analytics/index.js +82 -0
  82. package/dist/esm/view/EmbedModal/components/analytics/types.js +1 -0
  83. package/dist/esm/view/EmbedModal/components/size-experiment/index.js +5 -10
  84. package/dist/esm/view/EmbedModal/index.js +52 -15
  85. package/dist/esm/view/EmbedModal/types.js +6 -1
  86. package/dist/esm/view/FlexibleCard/components/blocks/block/index.js +11 -3
  87. package/dist/esm/view/FlexibleCard/components/blocks/preview-block/index.js +5 -2
  88. package/dist/esm/view/FlexibleCard/components/common/image-icon/index.js +4 -2
  89. package/dist/esm/view/FlexibleCard/components/common/loading-skeleton/index.js +1 -2
  90. package/dist/esm/view/FlexibleCard/components/elements/media/index.js +5 -2
  91. package/dist/esm/view/HoverCard/components/HoverCardComponent.js +11 -3
  92. package/dist/esm/view/HoverCard/components/HoverCardContent.js +36 -10
  93. package/dist/esm/view/HoverCard/components/SnippetOrPreview.js +53 -0
  94. package/dist/esm/view/HoverCard/index.js +6 -1
  95. package/dist/esm/view/HoverCard/styled.js +6 -2
  96. package/dist/esm/view/common/Modal.js +28 -6
  97. package/dist/esm/view/common/ModalHeader.js +3 -2
  98. package/dist/types/extractors/block/types.d.ts +4 -2
  99. package/dist/types/extractors/common/actions/extractPreviewAction.d.ts +7 -5
  100. package/dist/types/state/analytics/types.d.ts +9 -0
  101. package/dist/types/state/analytics/useSmartLinkAnalytics.d.ts +41 -24
  102. package/dist/types/state/hooks/useSmartLink.d.ts +26 -18
  103. package/dist/types/state/hooks-external/useSmartLinkActions.d.ts +6 -2
  104. package/dist/types/utils/analytics/analytics.d.ts +19 -21
  105. package/dist/types/utils/analytics/index.d.ts +2 -2
  106. package/dist/types/utils/analytics/types.d.ts +91 -0
  107. package/dist/types/utils/mocks.d.ts +48 -0
  108. package/dist/types/utils/types.d.ts +3 -1
  109. package/dist/types/view/BlockCard/actions/PreviewAction.d.ts +4 -0
  110. package/dist/types/view/BlockCard/index.d.ts +2 -2
  111. package/dist/types/view/BlockCard/types.d.ts +4 -4
  112. package/dist/types/view/Card/index.d.ts +1 -1
  113. package/dist/types/view/EmbedCard/types.d.ts +2 -2
  114. package/dist/types/view/EmbedModal/components/analytics/index.d.ts +5 -0
  115. package/dist/types/view/EmbedModal/components/analytics/types.d.ts +6 -0
  116. package/dist/types/view/EmbedModal/components/size-experiment/index.d.ts +4 -3
  117. package/dist/types/view/EmbedModal/index.d.ts +3 -1
  118. package/dist/types/view/EmbedModal/types.d.ts +14 -4
  119. package/dist/types/view/FlexibleCard/components/blocks/preview-block/types.d.ts +7 -1
  120. package/dist/types/view/FlexibleCard/components/blocks/types.d.ts +15 -0
  121. package/dist/types/view/FlexibleCard/components/common/image-icon/types.d.ts +1 -0
  122. package/dist/types/view/FlexibleCard/components/elements/media/types.d.ts +5 -0
  123. package/dist/types/view/HoverCard/components/SnippetOrPreview.d.ts +4 -0
  124. package/dist/types/view/HoverCard/styled.d.ts +2 -0
  125. package/dist/types/view/HoverCard/types.d.ts +5 -0
  126. package/dist/types/view/common/Modal.d.ts +6 -8
  127. package/package.json +1 -1
  128. package/report.api.md +324 -108
@@ -17,8 +17,6 @@ var _react = _interopRequireWildcard(require("react"));
17
17
 
18
18
  var _constants = require("../../../constants");
19
19
 
20
- var _extractPreview = _interopRequireDefault(require("../../../extractors/flexible/extract-preview"));
21
-
22
20
  var _extractMetadata2 = require("../../../extractors/hover/extractMetadata");
23
21
 
24
22
  var _actions = require("../../../state/actions");
@@ -37,6 +35,8 @@ var _utils2 = require("../utils");
37
35
 
38
36
  var _HoverCardLoadingView = _interopRequireDefault(require("./HoverCardLoadingView"));
39
37
 
38
+ var _SnippetOrPreview = _interopRequireDefault(require("./SnippetOrPreview"));
39
+
40
40
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
41
 
42
42
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -55,7 +55,9 @@ var getOpenAction = function getOpenAction(url, analytics, onActionClick) {
55
55
  }
56
56
 
57
57
  window.open(url, '_blank');
58
- analytics.ui.hoverCardOpenLinkClickedEvent('card');
58
+ analytics.ui.hoverCardOpenLinkClickedEvent({
59
+ previewDisplay: 'card'
60
+ });
59
61
  },
60
62
  testId: 'hover-card-open-button'
61
63
  };
@@ -102,15 +104,24 @@ var HoverCardContent = function HoverCardContent(_ref) {
102
104
  (0, _react.useEffect)(function () {
103
105
  // Since hover preview only render on resolved status,
104
106
  // there is no need to check for statuses.
105
- analytics.ui.renderSuccessEvent(_utils2.SMART_CARD_ANALYTICS_DISPLAY, cardState.status);
107
+ analytics.ui.renderSuccessEvent({
108
+ display: _utils2.SMART_CARD_ANALYTICS_DISPLAY,
109
+ status: cardState.status
110
+ });
106
111
  }, [analytics.ui, cardState.status]);
107
112
  var extensionKey = (0, _react.useMemo)(function () {
108
113
  return (0, _helpers.getExtensionKey)(cardState.details);
109
114
  }, [cardState.details]);
110
115
  var onClick = (0, _react.useCallback)(function (event) {
111
116
  var isModifierKeyPressed = (0, _utils.isSpecialEvent)(event);
112
- analytics.ui.cardClickedEvent(undefined, _utils2.SMART_CARD_ANALYTICS_DISPLAY, cardState.status, undefined, undefined, isModifierKeyPressed, undefined, undefined, undefined, 'titleGoToLink');
113
- }, [cardState.status, analytics.ui]);
117
+ analytics.ui.cardClickedEvent({
118
+ id: id,
119
+ display: _utils2.SMART_CARD_ANALYTICS_DISPLAY,
120
+ status: cardState.status,
121
+ isModifierKeyPressed: isModifierKeyPressed,
122
+ actionSubjectId: 'titleGoToLink'
123
+ });
124
+ }, [cardState.status, analytics.ui, id]);
114
125
  var titleActions = (0, _react.useMemo)(function () {
115
126
  return [getOpenAction(url, analytics, onActionClick)];
116
127
  }, [url, analytics, onActionClick]);
@@ -126,7 +137,19 @@ var HoverCardContent = function HoverCardContent(_ref) {
126
137
  subtitle = _extractMetadata.subtitle;
127
138
 
128
139
  var titleMaxLines = subtitle && subtitle.length > 0 ? 1 : 2;
129
- var body = data && (0, _extractPreview.default)(data) ? /*#__PURE__*/_react.default.createElement(_blocks.PreviewBlock, null) : /*#__PURE__*/_react.default.createElement(_blocks.SnippetBlock, null);
140
+
141
+ var snippetHeight = _react.default.useRef(0);
142
+
143
+ var snippetBlockRef = (0, _react.useRef)(null);
144
+ var onSnippetRender = (0, _react.useCallback)(function () {
145
+ var _snippetBlockRef$curr, _snippetBlockRef$curr2;
146
+
147
+ snippetHeight.current = (_snippetBlockRef$curr = (_snippetBlockRef$curr2 = snippetBlockRef.current) === null || _snippetBlockRef$curr2 === void 0 ? void 0 : _snippetBlockRef$curr2.getBoundingClientRect().height) !== null && _snippetBlockRef$curr !== void 0 ? _snippetBlockRef$curr : 0;
148
+ }, []);
149
+ var body = (0, _SnippetOrPreview.default)({
150
+ data: data,
151
+ snippetHeight: snippetHeight.current
152
+ });
130
153
  var titleBlockProps = {
131
154
  actions: titleActions,
132
155
  maxLines: titleMaxLines,
@@ -159,7 +182,12 @@ var HoverCardContent = function HoverCardContent(_ref) {
159
182
  size: _constants.SmartLinkSize.Large,
160
183
  overrideCss: _styled.metadataBlockCss,
161
184
  maxLines: 1
162
- }), body, /*#__PURE__*/_react.default.createElement(_blocks.FooterBlock, {
185
+ }), body, /*#__PURE__*/_react.default.createElement(_blocks.SnippetBlock, {
186
+ testId: 'hidden-snippet',
187
+ onRender: onSnippetRender,
188
+ blockRef: snippetBlockRef,
189
+ overrideCss: _styled.hiddenSnippetStyles
190
+ }), /*#__PURE__*/_react.default.createElement(_blocks.FooterBlock, {
163
191
  actions: footerActions,
164
192
  size: _constants.SmartLinkSize.Large,
165
193
  overrideCss: _styled.footerBlockCss
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _core = require("@emotion/core");
19
+
20
+ var _extractPreview = _interopRequireDefault(require("../../../extractors/flexible/extract-preview"));
21
+
22
+ var _blocks = require("../../FlexibleCard/components/blocks");
23
+
24
+ var _styled = require("../styled");
25
+
26
+ var _templateObject;
27
+
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
+
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+
32
+ var SnippetOrPreview = function SnippetOrPreview(_ref) {
33
+ var data = _ref.data,
34
+ snippetHeight = _ref.snippetHeight;
35
+ var transitionStarted = (0, _react.useRef)(false);
36
+ var previewBlockRef = (0, _react.useRef)(null);
37
+
38
+ var _useState = (0, _react.useState)(false),
39
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
40
+ showSnippet = _useState2[0],
41
+ setShowSnippet = _useState2[1];
42
+
43
+ var _useState3 = (0, _react.useState)(),
44
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
45
+ previewCss = _useState4[0],
46
+ setPreviewCss = _useState4[1]; // Set Preview to a fixed height to enable transitions
47
+
48
+
49
+ var onPreviewRender = (0, _react.useCallback)(function () {
50
+ var _previewBlockRef$curr;
51
+
52
+ previewBlockRef.current && setPreviewCss((0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n height: ", "px;\n "])), (_previewBlockRef$curr = previewBlockRef.current) === null || _previewBlockRef$curr === void 0 ? void 0 : _previewBlockRef$curr.getBoundingClientRect().height));
53
+ }, []); // On error set Preview to Snippet height with transition
54
+
55
+ var onPreviewError = (0, _react.useCallback)(function () {
56
+ if (transitionStarted.current === false) {
57
+ setPreviewCss((0, _styled.getTransitionStyles)(snippetHeight));
58
+ transitionStarted.current = true;
59
+ }
60
+ }, [snippetHeight]);
61
+ var onPreviewTransitionEnd = (0, _react.useCallback)(function () {
62
+ setShowSnippet(true);
63
+ }, []);
64
+ return !showSnippet && data && (0, _extractPreview.default)(data) ? /*#__PURE__*/_react.default.createElement(_blocks.PreviewBlock, {
65
+ onError: onPreviewError,
66
+ overrideCss: previewCss,
67
+ onTransitionEnd: onPreviewTransitionEnd,
68
+ blockRef: previewBlockRef,
69
+ onRender: onPreviewRender
70
+ }) : /*#__PURE__*/_react.default.createElement(_blocks.SnippetBlock, null);
71
+ };
72
+
73
+ var _default = SnippetOrPreview;
74
+ exports.default = _default;
@@ -36,7 +36,12 @@ var HoverCardWithErrorBoundary = function HoverCardWithErrorBoundary(props) {
36
36
  }, [createAnalyticsEvent]);
37
37
  var analytics = (0, _analytics.useSmartLinkAnalytics)(url, analyticsHandler, id);
38
38
  var onError = (0, _react.useCallback)(function (error, info) {
39
- analytics.ui.renderFailedEvent(_utils.SMART_CARD_ANALYTICS_DISPLAY, id, error, info);
39
+ analytics.ui.renderFailedEvent({
40
+ display: _utils.SMART_CARD_ANALYTICS_DISPLAY,
41
+ id: id,
42
+ error: error,
43
+ errorInfo: info
44
+ });
40
45
  }, [analytics.ui, id]);
41
46
  return (0, _core.jsx)(_reactErrorBoundary.ErrorBoundary, {
42
47
  fallback: children,
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.titleBlockCss = exports.skeletonContainer = exports.metadataBlockCss = exports.loadingViewContainer = exports.footerBlockCss = exports.flexibleUiOptions = exports.HoverCardContainer = exports.CARD_WIDTH_REM = exports.CARD_GAP_PX = void 0;
8
+ exports.titleBlockCss = exports.skeletonContainer = exports.metadataBlockCss = exports.loadingViewContainer = exports.hiddenSnippetStyles = exports.getTransitionStyles = exports.footerBlockCss = exports.flexibleUiOptions = exports.HoverCardContainer = exports.CARD_WIDTH_REM = exports.CARD_GAP_PX = void 0;
9
9
 
10
10
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
11
 
@@ -15,7 +15,7 @@ var _index = require("../../index");
15
15
 
16
16
  var _constants = require("../../constants");
17
17
 
18
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
18
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
19
19
 
20
20
  var flexibleUiOptions = {
21
21
  hideElevation: true,
@@ -44,4 +44,12 @@ exports.footerBlockCss = footerBlockCss;
44
44
  var loadingViewContainer = (0, _core.css)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n flex-direction: column;\n"])));
45
45
  exports.loadingViewContainer = loadingViewContainer;
46
46
  var skeletonContainer = (0, _core.css)(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n flex-direction: column;\n gap: 0.625rem;\n align-items: center;\n"])));
47
- exports.skeletonContainer = skeletonContainer;
47
+ exports.skeletonContainer = skeletonContainer;
48
+ var hiddenSnippetStyles = (0, _core.css)(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["\n visibility: hidden;\n position: absolute;\n"])));
49
+ exports.hiddenSnippetStyles = hiddenSnippetStyles;
50
+
51
+ var getTransitionStyles = function getTransitionStyles(snippetHeight) {
52
+ return (0, _core.css)(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2.default)(["\n transition: height 300ms ease-in-out;\n height: ", "px;\n"])), snippetHeight);
53
+ };
54
+
55
+ exports.getTransitionStyles = getTransitionStyles;
@@ -29,6 +29,10 @@ var _ModalHeader = require("./ModalHeader");
29
29
 
30
30
  var _utils = require("../../utils");
31
31
 
32
+ var _analytics = _interopRequireDefault(require("../EmbedModal/components/analytics"));
33
+
34
+ var _types = require("../EmbedModal/types");
35
+
32
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
37
 
34
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -78,7 +82,8 @@ var Modal = function Modal(_ref) {
78
82
  providerName = _ref.providerName,
79
83
  metadata = _ref.metadata,
80
84
  icon = _ref.icon,
81
- closeLabel = _ref.closeLabel,
85
+ _ref$closeLabel = _ref.closeLabel,
86
+ closeLabel = _ref$closeLabel === void 0 ? 'Close Preview' : _ref$closeLabel,
82
87
  iframeName = _ref.iframeName,
83
88
  title = _ref.title,
84
89
  url = _ref.url,
@@ -94,16 +99,35 @@ var Modal = function Modal(_ref) {
94
99
  isOpen = _useState2[0],
95
100
  setIsOpen = _useState2[1];
96
101
 
102
+ var openAt = (0, _react.useRef)();
103
+ var handleOnOpenComplete = (0, _react.useCallback)(function () {
104
+ openAt.current = Date.now();
105
+
106
+ if (onOpen) {
107
+ onOpen({
108
+ size: _types.EmbedModalSize.Small
109
+ });
110
+ }
111
+ }, [onOpen]);
112
+ var handleOnCloseComplete = (0, _react.useCallback)(function () {
113
+ if (onClose) {
114
+ var duration = openAt.current ? Date.now() - openAt.current : undefined;
115
+ onClose({
116
+ duration: duration,
117
+ size: _types.EmbedModalSize.Small
118
+ });
119
+ }
120
+ }, [onClose]);
97
121
  var sandbox = (0, _utils.getIframeSandboxAttribute)(isTrusted);
98
122
  return /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTransition, null, isOpen && /*#__PURE__*/_react.default.createElement(_modalDialog.default, {
99
123
  height: "100%",
100
124
  width: "large",
101
125
  testId: testId,
102
- onOpenComplete: onOpen,
126
+ onOpenComplete: handleOnOpenComplete,
103
127
  onClose: function onClose() {
104
128
  setIsOpen(false);
105
129
  },
106
- onCloseComplete: onClose
130
+ onCloseComplete: handleOnCloseComplete
107
131
  }, /*#__PURE__*/_react.default.createElement(_ModalHeader.Header, {
108
132
  providerName: providerName,
109
133
  icon: icon,
@@ -129,5 +153,6 @@ var Modal = function Modal(_ref) {
129
153
  }))));
130
154
  };
131
155
 
132
- var _default = ModalWithErrorBoundary;
156
+ var _default = (0, _analytics.default)(ModalWithErrorBoundary);
157
+
133
158
  exports.default = _default;
@@ -98,7 +98,7 @@ var Header = function Header(_ref) {
98
98
  testId: "preview-view-action",
99
99
  iconAfter: (0, _core.jsx)(_shortcut.default, {
100
100
  size: "small",
101
- label: "go to source"
101
+ label: ""
102
102
  }),
103
103
  onClick: onViewActionClick
104
104
  }, providerName ? (0, _core.jsx)(_react.Fragment, null, (0, _core.jsx)(_reactIntlNext.FormattedMessage, _messages.messages.viewIn), " ", providerName) : (0, _core.jsx)(_reactIntlNext.FormattedMessage, _messages.messages.viewOriginal)), (0, _core.jsx)(_customThemeButton.default, {
@@ -106,7 +106,8 @@ var Header = function Header(_ref) {
106
106
  iconBefore: (0, _core.jsx)(_close.default, {
107
107
  label: label
108
108
  }),
109
- onClick: onClose
109
+ onClick: onClose,
110
+ testId: "preview-close-button"
110
111
  }))));
111
112
  };
112
113
 
@@ -28,15 +28,14 @@ const extractBlockDetails = jsonLd => [extractCommentCount(jsonLd), extractProgr
28
28
  export const extractBlockActions = (props, jsonLd, opts, platform) => {
29
29
  if (opts) {
30
30
  const {
31
- featureFlags,
32
- handleInvoke,
33
- handleAnalytics,
34
- extensionKey,
35
- source,
36
- testId
31
+ handleInvoke
37
32
  } = opts;
38
33
  const actions = extractActions(jsonLd, handleInvoke);
39
- const previewAction = extractPreviewAction(extensionKey, props, jsonLd, handleInvoke, handleAnalytics, testId, platform, source, featureFlags); // The previewAction should always be the last action
34
+ const previewAction = extractPreviewAction({ ...opts,
35
+ viewProps: props,
36
+ jsonLd,
37
+ platform
38
+ }); // The previewAction should always be the last action
40
39
 
41
40
  if (previewAction) {
42
41
  actions.push(previewAction);
@@ -1,6 +1,5 @@
1
- import { uiRenderSuccessEvent, uiRenderFailedEvent } from '../../../utils/analytics';
2
1
  import { extractDownloadUrl } from '../detail';
3
- import { extractProvider, extractPreview } from '@atlaskit/linking-common/extractors';
2
+ import { extractPreview, extractProvider } from '@atlaskit/linking-common/extractors';
4
3
  import { PreviewAction } from '../../../view/BlockCard';
5
4
 
6
5
  const getMetadataFromJsonLd = (jsonLd, platform) => {
@@ -39,7 +38,18 @@ const getInvokeOpts = (key, action, source) => ({
39
38
  }
40
39
  });
41
40
 
42
- export const extractPreviewAction = (extensionKey = 'empty-object-provider', viewProps, jsonLd, handleInvoke, handleAnalytics, testId, platform, source, featureFlags) => {
41
+ export const extractPreviewAction = ({
42
+ extensionKey = 'empty-object-provider',
43
+ viewProps,
44
+ jsonLd,
45
+ handleInvoke,
46
+ testId,
47
+ platform,
48
+ origin,
49
+ source = 'block',
50
+ featureFlags,
51
+ analytics
52
+ }) => {
43
53
  // Extract metadata from view props & raw JSON-LD.
44
54
  const metadataFromJsonLd = getMetadataFromJsonLd(jsonLd, platform);
45
55
  const metadataFromViewProps = getMetadataFromResolvedProps(viewProps);
@@ -51,14 +61,10 @@ export const extractPreviewAction = (extensionKey = 'empty-object-provider', vie
51
61
  // Build action using instrumentation hooks.
52
62
  const key = extensionKey;
53
63
  const previewAction = PreviewAction({ ...metadata,
64
+ analytics,
65
+ origin,
54
66
  featureFlags,
55
67
  testId,
56
- onOpen: () => {
57
- handleAnalytics(uiRenderSuccessEvent('preview', 'resolved', key));
58
- },
59
- onOpenFailed: (error, errorInfo) => {
60
- handleAnalytics(uiRenderFailedEvent('preview', error, errorInfo));
61
- },
62
68
  onDownloadActionClick: () => {
63
69
  handleInvoke(getInvokeOpts(key, 'DownloadAction'));
64
70
  },
@@ -68,7 +74,7 @@ export const extractPreviewAction = (extensionKey = 'empty-object-provider', vie
68
74
  }); // Setup props to go through proper Redux 'invocation' flow
69
75
  // for analytics, further state management if required in future.
70
76
 
71
- const previewActionProps = getInvokeOpts(key, 'PreviewAction', source !== null && source !== void 0 ? source : 'block'); // - Promise invoked by the action invocation handler; open preview.
77
+ const previewActionProps = getInvokeOpts(key, 'PreviewAction', source); // - Promise invoked by the action invocation handler; open preview.
72
78
 
73
79
  previewActionProps.action.promise = previewAction.promise; // - Promise invoked on click of `Preview` on block card; trigger above promise.
74
80
 
@@ -155,24 +155,51 @@ export const useSmartCardActions = (id, url, analytics) => {
155
155
  const services = getServices(details); // When authentication is triggered, let GAS know!
156
156
 
157
157
  if (status === 'unauthorized') {
158
- analytics.ui.authEvent(appearance, definitionId, extensionKey);
158
+ analytics.ui.authEvent({
159
+ display: appearance,
160
+ definitionId,
161
+ extensionKey
162
+ });
159
163
  }
160
164
 
161
165
  if (status === 'forbidden') {
162
- analytics.ui.authAlternateAccountEvent(appearance, definitionId, extensionKey);
166
+ analytics.ui.authAlternateAccountEvent({
167
+ display: appearance,
168
+ definitionId,
169
+ extensionKey
170
+ });
163
171
  }
164
172
 
165
173
  if (services.length > 0) {
166
- analytics.screen.authPopupEvent(definitionId, extensionKey);
174
+ analytics.screen.authPopupEvent({
175
+ definitionId,
176
+ extensionKey
177
+ });
167
178
  auth(services[0].url).then(() => {
168
- analytics.track.appAccountConnected(definitionId, extensionKey);
169
- analytics.operational.connectSucceededEvent(id, definitionId, extensionKey);
179
+ analytics.track.appAccountConnected({
180
+ definitionId,
181
+ extensionKey
182
+ });
183
+ analytics.operational.connectSucceededEvent({
184
+ id,
185
+ definitionId,
186
+ extensionKey
187
+ });
170
188
  reload();
171
189
  }, err => {
172
- analytics.operational.connectFailedEvent(id, definitionId, extensionKey, err.type);
190
+ analytics.operational.connectFailedEvent({
191
+ id,
192
+ definitionId,
193
+ extensionKey,
194
+ reason: err.type
195
+ });
173
196
 
174
197
  if (err.type === 'auth_window_closed') {
175
- analytics.ui.closedAuthEvent(appearance, definitionId, extensionKey);
198
+ analytics.ui.closedAuthEvent({
199
+ display: appearance,
200
+ definitionId,
201
+ extensionKey
202
+ });
176
203
  }
177
204
 
178
205
  reload();
@@ -191,7 +218,13 @@ export const useSmartCardActions = (id, url, analytics) => {
191
218
 
192
219
  try {
193
220
  // Begin analytics instrumentation.
194
- analytics.ui.actionClickedEvent(id, key, action.type, source, opts.type); // Invoke action - either client-side or server-side.
221
+ analytics.ui.actionClickedEvent({
222
+ id,
223
+ extensionKey: key,
224
+ actionType: action.type,
225
+ display: source,
226
+ invokeType: opts.type
227
+ }); // Invoke action - either client-side or server-side.
195
228
 
196
229
  let response;
197
230
 
@@ -202,11 +235,22 @@ export const useSmartCardActions = (id, url, analytics) => {
202
235
  }
203
236
 
204
237
  measure.mark(markName, 'resolved');
205
- analytics.operational.invokeSucceededEvent(id, key, action.type, source);
238
+ analytics.operational.invokeSucceededEvent({
239
+ id,
240
+ extensionKey: key,
241
+ actionType: action.type,
242
+ display: source
243
+ });
206
244
  return response;
207
245
  } catch (err) {
208
246
  measure.mark(markName, 'errored');
209
- analytics.operational.invokeFailedEvent(id, key, action.type, source, err.message);
247
+ analytics.operational.invokeFailedEvent({
248
+ id,
249
+ extensionKey: key,
250
+ actionType: action.type,
251
+ display: source,
252
+ reason: err.message
253
+ });
210
254
  throw err;
211
255
  }
212
256
  }, [id, analytics.ui, analytics.operational, connections.client]);
@@ -0,0 +1 @@
1
+ export {};