@atlaskit/smart-card 32.7.8 → 32.7.9
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 +8 -0
- package/analytics.spec.yaml +31 -5
- package/dist/cjs/extractors/action/extract-invoke-preview-action.js +7 -6
- package/dist/cjs/state/analytics/useSmartLinkAnalytics.js +5 -1
- package/dist/cjs/utils/analytics/LinkAnalyticsContext.js +2 -7
- package/dist/cjs/utils/analytics/SmartLinkAnalyticsContext.js +99 -6
- package/dist/cjs/utils/analytics/analytics.js +1 -1
- package/dist/cjs/view/CardWithUrl/component.js +0 -1
- package/dist/cjs/view/CardWithUrl/loader.js +14 -5
- package/dist/cjs/view/EmbedModal/components/analytics/index.js +88 -32
- package/dist/cjs/view/HoverCard/components/HoverCardComponent.js +2 -2
- package/dist/cjs/view/HoverCard/components/views/resolved/index.js +0 -1
- package/dist/cjs/view/HoverCard/index.js +15 -8
- package/dist/cjs/view/LinkUrl/index.js +1 -1
- package/dist/es2019/extractors/action/extract-invoke-preview-action.js +8 -7
- package/dist/es2019/state/analytics/useSmartLinkAnalytics.js +5 -1
- package/dist/es2019/utils/analytics/LinkAnalyticsContext.js +0 -3
- package/dist/es2019/utils/analytics/SmartLinkAnalyticsContext.js +97 -2
- package/dist/es2019/utils/analytics/analytics.js +1 -1
- package/dist/es2019/view/CardWithUrl/component.js +0 -1
- package/dist/es2019/view/CardWithUrl/loader.js +9 -1
- package/dist/es2019/view/EmbedModal/components/analytics/index.js +88 -32
- package/dist/es2019/view/HoverCard/components/HoverCardComponent.js +1 -1
- package/dist/es2019/view/HoverCard/components/views/resolved/index.js +0 -1
- package/dist/es2019/view/HoverCard/index.js +10 -2
- package/dist/es2019/view/LinkUrl/index.js +1 -1
- package/dist/esm/extractors/action/extract-invoke-preview-action.js +8 -7
- package/dist/esm/state/analytics/useSmartLinkAnalytics.js +5 -1
- package/dist/esm/utils/analytics/LinkAnalyticsContext.js +2 -7
- package/dist/esm/utils/analytics/SmartLinkAnalyticsContext.js +95 -5
- package/dist/esm/utils/analytics/analytics.js +1 -1
- package/dist/esm/view/CardWithUrl/component.js +0 -1
- package/dist/esm/view/CardWithUrl/loader.js +14 -5
- package/dist/esm/view/EmbedModal/components/analytics/index.js +88 -32
- package/dist/esm/view/HoverCard/components/HoverCardComponent.js +1 -1
- package/dist/esm/view/HoverCard/components/views/resolved/index.js +0 -1
- package/dist/esm/view/HoverCard/index.js +14 -4
- package/dist/esm/view/LinkUrl/index.js +1 -1
- package/dist/types/common/analytics/generated/analytics.types.d.ts +16 -2
- package/dist/types/state/analytics/useSmartLinkAnalytics.d.ts +5 -1
- package/dist/types/utils/analytics/SmartLinkAnalyticsContext.d.ts +14 -0
- package/dist/types/view/EmbedModal/components/analytics/types.d.ts +1 -0
- package/dist/types/view/HoverCard/components/HoverCardComponent.d.ts +1 -0
- package/dist/types-ts4.5/common/analytics/generated/analytics.types.d.ts +16 -2
- package/dist/types-ts4.5/state/analytics/useSmartLinkAnalytics.d.ts +5 -1
- package/dist/types-ts4.5/utils/analytics/SmartLinkAnalyticsContext.d.ts +14 -0
- package/dist/types-ts4.5/view/EmbedModal/components/analytics/types.d.ts +1 -0
- package/dist/types-ts4.5/view/HoverCard/components/HoverCardComponent.d.ts +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/smart-card
|
|
2
2
|
|
|
3
|
+
## 32.7.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#171388](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/171388)
|
|
8
|
+
[`87d9dab6e4f6d`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/87d9dab6e4f6d) -
|
|
9
|
+
Add definitionId and resourceType to SmartLinkAnalyticsContext and migrate EmbedModal analytics
|
|
10
|
+
|
|
3
11
|
## 32.7.8
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
package/analytics.spec.yaml
CHANGED
|
@@ -381,6 +381,19 @@ events:
|
|
|
381
381
|
required: false
|
|
382
382
|
type: string
|
|
383
383
|
description: The definitionId of the Smart Link resolver invoked.
|
|
384
|
+
- embedPreviewModal viewed:
|
|
385
|
+
type: screen
|
|
386
|
+
description: Fires an event that represents when a user view a modal.
|
|
387
|
+
attributes:
|
|
388
|
+
<<: [ *PackageMetaDataContext, *CommonContext ]
|
|
389
|
+
origin:
|
|
390
|
+
required: false
|
|
391
|
+
type: [ 'smartLinkCard', 'smartLinkEmbed', 'smartLinkInline', 'smartLinkPreviewHoverCard' ]
|
|
392
|
+
description: The origin of the event
|
|
393
|
+
size:
|
|
394
|
+
required: false
|
|
395
|
+
type: [ 'large', 'small' ]
|
|
396
|
+
description: The size of the modal
|
|
384
397
|
- smartLink connectSucceeded:
|
|
385
398
|
type: operational
|
|
386
399
|
description:
|
|
@@ -629,6 +642,23 @@ events:
|
|
|
629
642
|
required: false
|
|
630
643
|
type: string
|
|
631
644
|
description: The definitionId of the Smart Link resolver invoked.
|
|
645
|
+
- modal closed (embedPreview):
|
|
646
|
+
type: ui
|
|
647
|
+
description: Fires an event that represents when a user close a modal.
|
|
648
|
+
attributes:
|
|
649
|
+
<<: [ *PackageMetaDataContext, *CommonContext ]
|
|
650
|
+
origin:
|
|
651
|
+
required: false
|
|
652
|
+
type: [ 'smartLinkCard', 'smartLinkEmbed', 'smartLinkInline', 'smartLinkPreviewHoverCard' ]
|
|
653
|
+
description: The origin of the event
|
|
654
|
+
previewTime:
|
|
655
|
+
required: false
|
|
656
|
+
type: number
|
|
657
|
+
description: Duration that user spent on the preview.
|
|
658
|
+
size:
|
|
659
|
+
required: false
|
|
660
|
+
type: [ 'large', 'small' ]
|
|
661
|
+
description: The size of the modal
|
|
632
662
|
- button clicked (learnMore):
|
|
633
663
|
type: ui
|
|
634
664
|
description:
|
|
@@ -695,15 +725,11 @@ events:
|
|
|
695
725
|
required: true
|
|
696
726
|
type: [ 'inline', 'block', 'embed', 'embedPreview', 'flexible', 'hoverCardPreview' ]
|
|
697
727
|
description: Whether the card was an Inline, Block, Embed or Flexible UI
|
|
698
|
-
definitionId:
|
|
699
|
-
required: false
|
|
700
|
-
type: string
|
|
701
|
-
description: The definitionId of the Smart Link resolver invoked.
|
|
702
728
|
- smartLink renderFailed:
|
|
703
729
|
type: ui
|
|
704
730
|
description: fires an event that represents when a Smart Link renders unsuccessfully.
|
|
705
731
|
attributes:
|
|
706
|
-
<<: [ *PackageMetaDataContext, *CommonContext
|
|
732
|
+
<<: [ *PackageMetaDataContext, *CommonContext]
|
|
707
733
|
display:
|
|
708
734
|
required: true
|
|
709
735
|
type: [ 'inline', 'block', 'embed', 'embedPreview', 'flexible', 'hoverCardPreview' ]
|
|
@@ -34,6 +34,7 @@ var extractInvokePreviewAction = exports.extractInvokePreviewAction = function e
|
|
|
34
34
|
var src = (_extractPreviewData = (0, _linkExtractors.extractPreview)(data, 'web')) === null || _extractPreviewData === void 0 ? void 0 : _extractPreviewData.src;
|
|
35
35
|
if (src) {
|
|
36
36
|
var url = (0, _linkExtractors.extractLink)(data);
|
|
37
|
+
var extensionKey = (0, _helpers.getExtensionKey)(response);
|
|
37
38
|
return {
|
|
38
39
|
actionFn: function () {
|
|
39
40
|
var _actionFn = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
@@ -43,7 +44,10 @@ var extractInvokePreviewAction = exports.extractInvokePreviewAction = function e
|
|
|
43
44
|
case 0:
|
|
44
45
|
return _context.abrupt("return", (0, _utils.openEmbedModal)({
|
|
45
46
|
fireEvent: fireEvent,
|
|
47
|
+
extensionKey: extensionKey,
|
|
48
|
+
id: id,
|
|
46
49
|
invokeDownloadAction: (0, _extractInvokeDownloadAction.extractInvokeDownloadAction)(param),
|
|
50
|
+
invokeViewAction: (0, _extractInvokeViewAction.extractInvokeViewAction)(param, true),
|
|
47
51
|
isSupportTheming: (0, _extractIsSupportTheming.extractIsSupportTheming)(meta),
|
|
48
52
|
isTrusted: (0, _extractIsTrusted.extractIsTrusted)(meta),
|
|
49
53
|
linkIcon: (0, _icon.extractLinkIcon)(response),
|
|
@@ -52,8 +56,7 @@ var extractInvokePreviewAction = exports.extractInvokePreviewAction = function e
|
|
|
52
56
|
origin: origin,
|
|
53
57
|
src: src,
|
|
54
58
|
title: (0, _linkExtractors.extractTitle)(data),
|
|
55
|
-
url: url
|
|
56
|
-
invokeViewAction: (0, _extractInvokeViewAction.extractInvokeViewAction)(param, true)
|
|
59
|
+
url: url
|
|
57
60
|
}));
|
|
58
61
|
case 1:
|
|
59
62
|
case "end":
|
|
@@ -68,11 +71,9 @@ var extractInvokePreviewAction = exports.extractInvokePreviewAction = function e
|
|
|
68
71
|
}(),
|
|
69
72
|
actionSubjectId: 'invokePreviewScreen',
|
|
70
73
|
actionType: _index.ActionName.PreviewAction,
|
|
71
|
-
definitionId: (0, _helpers.getDefinitionId)(response),
|
|
72
74
|
display: display,
|
|
73
|
-
extensionKey:
|
|
74
|
-
id: id
|
|
75
|
-
resourceType: (0, _helpers.getResourceType)(response)
|
|
75
|
+
extensionKey: extensionKey,
|
|
76
|
+
id: id
|
|
76
77
|
};
|
|
77
78
|
}
|
|
78
79
|
};
|
|
@@ -75,6 +75,7 @@ var useSmartLinkAnalytics = exports.useSmartLinkAnalytics = function useSmartLin
|
|
|
75
75
|
* This fires an event that represents when a user
|
|
76
76
|
* click a button.
|
|
77
77
|
* @param data A partial analytics event payload
|
|
78
|
+
* @deprecated consider removing when cleaning up FF platform-smart-card-migrate-embed-modal-analytics
|
|
78
79
|
*/
|
|
79
80
|
buttonClickedEvent: function buttonClickedEvent(data) {
|
|
80
81
|
return dispatchAnalytics(applyCommonAttributes({
|
|
@@ -120,6 +121,7 @@ var useSmartLinkAnalytics = exports.useSmartLinkAnalytics = function useSmartLin
|
|
|
120
121
|
/**
|
|
121
122
|
* This fires an event that represents when a user close a modal.
|
|
122
123
|
* @param data A partial analytics event payload
|
|
124
|
+
* @deprecated consider removing when cleaning up FF platform-smart-card-migrate-embed-modal-analytics
|
|
123
125
|
*/
|
|
124
126
|
modalClosedEvent: function modalClosedEvent(data) {
|
|
125
127
|
return dispatchAnalytics(applyCommonAttributes({
|
|
@@ -138,6 +140,7 @@ var useSmartLinkAnalytics = exports.useSmartLinkAnalytics = function useSmartLin
|
|
|
138
140
|
* @param definitionId The definitionId of the Smart Link resolver invoked.
|
|
139
141
|
* @param extensionKey The extensionKey of the Smart Link resovler invoked.
|
|
140
142
|
* @param canBeDatasource An indicator that shows that a smart link can be converted to a datasource
|
|
143
|
+
* @deprecated consider removing when cleaning up FF platform-smart-card-migrate-embed-modal-analytics
|
|
141
144
|
*/
|
|
142
145
|
renderSuccessEvent: function renderSuccessEvent(_ref2) {
|
|
143
146
|
var display = _ref2.display,
|
|
@@ -179,6 +182,7 @@ var useSmartLinkAnalytics = exports.useSmartLinkAnalytics = function useSmartLin
|
|
|
179
182
|
* @param id The unique ID for this Smart Link.
|
|
180
183
|
* @param error: An error representing why the Smart Link render failed.
|
|
181
184
|
* @param errorInfo: Additional details about the error including the stack trace.
|
|
185
|
+
* @deprecated consider removing when cleaning up FF platform-smart-card-migrate-embed-modal-analytics
|
|
182
186
|
*/
|
|
183
187
|
renderFailedEvent: function renderFailedEvent(_ref3) {
|
|
184
188
|
var display = _ref3.display,
|
|
@@ -284,7 +288,7 @@ var useSmartLinkAnalytics = exports.useSmartLinkAnalytics = function useSmartLin
|
|
|
284
288
|
return {
|
|
285
289
|
/**
|
|
286
290
|
* This fires an event that represents when a user view a modal.
|
|
287
|
-
* @
|
|
291
|
+
* @deprecated consider removing when cleaning up FF platform-smart-card-migrate-embed-modal-analytics
|
|
288
292
|
*/
|
|
289
293
|
modalViewedEvent: function modalViewedEvent(data) {
|
|
290
294
|
return dispatchAnalytics(applyCommonAttributes({
|
|
@@ -5,13 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.LinkAnalyticsContext = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
8
|
var _react = _interopRequireDefault(require("react"));
|
|
10
9
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
11
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
12
|
-
var _analytics = require("./analytics");
|
|
13
|
-
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; }
|
|
14
|
-
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
10
|
/**
|
|
16
11
|
* Provides an analytics context to supply attributes to events based on a URL
|
|
17
12
|
*/
|
|
@@ -24,11 +19,11 @@ var LinkAnalyticsContext = exports.LinkAnalyticsContext = function LinkAnalytics
|
|
|
24
19
|
return /*#__PURE__*/_react.default.createElement(_analyticsNext.AnalyticsContext, {
|
|
25
20
|
data: {
|
|
26
21
|
source: source,
|
|
27
|
-
attributes:
|
|
22
|
+
attributes: {
|
|
28
23
|
displayCategory: displayCategory,
|
|
29
24
|
display: display,
|
|
30
25
|
id: id
|
|
31
|
-
}
|
|
26
|
+
}
|
|
32
27
|
}
|
|
33
28
|
}, children);
|
|
34
29
|
};
|
|
@@ -1,27 +1,112 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
|
-
exports.SmartLinkAnalyticsContext = void 0;
|
|
8
|
+
exports.useSmartLinkAnalyticsContext = exports.SmartLinkAnalyticsContext = void 0;
|
|
8
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
-
var
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
12
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
11
13
|
var _resolvedAttributes = require("@atlaskit/link-analytics/resolved-attributes");
|
|
14
|
+
var _linkProvider = require("@atlaskit/link-provider");
|
|
15
|
+
var _linkingCommon = require("@atlaskit/linking-common");
|
|
16
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
12
17
|
var _store = require("../../state/store");
|
|
18
|
+
var _analytics = require("./analytics");
|
|
13
19
|
var _LinkAnalyticsContext = require("./LinkAnalyticsContext");
|
|
20
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
21
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
22
|
+
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; }
|
|
23
|
+
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; }
|
|
24
|
+
var getExtendedResolvedAttributes = function getExtendedResolvedAttributes(linkDetails, details, linkStatus) {
|
|
25
|
+
var _details$meta$definit, _details$meta, _details$meta$resourc, _details$meta2;
|
|
26
|
+
return _objectSpread({
|
|
27
|
+
definitionId: (_details$meta$definit = details === null || details === void 0 || (_details$meta = details.meta) === null || _details$meta === void 0 ? void 0 : _details$meta.definitionId) !== null && _details$meta$definit !== void 0 ? _details$meta$definit : null,
|
|
28
|
+
resourceType: (_details$meta$resourc = details === null || details === void 0 || (_details$meta2 = details.meta) === null || _details$meta2 === void 0 ? void 0 : _details$meta2.resourceType) !== null && _details$meta$resourc !== void 0 ? _details$meta$resourc : null
|
|
29
|
+
}, (0, _resolvedAttributes.getResolvedAttributes)(linkDetails, details, linkStatus));
|
|
30
|
+
};
|
|
31
|
+
var getSmartLinkAnalyticsContext = function getSmartLinkAnalyticsContext(_ref) {
|
|
32
|
+
var display = _ref.display,
|
|
33
|
+
id = _ref.id,
|
|
34
|
+
response = _ref.response,
|
|
35
|
+
source = _ref.source,
|
|
36
|
+
status = _ref.status,
|
|
37
|
+
url = _ref.url;
|
|
38
|
+
var resolvedAttributes = getExtendedResolvedAttributes({
|
|
39
|
+
url: url
|
|
40
|
+
}, response, status);
|
|
41
|
+
return {
|
|
42
|
+
source: source,
|
|
43
|
+
attributes: _objectSpread(_objectSpread({}, _analytics.context), {}, {
|
|
44
|
+
display: display,
|
|
45
|
+
id: id
|
|
46
|
+
}, resolvedAttributes)
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Provides an analytics context data to supply attributes to events based on a URL
|
|
51
|
+
* and the link state in the store
|
|
52
|
+
*/
|
|
53
|
+
var useSmartLinkAnalyticsContext = exports.useSmartLinkAnalyticsContext = function useSmartLinkAnalyticsContext(_ref2) {
|
|
54
|
+
var display = _ref2.display,
|
|
55
|
+
id = _ref2.id,
|
|
56
|
+
source = _ref2.source,
|
|
57
|
+
url = _ref2.url;
|
|
58
|
+
var _useSmartLinkContext = (0, _linkProvider.useSmartLinkContext)(),
|
|
59
|
+
store = _useSmartLinkContext.store;
|
|
60
|
+
var state = store ? (0, _linkingCommon.getUrl)(store, url) : undefined;
|
|
61
|
+
return (0, _react.useMemo)(function () {
|
|
62
|
+
return (0, _platformFeatureFlags.fg)('platform-smart-card-migrate-embed-modal-analytics') ? getSmartLinkAnalyticsContext({
|
|
63
|
+
display: display,
|
|
64
|
+
id: id,
|
|
65
|
+
response: state === null || state === void 0 ? void 0 : state.details,
|
|
66
|
+
source: source,
|
|
67
|
+
status: state === null || state === void 0 ? void 0 : state.status,
|
|
68
|
+
url: url
|
|
69
|
+
}) : {};
|
|
70
|
+
}, [display, id, source, state === null || state === void 0 ? void 0 : state.details, state === null || state === void 0 ? void 0 : state.status, url]);
|
|
71
|
+
};
|
|
72
|
+
|
|
14
73
|
/**
|
|
15
74
|
* Provides an analytics context to supply attributes to events based on a URL
|
|
16
75
|
* and the link state in the store
|
|
17
76
|
*/
|
|
18
|
-
var
|
|
19
|
-
var children =
|
|
20
|
-
|
|
21
|
-
|
|
77
|
+
var ExtendedSmartLinkAnalyticsContext = function ExtendedSmartLinkAnalyticsContext(_ref3) {
|
|
78
|
+
var children = _ref3.children,
|
|
79
|
+
display = _ref3.display,
|
|
80
|
+
id = _ref3.id,
|
|
81
|
+
source = _ref3.source,
|
|
82
|
+
url = _ref3.url;
|
|
22
83
|
var _useSmartLinkState = (0, _store.useSmartCardState)(url),
|
|
23
84
|
details = _useSmartLinkState.details,
|
|
24
85
|
status = _useSmartLinkState.status;
|
|
86
|
+
var data = getSmartLinkAnalyticsContext({
|
|
87
|
+
display: display,
|
|
88
|
+
id: id,
|
|
89
|
+
response: details,
|
|
90
|
+
source: source,
|
|
91
|
+
status: status,
|
|
92
|
+
url: url
|
|
93
|
+
});
|
|
94
|
+
return /*#__PURE__*/_react.default.createElement(_analyticsNext.AnalyticsContext, {
|
|
95
|
+
data: data
|
|
96
|
+
}, children);
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Provides an analytics context to supply attributes to events based on a URL
|
|
101
|
+
* and the link state in the store
|
|
102
|
+
*/
|
|
103
|
+
var LegacySmartLinkAnalyticsContext = function LegacySmartLinkAnalyticsContext(props) {
|
|
104
|
+
var children = props.children,
|
|
105
|
+
url = props.url,
|
|
106
|
+
display = props.display;
|
|
107
|
+
var _useSmartLinkState2 = (0, _store.useSmartCardState)(url),
|
|
108
|
+
details = _useSmartLinkState2.details,
|
|
109
|
+
status = _useSmartLinkState2.status;
|
|
25
110
|
var attributes = (0, _resolvedAttributes.getResolvedAttributes)({
|
|
26
111
|
url: url
|
|
27
112
|
}, details, status);
|
|
@@ -32,4 +117,12 @@ var SmartLinkAnalyticsContext = exports.SmartLinkAnalyticsContext = function Sma
|
|
|
32
117
|
attributes: attributes
|
|
33
118
|
}
|
|
34
119
|
}, children));
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Provides an analytics context to supply attributes to events based on a URL
|
|
124
|
+
* and the link state in the store
|
|
125
|
+
*/
|
|
126
|
+
var SmartLinkAnalyticsContext = exports.SmartLinkAnalyticsContext = function SmartLinkAnalyticsContext(props) {
|
|
127
|
+
return (0, _platformFeatureFlags.fg)('platform-smart-card-migrate-embed-modal-analytics') ? /*#__PURE__*/_react.default.createElement(ExtendedSmartLinkAnalyticsContext, props) : /*#__PURE__*/_react.default.createElement(LegacySmartLinkAnalyticsContext, props);
|
|
35
128
|
};
|
|
@@ -15,7 +15,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
|
|
|
15
15
|
var context = exports.context = {
|
|
16
16
|
componentName: 'smart-cards',
|
|
17
17
|
packageName: "@atlaskit/smart-card",
|
|
18
|
-
packageVersion: "32.7.
|
|
18
|
+
packageVersion: "32.7.9"
|
|
19
19
|
};
|
|
20
20
|
var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
|
|
21
21
|
TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
|
|
@@ -163,7 +163,6 @@ function Component(_ref) {
|
|
|
163
163
|
display: isFlexibleUi ? 'flexible' : appearance
|
|
164
164
|
});
|
|
165
165
|
fireEvent('ui.smartLink.renderSuccess', {
|
|
166
|
-
definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null,
|
|
167
166
|
display: isFlexibleUi ? 'flexible' : appearance
|
|
168
167
|
});
|
|
169
168
|
} else {
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.CardWithURLRenderer = CardWithURLRenderer;
|
|
8
8
|
exports.LazyCardWithUrlContent = void 0;
|
|
9
9
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
13
|
var _reactErrorBoundary = require("react-error-boundary");
|
|
@@ -17,9 +18,12 @@ var _useAnalyticsEvents2 = require("../../common/analytics/generated/use-analyti
|
|
|
17
18
|
var _state = require("../../state");
|
|
18
19
|
var _analytics = require("../../state/analytics");
|
|
19
20
|
var _utils = require("../../utils");
|
|
21
|
+
var _SmartLinkAnalyticsContext = require("../../utils/analytics/SmartLinkAnalyticsContext");
|
|
20
22
|
var _flexible = require("../../utils/flexible");
|
|
21
23
|
var _performance = require("../../utils/performance");
|
|
22
24
|
var _LoadingCardLink = require("./component-lazy/LoadingCardLink");
|
|
25
|
+
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; }
|
|
26
|
+
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; }
|
|
23
27
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
24
28
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != (0, _typeof2.default)(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
25
29
|
var LazyCardWithUrlContent = exports.LazyCardWithUrlContent = /*#__PURE__*/(0, _react.lazy)(function () {
|
|
@@ -72,6 +76,11 @@ function CardWithURLRenderer(props) {
|
|
|
72
76
|
truncateInline = props.truncateInline;
|
|
73
77
|
var analytics = (0, _state.useSmartLinkAnalytics)(url !== null && url !== void 0 ? url : '', id);
|
|
74
78
|
var isFlexibleUi = (0, _flexible.isFlexibleUiCard)(children);
|
|
79
|
+
var analyticsContext = (0, _SmartLinkAnalyticsContext.useSmartLinkAnalyticsContext)({
|
|
80
|
+
display: isFlexibleUi ? 'flexible' : appearance,
|
|
81
|
+
id: id,
|
|
82
|
+
url: url !== null && url !== void 0 ? url : ''
|
|
83
|
+
});
|
|
75
84
|
var errorHandler = (0, _react.useCallback)(function (error, info) {
|
|
76
85
|
var componentStack = info.componentStack;
|
|
77
86
|
var errorInfo = {
|
|
@@ -83,23 +92,23 @@ function CardWithURLRenderer(props) {
|
|
|
83
92
|
// to the reliability of the smart-card front-end components.
|
|
84
93
|
// Likewise, chunk loading errors are not caused by a failure of smart-card rendering.
|
|
85
94
|
if (error.name === 'ChunkLoadError') {
|
|
86
|
-
fireEvent('operational.smartLink.chunkLoadFailed', {
|
|
95
|
+
fireEvent('operational.smartLink.chunkLoadFailed', _objectSpread(_objectSpread({}, analyticsContext === null || analyticsContext === void 0 ? void 0 : analyticsContext.attributes), {}, {
|
|
87
96
|
display: appearance,
|
|
88
97
|
error: error,
|
|
89
98
|
errorInfo: errorInfo,
|
|
90
99
|
definitionId: null
|
|
91
|
-
});
|
|
100
|
+
}));
|
|
92
101
|
} else if (error.name !== 'APIError') {
|
|
93
102
|
if ((0, _platformFeatureFlags.fg)('platform-smart-card-migrate-embed-modal-analytics')) {
|
|
94
103
|
(0, _analytics.startUfoExperience)('smart-link-rendered', id || 'NULL');
|
|
95
104
|
(0, _analytics.failUfoExperience)('smart-link-rendered', id || 'NULL');
|
|
96
105
|
(0, _analytics.failUfoExperience)('smart-link-authenticated', id || 'NULL');
|
|
97
|
-
fireEvent('ui.smartLink.renderFailed', {
|
|
106
|
+
fireEvent('ui.smartLink.renderFailed', _objectSpread(_objectSpread({}, analyticsContext === null || analyticsContext === void 0 ? void 0 : analyticsContext.attributes), {}, {
|
|
98
107
|
display: isFlexibleUi ? 'flexible' : appearance,
|
|
99
108
|
id: id !== null && id !== void 0 ? id : null,
|
|
100
109
|
error: error,
|
|
101
110
|
errorInfo: errorInfo
|
|
102
|
-
});
|
|
111
|
+
}));
|
|
103
112
|
} else {
|
|
104
113
|
analytics.ui.renderFailedEvent({
|
|
105
114
|
display: isFlexibleUi ? 'flexible' : appearance,
|
|
@@ -114,7 +123,7 @@ function CardWithURLRenderer(props) {
|
|
|
114
123
|
url: url !== null && url !== void 0 ? url : '',
|
|
115
124
|
err: error
|
|
116
125
|
});
|
|
117
|
-
}, [analytics.ui, appearance, id, onError, url, isFlexibleUi, fireEvent]);
|
|
126
|
+
}, [analytics.ui, analyticsContext, appearance, id, onError, url, isFlexibleUi, fireEvent]);
|
|
118
127
|
if (!url) {
|
|
119
128
|
throw new Error('@atlaskit/smart-card: url property is missing.');
|
|
120
129
|
}
|
|
@@ -8,7 +8,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
11
12
|
var _constants = require("../../../../constants");
|
|
13
|
+
var _analytics = require("../../../../state/analytics");
|
|
12
14
|
var _types = require("../../types");
|
|
13
15
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
14
16
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -18,63 +20,117 @@ var getResizeFrom = function getResizeFrom(size) {
|
|
|
18
20
|
var withAnalytics = function withAnalytics(Component) {
|
|
19
21
|
return function (props) {
|
|
20
22
|
var analytics = props.analytics,
|
|
23
|
+
fireEvent = props.fireEvent,
|
|
24
|
+
extensionKey = props.extensionKey,
|
|
25
|
+
id = props.id,
|
|
21
26
|
onClose = props.onClose,
|
|
22
27
|
onOpen = props.onOpen,
|
|
23
28
|
onOpenFailed = props.onOpenFailed,
|
|
24
29
|
onResize = props.onResize,
|
|
25
30
|
origin = props.origin;
|
|
26
31
|
var handleOnOpen = (0, _react.useCallback)(function (context) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
origin: origin,
|
|
32
|
+
if ((0, _platformFeatureFlags.fg)('platform-smart-card-migrate-embed-modal-analytics')) {
|
|
33
|
+
fireEvent === null || fireEvent === void 0 || fireEvent('screen.embedPreviewModal.viewed', {
|
|
34
|
+
origin: origin !== null && origin !== void 0 ? origin : null,
|
|
31
35
|
size: context.size
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
});
|
|
37
|
+
} else {
|
|
38
|
+
analytics === null || analytics === void 0 || analytics.screen.modalViewedEvent({
|
|
39
|
+
name: 'embedPreviewModal',
|
|
40
|
+
attributes: {
|
|
41
|
+
origin: origin,
|
|
42
|
+
size: context.size
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if ((0, _platformFeatureFlags.fg)('platform-smart-card-migrate-embed-modal-analytics')) {
|
|
47
|
+
(0, _analytics.succeedUfoExperience)('smart-link-rendered', id || 'NULL', {
|
|
48
|
+
extensionKey: extensionKey,
|
|
49
|
+
display: _constants.CardDisplay.EmbedPreview
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// UFO will disregard this if authentication experience has not yet been started
|
|
53
|
+
(0, _analytics.succeedUfoExperience)('smart-link-authenticated', id || 'NULL', {
|
|
54
|
+
display: _constants.CardDisplay.EmbedPreview
|
|
55
|
+
});
|
|
56
|
+
fireEvent === null || fireEvent === void 0 || fireEvent('ui.smartLink.renderSuccess', {
|
|
57
|
+
display: _constants.CardDisplay.EmbedPreview
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
analytics === null || analytics === void 0 || analytics.ui.renderSuccessEvent({
|
|
61
|
+
status: 'resolved',
|
|
62
|
+
display: _constants.CardDisplay.EmbedPreview
|
|
63
|
+
});
|
|
64
|
+
}
|
|
38
65
|
if (onOpen) {
|
|
39
66
|
onOpen(context);
|
|
40
67
|
}
|
|
41
|
-
}, [analytics === null || analytics === void 0 ? void 0 : analytics.screen, analytics === null || analytics === void 0 ? void 0 : analytics.ui, onOpen, origin]);
|
|
68
|
+
}, [analytics === null || analytics === void 0 ? void 0 : analytics.screen, analytics === null || analytics === void 0 ? void 0 : analytics.ui, fireEvent, extensionKey, id, onOpen, origin]);
|
|
42
69
|
var handleOnOpenFailed = (0, _react.useCallback)(function (error, errorInfo) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
70
|
+
if ((0, _platformFeatureFlags.fg)('platform-smart-card-migrate-embed-modal-analytics')) {
|
|
71
|
+
(0, _analytics.startUfoExperience)('smart-link-rendered', id || 'NULL');
|
|
72
|
+
(0, _analytics.failUfoExperience)('smart-link-rendered', id || 'NULL');
|
|
73
|
+
(0, _analytics.failUfoExperience)('smart-link-authenticated', id || 'NULL');
|
|
74
|
+
fireEvent === null || fireEvent === void 0 || fireEvent('ui.smartLink.renderFailed', {
|
|
75
|
+
display: _constants.CardDisplay.EmbedPreview,
|
|
76
|
+
error: error,
|
|
77
|
+
errorInfo: errorInfo,
|
|
78
|
+
id: id !== null && id !== void 0 ? id : null
|
|
79
|
+
});
|
|
80
|
+
} else {
|
|
81
|
+
analytics === null || analytics === void 0 || analytics.ui.renderFailedEvent({
|
|
82
|
+
display: _constants.CardDisplay.EmbedPreview,
|
|
83
|
+
error: error,
|
|
84
|
+
errorInfo: errorInfo
|
|
85
|
+
});
|
|
86
|
+
}
|
|
48
87
|
if (onOpenFailed) {
|
|
49
88
|
onOpenFailed(error, errorInfo);
|
|
50
89
|
}
|
|
51
|
-
}, [analytics === null || analytics === void 0 ? void 0 : analytics.ui, onOpenFailed]);
|
|
90
|
+
}, [analytics === null || analytics === void 0 ? void 0 : analytics.ui, fireEvent, id, onOpenFailed]);
|
|
52
91
|
var handleOnClose = (0, _react.useCallback)(function (context) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
origin: origin,
|
|
57
|
-
previewTime: context.duration,
|
|
92
|
+
if ((0, _platformFeatureFlags.fg)('platform-smart-card-migrate-embed-modal-analytics')) {
|
|
93
|
+
var _context$duration;
|
|
94
|
+
fireEvent === null || fireEvent === void 0 || fireEvent('ui.modal.closed.embedPreview', {
|
|
95
|
+
origin: origin !== null && origin !== void 0 ? origin : null,
|
|
96
|
+
previewTime: (_context$duration = context.duration) !== null && _context$duration !== void 0 ? _context$duration : null,
|
|
58
97
|
size: context.size
|
|
59
|
-
}
|
|
60
|
-
}
|
|
98
|
+
});
|
|
99
|
+
} else {
|
|
100
|
+
analytics === null || analytics === void 0 || analytics.ui.modalClosedEvent({
|
|
101
|
+
actionSubjectId: 'embedPreview',
|
|
102
|
+
attributes: {
|
|
103
|
+
origin: origin,
|
|
104
|
+
previewTime: context.duration,
|
|
105
|
+
size: context.size
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
61
109
|
if (onClose) {
|
|
62
110
|
onClose(context);
|
|
63
111
|
}
|
|
64
|
-
}, [analytics === null || analytics === void 0 ? void 0 : analytics.ui, onClose, origin]);
|
|
112
|
+
}, [analytics === null || analytics === void 0 ? void 0 : analytics.ui, fireEvent, onClose, origin]);
|
|
65
113
|
var handleOnResize = (0, _react.useCallback)(function (context) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
attributes: {
|
|
114
|
+
if ((0, _platformFeatureFlags.fg)('platform-smart-card-migrate-embed-modal-analytics')) {
|
|
115
|
+
fireEvent === null || fireEvent === void 0 || fireEvent('ui.button.clicked.embedPreviewResize', {
|
|
69
116
|
newSize: context.size,
|
|
70
|
-
origin: origin,
|
|
117
|
+
origin: origin !== null && origin !== void 0 ? origin : null,
|
|
71
118
|
previousSize: getResizeFrom(context.size)
|
|
72
|
-
}
|
|
73
|
-
}
|
|
119
|
+
});
|
|
120
|
+
} else {
|
|
121
|
+
analytics === null || analytics === void 0 || analytics.ui.buttonClickedEvent({
|
|
122
|
+
actionSubjectId: 'embedPreviewResize',
|
|
123
|
+
attributes: {
|
|
124
|
+
newSize: context.size,
|
|
125
|
+
origin: origin,
|
|
126
|
+
previousSize: getResizeFrom(context.size)
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
74
130
|
if (onResize) {
|
|
75
131
|
onResize(context);
|
|
76
132
|
}
|
|
77
|
-
}, [analytics === null || analytics === void 0 ? void 0 : analytics.ui, onResize, origin]);
|
|
133
|
+
}, [analytics === null || analytics === void 0 ? void 0 : analytics.ui, fireEvent, onResize, origin]);
|
|
78
134
|
return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, props, {
|
|
79
135
|
onClose: handleOnClose,
|
|
80
136
|
onOpen: handleOnOpen,
|
|
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.HoverCardComponent = void 0;
|
|
8
|
+
exports.HoverCardComponent = exports.HOVER_CARD_SOURCE = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
@@ -29,7 +29,7 @@ var _excluded = ["aria-haspopup", "aria-expanded"];
|
|
|
29
29
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
30
30
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
31
31
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
32
|
-
var HOVER_CARD_SOURCE = 'smartLinkPreviewHoverCard';
|
|
32
|
+
var HOVER_CARD_SOURCE = exports.HOVER_CARD_SOURCE = 'smartLinkPreviewHoverCard';
|
|
33
33
|
var FADE_IN_DELAY = 500;
|
|
34
34
|
var FADE_OUT_DELAY = 300;
|
|
35
35
|
var RESOLVE_DELAY = 100;
|
|
@@ -52,7 +52,6 @@ var HoverCardResolvedView = function HoverCardResolvedView(_ref) {
|
|
|
52
52
|
display: _constants.CardDisplay.HoverCardPreview
|
|
53
53
|
});
|
|
54
54
|
fireEvent('ui.smartLink.renderSuccess', {
|
|
55
|
-
definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null,
|
|
56
55
|
display: _constants.CardDisplay.HoverCardPreview
|
|
57
56
|
});
|
|
58
57
|
} else {
|