@atlaskit/smart-card 22.0.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.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/extractors/block/index.js +6 -7
- package/dist/cjs/extractors/common/actions/extractPreviewAction.js +16 -27
- package/dist/cjs/state/analytics/useSmartLinkAnalytics.js +43 -0
- package/dist/cjs/state/hooks-external/useSmartLinkActions.js +5 -3
- package/dist/cjs/utils/analytics/analytics.js +2 -2
- package/dist/cjs/utils/mocks.js +28 -2
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/BlockCard/actions/PreviewAction.js +2 -2
- package/dist/cjs/view/BlockCard/index.js +6 -5
- package/dist/cjs/view/CardWithUrl/component.js +2 -2
- package/dist/cjs/view/EmbedCard/index.js +3 -2
- package/dist/cjs/view/EmbedModal/components/analytics/index.js +100 -0
- package/dist/cjs/view/EmbedModal/components/analytics/types.js +5 -0
- package/dist/cjs/view/EmbedModal/components/size-experiment/index.js +5 -10
- package/dist/cjs/view/EmbedModal/index.js +54 -15
- package/dist/cjs/view/EmbedModal/types.js +9 -1
- package/dist/cjs/view/HoverCard/components/HoverCardComponent.js +2 -1
- package/dist/cjs/view/common/Modal.js +29 -4
- package/dist/cjs/view/common/ModalHeader.js +3 -2
- package/dist/es2019/extractors/block/index.js +6 -7
- package/dist/es2019/extractors/common/actions/extractPreviewAction.js +16 -18
- package/dist/es2019/state/analytics/useSmartLinkAnalytics.js +46 -3
- package/dist/es2019/state/hooks-external/useSmartLinkActions.js +5 -3
- package/dist/es2019/utils/analytics/analytics.js +1 -1
- package/dist/es2019/utils/mocks.js +26 -1
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/BlockCard/actions/PreviewAction.js +3 -3
- package/dist/es2019/view/BlockCard/index.js +5 -4
- package/dist/es2019/view/CardWithUrl/component.js +2 -2
- package/dist/es2019/view/EmbedCard/index.js +3 -2
- package/dist/es2019/view/EmbedModal/components/analytics/index.js +80 -0
- package/dist/es2019/view/EmbedModal/components/analytics/types.js +1 -0
- package/dist/es2019/view/EmbedModal/components/size-experiment/index.js +5 -9
- package/dist/es2019/view/EmbedModal/index.js +46 -13
- package/dist/es2019/view/EmbedModal/types.js +6 -1
- package/dist/es2019/view/HoverCard/components/HoverCardComponent.js +2 -1
- package/dist/es2019/view/common/Modal.js +27 -6
- package/dist/es2019/view/common/ModalHeader.js +3 -2
- package/dist/esm/extractors/block/index.js +6 -7
- package/dist/esm/extractors/common/actions/extractPreviewAction.js +17 -27
- package/dist/esm/state/analytics/useSmartLinkAnalytics.js +45 -2
- package/dist/esm/state/hooks-external/useSmartLinkActions.js +5 -3
- package/dist/esm/utils/analytics/analytics.js +2 -2
- package/dist/esm/utils/mocks.js +25 -0
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/BlockCard/actions/PreviewAction.js +3 -3
- package/dist/esm/view/BlockCard/index.js +5 -4
- package/dist/esm/view/CardWithUrl/component.js +2 -2
- package/dist/esm/view/EmbedCard/index.js +3 -2
- package/dist/esm/view/EmbedModal/components/analytics/index.js +82 -0
- package/dist/esm/view/EmbedModal/components/analytics/types.js +1 -0
- package/dist/esm/view/EmbedModal/components/size-experiment/index.js +5 -10
- package/dist/esm/view/EmbedModal/index.js +52 -15
- package/dist/esm/view/EmbedModal/types.js +6 -1
- package/dist/esm/view/HoverCard/components/HoverCardComponent.js +2 -1
- package/dist/esm/view/common/Modal.js +28 -6
- package/dist/esm/view/common/ModalHeader.js +3 -2
- package/dist/types/extractors/block/types.d.ts +4 -2
- package/dist/types/extractors/common/actions/extractPreviewAction.d.ts +7 -5
- package/dist/types/state/analytics/useSmartLinkAnalytics.d.ts +23 -1
- package/dist/types/state/hooks/useSmartLink.d.ts +9 -0
- package/dist/types/state/hooks-external/useSmartLinkActions.d.ts +6 -2
- package/dist/types/utils/mocks.d.ts +48 -0
- package/dist/types/utils/types.d.ts +3 -1
- package/dist/types/view/BlockCard/actions/PreviewAction.d.ts +4 -0
- package/dist/types/view/BlockCard/index.d.ts +2 -2
- package/dist/types/view/BlockCard/types.d.ts +4 -4
- package/dist/types/view/Card/index.d.ts +1 -1
- package/dist/types/view/EmbedCard/types.d.ts +2 -2
- package/dist/types/view/EmbedModal/components/analytics/index.d.ts +5 -0
- package/dist/types/view/EmbedModal/components/analytics/types.d.ts +6 -0
- package/dist/types/view/EmbedModal/components/size-experiment/index.d.ts +4 -3
- package/dist/types/view/EmbedModal/index.d.ts +3 -1
- package/dist/types/view/EmbedModal/types.d.ts +14 -4
- package/dist/types/view/common/Modal.d.ts +6 -8
- package/package.json +1 -1
- package/report.api.md +34 -2
package/CHANGELOG.md
CHANGED
|
@@ -55,14 +55,13 @@ var extractBlockDetails = function extractBlockDetails(jsonLd) {
|
|
|
55
55
|
|
|
56
56
|
var extractBlockActions = function extractBlockActions(props, jsonLd, opts, platform) {
|
|
57
57
|
if (opts) {
|
|
58
|
-
var
|
|
59
|
-
handleInvoke = opts.handleInvoke,
|
|
60
|
-
handleAnalytics = opts.handleAnalytics,
|
|
61
|
-
extensionKey = opts.extensionKey,
|
|
62
|
-
source = opts.source,
|
|
63
|
-
testId = opts.testId;
|
|
58
|
+
var handleInvoke = opts.handleInvoke;
|
|
64
59
|
var actions = (0, _extractActions.extractActions)(jsonLd, handleInvoke);
|
|
65
|
-
var previewAction = (0, _extractPreviewAction.extractPreviewAction)(
|
|
60
|
+
var previewAction = (0, _extractPreviewAction.extractPreviewAction)(_objectSpread(_objectSpread({}, opts), {}, {
|
|
61
|
+
viewProps: props,
|
|
62
|
+
jsonLd: jsonLd,
|
|
63
|
+
platform: platform
|
|
64
|
+
})); // The previewAction should always be the last action
|
|
66
65
|
|
|
67
66
|
if (previewAction) {
|
|
68
67
|
actions.push(previewAction);
|
|
@@ -9,8 +9,6 @@ exports.extractPreviewAction = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
|
|
12
|
-
var _analytics = require("../../../utils/analytics");
|
|
13
|
-
|
|
14
12
|
var _detail = require("../detail");
|
|
15
13
|
|
|
16
14
|
var _extractors = require("@atlaskit/linking-common/extractors");
|
|
@@ -63,16 +61,19 @@ var getInvokeOpts = function getInvokeOpts(key, action, source) {
|
|
|
63
61
|
};
|
|
64
62
|
};
|
|
65
63
|
|
|
66
|
-
var extractPreviewAction = function extractPreviewAction() {
|
|
67
|
-
var extensionKey =
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
64
|
+
var extractPreviewAction = function extractPreviewAction(_ref) {
|
|
65
|
+
var _ref$extensionKey = _ref.extensionKey,
|
|
66
|
+
extensionKey = _ref$extensionKey === void 0 ? 'empty-object-provider' : _ref$extensionKey,
|
|
67
|
+
viewProps = _ref.viewProps,
|
|
68
|
+
jsonLd = _ref.jsonLd,
|
|
69
|
+
handleInvoke = _ref.handleInvoke,
|
|
70
|
+
testId = _ref.testId,
|
|
71
|
+
platform = _ref.platform,
|
|
72
|
+
origin = _ref.origin,
|
|
73
|
+
_ref$source = _ref.source,
|
|
74
|
+
source = _ref$source === void 0 ? 'block' : _ref$source,
|
|
75
|
+
featureFlags = _ref.featureFlags,
|
|
76
|
+
analytics = _ref.analytics;
|
|
76
77
|
// Extract metadata from view props & raw JSON-LD.
|
|
77
78
|
var metadataFromJsonLd = getMetadataFromJsonLd(jsonLd, platform);
|
|
78
79
|
var metadataFromViewProps = getMetadataFromResolvedProps(viewProps);
|
|
@@ -84,22 +85,10 @@ var extractPreviewAction = function extractPreviewAction() {
|
|
|
84
85
|
// Build action using instrumentation hooks.
|
|
85
86
|
var key = extensionKey;
|
|
86
87
|
var previewAction = (0, _BlockCard.PreviewAction)(_objectSpread(_objectSpread({}, metadata), {}, {
|
|
88
|
+
analytics: analytics,
|
|
89
|
+
origin: origin,
|
|
87
90
|
featureFlags: featureFlags,
|
|
88
91
|
testId: testId,
|
|
89
|
-
onOpen: function onOpen() {
|
|
90
|
-
handleAnalytics((0, _analytics.uiRenderSuccessEvent)({
|
|
91
|
-
display: 'preview',
|
|
92
|
-
status: 'resolved',
|
|
93
|
-
extensionKey: key
|
|
94
|
-
}));
|
|
95
|
-
},
|
|
96
|
-
onOpenFailed: function onOpenFailed(error, errorInfo) {
|
|
97
|
-
handleAnalytics((0, _analytics.uiRenderFailedEvent)({
|
|
98
|
-
display: 'preview',
|
|
99
|
-
error: error,
|
|
100
|
-
errorInfo: errorInfo
|
|
101
|
-
}));
|
|
102
|
-
},
|
|
103
92
|
onDownloadActionClick: function onDownloadActionClick() {
|
|
104
93
|
handleInvoke(getInvokeOpts(key, 'DownloadAction'));
|
|
105
94
|
},
|
|
@@ -109,7 +98,7 @@ var extractPreviewAction = function extractPreviewAction() {
|
|
|
109
98
|
})); // Setup props to go through proper Redux 'invocation' flow
|
|
110
99
|
// for analytics, further state management if required in future.
|
|
111
100
|
|
|
112
|
-
var previewActionProps = getInvokeOpts(key, 'PreviewAction', source
|
|
101
|
+
var previewActionProps = getInvokeOpts(key, 'PreviewAction', source); // - Promise invoked by the action invocation handler; open preview.
|
|
113
102
|
|
|
114
103
|
previewActionProps.action.promise = previewAction.promise; // - Promise invoked on click of `Preview` on block card; trigger above promise.
|
|
115
104
|
|
|
@@ -135,6 +135,21 @@ var useSmartLinkAnalytics = function useSmartLinkAnalytics(url, dispatchAnalytic
|
|
|
135
135
|
}), commonAttributes));
|
|
136
136
|
},
|
|
137
137
|
|
|
138
|
+
/**
|
|
139
|
+
* This fires an event that represents when a user
|
|
140
|
+
* click a button.
|
|
141
|
+
* @param data A partial analytics event payload
|
|
142
|
+
*/
|
|
143
|
+
buttonClickedEvent: function buttonClickedEvent(data) {
|
|
144
|
+
return dispatchAnalytics(applyCommonAttributes({
|
|
145
|
+
action: 'clicked',
|
|
146
|
+
actionSubject: 'button',
|
|
147
|
+
actionSubjectId: data.actionSubjectId,
|
|
148
|
+
attributes: _objectSpread(_objectSpread({}, _analytics.context), data.attributes),
|
|
149
|
+
eventType: 'ui'
|
|
150
|
+
}, commonAttributes));
|
|
151
|
+
},
|
|
152
|
+
|
|
138
153
|
/**
|
|
139
154
|
* This fires an event that represents when a user clicks on a Smart Link.
|
|
140
155
|
* @param id The unique ID for this Smart Link.
|
|
@@ -266,6 +281,20 @@ var useSmartLinkAnalytics = function useSmartLinkAnalytics(url, dispatchAnalytic
|
|
|
266
281
|
}), commonAttributes));
|
|
267
282
|
},
|
|
268
283
|
|
|
284
|
+
/**
|
|
285
|
+
* This fires an event that represents when a user close a modal.
|
|
286
|
+
* @param data A partial analytics event payload
|
|
287
|
+
*/
|
|
288
|
+
modalClosedEvent: function modalClosedEvent(data) {
|
|
289
|
+
return dispatchAnalytics(applyCommonAttributes({
|
|
290
|
+
action: 'closed',
|
|
291
|
+
actionSubject: 'modal',
|
|
292
|
+
actionSubjectId: data.actionSubjectId,
|
|
293
|
+
attributes: _objectSpread(_objectSpread({}, _analytics.context), data.attributes),
|
|
294
|
+
eventType: 'ui'
|
|
295
|
+
}, commonAttributes));
|
|
296
|
+
},
|
|
297
|
+
|
|
269
298
|
/**
|
|
270
299
|
* This fires an event that represents when a Smart Link was rendered successfully.
|
|
271
300
|
* Note: this fires even if the Smart Link request errored out.
|
|
@@ -630,6 +659,20 @@ var useSmartLinkAnalytics = function useSmartLinkAnalytics(url, dispatchAnalytic
|
|
|
630
659
|
destinationSubproduct: destinationSubproduct,
|
|
631
660
|
location: location
|
|
632
661
|
})), commonAttributes));
|
|
662
|
+
},
|
|
663
|
+
|
|
664
|
+
/**
|
|
665
|
+
* This fires an event that represents when a user view a modal.
|
|
666
|
+
* @param data A partial analytics event payload
|
|
667
|
+
*/
|
|
668
|
+
modalViewedEvent: function modalViewedEvent(data) {
|
|
669
|
+
return dispatchAnalytics(applyCommonAttributes({
|
|
670
|
+
action: 'viewed',
|
|
671
|
+
actionSubject: data.name,
|
|
672
|
+
attributes: _objectSpread(_objectSpread({}, _analytics.context), data.attributes),
|
|
673
|
+
eventType: 'screen',
|
|
674
|
+
name: data.name
|
|
675
|
+
}, commonAttributes));
|
|
633
676
|
}
|
|
634
677
|
};
|
|
635
678
|
}, [commonAttributes, dispatchAnalytics]);
|
|
@@ -30,7 +30,8 @@ function useSmartLinkActions(_ref) {
|
|
|
30
30
|
appearance = _ref.appearance,
|
|
31
31
|
analyticsHandler = _ref.analyticsHandler,
|
|
32
32
|
_ref$platform = _ref.platform,
|
|
33
|
-
platform = _ref$platform === void 0 ? 'web' : _ref$platform
|
|
33
|
+
platform = _ref$platform === void 0 ? 'web' : _ref$platform,
|
|
34
|
+
origin = _ref.origin;
|
|
34
35
|
var id = (0, _react.useMemo)(function () {
|
|
35
36
|
return (0, _uuid.default)();
|
|
36
37
|
}, []);
|
|
@@ -60,7 +61,8 @@ function useSmartLinkActions(_ref) {
|
|
|
60
61
|
handleInvoke: function handleInvoke(opts) {
|
|
61
62
|
return linkActions.invoke(opts, appearance);
|
|
62
63
|
},
|
|
63
|
-
|
|
64
|
+
analytics: linkAnalytics,
|
|
65
|
+
origin: origin,
|
|
64
66
|
extensionKey: (0, _helpers.getExtensionKey)(linkState.details),
|
|
65
67
|
source: appearance
|
|
66
68
|
}, undefined, platform);
|
|
@@ -77,6 +79,6 @@ function useSmartLinkActions(_ref) {
|
|
|
77
79
|
};
|
|
78
80
|
});
|
|
79
81
|
setActions(cardActions);
|
|
80
|
-
}, [linkState, linkActions,
|
|
82
|
+
}, [linkState, linkActions, linkAnalytics, appearance, platform, embedModalSize, origin]);
|
|
81
83
|
return actions;
|
|
82
84
|
}
|
|
@@ -451,7 +451,7 @@ var uiRenderFailedEvent = function uiRenderFailedEvent(_ref14) {
|
|
|
451
451
|
actionSubject: 'smartLink',
|
|
452
452
|
action: 'renderFailed',
|
|
453
453
|
eventType: 'ui',
|
|
454
|
-
attributes: {
|
|
454
|
+
attributes: _objectSpread(_objectSpread({}, context), {}, {
|
|
455
455
|
error: error,
|
|
456
456
|
errorInfo: errorInfo,
|
|
457
457
|
display: display,
|
|
@@ -460,7 +460,7 @@ var uiRenderFailedEvent = function uiRenderFailedEvent(_ref14) {
|
|
|
460
460
|
destinationProduct: destinationProduct,
|
|
461
461
|
destinationSubproduct: destinationSubproduct,
|
|
462
462
|
location: location
|
|
463
|
-
}
|
|
463
|
+
})
|
|
464
464
|
};
|
|
465
465
|
};
|
|
466
466
|
|
package/dist/cjs/utils/mocks.js
CHANGED
|
@@ -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.waitFor = exports.mocks = exports.mockContext = exports.fakeResponse = exports.fakeFactory = void 0;
|
|
8
|
+
exports.waitFor = exports.mocks = exports.mockContext = exports.mockAnalytics = exports.fakeResponse = exports.fakeFactory = void 0;
|
|
9
9
|
|
|
10
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
11
|
|
|
@@ -138,6 +138,18 @@ var mocks = {
|
|
|
138
138
|
data: {
|
|
139
139
|
status: 'CompletedStatus'
|
|
140
140
|
}
|
|
141
|
+
},
|
|
142
|
+
analytics: {
|
|
143
|
+
status: 'resolved',
|
|
144
|
+
details: {
|
|
145
|
+
meta: {
|
|
146
|
+
definitionId: 'spaghetti-id',
|
|
147
|
+
key: 'spaghetti-key',
|
|
148
|
+
resourceType: 'spaghetti-resource',
|
|
149
|
+
subproduct: 'spaghetti-subproduct',
|
|
150
|
+
product: 'spaghetti-product'
|
|
151
|
+
}
|
|
152
|
+
}
|
|
141
153
|
}
|
|
142
154
|
};
|
|
143
155
|
exports.mocks = mocks;
|
|
@@ -257,4 +269,18 @@ var waitFor = function waitFor() {
|
|
|
257
269
|
});
|
|
258
270
|
};
|
|
259
271
|
|
|
260
|
-
exports.waitFor = waitFor;
|
|
272
|
+
exports.waitFor = waitFor;
|
|
273
|
+
var mockAnalytics = {
|
|
274
|
+
ui: {
|
|
275
|
+
buttonClickedEvent: function buttonClickedEvent() {},
|
|
276
|
+
modalClosedEvent: function modalClosedEvent() {},
|
|
277
|
+
renderSuccessEvent: function renderSuccessEvent() {},
|
|
278
|
+
renderFailedEvent: function renderFailedEvent() {}
|
|
279
|
+
},
|
|
280
|
+
operational: {},
|
|
281
|
+
track: {},
|
|
282
|
+
screen: {
|
|
283
|
+
modalViewedEvent: function modalViewedEvent() {}
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
exports.mockAnalytics = mockAnalytics;
|
package/dist/cjs/version.json
CHANGED
|
@@ -90,9 +90,9 @@ function _previewFunction() {
|
|
|
90
90
|
_reactDom.default.render( /*#__PURE__*/_react.default.createElement(_reactIntlNext.IntlProvider, {
|
|
91
91
|
locale: "en"
|
|
92
92
|
}, /*#__PURE__*/_react.default.createElement(Modal.default, (0, _extends2.default)({}, rest, {
|
|
93
|
-
onClose: function onClose() {
|
|
93
|
+
onClose: function onClose(context) {
|
|
94
94
|
if (popupMountPoint) {
|
|
95
|
-
_onClose();
|
|
95
|
+
_onClose(context);
|
|
96
96
|
|
|
97
97
|
_reactDom.default.unmountComponentAtNode(popupMountPoint);
|
|
98
98
|
}
|
|
@@ -75,8 +75,6 @@ var _context = require("../../extractors/common/context");
|
|
|
75
75
|
|
|
76
76
|
var _LinkView = require("../LinkView");
|
|
77
77
|
|
|
78
|
-
var _PreviewAction = _interopRequireDefault(require("./actions/PreviewAction"));
|
|
79
|
-
|
|
80
78
|
var _AuthorizeAction = require("./actions/AuthorizeAction");
|
|
81
79
|
|
|
82
80
|
var _ForbiddenAction = require("./actions/ForbiddenAction");
|
|
@@ -95,6 +93,8 @@ var _ErroredView = require("./views/ErroredView");
|
|
|
95
93
|
|
|
96
94
|
var _linkProvider = require("@atlaskit/link-provider");
|
|
97
95
|
|
|
96
|
+
var _PreviewAction = _interopRequireDefault(require("./actions/PreviewAction"));
|
|
97
|
+
|
|
98
98
|
var BlockCard = function BlockCard(_ref) {
|
|
99
99
|
var _details$meta, _forbiddenViewProps$c;
|
|
100
100
|
|
|
@@ -106,7 +106,6 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
106
106
|
handleAuthorize = _ref.handleAuthorize,
|
|
107
107
|
handleErrorRetry = _ref.handleErrorRetry,
|
|
108
108
|
handleFrameClick = _ref.handleFrameClick,
|
|
109
|
-
handleAnalytics = _ref.handleAnalytics,
|
|
110
109
|
handleInvoke = _ref.handleInvoke,
|
|
111
110
|
renderers = _ref.renderers,
|
|
112
111
|
isSelected = _ref.isSelected,
|
|
@@ -114,7 +113,8 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
114
113
|
onError = _ref.onError,
|
|
115
114
|
testId = _ref.testId,
|
|
116
115
|
showActions = _ref.showActions,
|
|
117
|
-
platform = _ref.platform
|
|
116
|
+
platform = _ref.platform,
|
|
117
|
+
analytics = _ref.analytics;
|
|
118
118
|
// Actions do not have access to the react tree, so we need to obtain
|
|
119
119
|
// feature flags here where we still can access SmartLinkContext context
|
|
120
120
|
// and pass the flags down to the extractor. See PreviewAction.tsx for details.
|
|
@@ -125,8 +125,9 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
125
125
|
var data = details && details.data || (0, _jsonld.getEmptyJsonLd)();
|
|
126
126
|
var meta = details && details.meta;
|
|
127
127
|
var extractorOpts = {
|
|
128
|
+
analytics: analytics,
|
|
129
|
+
origin: 'smartLinkCard',
|
|
128
130
|
featureFlags: featureFlags,
|
|
129
|
-
handleAnalytics: handleAnalytics,
|
|
130
131
|
handleInvoke: handleInvoke,
|
|
131
132
|
extensionKey: (0, _helpers.getExtensionKey)(details)
|
|
132
133
|
};
|
|
@@ -209,7 +209,7 @@ function CardWithUrlContent(_ref) {
|
|
|
209
209
|
handleErrorRetry: handleRetry,
|
|
210
210
|
handleInvoke: handleInvoke,
|
|
211
211
|
handleFrameClick: handleClickWrapper,
|
|
212
|
-
|
|
212
|
+
analytics: analytics,
|
|
213
213
|
isSelected: isSelected,
|
|
214
214
|
onResolve: onResolve,
|
|
215
215
|
onError: onError,
|
|
@@ -227,7 +227,7 @@ function CardWithUrlContent(_ref) {
|
|
|
227
227
|
handleErrorRetry: handleRetry,
|
|
228
228
|
handleFrameClick: handleClickWrapper,
|
|
229
229
|
handleInvoke: handleInvoke,
|
|
230
|
-
|
|
230
|
+
analytics: analytics,
|
|
231
231
|
isSelected: isSelected,
|
|
232
232
|
isFrameVisible: isFrameVisible,
|
|
233
233
|
platform: platform,
|
|
@@ -47,7 +47,7 @@ var EmbedCard = /*#__PURE__*/_react.default.forwardRef(function (_ref, iframeRef
|
|
|
47
47
|
handleAuthorize = _ref.handleAuthorize,
|
|
48
48
|
handleErrorRetry = _ref.handleErrorRetry,
|
|
49
49
|
handleFrameClick = _ref.handleFrameClick,
|
|
50
|
-
|
|
50
|
+
analytics = _ref.analytics,
|
|
51
51
|
handleInvoke = _ref.handleInvoke,
|
|
52
52
|
showActions = _ref.showActions,
|
|
53
53
|
isSelected = _ref.isSelected,
|
|
@@ -101,7 +101,8 @@ var EmbedCard = /*#__PURE__*/_react.default.forwardRef(function (_ref, iframeRef
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
var resolvedBlockViewProps = (0, _block.extractBlockProps)(data, meta, {
|
|
104
|
-
|
|
104
|
+
analytics: analytics,
|
|
105
|
+
origin: 'smartLinkEmbed',
|
|
105
106
|
handleInvoke: handleInvoke,
|
|
106
107
|
extensionKey: (0, _helpers.getExtensionKey)(details)
|
|
107
108
|
});
|
|
@@ -0,0 +1,100 @@
|
|
|
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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
|
|
16
|
+
var _types = require("../../types");
|
|
17
|
+
|
|
18
|
+
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); }
|
|
19
|
+
|
|
20
|
+
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; }
|
|
21
|
+
|
|
22
|
+
var getResizeFrom = function getResizeFrom(size) {
|
|
23
|
+
return size === _types.EmbedModalSize.Small ? _types.EmbedModalSize.Large : _types.EmbedModalSize.Small;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
var withAnalytics = function withAnalytics(Component) {
|
|
27
|
+
return function (props) {
|
|
28
|
+
var analytics = props.analytics,
|
|
29
|
+
onClose = props.onClose,
|
|
30
|
+
onOpen = props.onOpen,
|
|
31
|
+
onOpenFailed = props.onOpenFailed,
|
|
32
|
+
onResize = props.onResize,
|
|
33
|
+
origin = props.origin;
|
|
34
|
+
var handleOnOpen = (0, _react.useCallback)(function (context) {
|
|
35
|
+
analytics.screen.modalViewedEvent({
|
|
36
|
+
name: 'embedPreviewModal',
|
|
37
|
+
attributes: {
|
|
38
|
+
origin: origin,
|
|
39
|
+
size: context.size
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
analytics.ui.renderSuccessEvent({
|
|
43
|
+
status: 'resolved',
|
|
44
|
+
display: 'preview'
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
if (onOpen) {
|
|
48
|
+
onOpen(context);
|
|
49
|
+
}
|
|
50
|
+
}, [analytics.screen, analytics.ui, onOpen, origin]);
|
|
51
|
+
var handleOnOpenFailed = (0, _react.useCallback)(function (error, errorInfo) {
|
|
52
|
+
analytics.ui.renderFailedEvent({
|
|
53
|
+
display: 'preview',
|
|
54
|
+
error: error,
|
|
55
|
+
errorInfo: errorInfo
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
if (onOpenFailed) {
|
|
59
|
+
onOpenFailed(error, errorInfo);
|
|
60
|
+
}
|
|
61
|
+
}, [analytics.ui, onOpenFailed]);
|
|
62
|
+
var handleOnClose = (0, _react.useCallback)(function (context) {
|
|
63
|
+
analytics.ui.modalClosedEvent({
|
|
64
|
+
actionSubjectId: 'embedPreview',
|
|
65
|
+
attributes: {
|
|
66
|
+
origin: origin,
|
|
67
|
+
previewTime: context.duration,
|
|
68
|
+
size: context.size
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
if (onClose) {
|
|
73
|
+
onClose(context);
|
|
74
|
+
}
|
|
75
|
+
}, [analytics.ui, onClose, origin]);
|
|
76
|
+
var handleOnResize = (0, _react.useCallback)(function (context) {
|
|
77
|
+
analytics.ui.buttonClickedEvent({
|
|
78
|
+
actionSubjectId: 'embedPreviewResize',
|
|
79
|
+
attributes: {
|
|
80
|
+
newSize: context.size,
|
|
81
|
+
origin: origin,
|
|
82
|
+
previousSize: getResizeFrom(context.size)
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (onResize) {
|
|
87
|
+
onResize(context);
|
|
88
|
+
}
|
|
89
|
+
}, [analytics.ui, onResize, origin]);
|
|
90
|
+
return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, props, {
|
|
91
|
+
onClose: handleOnClose,
|
|
92
|
+
onOpen: handleOnOpen,
|
|
93
|
+
onOpenFailed: handleOnOpenFailed,
|
|
94
|
+
onResize: handleOnResize
|
|
95
|
+
}));
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
var _default = withAnalytics;
|
|
100
|
+
exports.default = _default;
|
|
@@ -13,27 +13,22 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
13
13
|
|
|
14
14
|
var _Modal = _interopRequireDefault(require("../../../common/Modal"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _types = require("../../types");
|
|
17
17
|
|
|
18
18
|
var withSizeExperiment = function withSizeExperiment(Component) {
|
|
19
19
|
return function (props) {
|
|
20
20
|
var _props$featureFlags = props.featureFlags,
|
|
21
|
-
featureFlags = _props$featureFlags === void 0 ? {} : _props$featureFlags
|
|
22
|
-
|
|
23
|
-
closeLabel = _props$closeLabel === void 0 ? 'Close Preview' : _props$closeLabel;
|
|
24
|
-
var embedModalSize = featureFlags.embedModalSize; // Experiment
|
|
21
|
+
featureFlags = _props$featureFlags === void 0 ? {} : _props$featureFlags;
|
|
22
|
+
var size = featureFlags.embedModalSize; // Experiment
|
|
25
23
|
|
|
26
|
-
if (
|
|
27
|
-
var size = embedModalSize === 'large' ? _constants.MAX_MODAL_SIZE : _constants.MIN_MODAL_SIZE;
|
|
24
|
+
if (size === _types.EmbedModalSize.Large || size === _types.EmbedModalSize.Small) {
|
|
28
25
|
return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, props, {
|
|
29
26
|
size: size
|
|
30
27
|
}));
|
|
31
28
|
} // Control
|
|
32
29
|
|
|
33
30
|
|
|
34
|
-
return /*#__PURE__*/_react.default.createElement(_Modal.default,
|
|
35
|
-
closeLabel: closeLabel
|
|
36
|
-
}));
|
|
31
|
+
return /*#__PURE__*/_react.default.createElement(_Modal.default, props);
|
|
37
32
|
};
|
|
38
33
|
};
|
|
39
34
|
|
|
@@ -21,14 +21,26 @@ var _constants = require("./constants");
|
|
|
21
21
|
|
|
22
22
|
var _embedContent = _interopRequireDefault(require("./components/embed-content"));
|
|
23
23
|
|
|
24
|
+
var _types = require("./types");
|
|
25
|
+
|
|
24
26
|
var _errorBoundary = _interopRequireDefault(require("./components/error-boundary"));
|
|
25
27
|
|
|
26
28
|
var _sizeExperiment = _interopRequireDefault(require("./components/size-experiment"));
|
|
27
29
|
|
|
30
|
+
var _analytics = _interopRequireDefault(require("./components/analytics"));
|
|
31
|
+
|
|
28
32
|
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
33
|
|
|
30
34
|
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
35
|
|
|
36
|
+
var toSize = function toSize(width) {
|
|
37
|
+
return width === _constants.MAX_MODAL_SIZE ? _types.EmbedModalSize.Large : _types.EmbedModalSize.Small;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
var toWidth = function toWidth(size) {
|
|
41
|
+
return size === _types.EmbedModalSize.Large ? _constants.MAX_MODAL_SIZE : _constants.MIN_MODAL_SIZE;
|
|
42
|
+
};
|
|
43
|
+
|
|
32
44
|
var EmbedModal = function EmbedModal(_ref) {
|
|
33
45
|
var downloadUrl = _ref.download,
|
|
34
46
|
icon = _ref.icon,
|
|
@@ -38,49 +50,76 @@ var EmbedModal = function EmbedModal(_ref) {
|
|
|
38
50
|
onClose = _ref.onClose,
|
|
39
51
|
onDownloadActionClick = _ref.onDownloadActionClick,
|
|
40
52
|
onOpen = _ref.onOpen,
|
|
53
|
+
onResize = _ref.onResize,
|
|
41
54
|
onViewActionClick = _ref.onViewActionClick,
|
|
42
55
|
providerName = _ref.providerName,
|
|
43
56
|
showModal = _ref.showModal,
|
|
44
57
|
_ref$size = _ref.size,
|
|
45
|
-
|
|
58
|
+
size = _ref$size === void 0 ? _types.EmbedModalSize.Small : _ref$size,
|
|
46
59
|
src = _ref.src,
|
|
47
60
|
_ref$testId = _ref.testId,
|
|
48
61
|
testId = _ref$testId === void 0 ? 'smart-embed-preview-modal' : _ref$testId,
|
|
49
62
|
title = _ref.title,
|
|
50
63
|
url = _ref.url;
|
|
64
|
+
var defaultWidth = toWidth(size);
|
|
51
65
|
|
|
52
66
|
var _useState = (0, _react.useState)(showModal),
|
|
53
67
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
54
68
|
isOpen = _useState2[0],
|
|
55
69
|
setIsOpen = _useState2[1];
|
|
56
70
|
|
|
57
|
-
var _useState3 = (0, _react.useState)(
|
|
71
|
+
var _useState3 = (0, _react.useState)(defaultWidth),
|
|
58
72
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
73
|
+
width = _useState4[0],
|
|
74
|
+
setWidth = _useState4[1];
|
|
75
|
+
|
|
76
|
+
var openAt = (0, _react.useRef)();
|
|
77
|
+
var handleOnOpenComplete = (0, _react.useCallback)(function () {
|
|
78
|
+
openAt.current = Date.now();
|
|
79
|
+
|
|
80
|
+
if (onOpen) {
|
|
81
|
+
onOpen({
|
|
82
|
+
size: size
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}, [onOpen, size]);
|
|
62
86
|
var handleOnClose = (0, _react.useCallback)(function () {
|
|
63
87
|
return setIsOpen(false);
|
|
64
88
|
}, []);
|
|
65
|
-
var
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
89
|
+
var handleOnCloseComplete = (0, _react.useCallback)(function () {
|
|
90
|
+
if (onClose) {
|
|
91
|
+
var duration = openAt.current ? Date.now() - openAt.current : undefined;
|
|
92
|
+
onClose({
|
|
93
|
+
duration: duration,
|
|
94
|
+
size: toSize(width)
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}, [onClose, width]);
|
|
98
|
+
var handleOnResizeClick = (0, _react.useCallback)(function () {
|
|
99
|
+
var newWidth = width === _constants.MIN_MODAL_SIZE ? _constants.MAX_MODAL_SIZE : _constants.MIN_MODAL_SIZE;
|
|
100
|
+
setWidth(newWidth);
|
|
101
|
+
|
|
102
|
+
if (onResize) {
|
|
103
|
+
onResize({
|
|
104
|
+
size: toSize(newWidth)
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}, [onResize, width]);
|
|
69
108
|
return /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTransition, null, isOpen && /*#__PURE__*/_react.default.createElement(_modalDialog.default, {
|
|
70
109
|
height: "100%",
|
|
71
110
|
onClose: handleOnClose,
|
|
72
|
-
onCloseComplete:
|
|
73
|
-
onOpenComplete:
|
|
111
|
+
onCloseComplete: handleOnCloseComplete,
|
|
112
|
+
onOpenComplete: handleOnOpenComplete,
|
|
74
113
|
testId: testId,
|
|
75
|
-
width:
|
|
114
|
+
width: width
|
|
76
115
|
}, /*#__PURE__*/_react.default.createElement(_linkInfo.default, {
|
|
77
116
|
downloadUrl: downloadUrl,
|
|
78
117
|
icon: icon,
|
|
79
118
|
providerName: providerName,
|
|
80
119
|
onViewButtonClick: onViewActionClick,
|
|
81
120
|
onDownloadButtonClick: onDownloadActionClick,
|
|
82
|
-
onResizeButtonClick:
|
|
83
|
-
size:
|
|
121
|
+
onResizeButtonClick: handleOnResizeClick,
|
|
122
|
+
size: width,
|
|
84
123
|
title: title,
|
|
85
124
|
testId: testId,
|
|
86
125
|
url: url
|
|
@@ -92,6 +131,6 @@ var EmbedModal = function EmbedModal(_ref) {
|
|
|
92
131
|
}))));
|
|
93
132
|
};
|
|
94
133
|
|
|
95
|
-
var _default = (0, _sizeExperiment.default)((0, _errorBoundary.default)(EmbedModal));
|
|
134
|
+
var _default = (0, _sizeExperiment.default)((0, _analytics.default)((0, _errorBoundary.default)(EmbedModal)));
|
|
96
135
|
|
|
97
136
|
exports.default = _default;
|
|
@@ -2,4 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
|
-
});
|
|
5
|
+
});
|
|
6
|
+
exports.EmbedModalSize = void 0;
|
|
7
|
+
var EmbedModalSize;
|
|
8
|
+
exports.EmbedModalSize = EmbedModalSize;
|
|
9
|
+
|
|
10
|
+
(function (EmbedModalSize) {
|
|
11
|
+
EmbedModalSize["Large"] = "large";
|
|
12
|
+
EmbedModalSize["Small"] = "small";
|
|
13
|
+
})(EmbedModalSize || (exports.EmbedModalSize = EmbedModalSize = {}));
|
|
@@ -125,7 +125,8 @@ var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
125
125
|
var linkActions = (0, _useSmartLinkActions.useSmartLinkActions)({
|
|
126
126
|
url: url,
|
|
127
127
|
appearance: _utils.SMART_CARD_ANALYTICS_DISPLAY,
|
|
128
|
-
analyticsHandler: analyticsHandler
|
|
128
|
+
analyticsHandler: analyticsHandler,
|
|
129
|
+
origin: 'smartLinkPreviewHoverCard'
|
|
129
130
|
});
|
|
130
131
|
var onActionClick = (0, _react.useCallback)(function (actionId) {
|
|
131
132
|
if (actionId === 'preview-content') {
|