@atlaskit/smart-card 43.11.2 → 43.12.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 +15 -0
- package/analytics.spec.yaml +7 -1
- package/dist/cjs/state/actions/index.js +1 -4
- package/dist/cjs/state/hooks/use-resolve/index.js +3 -13
- package/dist/cjs/state/hooks/use-response/index.js +0 -2
- package/dist/cjs/utils/analytics/analytics.js +1 -1
- package/dist/cjs/utils/analytics/click.js +0 -1
- package/dist/cjs/view/CardWithUrl/component.js +327 -3
- package/dist/cjs/view/EmbedCard/components/ExpandedFrame.js +93 -2
- package/dist/cjs/view/EmbedCard/components/Frame.js +121 -3
- package/dist/cjs/view/EmbedCard/components/IframeDwellTracker.js +25 -4
- package/dist/cjs/view/EmbedCard/index.js +204 -1
- package/dist/cjs/view/EmbedCard/views/ResolvedView.js +95 -2
- package/dist/cjs/view/FlexibleCard/components/actions/action/index.js +0 -1
- package/dist/cjs/view/FlexibleCard/components/actions/automation-action/automation-manual-triggers/manual-triggers-container/manual-triggers-form/boolean-prompt/main.js +9 -13
- package/dist/cjs/view/LinkUrl/Hyperlink/index.js +0 -1
- package/dist/cjs/view/LinkUrl/index.js +1 -3
- package/dist/es2019/state/actions/index.js +1 -4
- package/dist/es2019/state/hooks/use-resolve/index.js +1 -10
- package/dist/es2019/state/hooks/use-response/index.js +0 -2
- package/dist/es2019/utils/analytics/analytics.js +1 -1
- package/dist/es2019/utils/analytics/click.js +0 -1
- package/dist/es2019/view/CardWithUrl/component.js +324 -2
- package/dist/es2019/view/EmbedCard/components/ExpandedFrame.js +87 -2
- package/dist/es2019/view/EmbedCard/components/Frame.js +112 -2
- package/dist/es2019/view/EmbedCard/components/IframeDwellTracker.js +25 -4
- package/dist/es2019/view/EmbedCard/index.js +208 -0
- package/dist/es2019/view/EmbedCard/views/ResolvedView.js +91 -3
- package/dist/es2019/view/FlexibleCard/components/actions/action/index.js +0 -1
- package/dist/es2019/view/FlexibleCard/components/actions/automation-action/automation-manual-triggers/manual-triggers-container/manual-triggers-form/boolean-prompt/main.js +8 -12
- package/dist/es2019/view/LinkUrl/Hyperlink/index.js +0 -1
- package/dist/es2019/view/LinkUrl/index.js +1 -3
- package/dist/esm/state/actions/index.js +1 -4
- package/dist/esm/state/hooks/use-resolve/index.js +3 -13
- package/dist/esm/state/hooks/use-response/index.js +0 -2
- package/dist/esm/utils/analytics/analytics.js +1 -1
- package/dist/esm/utils/analytics/click.js +0 -1
- package/dist/esm/view/CardWithUrl/component.js +326 -2
- package/dist/esm/view/EmbedCard/components/ExpandedFrame.js +95 -2
- package/dist/esm/view/EmbedCard/components/Frame.js +122 -2
- package/dist/esm/view/EmbedCard/components/IframeDwellTracker.js +25 -4
- package/dist/esm/view/EmbedCard/index.js +203 -0
- package/dist/esm/view/EmbedCard/views/ResolvedView.js +97 -3
- package/dist/esm/view/FlexibleCard/components/actions/action/index.js +0 -1
- package/dist/esm/view/FlexibleCard/components/actions/automation-action/automation-manual-triggers/manual-triggers-container/manual-triggers-form/boolean-prompt/main.js +9 -13
- package/dist/esm/view/LinkUrl/Hyperlink/index.js +0 -1
- package/dist/esm/view/LinkUrl/index.js +1 -3
- package/dist/types/common/analytics/generated/analytics.types.d.ts +1 -0
- package/dist/types/view/EmbedCard/components/ExpandedFrame.d.ts +8 -1
- package/dist/types/view/EmbedCard/components/Frame.d.ts +6 -0
- package/dist/types/view/EmbedCard/index.d.ts +4 -0
- package/dist/types/view/EmbedCard/types.d.ts +4 -0
- package/dist/types/view/EmbedCard/views/ResolvedView.d.ts +6 -1
- package/dist/types-ts4.5/common/analytics/generated/analytics.types.d.ts +1 -0
- package/dist/types-ts4.5/view/EmbedCard/components/ExpandedFrame.d.ts +8 -1
- package/dist/types-ts4.5/view/EmbedCard/components/Frame.d.ts +6 -0
- package/dist/types-ts4.5/view/EmbedCard/index.d.ts +4 -0
- package/dist/types-ts4.5/view/EmbedCard/types.d.ts +4 -0
- package/dist/types-ts4.5/view/EmbedCard/views/ResolvedView.d.ts +6 -1
- package/package.json +8 -4
|
@@ -6,7 +6,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", {
|
|
7
7
|
value: true
|
|
8
8
|
});
|
|
9
|
-
exports.Frame = void 0;
|
|
9
|
+
exports.FrameUpdated = exports.Frame = void 0;
|
|
10
10
|
require("./Frame.compiled.css");
|
|
11
11
|
var _runtime = require("@compiled/react/runtime");
|
|
12
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
@@ -16,6 +16,7 @@ var _utils = require("../../../utils");
|
|
|
16
16
|
var _IFrame = require("./IFrame");
|
|
17
17
|
var _IframeDwellTracker = require("./IframeDwellTracker");
|
|
18
18
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
19
|
+
// eslint-disable-next-line no-unused-vars
|
|
19
20
|
function mergeRefs(refs) {
|
|
20
21
|
return function (value) {
|
|
21
22
|
refs.forEach(function (ref) {
|
|
@@ -112,10 +113,127 @@ var Frame = exports.Frame = /*#__PURE__*/_react.default.forwardRef(function (_re
|
|
|
112
113
|
"data-testid": "".concat(testId, "-frame"),
|
|
113
114
|
"data-iframe-loaded": isIframeLoaded,
|
|
114
115
|
onMouseEnter: function onMouseEnter() {
|
|
115
|
-
|
|
116
|
+
setMouseOver(true);
|
|
116
117
|
},
|
|
117
118
|
onMouseLeave: function onMouseLeave() {
|
|
118
|
-
|
|
119
|
+
setMouseOver(false);
|
|
120
|
+
},
|
|
121
|
+
allowFullScreen: true,
|
|
122
|
+
scrolling: "yes",
|
|
123
|
+
allow: "autoplay; encrypted-media; clipboard-write",
|
|
124
|
+
onLoad: function onLoad() {
|
|
125
|
+
setIframeLoaded(true);
|
|
126
|
+
},
|
|
127
|
+
sandbox: (0, _utils.getIframeSandboxAttribute)(isTrusted),
|
|
128
|
+
title: title,
|
|
129
|
+
extensionKey: extensionKey,
|
|
130
|
+
className: (0, _runtime.ax)(["_19itidpf _1reo15vq _18m915vq _2rkofajl _154iidpf _1ltvidpf _1bsb1osq _4t3i1osq _kqswh2mm"])
|
|
131
|
+
}));
|
|
132
|
+
});
|
|
133
|
+
var FrameUpdated = exports.FrameUpdated = /*#__PURE__*/_react.default.forwardRef(function (_ref2, iframeRef) {
|
|
134
|
+
var url = _ref2.url,
|
|
135
|
+
_ref2$isTrusted = _ref2.isTrusted,
|
|
136
|
+
isTrusted = _ref2$isTrusted === void 0 ? false : _ref2$isTrusted,
|
|
137
|
+
testId = _ref2.testId,
|
|
138
|
+
onIframeDwell = _ref2.onIframeDwell,
|
|
139
|
+
onIframeFocus = _ref2.onIframeFocus,
|
|
140
|
+
onIframeMouseEnter = _ref2.onIframeMouseEnter,
|
|
141
|
+
onIframeMouseLeave = _ref2.onIframeMouseLeave,
|
|
142
|
+
isMouseOverProp = _ref2.isMouseOver,
|
|
143
|
+
title = _ref2.title,
|
|
144
|
+
extensionKey = _ref2.extensionKey;
|
|
145
|
+
var _useState1 = (0, _react.useState)(false),
|
|
146
|
+
_useState10 = (0, _slicedToArray2.default)(_useState1, 2),
|
|
147
|
+
isIframeLoaded = _useState10[0],
|
|
148
|
+
setIframeLoaded = _useState10[1];
|
|
149
|
+
var _useState11 = (0, _react.useState)(false),
|
|
150
|
+
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
|
|
151
|
+
isMouseOver = _useState12[0],
|
|
152
|
+
setMouseOver = _useState12[1];
|
|
153
|
+
var _useState13 = (0, _react.useState)(document.hasFocus()),
|
|
154
|
+
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
|
|
155
|
+
isWindowFocused = _useState14[0],
|
|
156
|
+
setWindowFocused = _useState14[1];
|
|
157
|
+
|
|
158
|
+
// Use prop if provided (from wrapper), otherwise use local state (for backward compatibility)
|
|
159
|
+
var effectiveMouseOver = isMouseOverProp !== undefined ? isMouseOverProp : isMouseOver;
|
|
160
|
+
var ref = (0, _react.useRef)();
|
|
161
|
+
var mergedRef = mergeRefs([iframeRef, ref]);
|
|
162
|
+
var _useState15 = (0, _react.useState)(0),
|
|
163
|
+
_useState16 = (0, _slicedToArray2.default)(_useState15, 2),
|
|
164
|
+
percentVisible = _useState16[0],
|
|
165
|
+
setPercentVisible = _useState16[1];
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* These are the 'percent visible' thresholds at which the intersectionObserver will
|
|
169
|
+
* trigger a state change. Eg. when the user scrolls and moves from 74% to 76%, or
|
|
170
|
+
* vice versa. It's in a state object so that its static for the useEffect
|
|
171
|
+
*/
|
|
172
|
+
var _useState17 = (0, _react.useState)([0.75, 0.8, 0.85, 0.9, 0.95, 1]),
|
|
173
|
+
_useState18 = (0, _slicedToArray2.default)(_useState17, 1),
|
|
174
|
+
threshold = _useState18[0];
|
|
175
|
+
(0, _react.useEffect)(function () {
|
|
176
|
+
if (!ref || !ref.current) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
var observer = new IntersectionObserver(function (entries) {
|
|
180
|
+
entries.forEach(function (entry) {
|
|
181
|
+
setPercentVisible(entry === null || entry === void 0 ? void 0 : entry.intersectionRatio);
|
|
182
|
+
});
|
|
183
|
+
}, {
|
|
184
|
+
threshold: threshold
|
|
185
|
+
});
|
|
186
|
+
observer.observe(ref.current);
|
|
187
|
+
return function () {
|
|
188
|
+
observer.disconnect();
|
|
189
|
+
};
|
|
190
|
+
}, [threshold, mergedRef]);
|
|
191
|
+
(0, _react.useEffect)(function () {
|
|
192
|
+
// Initialize with current focus state
|
|
193
|
+
setWindowFocused(document.hasFocus());
|
|
194
|
+
var onBlur = function onBlur() {
|
|
195
|
+
setWindowFocused(false);
|
|
196
|
+
if (document.activeElement === ref.current) {
|
|
197
|
+
onIframeFocus && onIframeFocus();
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
var onFocus = function onFocus() {
|
|
201
|
+
setWindowFocused(true);
|
|
202
|
+
};
|
|
203
|
+
window.addEventListener('blur', onBlur);
|
|
204
|
+
window.addEventListener('focus', onFocus);
|
|
205
|
+
return function () {
|
|
206
|
+
window.removeEventListener('blur', onBlur);
|
|
207
|
+
window.removeEventListener('focus', onFocus);
|
|
208
|
+
};
|
|
209
|
+
}, [ref, onIframeFocus]);
|
|
210
|
+
if (!url) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_IframeDwellTracker.IframeDwellTracker, {
|
|
214
|
+
isIframeLoaded: isIframeLoaded,
|
|
215
|
+
isMouseOver: effectiveMouseOver,
|
|
216
|
+
isWindowFocused: isWindowFocused,
|
|
217
|
+
iframePercentVisible: percentVisible,
|
|
218
|
+
onIframeDwell: onIframeDwell
|
|
219
|
+
}), /*#__PURE__*/_react.default.createElement(_IFrame.IFrame, {
|
|
220
|
+
childRef: mergedRef,
|
|
221
|
+
src: url,
|
|
222
|
+
"data-testid": "".concat(testId, "-frame"),
|
|
223
|
+
"data-iframe-loaded": isIframeLoaded,
|
|
224
|
+
onMouseEnter: function onMouseEnter() {
|
|
225
|
+
onIframeMouseEnter === null || onIframeMouseEnter === void 0 || onIframeMouseEnter();
|
|
226
|
+
// Use local state if prop not provided, otherwise prop takes precedence
|
|
227
|
+
if (isMouseOverProp === undefined) {
|
|
228
|
+
setMouseOver(true);
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
onMouseLeave: function onMouseLeave() {
|
|
232
|
+
onIframeMouseLeave === null || onIframeMouseLeave === void 0 || onIframeMouseLeave();
|
|
233
|
+
// Use local state if prop not provided, otherwise prop takes precedence
|
|
234
|
+
if (isMouseOverProp === undefined) {
|
|
235
|
+
setMouseOver(false);
|
|
236
|
+
}
|
|
119
237
|
},
|
|
120
238
|
allowFullScreen: true,
|
|
121
239
|
scrolling: "yes",
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.IframeDwellTracker = void 0;
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
var _react = require("react");
|
|
10
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
10
11
|
/**
|
|
11
12
|
* @jsxRuntime classic
|
|
12
13
|
* @jsx jsx
|
|
@@ -52,11 +53,31 @@ var IframeDwellTracker = exports.IframeDwellTracker = function IframeDwellTracke
|
|
|
52
53
|
};
|
|
53
54
|
});
|
|
54
55
|
};
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
|
|
57
|
+
// Require: iframe loaded, mouse over, and >75% visible
|
|
58
|
+
var isDwellAndHoverMetricsEnabled = (0, _platformFeatureFlags.fg)('rovo_chat_embed_card_dwell_and_hover_metrics');
|
|
59
|
+
if (isDwellAndHoverMetricsEnabled) {
|
|
60
|
+
// Note: Removed isWindowFocused requirement as it's unreliable and prevents tracking
|
|
61
|
+
// The mouse over check is sufficient to indicate user engagement
|
|
62
|
+
var shouldTrack = isIframeLoaded && isMouseOver && iframePercentVisible > 0.75;
|
|
63
|
+
if (shouldTrack) {
|
|
64
|
+
if (dwellTimeoutId.current) {
|
|
65
|
+
clearInterval(dwellTimeoutId.current);
|
|
66
|
+
}
|
|
67
|
+
dwellTimeoutId.current = setInterval(incrementDwellTime, 1000);
|
|
68
|
+
} else {
|
|
69
|
+
if (dwellTimeoutId.current) {
|
|
70
|
+
clearInterval(dwellTimeoutId.current);
|
|
71
|
+
dwellTimeoutId.current = undefined;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
} else {
|
|
75
|
+
if (isIframeLoaded && isMouseOver && isWindowFocused && iframePercentVisible > 0.75) {
|
|
76
|
+
if (dwellTimeoutId.current) {
|
|
77
|
+
clearInterval(dwellTimeoutId.current);
|
|
78
|
+
}
|
|
79
|
+
dwellTimeoutId.current = setInterval(incrementDwellTime, 1000);
|
|
58
80
|
}
|
|
59
|
-
dwellTimeoutId.current = setInterval(incrementDwellTime, 1000);
|
|
60
81
|
}
|
|
61
82
|
return function () {
|
|
62
83
|
if (dwellTimeoutId.current) {
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.EmbedCard = void 0;
|
|
7
|
+
exports.EmbedCardUpdated = exports.EmbedCard = void 0;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
|
@@ -232,4 +232,207 @@ var EmbedCard = exports.EmbedCard = /*#__PURE__*/_react.default.forwardRef(funct
|
|
|
232
232
|
isSelected: isSelected
|
|
233
233
|
});
|
|
234
234
|
}
|
|
235
|
+
});
|
|
236
|
+
var EmbedCardUpdated = exports.EmbedCardUpdated = /*#__PURE__*/_react.default.forwardRef(function (_ref3, iframeRef) {
|
|
237
|
+
var _details$meta4, _forbiddenViewProps$c3, _forbiddenViewProps$c4, _notFoundViewProps$co3, _notFoundViewProps$co4;
|
|
238
|
+
var url = _ref3.url,
|
|
239
|
+
cardState = _ref3.cardState,
|
|
240
|
+
handleAuthorize = _ref3.handleAuthorize,
|
|
241
|
+
handleErrorRetry = _ref3.handleErrorRetry,
|
|
242
|
+
handleFrameClick = _ref3.handleFrameClick,
|
|
243
|
+
isSelected = _ref3.isSelected,
|
|
244
|
+
frameStyle = _ref3.frameStyle,
|
|
245
|
+
platform = _ref3.platform,
|
|
246
|
+
onResolve = _ref3.onResolve,
|
|
247
|
+
onError = _ref3.onError,
|
|
248
|
+
testId = _ref3.testId,
|
|
249
|
+
inheritDimensions = _ref3.inheritDimensions,
|
|
250
|
+
onIframeDwell = _ref3.onIframeDwell,
|
|
251
|
+
onIframeFocus = _ref3.onIframeFocus,
|
|
252
|
+
onIframeMouseEnter = _ref3.onIframeMouseEnter,
|
|
253
|
+
onIframeMouseLeave = _ref3.onIframeMouseLeave,
|
|
254
|
+
iframeUrlType = _ref3.iframeUrlType,
|
|
255
|
+
actionOptions = _ref3.actionOptions,
|
|
256
|
+
renderers = _ref3.renderers,
|
|
257
|
+
CompetitorPrompt = _ref3.CompetitorPrompt,
|
|
258
|
+
hideIconLoadingSkeleton = _ref3.hideIconLoadingSkeleton;
|
|
259
|
+
var _useAnalyticsEvents2 = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
260
|
+
createAnalyticsEvent = _useAnalyticsEvents2.createAnalyticsEvent;
|
|
261
|
+
var status = cardState.status,
|
|
262
|
+
details = cardState.details;
|
|
263
|
+
var extensionKey = (0, _helpers.getExtensionKey)(details);
|
|
264
|
+
var isProductIntegrationSupported = (0, _helpers.hasAuthScopeOverrides)(details);
|
|
265
|
+
var _useControlDataExport3 = (0, _useControlDataExportConfig.useControlDataExportConfig)(),
|
|
266
|
+
_useControlDataExport4 = _useControlDataExport3.shouldControlDataExport,
|
|
267
|
+
shouldControlDataExport = _useControlDataExport4 === void 0 ? false : _useControlDataExport4;
|
|
268
|
+
switch (status) {
|
|
269
|
+
case 'pending':
|
|
270
|
+
case 'resolving':
|
|
271
|
+
return /*#__PURE__*/_react.default.createElement(UFOLoadHoldWrapper, null, /*#__PURE__*/_react.default.createElement(_ResolvedView.default, {
|
|
272
|
+
url: url,
|
|
273
|
+
cardState: cardState,
|
|
274
|
+
onClick: handleFrameClick,
|
|
275
|
+
onError: onError,
|
|
276
|
+
onResolve: onResolve,
|
|
277
|
+
renderers: renderers,
|
|
278
|
+
actionOptions: actionOptions,
|
|
279
|
+
testId: testId ? "".concat(testId, "-resolving-view") : 'embed-card-resolving-view'
|
|
280
|
+
}));
|
|
281
|
+
case 'resolved':
|
|
282
|
+
var resolvedViewProps = (0, _embed.extractEmbedProps)(details, platform, iframeUrlType);
|
|
283
|
+
if (onResolve) {
|
|
284
|
+
var _resolvedViewProps$pr2, _details$meta3;
|
|
285
|
+
onResolve(_objectSpread({
|
|
286
|
+
title: resolvedViewProps.title,
|
|
287
|
+
url: url,
|
|
288
|
+
aspectRatio: (_resolvedViewProps$pr2 = resolvedViewProps.preview) === null || _resolvedViewProps$pr2 === void 0 ? void 0 : _resolvedViewProps$pr2.aspectRatio
|
|
289
|
+
}, (0, _platformFeatureFlags.fg)('expose-product-details-from-smart-card') && {
|
|
290
|
+
extensionKey: details === null || details === void 0 || (_details$meta3 = details.meta) === null || _details$meta3 === void 0 ? void 0 : _details$meta3.key
|
|
291
|
+
}));
|
|
292
|
+
}
|
|
293
|
+
if ((0, _shouldDataExport.getIsDataExportEnabled)(shouldControlDataExport, cardState.details)) {
|
|
294
|
+
var unauthViewProps = (0, _embed.extractEmbedProps)(details, platform);
|
|
295
|
+
return /*#__PURE__*/_react.default.createElement(_unauthorizedView.default, {
|
|
296
|
+
context: unauthViewProps.context,
|
|
297
|
+
extensionKey: extensionKey,
|
|
298
|
+
frameStyle: frameStyle,
|
|
299
|
+
isProductIntegrationSupported: isProductIntegrationSupported,
|
|
300
|
+
inheritDimensions: inheritDimensions,
|
|
301
|
+
isSelected: isSelected,
|
|
302
|
+
onAuthorize: handleAuthorize,
|
|
303
|
+
onClick: handleFrameClick,
|
|
304
|
+
testId: testId,
|
|
305
|
+
url: unauthViewProps.link
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
if (resolvedViewProps.preview) {
|
|
309
|
+
return /*#__PURE__*/_react.default.createElement(_ResolvedView3.EmbedCardResolvedView, (0, _extends2.default)({}, resolvedViewProps, {
|
|
310
|
+
isSelected: isSelected,
|
|
311
|
+
frameStyle: frameStyle,
|
|
312
|
+
inheritDimensions: inheritDimensions,
|
|
313
|
+
onClick: handleFrameClick,
|
|
314
|
+
ref: iframeRef,
|
|
315
|
+
onIframeDwell: onIframeDwell,
|
|
316
|
+
onIframeFocus: onIframeFocus,
|
|
317
|
+
onIframeMouseEnter: onIframeMouseEnter,
|
|
318
|
+
onIframeMouseLeave: onIframeMouseLeave,
|
|
319
|
+
testId: testId,
|
|
320
|
+
CompetitorPrompt: CompetitorPrompt,
|
|
321
|
+
hideIconLoadingSkeleton: hideIconLoadingSkeleton,
|
|
322
|
+
extensionKey: extensionKey
|
|
323
|
+
}));
|
|
324
|
+
} else {
|
|
325
|
+
if (platform === 'mobile') {
|
|
326
|
+
var resolvedInlineViewProps = (0, _inline.extractInlineProps)(details);
|
|
327
|
+
return /*#__PURE__*/_react.default.createElement(_ResolvedView2.InlineCardResolvedView, (0, _extends2.default)({}, resolvedInlineViewProps, {
|
|
328
|
+
isSelected: isSelected,
|
|
329
|
+
testId: testId,
|
|
330
|
+
onClick: handleFrameClick
|
|
331
|
+
}));
|
|
332
|
+
}
|
|
333
|
+
return /*#__PURE__*/_react.default.createElement(_ResolvedView.default, {
|
|
334
|
+
url: url,
|
|
335
|
+
cardState: cardState,
|
|
336
|
+
onClick: handleFrameClick,
|
|
337
|
+
onError: onError,
|
|
338
|
+
onResolve: onResolve,
|
|
339
|
+
renderers: renderers,
|
|
340
|
+
actionOptions: actionOptions,
|
|
341
|
+
testId: testId
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
case 'unauthorized':
|
|
345
|
+
if (onError) {
|
|
346
|
+
onError({
|
|
347
|
+
url: url,
|
|
348
|
+
status: status
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
var unauthorisedViewProps = (0, _embed.extractEmbedProps)(details, platform);
|
|
352
|
+
return /*#__PURE__*/_react.default.createElement(_unauthorizedView.default, {
|
|
353
|
+
context: unauthorisedViewProps.context,
|
|
354
|
+
extensionKey: extensionKey,
|
|
355
|
+
frameStyle: frameStyle,
|
|
356
|
+
isProductIntegrationSupported: isProductIntegrationSupported,
|
|
357
|
+
inheritDimensions: inheritDimensions,
|
|
358
|
+
isSelected: isSelected,
|
|
359
|
+
onAuthorize: handleAuthorize,
|
|
360
|
+
onClick: handleFrameClick,
|
|
361
|
+
testId: testId,
|
|
362
|
+
url: unauthorisedViewProps.link
|
|
363
|
+
});
|
|
364
|
+
case 'forbidden':
|
|
365
|
+
if (onError) {
|
|
366
|
+
onError({
|
|
367
|
+
url: url,
|
|
368
|
+
status: status
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
var forbiddenViewProps = (0, _embed.extractEmbedProps)(details, platform);
|
|
372
|
+
var cardMetadata = (_details$meta4 = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta4 !== void 0 ? _details$meta4 : (0, _jsonld.getForbiddenJsonLd)().meta;
|
|
373
|
+
if (forbiddenViewProps.preview) {
|
|
374
|
+
return /*#__PURE__*/_react.default.createElement(_ResolvedView3.EmbedCardResolvedView, (0, _extends2.default)({}, forbiddenViewProps, {
|
|
375
|
+
title: forbiddenViewProps.link,
|
|
376
|
+
frameStyle: frameStyle,
|
|
377
|
+
isSelected: isSelected,
|
|
378
|
+
inheritDimensions: inheritDimensions,
|
|
379
|
+
onClick: handleFrameClick,
|
|
380
|
+
ref: iframeRef,
|
|
381
|
+
extensionKey: extensionKey
|
|
382
|
+
}));
|
|
383
|
+
}
|
|
384
|
+
var forbiddenAccessContext = (0, _extractAccessContext.extractRequestAccessContextImproved)({
|
|
385
|
+
jsonLd: cardMetadata,
|
|
386
|
+
url: url,
|
|
387
|
+
product: (_forbiddenViewProps$c3 = (_forbiddenViewProps$c4 = forbiddenViewProps.context) === null || _forbiddenViewProps$c4 === void 0 ? void 0 : _forbiddenViewProps$c4.text) !== null && _forbiddenViewProps$c3 !== void 0 ? _forbiddenViewProps$c3 : '',
|
|
388
|
+
createAnalyticsEvent: createAnalyticsEvent
|
|
389
|
+
});
|
|
390
|
+
return /*#__PURE__*/_react.default.createElement(_forbiddenView.default, {
|
|
391
|
+
context: forbiddenViewProps.context,
|
|
392
|
+
frameStyle: frameStyle,
|
|
393
|
+
inheritDimensions: inheritDimensions,
|
|
394
|
+
isSelected: isSelected,
|
|
395
|
+
onAuthorize: handleAuthorize,
|
|
396
|
+
onClick: handleFrameClick,
|
|
397
|
+
accessContext: forbiddenAccessContext,
|
|
398
|
+
url: forbiddenViewProps.link
|
|
399
|
+
});
|
|
400
|
+
case 'not_found':
|
|
401
|
+
if (onError) {
|
|
402
|
+
onError({
|
|
403
|
+
url: url,
|
|
404
|
+
status: status
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
var notFoundViewProps = (0, _embed.extractEmbedProps)(details, platform);
|
|
408
|
+
var notFoundAccessContext = details !== null && details !== void 0 && details.meta ? (0, _extractAccessContext.extractRequestAccessContextImproved)({
|
|
409
|
+
jsonLd: details === null || details === void 0 ? void 0 : details.meta,
|
|
410
|
+
url: url,
|
|
411
|
+
product: (_notFoundViewProps$co3 = (_notFoundViewProps$co4 = notFoundViewProps.context) === null || _notFoundViewProps$co4 === void 0 ? void 0 : _notFoundViewProps$co4.text) !== null && _notFoundViewProps$co3 !== void 0 ? _notFoundViewProps$co3 : '',
|
|
412
|
+
createAnalyticsEvent: createAnalyticsEvent
|
|
413
|
+
}) : undefined;
|
|
414
|
+
return /*#__PURE__*/_react.default.createElement(_notFoundView.default, {
|
|
415
|
+
context: notFoundViewProps.context,
|
|
416
|
+
frameStyle: frameStyle,
|
|
417
|
+
inheritDimensions: inheritDimensions,
|
|
418
|
+
isSelected: isSelected,
|
|
419
|
+
onClick: handleFrameClick,
|
|
420
|
+
accessContext: notFoundAccessContext,
|
|
421
|
+
url: notFoundViewProps.link
|
|
422
|
+
});
|
|
423
|
+
case 'fallback':
|
|
424
|
+
case 'errored':
|
|
425
|
+
default:
|
|
426
|
+
if (onError) {
|
|
427
|
+
onError({
|
|
428
|
+
url: url,
|
|
429
|
+
status: status
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
return /*#__PURE__*/_react.default.createElement(_ErroredView.EmbedCardErroredView, {
|
|
433
|
+
onRetry: handleErrorRetry,
|
|
434
|
+
inheritDimensions: inheritDimensions,
|
|
435
|
+
isSelected: isSelected
|
|
436
|
+
});
|
|
437
|
+
}
|
|
235
438
|
});
|
|
@@ -5,15 +5,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.EmbedCardResolvedView = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
8
9
|
var _react = _interopRequireDefault(require("react"));
|
|
9
10
|
var _link = _interopRequireDefault(require("@atlaskit/icon/core/migration/link"));
|
|
11
|
+
var _platformFeatureFlagsReact = require("@atlaskit/platform-feature-flags-react");
|
|
10
12
|
var _tokens = require("@atlaskit/tokens");
|
|
11
13
|
var _utils = require("../../../utils");
|
|
12
14
|
var _ExpandedFrame = require("../components/ExpandedFrame");
|
|
13
15
|
var _Frame = require("../components/Frame");
|
|
14
16
|
var _ImageIcon = require("../components/ImageIcon");
|
|
15
17
|
var _useEmbedResolvePostMessageListener = require("../useEmbedResolvePostMessageListener");
|
|
16
|
-
var
|
|
18
|
+
var FrameComponent = (0, _platformFeatureFlagsReact.componentWithFG)('rovo_chat_embed_card_dwell_and_hover_metrics', _Frame.FrameUpdated, _Frame.Frame);
|
|
19
|
+
var EmbedCardResolvedViewOld = /*#__PURE__*/_react.default.forwardRef(function (_ref, embedIframeRef) {
|
|
17
20
|
var link = _ref.link,
|
|
18
21
|
context = _ref.context,
|
|
19
22
|
onClick = _ref.onClick,
|
|
@@ -84,4 +87,94 @@ var EmbedCardResolvedView = exports.EmbedCardResolvedView = /*#__PURE__*/_react.
|
|
|
84
87
|
title: text,
|
|
85
88
|
extensionKey: extensionKey
|
|
86
89
|
}));
|
|
87
|
-
});
|
|
90
|
+
});
|
|
91
|
+
var EmbedCardResolvedViewUpdated = /*#__PURE__*/_react.default.forwardRef(function (_ref2, embedIframeRef) {
|
|
92
|
+
var link = _ref2.link,
|
|
93
|
+
context = _ref2.context,
|
|
94
|
+
onClick = _ref2.onClick,
|
|
95
|
+
isSelected = _ref2.isSelected,
|
|
96
|
+
frameStyle = _ref2.frameStyle,
|
|
97
|
+
preview = _ref2.preview,
|
|
98
|
+
title = _ref2.title,
|
|
99
|
+
isTrusted = _ref2.isTrusted,
|
|
100
|
+
_ref2$testId = _ref2.testId,
|
|
101
|
+
testId = _ref2$testId === void 0 ? 'embed-card-resolved-view' : _ref2$testId,
|
|
102
|
+
inheritDimensions = _ref2.inheritDimensions,
|
|
103
|
+
onIframeDwell = _ref2.onIframeDwell,
|
|
104
|
+
onIframeFocus = _ref2.onIframeFocus,
|
|
105
|
+
onIframeMouseEnter = _ref2.onIframeMouseEnter,
|
|
106
|
+
onIframeMouseLeave = _ref2.onIframeMouseLeave,
|
|
107
|
+
isSupportTheming = _ref2.isSupportTheming,
|
|
108
|
+
type = _ref2.type,
|
|
109
|
+
CompetitorPrompt = _ref2.CompetitorPrompt,
|
|
110
|
+
hideIconLoadingSkeleton = _ref2.hideIconLoadingSkeleton,
|
|
111
|
+
extensionKey = _ref2.extensionKey;
|
|
112
|
+
var iconFromContext = context === null || context === void 0 ? void 0 : context.icon;
|
|
113
|
+
var src = typeof iconFromContext === 'string' ? iconFromContext : undefined;
|
|
114
|
+
var text = title || (context === null || context === void 0 ? void 0 : context.text);
|
|
115
|
+
var linkGlyph = _react.default.useMemo(function () {
|
|
116
|
+
return /*#__PURE__*/_react.default.createElement(_link.default, {
|
|
117
|
+
label: "icon",
|
|
118
|
+
LEGACY_size: "small",
|
|
119
|
+
testId: "embed-card-fallback-icon",
|
|
120
|
+
color: "currentColor"
|
|
121
|
+
});
|
|
122
|
+
}, []);
|
|
123
|
+
var icon = _react.default.useMemo(function () {
|
|
124
|
+
if ( /*#__PURE__*/_react.default.isValidElement(iconFromContext)) {
|
|
125
|
+
return iconFromContext;
|
|
126
|
+
}
|
|
127
|
+
return /*#__PURE__*/_react.default.createElement(_ImageIcon.ImageIcon, {
|
|
128
|
+
src: src,
|
|
129
|
+
default: linkGlyph,
|
|
130
|
+
appearance: (0, _utils.isProfileType)(type) ? 'round' : 'square',
|
|
131
|
+
hideLoadingSkeleton: hideIconLoadingSkeleton
|
|
132
|
+
});
|
|
133
|
+
}, [iconFromContext, src, linkGlyph, type, hideIconLoadingSkeleton]);
|
|
134
|
+
(0, _useEmbedResolvePostMessageListener.useEmbedResolvePostMessageListener)({
|
|
135
|
+
url: link,
|
|
136
|
+
embedIframeRef: embedIframeRef
|
|
137
|
+
});
|
|
138
|
+
var themeState = (0, _tokens.useThemeObserver)();
|
|
139
|
+
var previewUrl = preview === null || preview === void 0 ? void 0 : preview.src;
|
|
140
|
+
if (previewUrl && isSupportTheming) {
|
|
141
|
+
previewUrl = (0, _utils.getPreviewUrlWithTheme)(previewUrl, themeState);
|
|
142
|
+
}
|
|
143
|
+
var _React$useState = _react.default.useState(false),
|
|
144
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
145
|
+
isMouseOver = _React$useState2[0],
|
|
146
|
+
setMouseOver = _React$useState2[1];
|
|
147
|
+
return /*#__PURE__*/_react.default.createElement(_ExpandedFrame.ExpandedFrame, {
|
|
148
|
+
isSelected: isSelected,
|
|
149
|
+
frameStyle: frameStyle,
|
|
150
|
+
href: link,
|
|
151
|
+
testId: testId,
|
|
152
|
+
icon: icon,
|
|
153
|
+
text: text,
|
|
154
|
+
onClick: onClick,
|
|
155
|
+
inheritDimensions: inheritDimensions,
|
|
156
|
+
setOverflow: false,
|
|
157
|
+
CompetitorPrompt: CompetitorPrompt,
|
|
158
|
+
onContentMouseEnter: function onContentMouseEnter() {
|
|
159
|
+
setMouseOver(true);
|
|
160
|
+
onIframeMouseEnter === null || onIframeMouseEnter === void 0 || onIframeMouseEnter();
|
|
161
|
+
},
|
|
162
|
+
onContentMouseLeave: function onContentMouseLeave() {
|
|
163
|
+
setMouseOver(false);
|
|
164
|
+
onIframeMouseLeave === null || onIframeMouseLeave === void 0 || onIframeMouseLeave();
|
|
165
|
+
}
|
|
166
|
+
}, /*#__PURE__*/_react.default.createElement(FrameComponent, {
|
|
167
|
+
url: previewUrl,
|
|
168
|
+
isTrusted: isTrusted,
|
|
169
|
+
testId: testId,
|
|
170
|
+
ref: embedIframeRef,
|
|
171
|
+
onIframeDwell: onIframeDwell,
|
|
172
|
+
onIframeFocus: onIframeFocus,
|
|
173
|
+
onIframeMouseEnter: onIframeMouseEnter,
|
|
174
|
+
onIframeMouseLeave: onIframeMouseLeave,
|
|
175
|
+
isMouseOver: isMouseOver,
|
|
176
|
+
title: text,
|
|
177
|
+
extensionKey: extensionKey
|
|
178
|
+
}));
|
|
179
|
+
});
|
|
180
|
+
var EmbedCardResolvedViewWithFG = exports.EmbedCardResolvedView = (0, _platformFeatureFlagsReact.componentWithFG)('rovo_chat_embed_card_dwell_and_hover_metrics', EmbedCardResolvedViewUpdated, EmbedCardResolvedViewOld);
|
|
@@ -103,7 +103,6 @@ var Action = function Action(_ref) {
|
|
|
103
103
|
href: href,
|
|
104
104
|
ariaLabel: ariaLabel
|
|
105
105
|
});
|
|
106
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
107
106
|
return Wrapper !== undefined ? /*#__PURE__*/_react.default.createElement(Wrapper, null, button) : button;
|
|
108
107
|
};
|
|
109
108
|
var _default = exports.default = Action;
|
|
@@ -15,18 +15,14 @@ var BooleanInputPrompt = function BooleanInputPrompt(_ref) {
|
|
|
15
15
|
var variableName = userInputPrompt.variableName,
|
|
16
16
|
displayName = userInputPrompt.displayName,
|
|
17
17
|
defaultValue = userInputPrompt.defaultValue;
|
|
18
|
-
return (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
label: displayName
|
|
28
|
-
}));
|
|
29
|
-
})
|
|
30
|
-
);
|
|
18
|
+
return /*#__PURE__*/_react.default.createElement(_form.CheckboxField, {
|
|
19
|
+
name: variableName,
|
|
20
|
+
defaultIsChecked: defaultValue || false
|
|
21
|
+
}, function (_ref2) {
|
|
22
|
+
var fieldProps = _ref2.fieldProps;
|
|
23
|
+
return /*#__PURE__*/_react.default.createElement(_checkbox.default, (0, _extends2.default)({}, fieldProps, {
|
|
24
|
+
label: displayName
|
|
25
|
+
}));
|
|
26
|
+
});
|
|
31
27
|
};
|
|
32
28
|
var _default = exports.default = BooleanInputPrompt;
|
|
@@ -11,7 +11,6 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
11
11
|
var _link = _interopRequireDefault(require("@atlaskit/link"));
|
|
12
12
|
var _click = require("../../../utils/analytics/click");
|
|
13
13
|
var _excluded = ["href", "children", "testId", "isLinkComponent"];
|
|
14
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
15
14
|
var Anchor = (0, _click.withLinkClickedEvent)('a');
|
|
16
15
|
var LinkComponent = exports.LinkComponent = (0, _click.withLinkClickedEvent)(_link.default);
|
|
17
16
|
var Hyperlink = function Hyperlink(_ref) {
|
|
@@ -22,11 +22,9 @@ var _excluded = ["href", "children", "checkSafety", "onClick", "testId", "isLink
|
|
|
22
22
|
_excluded2 = ["isLinkSafe", "showSafetyWarningModal"];
|
|
23
23
|
var PACKAGE_DATA = {
|
|
24
24
|
packageName: "@atlaskit/smart-card",
|
|
25
|
-
packageVersion: "
|
|
25
|
+
packageVersion: "0.0.0-development",
|
|
26
26
|
componentName: 'linkUrl'
|
|
27
27
|
};
|
|
28
|
-
|
|
29
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
30
28
|
var Anchor = (0, _click.withLinkClickedEvent)('a');
|
|
31
29
|
var LinkComponent = exports.LinkComponent = (0, _click.withLinkClickedEvent)(_link.default);
|
|
32
30
|
var LinkUrl = function LinkUrl(_ref) {
|
|
@@ -43,10 +43,7 @@ export const useSmartCardActions = (id, url) => {
|
|
|
43
43
|
url
|
|
44
44
|
}, undefined, undefined, metadataStatus));
|
|
45
45
|
}, [dispatch, url]);
|
|
46
|
-
const resolve = useCallback(async (resourceUrl = url, isReloading = false, isMetadataRequest = false) =>
|
|
47
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
48
|
-
|
|
49
|
-
resolveUrl(resourceUrl, isReloading, isMetadataRequest, id), [id, resolveUrl, url]);
|
|
46
|
+
const resolve = useCallback(async (resourceUrl = url, isReloading = false, isMetadataRequest = false) => resolveUrl(resourceUrl, isReloading, isMetadataRequest, id), [id, resolveUrl, url]);
|
|
50
47
|
const register = useCallback(() => {
|
|
51
48
|
const {
|
|
52
49
|
details
|
|
@@ -29,17 +29,8 @@ const useResolve = () => {
|
|
|
29
29
|
};
|
|
30
30
|
const hasData = !!(details && details.data || isEntityPresent(details));
|
|
31
31
|
if (isReloading || !hasData || isMetadataRequest) {
|
|
32
|
-
return connections.client
|
|
33
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
34
|
-
.fetchData(url, isReloading).then(response =>
|
|
35
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
36
|
-
|
|
37
|
-
handleResolvedLinkResponse(url, response, isReloading, isMetadataRequest))
|
|
38
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
39
|
-
.catch(error => handleResolvedLinkError(url, error, undefined, isMetadataRequest));
|
|
32
|
+
return connections.client.fetchData(url, isReloading).then(response => handleResolvedLinkResponse(url, response, isReloading, isMetadataRequest)).catch(error => handleResolvedLinkError(url, error, undefined, isMetadataRequest));
|
|
40
33
|
} else {
|
|
41
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
42
|
-
|
|
43
34
|
addMetadataToExperience('smart-link-rendered', id, {
|
|
44
35
|
cached: true
|
|
45
36
|
});
|
|
@@ -118,8 +118,6 @@ const useResponse = () => {
|
|
|
118
118
|
* https://react-redux.js.org/api/batch
|
|
119
119
|
*/
|
|
120
120
|
unstable_batchedUpdates(() => {
|
|
121
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
122
|
-
|
|
123
121
|
handleResolvedLinkSuccess(resourceUrl, response, isReloading, isMetadataRequest);
|
|
124
122
|
});
|
|
125
123
|
}, [handleResolvedLinkError, handleResolvedLinkSuccess, hasAuthFlowSupported]);
|
|
@@ -2,7 +2,7 @@ export const ANALYTICS_CHANNEL = 'media';
|
|
|
2
2
|
export const context = {
|
|
3
3
|
componentName: 'smart-cards',
|
|
4
4
|
packageName: "@atlaskit/smart-card",
|
|
5
|
-
packageVersion: "
|
|
5
|
+
packageVersion: "0.0.0-development"
|
|
6
6
|
};
|
|
7
7
|
export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
|
|
8
8
|
TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
|
|
@@ -134,7 +134,6 @@ const getDisplayName = WrappedComponent => {
|
|
|
134
134
|
if (typeof WrappedComponent === 'string') {
|
|
135
135
|
return WrappedComponent;
|
|
136
136
|
}
|
|
137
|
-
// @ts-ignore - Workaround for help-center local consumption
|
|
138
137
|
return WrappedComponent.displayName || WrappedComponent.name || 'Component';
|
|
139
138
|
};
|
|
140
139
|
export function withLinkClickedEvent(WrappedComponent) {
|