@atlaskit/smart-card 45.22.6 → 45.23.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/dist/cjs/entry-points/hover.js +21 -0
- package/dist/cjs/hoverCard.js +2 -2
- package/dist/cjs/state/hooks/use-resolve/index.js +7 -5
- package/dist/cjs/state/hooks/use-response/index.js +17 -5
- package/dist/cjs/utils/analytics/analytics.js +1 -1
- package/dist/cjs/view/CardWithUrl/component-lazy/LazyIntersectionObserverCard.js +1 -1
- package/dist/cjs/view/FlexibleCard/components/container/hover-card-control/index.js +1 -1
- package/dist/cjs/view/HoverCard/index.js +58 -14
- package/dist/cjs/view/InlineCard/ErroredView/index.js +1 -1
- package/dist/cjs/view/InlineCard/ForbiddenView/index.js +1 -1
- package/dist/cjs/view/InlineCard/ResolvedView/InlineCardResolvedViewFunctional.js +1 -1
- package/dist/cjs/view/InlineCard/ResolvedView/index.js +1 -1
- package/dist/cjs/view/InlineCard/UnauthorisedView/index.js +1 -1
- package/dist/cjs/view/LinkUrl/index.js +1 -1
- package/dist/es2019/entry-points/hover.js +9 -0
- package/dist/es2019/hoverCard.js +1 -3
- package/dist/es2019/state/hooks/use-resolve/index.js +7 -4
- package/dist/es2019/state/hooks/use-response/index.js +17 -5
- package/dist/es2019/utils/analytics/analytics.js +1 -1
- package/dist/es2019/view/CardWithUrl/component-lazy/LazyIntersectionObserverCard.js +1 -1
- package/dist/es2019/view/FlexibleCard/components/container/hover-card-control/index.js +1 -1
- package/dist/es2019/view/HoverCard/index.js +52 -7
- package/dist/es2019/view/InlineCard/ErroredView/index.js +1 -1
- package/dist/es2019/view/InlineCard/ForbiddenView/index.js +1 -1
- package/dist/es2019/view/InlineCard/ResolvedView/InlineCardResolvedViewFunctional.js +1 -1
- package/dist/es2019/view/InlineCard/ResolvedView/index.js +1 -1
- package/dist/es2019/view/InlineCard/UnauthorisedView/index.js +1 -1
- package/dist/es2019/view/LinkUrl/index.js +1 -1
- package/dist/esm/entry-points/hover.js +13 -0
- package/dist/esm/hoverCard.js +1 -3
- package/dist/esm/state/hooks/use-resolve/index.js +7 -5
- package/dist/esm/state/hooks/use-response/index.js +17 -5
- package/dist/esm/utils/analytics/analytics.js +1 -1
- package/dist/esm/view/CardWithUrl/component-lazy/LazyIntersectionObserverCard.js +1 -1
- package/dist/esm/view/FlexibleCard/components/container/hover-card-control/index.js +1 -1
- package/dist/esm/view/HoverCard/index.js +51 -7
- package/dist/esm/view/InlineCard/ErroredView/index.js +1 -1
- package/dist/esm/view/InlineCard/ForbiddenView/index.js +1 -1
- package/dist/esm/view/InlineCard/ResolvedView/InlineCardResolvedViewFunctional.js +1 -1
- package/dist/esm/view/InlineCard/ResolvedView/index.js +1 -1
- package/dist/esm/view/InlineCard/UnauthorisedView/index.js +1 -1
- package/dist/esm/view/LinkUrl/index.js +1 -1
- package/dist/types/entry-points/hover.d.ts +7 -0
- package/dist/types/hoverCard.d.ts +1 -3
- package/dist/types/view/HoverCard/components/ContentContainer.d.ts +10 -1
- package/dist/types/view/HoverCard/components/HoverCardComponent.d.ts +8 -1
- package/dist/types/view/HoverCard/components/HoverCardContent.d.ts +22 -2
- package/dist/types/view/HoverCard/components/ImagePreview.d.ts +5 -1
- package/dist/types/view/HoverCard/index.d.ts +8 -6
- package/dist/types/view/HoverCard/types.d.ts +22 -6
- package/hover/package.json +4 -4
- package/package.json +4 -4
- package/dist/cjs/view/HoverCard/HoverCard.js +0 -63
- package/dist/cjs/view/HoverCard/StandaloneHoverCard.js +0 -15
- package/dist/es2019/view/HoverCard/HoverCard.js +0 -55
- package/dist/es2019/view/HoverCard/StandaloneHoverCard.js +0 -6
- package/dist/esm/view/HoverCard/HoverCard.js +0 -54
- package/dist/esm/view/HoverCard/StandaloneHoverCard.js +0 -8
- package/dist/types/view/HoverCard/HoverCard.d.ts +0 -10
- package/dist/types/view/HoverCard/StandaloneHoverCard.d.ts +0 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @atlaskit/smart-card
|
|
2
2
|
|
|
3
|
+
## 45.23.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`67e2f90d073f8`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/67e2f90d073f8) -
|
|
8
|
+
Refactor hover card entry points and mark its internal props that were expose unintentionally
|
|
9
|
+
durng volt migration as deprecated
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`ec5808c03c48f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ec5808c03c48f) -
|
|
14
|
+
Avoid redundant full block resolves and preserve concurrent appearance payloads for
|
|
15
|
+
platform_smartlink_inline_resolve_optimization.
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
|
|
3
18
|
## 45.22.6
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.StandaloneHoverCard = exports.HoverCard = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _HoverCard = require("../view/HoverCard");
|
|
10
|
+
/* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
|
|
11
|
+
|
|
12
|
+
var HoverCard = exports.HoverCard = function HoverCard(props) {
|
|
13
|
+
return /*#__PURE__*/_react.default.createElement(_HoverCard.HoverCard, props);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Use `import { HoverCard } from '@atlaskit/smart-card/hover'` instead.
|
|
18
|
+
*/
|
|
19
|
+
var StandaloneHoverCard = exports.StandaloneHoverCard = function StandaloneHoverCard(props) {
|
|
20
|
+
return /*#__PURE__*/_react.default.createElement(_HoverCard.HoverCard, props);
|
|
21
|
+
};
|
package/dist/cjs/hoverCard.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
Object.defineProperty(exports, "HoverCard", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function get() {
|
|
9
|
-
return
|
|
9
|
+
return _hover.HoverCard;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
var
|
|
12
|
+
var _hover = require("./entry-points/hover");
|
|
@@ -28,7 +28,7 @@ var useResolve = function useResolve() {
|
|
|
28
28
|
handleResolvedLinkError = _useResponse.handleResolvedLinkError;
|
|
29
29
|
return (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
30
30
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(params) {
|
|
31
|
-
var url, _params$isReloading, isReloading, _params$isMetadataReq, isMetadataRequest, _params$id, id, appearance, isOptimizedBlockRequest, _ref2, details, hasData, shouldForceFetch, metadataStatus;
|
|
31
|
+
var url, _params$isReloading, isReloading, _params$isMetadataReq, isMetadataRequest, _params$id, id, appearance, isOptimizedBlockRequest, _ref2, details, currentMetadataStatus, hasData, needsOptimizedBlockData, shouldForceFetch, metadataStatus;
|
|
32
32
|
return _regenerator.default.wrap(function (_context) {
|
|
33
33
|
while (1) switch (_context.prev = _context.next) {
|
|
34
34
|
case 0:
|
|
@@ -37,15 +37,17 @@ var useResolve = function useResolve() {
|
|
|
37
37
|
_ref2 = getState()[url] || {
|
|
38
38
|
status: _constants.SmartLinkStatus.Pending,
|
|
39
39
|
details: undefined
|
|
40
|
-
}, details = _ref2.details;
|
|
40
|
+
}, details = _ref2.details, currentMetadataStatus = _ref2.metadataStatus;
|
|
41
41
|
hasData = !!(details && details.data || (0, _isEntityPresent.isEntityPresent)(details));
|
|
42
|
-
|
|
42
|
+
needsOptimizedBlockData = isOptimizedBlockRequest && currentMetadataStatus !== 'resolved';
|
|
43
|
+
if (!(isReloading || !hasData || isMetadataRequest || needsOptimizedBlockData)) {
|
|
43
44
|
_context.next = 1;
|
|
44
45
|
break;
|
|
45
46
|
}
|
|
46
47
|
// A reduced inline response can populate the shared resolver cache before an initial
|
|
47
|
-
// block request completes
|
|
48
|
-
|
|
48
|
+
// block request completes. Bypass that cache until full metadata has been resolved,
|
|
49
|
+
// then reuse the full block response for subsequent block cards with the same URL.
|
|
50
|
+
shouldForceFetch = isReloading || needsOptimizedBlockData;
|
|
49
51
|
metadataStatus = appearance === 'inline' && !isMetadataRequest && (0, _fg.fg)('platform_smartlink_inline_resolve_optimization') ? 'pending' : undefined;
|
|
50
52
|
return _context.abrupt("return", connections.client.fetchData(url, shouldForceFetch, appearance).then(function (response) {
|
|
51
53
|
return handleResolvedLinkResponse(url, response, shouldForceFetch, isMetadataRequest, metadataStatus);
|
|
@@ -80,12 +80,24 @@ var useResponse = function useResponse() {
|
|
|
80
80
|
}
|
|
81
81
|
}, [getState, setMetadataStatus, dispatch]);
|
|
82
82
|
var handleResolvedLinkSuccess = (0, _react.useCallback)(function (resourceUrl, response, isReloading, isMetadataRequest) {
|
|
83
|
+
var _getState$resourceUrl;
|
|
83
84
|
var metadataStatus = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'resolved';
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Metadata status scenarios:
|
|
87
|
+
* - Gate off, or a non-resolved response: use `resolved`, preserving legacy behavior and
|
|
88
|
+
* avoiding a gate exposure when the result would not affect the status.
|
|
89
|
+
* - Gate on with full metadata: use the provided/default `resolved` status.
|
|
90
|
+
* - Gate on with reduced inline metadata: use the provided `pending` status so block or
|
|
91
|
+
* hover rendering knows to request the full metadata later.
|
|
92
|
+
* - Reduced inline metadata arriving after full metadata: keep the existing `resolved`
|
|
93
|
+
* status so an out-of-order response cannot trigger another full request.
|
|
94
|
+
* - Explicit reload: allow `pending` even after full metadata, because the caller is
|
|
95
|
+
* intentionally replacing the existing data.
|
|
96
|
+
*/
|
|
87
97
|
var shouldUseProvidedMetadataStatus = (0, _getStatus.getStatus)(response) === 'resolved' && (0, _fg.fg)('platform_smartlink_inline_resolve_optimization');
|
|
88
|
-
|
|
98
|
+
var shouldPreserveResolvedMetadata = shouldUseProvidedMetadataStatus && metadataStatus === 'pending' && !isReloading && ((_getState$resourceUrl = getState()[resourceUrl]) === null || _getState$resourceUrl === void 0 ? void 0 : _getState$resourceUrl.metadataStatus) === 'resolved';
|
|
99
|
+
var nextMetadataStatus = shouldUseProvidedMetadataStatus && !shouldPreserveResolvedMetadata ? metadataStatus : 'resolved';
|
|
100
|
+
setMetadataStatus(resourceUrl, nextMetadataStatus);
|
|
89
101
|
// Dispatch Analytics and resolved card action - including unauthorized states.
|
|
90
102
|
if (isReloading) {
|
|
91
103
|
dispatch((0, _actions.cardAction)(_actions.ACTION_RELOADING, {
|
|
@@ -96,7 +108,7 @@ var useResponse = function useResponse() {
|
|
|
96
108
|
url: resourceUrl
|
|
97
109
|
}, response, undefined, undefined, isMetadataRequest));
|
|
98
110
|
}
|
|
99
|
-
}, [setMetadataStatus, dispatch]);
|
|
111
|
+
}, [getState, setMetadataStatus, dispatch]);
|
|
100
112
|
var handleResolvedLinkResponse = (0, _react.useCallback)(function (resourceUrl, response) {
|
|
101
113
|
var isReloading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
102
114
|
var isMetadataRequest = arguments.length > 3 ? arguments[3] : undefined;
|
|
@@ -24,7 +24,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
|
|
|
24
24
|
var context = exports.context = {
|
|
25
25
|
componentName: 'smart-cards',
|
|
26
26
|
packageName: "@atlaskit/smart-card" || '',
|
|
27
|
-
packageVersion: "45.22.
|
|
27
|
+
packageVersion: "45.22.6" || ''
|
|
28
28
|
};
|
|
29
29
|
var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
|
|
30
30
|
TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
|
|
@@ -32,7 +32,7 @@ var LazyIntersectionObserverCard = exports.LazyIntersectionObserverCard = functi
|
|
|
32
32
|
onErrorCallback = props.onError,
|
|
33
33
|
ui = props.ui,
|
|
34
34
|
url = props.url;
|
|
35
|
-
var prefetch = (0, _usePrefetch.usePrefetch)(url);
|
|
35
|
+
var prefetch = (0, _usePrefetch.usePrefetch)(url, appearance);
|
|
36
36
|
var ComponentObserver = appearance === 'inline' ? 'span' : 'div';
|
|
37
37
|
var _useSmartLinkSeenEven = (0, _useSmartLinkSeenEvent.useSmartLinkSeenEvent)({
|
|
38
38
|
appearance: appearance,
|
|
@@ -10,7 +10,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _constants = require("../../../../../constants");
|
|
12
12
|
var _noop = require("../../../../../utils/noop");
|
|
13
|
-
var _HoverCard = require("../../../../HoverCard
|
|
13
|
+
var _HoverCard = require("../../../../HoverCard");
|
|
14
14
|
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); }
|
|
15
15
|
var FLEXIBLE_HOVER_CARD_CAN_OPEN_DELAY = 100;
|
|
16
16
|
var HoverCardControl = function HoverCardControl(_ref) {
|
|
@@ -1,19 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var
|
|
19
|
-
var
|
|
8
|
+
exports.HoverCard = void 0;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactErrorBoundary = require("react-error-boundary");
|
|
12
|
+
var _reactMagneticDi = require("react-magnetic-di");
|
|
13
|
+
var _withAnalyticsEvents = _interopRequireDefault(require("@atlaskit/analytics-next/withAnalyticsEvents"));
|
|
14
|
+
var _useAnalyticsEvents2 = require("../../common/analytics/generated/use-analytics-events");
|
|
15
|
+
var _constants = require("../../constants");
|
|
16
|
+
var _failUfoExperience = require("../../state/analytics/failUfoExperience");
|
|
17
|
+
var _startUfoExperience = require("../../state/analytics/startUfoExperience");
|
|
18
|
+
var _SmartLinkModalProvider = require("../../state/modal/SmartLinkModalProvider");
|
|
19
|
+
var _useSmartLinkAnalyticsContext = require("../../utils/analytics/useSmartLinkAnalyticsContext");
|
|
20
|
+
var _HoverCardComponent = require("./components/HoverCardComponent");
|
|
21
|
+
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); }
|
|
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 HoverCardWithErrorBoundary = function HoverCardWithErrorBoundary(props) {
|
|
25
|
+
var _useAnalyticsEvents = (0, _useAnalyticsEvents2.useAnalyticsEvents)(),
|
|
26
|
+
fireEvent = _useAnalyticsEvents.fireEvent;
|
|
27
|
+
var url = props.url,
|
|
28
|
+
id = props.id,
|
|
29
|
+
children = props.children;
|
|
30
|
+
var analyticsContext = (0, _useSmartLinkAnalyticsContext.useSmartLinkAnalyticsContext)({
|
|
31
|
+
display: _constants.CardDisplay.HoverCardPreview,
|
|
32
|
+
id: id,
|
|
33
|
+
source: _HoverCardComponent.HOVER_CARD_SOURCE,
|
|
34
|
+
url: url
|
|
35
|
+
});
|
|
36
|
+
var onError = (0, _react.useCallback)(function (error, info) {
|
|
37
|
+
(0, _startUfoExperience.startUfoExperience)('smart-link-rendered', id || 'NULL');
|
|
38
|
+
(0, _failUfoExperience.failUfoExperience)('smart-link-rendered', id || 'NULL');
|
|
39
|
+
(0, _failUfoExperience.failUfoExperience)('smart-link-authenticated', id || 'NULL');
|
|
40
|
+
fireEvent('ui.smartLink.renderFailed', _objectSpread(_objectSpread({}, analyticsContext === null || analyticsContext === void 0 ? void 0 : analyticsContext.attributes), {}, {
|
|
41
|
+
display: _constants.CardDisplay.HoverCardPreview,
|
|
42
|
+
id: id !== null && id !== void 0 ? id : null,
|
|
43
|
+
error: error,
|
|
44
|
+
errorInfo: info
|
|
45
|
+
}));
|
|
46
|
+
}, [analyticsContext, id, fireEvent]);
|
|
47
|
+
return /*#__PURE__*/_react.default.createElement(_reactErrorBoundary.ErrorBoundary, {
|
|
48
|
+
fallback: children,
|
|
49
|
+
onError: onError
|
|
50
|
+
}, /*#__PURE__*/_react.default.createElement(_SmartLinkModalProvider.SmartLinkModalProvider, null, /*#__PURE__*/_react.default.createElement(_HoverCardComponent.HoverCardComponent, props, children)));
|
|
51
|
+
};
|
|
52
|
+
var HoverCardWithoutAnalyticsContext = (0, _withAnalyticsEvents.default)()(HoverCardWithErrorBoundary);
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A hover preview component using within smart links,
|
|
56
|
+
* e.g. inline card's hover preview and auth tooltip, flexible card's hover preview.
|
|
57
|
+
*
|
|
58
|
+
* This component contains additional props that smart-card internal components
|
|
59
|
+
* use to configure hover preview behaviour.
|
|
60
|
+
*/
|
|
61
|
+
var HoverCard = exports.HoverCard = function HoverCard(props) {
|
|
62
|
+
return /*#__PURE__*/_react.default.createElement(HoverCardWithoutAnalyticsContext, props);
|
|
63
|
+
};
|
|
@@ -11,7 +11,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
11
11
|
var _reactIntl = require("react-intl");
|
|
12
12
|
var _statusError = _interopRequireDefault(require("@atlaskit/icon/core/status-error"));
|
|
13
13
|
var _messages = require("../../../messages");
|
|
14
|
-
var _HoverCard = require("../../HoverCard
|
|
14
|
+
var _HoverCard = require("../../HoverCard");
|
|
15
15
|
var _Frame = require("../Frame");
|
|
16
16
|
var _IconAndTitleLayout = require("../IconAndTitleLayout");
|
|
17
17
|
var _actionButton = require("../common/action-button");
|
|
@@ -15,7 +15,7 @@ var _reactIntl = require("react-intl");
|
|
|
15
15
|
var _lockLocked = _interopRequireDefault(require("@atlaskit/icon/core/lock-locked"));
|
|
16
16
|
var _compiled = require("@atlaskit/primitives/compiled");
|
|
17
17
|
var _messages = require("../../../messages");
|
|
18
|
-
var _HoverCard = require("../../HoverCard
|
|
18
|
+
var _HoverCard = require("../../HoverCard");
|
|
19
19
|
var _Frame = require("../Frame");
|
|
20
20
|
var _IconAndTitleLayout = require("../IconAndTitleLayout");
|
|
21
21
|
var _actionButton = require("../common/action-button");
|
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.InlineCardResolvedViewFunctional = InlineCardResolvedViewFunctional;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
var _useInlineTailoredActions = _interopRequireDefault(require("../../../state/hooks/use-inline-tailored-actions"));
|
|
10
|
-
var _HoverCard = require("../../HoverCard
|
|
10
|
+
var _HoverCard = require("../../HoverCard");
|
|
11
11
|
var _Frame = require("../Frame");
|
|
12
12
|
var _IconAndTitleLayout = require("../IconAndTitleLayout");
|
|
13
13
|
var _rovoActionsCta = require("../common/rovo-actions-cta");
|
|
@@ -14,7 +14,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
|
|
|
14
14
|
var _react = _interopRequireDefault(require("react"));
|
|
15
15
|
var _componentWithFg = require("@atlaskit/platform-feature-flags-react/component-with-fg");
|
|
16
16
|
var _fg = require("@atlaskit/platform-feature-flags/fg");
|
|
17
|
-
var _HoverCard = require("../../HoverCard
|
|
17
|
+
var _HoverCard = require("../../HoverCard");
|
|
18
18
|
var _Frame = require("../Frame");
|
|
19
19
|
var _IconAndTitleLayout = require("../IconAndTitleLayout");
|
|
20
20
|
var _inlineLozenge = _interopRequireDefault(require("../common/inline-lozenge"));
|
|
@@ -20,7 +20,7 @@ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
|
20
20
|
var _useAnalyticsEvents2 = require("../../../common/analytics/generated/use-analytics-events");
|
|
21
21
|
var _messages = require("../../../messages");
|
|
22
22
|
var _getCachedProviderPctMapAndRefresh = require("../../../state/services/personalization/getCachedProviderPctMapAndRefresh");
|
|
23
|
-
var _HoverCard = require("../../HoverCard
|
|
23
|
+
var _HoverCard = require("../../HoverCard");
|
|
24
24
|
var _Frame = require("../Frame");
|
|
25
25
|
var _IconAndTitleLayout = require("../IconAndTitleLayout");
|
|
26
26
|
var _actionButton = require("../common/action-button");
|
|
@@ -19,7 +19,7 @@ var _excluded = ["href", "children", "checkSafety", "onClick", "testId", "isLink
|
|
|
19
19
|
_excluded2 = ["isLinkSafe", "showSafetyWarningModal"];
|
|
20
20
|
var PACKAGE_DATA = {
|
|
21
21
|
packageName: "@atlaskit/smart-card",
|
|
22
|
-
packageVersion: "45.22.
|
|
22
|
+
packageVersion: "45.22.6",
|
|
23
23
|
componentName: 'linkUrl'
|
|
24
24
|
};
|
|
25
25
|
var LinkUrl = function LinkUrl(_ref) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { HoverCard as HoverCardComponent } from '../view/HoverCard';
|
|
4
|
+
export const HoverCard = props => /*#__PURE__*/React.createElement(HoverCardComponent, props);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Use `import { HoverCard } from '@atlaskit/smart-card/hover'` instead.
|
|
8
|
+
*/
|
|
9
|
+
export const StandaloneHoverCard = props => /*#__PURE__*/React.createElement(HoverCardComponent, props);
|
package/dist/es2019/hoverCard.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
/* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
|
|
2
|
-
/** @deprecated Use @atlaskit/smart-card/hover */
|
|
3
2
|
/**
|
|
4
3
|
* @deprecated Use `import { HoverCard } from '@atlaskit/smart-card/hover'` instead.
|
|
5
4
|
*/
|
|
6
|
-
export {
|
|
5
|
+
export { HoverCard } from './entry-points/hover';
|
|
7
6
|
|
|
8
|
-
/** @deprecated Use @atlaskit/smart-card/hover/types */
|
|
9
7
|
/**
|
|
10
8
|
* @deprecated Use `import type { HoverCardProps } from '@atlaskit/smart-card/hover/types'` instead.
|
|
11
9
|
*/
|
|
@@ -31,16 +31,19 @@ const useResolve = () => {
|
|
|
31
31
|
} = params;
|
|
32
32
|
const isOptimizedBlockRequest = appearance === 'block' && fg('platform_smartlink_inline_resolve_optimization');
|
|
33
33
|
const {
|
|
34
|
-
details
|
|
34
|
+
details,
|
|
35
|
+
metadataStatus: currentMetadataStatus
|
|
35
36
|
} = getState()[url] || {
|
|
36
37
|
status: SmartLinkStatus.Pending,
|
|
37
38
|
details: undefined
|
|
38
39
|
};
|
|
39
40
|
const hasData = !!(details && details.data || isEntityPresent(details));
|
|
40
|
-
|
|
41
|
+
const needsOptimizedBlockData = isOptimizedBlockRequest && currentMetadataStatus !== 'resolved';
|
|
42
|
+
if (isReloading || !hasData || isMetadataRequest || needsOptimizedBlockData) {
|
|
41
43
|
// A reduced inline response can populate the shared resolver cache before an initial
|
|
42
|
-
// block request completes
|
|
43
|
-
|
|
44
|
+
// block request completes. Bypass that cache until full metadata has been resolved,
|
|
45
|
+
// then reuse the full block response for subsequent block cards with the same URL.
|
|
46
|
+
const shouldForceFetch = isReloading || needsOptimizedBlockData;
|
|
44
47
|
const metadataStatus = appearance === 'inline' && !isMetadataRequest && fg('platform_smartlink_inline_resolve_optimization') ? 'pending' : undefined;
|
|
45
48
|
return connections.client.fetchData(url, shouldForceFetch, appearance).then(response => handleResolvedLinkResponse(url, response, shouldForceFetch, isMetadataRequest, metadataStatus)).catch(error => handleResolvedLinkError(url, error, undefined, isMetadataRequest));
|
|
46
49
|
} else {
|
|
@@ -78,11 +78,23 @@ const useResponse = () => {
|
|
|
78
78
|
}
|
|
79
79
|
}, [getState, setMetadataStatus, dispatch]);
|
|
80
80
|
const handleResolvedLinkSuccess = useCallback((resourceUrl, response, isReloading, isMetadataRequest, metadataStatus = 'resolved') => {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
var _getState$resourceUrl;
|
|
82
|
+
/**
|
|
83
|
+
* Metadata status scenarios:
|
|
84
|
+
* - Gate off, or a non-resolved response: use `resolved`, preserving legacy behavior and
|
|
85
|
+
* avoiding a gate exposure when the result would not affect the status.
|
|
86
|
+
* - Gate on with full metadata: use the provided/default `resolved` status.
|
|
87
|
+
* - Gate on with reduced inline metadata: use the provided `pending` status so block or
|
|
88
|
+
* hover rendering knows to request the full metadata later.
|
|
89
|
+
* - Reduced inline metadata arriving after full metadata: keep the existing `resolved`
|
|
90
|
+
* status so an out-of-order response cannot trigger another full request.
|
|
91
|
+
* - Explicit reload: allow `pending` even after full metadata, because the caller is
|
|
92
|
+
* intentionally replacing the existing data.
|
|
93
|
+
*/
|
|
84
94
|
const shouldUseProvidedMetadataStatus = getStatus(response) === 'resolved' && fg('platform_smartlink_inline_resolve_optimization');
|
|
85
|
-
|
|
95
|
+
const shouldPreserveResolvedMetadata = shouldUseProvidedMetadataStatus && metadataStatus === 'pending' && !isReloading && ((_getState$resourceUrl = getState()[resourceUrl]) === null || _getState$resourceUrl === void 0 ? void 0 : _getState$resourceUrl.metadataStatus) === 'resolved';
|
|
96
|
+
const nextMetadataStatus = shouldUseProvidedMetadataStatus && !shouldPreserveResolvedMetadata ? metadataStatus : 'resolved';
|
|
97
|
+
setMetadataStatus(resourceUrl, nextMetadataStatus);
|
|
86
98
|
// Dispatch Analytics and resolved card action - including unauthorized states.
|
|
87
99
|
if (isReloading) {
|
|
88
100
|
dispatch(cardAction(ACTION_RELOADING, {
|
|
@@ -93,7 +105,7 @@ const useResponse = () => {
|
|
|
93
105
|
url: resourceUrl
|
|
94
106
|
}, response, undefined, undefined, isMetadataRequest));
|
|
95
107
|
}
|
|
96
|
-
}, [setMetadataStatus, dispatch]);
|
|
108
|
+
}, [getState, setMetadataStatus, dispatch]);
|
|
97
109
|
const handleResolvedLinkResponse = useCallback((resourceUrl, response, isReloading = false, isMetadataRequest, metadataStatus) => {
|
|
98
110
|
if (!resourceUrl) {
|
|
99
111
|
return;
|
|
@@ -3,7 +3,7 @@ export const ANALYTICS_CHANNEL = 'media';
|
|
|
3
3
|
export const context = {
|
|
4
4
|
componentName: 'smart-cards',
|
|
5
5
|
packageName: "@atlaskit/smart-card" || '',
|
|
6
|
-
packageVersion: "45.22.
|
|
6
|
+
packageVersion: "45.22.6" || ''
|
|
7
7
|
};
|
|
8
8
|
export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
|
|
9
9
|
TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
|
|
@@ -19,7 +19,7 @@ export const LazyIntersectionObserverCard = props => {
|
|
|
19
19
|
ui,
|
|
20
20
|
url
|
|
21
21
|
} = props;
|
|
22
|
-
const prefetch = usePrefetch(url);
|
|
22
|
+
const prefetch = usePrefetch(url, appearance);
|
|
23
23
|
const ComponentObserver = appearance === 'inline' ? 'span' : 'div';
|
|
24
24
|
const {
|
|
25
25
|
onIntersecting: onSeenIntersecting,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import { ElementName } from '../../../../../constants';
|
|
3
3
|
import { noop } from '../../../../../utils/noop';
|
|
4
|
-
import { HoverCard } from '../../../../HoverCard
|
|
4
|
+
import { HoverCard } from '../../../../HoverCard';
|
|
5
5
|
const FLEXIBLE_HOVER_CARD_CAN_OPEN_DELAY = 100;
|
|
6
6
|
const HoverCardControl = ({
|
|
7
7
|
children,
|
|
@@ -1,10 +1,55 @@
|
|
|
1
|
-
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
|
+
import { ErrorBoundary } from 'react-error-boundary';
|
|
3
|
+
import { di } from 'react-magnetic-di';
|
|
4
|
+
import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
|
|
5
|
+
import { useAnalyticsEvents } from '../../common/analytics/generated/use-analytics-events';
|
|
6
|
+
import { CardDisplay } from '../../constants';
|
|
7
|
+
import { failUfoExperience } from '../../state/analytics/failUfoExperience';
|
|
8
|
+
import { startUfoExperience } from '../../state/analytics/startUfoExperience';
|
|
9
|
+
import { SmartLinkModalProvider } from '../../state/modal/SmartLinkModalProvider';
|
|
10
|
+
import { useSmartLinkAnalyticsContext } from '../../utils/analytics/useSmartLinkAnalyticsContext';
|
|
11
|
+
import { HOVER_CARD_SOURCE, HoverCardComponent } from './components/HoverCardComponent';
|
|
12
|
+
const HoverCardWithErrorBoundary = props => {
|
|
13
|
+
const {
|
|
14
|
+
fireEvent
|
|
15
|
+
} = useAnalyticsEvents();
|
|
16
|
+
const {
|
|
17
|
+
url,
|
|
18
|
+
id,
|
|
19
|
+
children
|
|
20
|
+
} = props;
|
|
21
|
+
const analyticsContext = useSmartLinkAnalyticsContext({
|
|
22
|
+
display: CardDisplay.HoverCardPreview,
|
|
23
|
+
id,
|
|
24
|
+
source: HOVER_CARD_SOURCE,
|
|
25
|
+
url
|
|
26
|
+
});
|
|
27
|
+
const onError = useCallback((error, info) => {
|
|
28
|
+
startUfoExperience('smart-link-rendered', id || 'NULL');
|
|
29
|
+
failUfoExperience('smart-link-rendered', id || 'NULL');
|
|
30
|
+
failUfoExperience('smart-link-authenticated', id || 'NULL');
|
|
31
|
+
fireEvent('ui.smartLink.renderFailed', {
|
|
32
|
+
...(analyticsContext === null || analyticsContext === void 0 ? void 0 : analyticsContext.attributes),
|
|
33
|
+
display: CardDisplay.HoverCardPreview,
|
|
34
|
+
id: id !== null && id !== void 0 ? id : null,
|
|
35
|
+
error: error,
|
|
36
|
+
errorInfo: info
|
|
37
|
+
});
|
|
38
|
+
}, [analyticsContext, id, fireEvent]);
|
|
39
|
+
return /*#__PURE__*/React.createElement(ErrorBoundary, {
|
|
40
|
+
fallback: children,
|
|
41
|
+
onError: onError
|
|
42
|
+
}, /*#__PURE__*/React.createElement(SmartLinkModalProvider, null, /*#__PURE__*/React.createElement(HoverCardComponent, props, children)));
|
|
43
|
+
};
|
|
44
|
+
const HoverCardWithoutAnalyticsContext = withAnalyticsEvents()(HoverCardWithErrorBoundary);
|
|
2
45
|
|
|
3
46
|
/**
|
|
4
|
-
*
|
|
47
|
+
* A hover preview component using within smart links,
|
|
48
|
+
* e.g. inline card's hover preview and auth tooltip, flexible card's hover preview.
|
|
49
|
+
*
|
|
50
|
+
* This component contains additional props that smart-card internal components
|
|
51
|
+
* use to configure hover preview behaviour.
|
|
5
52
|
*/
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
export { StandaloneHoverCard } from './StandaloneHoverCard';
|
|
53
|
+
export const HoverCard = props => {
|
|
54
|
+
return /*#__PURE__*/React.createElement(HoverCardWithoutAnalyticsContext, props);
|
|
55
|
+
};
|
|
@@ -4,7 +4,7 @@ import React from 'react';
|
|
|
4
4
|
import { FormattedMessage } from 'react-intl';
|
|
5
5
|
import ErrorIcon from '@atlaskit/icon/core/status-error';
|
|
6
6
|
import { messages } from '../../../messages';
|
|
7
|
-
import { HoverCard } from '../../HoverCard
|
|
7
|
+
import { HoverCard } from '../../HoverCard';
|
|
8
8
|
import { Frame } from '../Frame';
|
|
9
9
|
import { IconAndTitleLayout } from '../IconAndTitleLayout';
|
|
10
10
|
import { ActionButton } from '../common/action-button';
|
|
@@ -7,7 +7,7 @@ import { FormattedMessage } from 'react-intl';
|
|
|
7
7
|
import LockLockedIcon from '@atlaskit/icon/core/lock-locked';
|
|
8
8
|
import { Pressable } from '@atlaskit/primitives/compiled';
|
|
9
9
|
import { messages } from '../../../messages';
|
|
10
|
-
import { HoverCard } from '../../HoverCard
|
|
10
|
+
import { HoverCard } from '../../HoverCard';
|
|
11
11
|
import { Frame } from '../Frame';
|
|
12
12
|
import { IconAndTitleLayout } from '../IconAndTitleLayout';
|
|
13
13
|
import { ActionButton } from '../common/action-button';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import useInlineTailoredAction from '../../../state/hooks/use-inline-tailored-actions';
|
|
3
|
-
import { HoverCard } from '../../HoverCard
|
|
3
|
+
import { HoverCard } from '../../HoverCard';
|
|
4
4
|
import { Frame } from '../Frame';
|
|
5
5
|
import { IconAndTitleLayout } from '../IconAndTitleLayout';
|
|
6
6
|
import { InlineRovoActionButton } from '../common/rovo-actions-cta';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { componentWithFG } from '@atlaskit/platform-feature-flags-react/component-with-fg';
|
|
3
3
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
4
|
-
import { HoverCard } from '../../HoverCard
|
|
4
|
+
import { HoverCard } from '../../HoverCard';
|
|
5
5
|
import { Frame } from '../Frame';
|
|
6
6
|
import { IconAndTitleLayout } from '../IconAndTitleLayout';
|
|
7
7
|
import InlineLozenge from '../common/inline-lozenge';
|
|
@@ -13,7 +13,7 @@ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
|
13
13
|
import { useAnalyticsEvents } from '../../../common/analytics/generated/use-analytics-events';
|
|
14
14
|
import { messages } from '../../../messages';
|
|
15
15
|
import { getCachedProviderPctMapAndRefresh } from '../../../state/services/personalization/getCachedProviderPctMapAndRefresh';
|
|
16
|
-
import { HoverCard } from '../../HoverCard
|
|
16
|
+
import { HoverCard } from '../../HoverCard';
|
|
17
17
|
import { Frame } from '../Frame';
|
|
18
18
|
import { IconAndTitleLayout } from '../IconAndTitleLayout';
|
|
19
19
|
import { ActionButton } from '../common/action-button';
|
|
@@ -9,7 +9,7 @@ import LinkWarningModal from './LinkWarningModal';
|
|
|
9
9
|
import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-modal';
|
|
10
10
|
const PACKAGE_DATA = {
|
|
11
11
|
packageName: "@atlaskit/smart-card",
|
|
12
|
-
packageVersion: "45.22.
|
|
12
|
+
packageVersion: "45.22.6",
|
|
13
13
|
componentName: 'linkUrl'
|
|
14
14
|
};
|
|
15
15
|
const LinkUrl = ({
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { HoverCard as HoverCardComponent } from '../view/HoverCard';
|
|
4
|
+
export var HoverCard = function HoverCard(props) {
|
|
5
|
+
return /*#__PURE__*/React.createElement(HoverCardComponent, props);
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated Use `import { HoverCard } from '@atlaskit/smart-card/hover'` instead.
|
|
10
|
+
*/
|
|
11
|
+
export var StandaloneHoverCard = function StandaloneHoverCard(props) {
|
|
12
|
+
return /*#__PURE__*/React.createElement(HoverCardComponent, props);
|
|
13
|
+
};
|
package/dist/esm/hoverCard.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
/* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
|
|
2
|
-
/** @deprecated Use @atlaskit/smart-card/hover */
|
|
3
2
|
/**
|
|
4
3
|
* @deprecated Use `import { HoverCard } from '@atlaskit/smart-card/hover'` instead.
|
|
5
4
|
*/
|
|
6
|
-
export {
|
|
5
|
+
export { HoverCard } from './entry-points/hover';
|
|
7
6
|
|
|
8
|
-
/** @deprecated Use @atlaskit/smart-card/hover/types */
|
|
9
7
|
/**
|
|
10
8
|
* @deprecated Use `import type { HoverCardProps } from '@atlaskit/smart-card/hover/types'` instead.
|
|
11
9
|
*/
|
|
@@ -21,7 +21,7 @@ var useResolve = function useResolve() {
|
|
|
21
21
|
handleResolvedLinkError = _useResponse.handleResolvedLinkError;
|
|
22
22
|
return useCallback( /*#__PURE__*/function () {
|
|
23
23
|
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(params) {
|
|
24
|
-
var url, _params$isReloading, isReloading, _params$isMetadataReq, isMetadataRequest, _params$id, id, appearance, isOptimizedBlockRequest, _ref2, details, hasData, shouldForceFetch, metadataStatus;
|
|
24
|
+
var url, _params$isReloading, isReloading, _params$isMetadataReq, isMetadataRequest, _params$id, id, appearance, isOptimizedBlockRequest, _ref2, details, currentMetadataStatus, hasData, needsOptimizedBlockData, shouldForceFetch, metadataStatus;
|
|
25
25
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
26
26
|
while (1) switch (_context.prev = _context.next) {
|
|
27
27
|
case 0:
|
|
@@ -30,15 +30,17 @@ var useResolve = function useResolve() {
|
|
|
30
30
|
_ref2 = getState()[url] || {
|
|
31
31
|
status: SmartLinkStatus.Pending,
|
|
32
32
|
details: undefined
|
|
33
|
-
}, details = _ref2.details;
|
|
33
|
+
}, details = _ref2.details, currentMetadataStatus = _ref2.metadataStatus;
|
|
34
34
|
hasData = !!(details && details.data || isEntityPresent(details));
|
|
35
|
-
|
|
35
|
+
needsOptimizedBlockData = isOptimizedBlockRequest && currentMetadataStatus !== 'resolved';
|
|
36
|
+
if (!(isReloading || !hasData || isMetadataRequest || needsOptimizedBlockData)) {
|
|
36
37
|
_context.next = 1;
|
|
37
38
|
break;
|
|
38
39
|
}
|
|
39
40
|
// A reduced inline response can populate the shared resolver cache before an initial
|
|
40
|
-
// block request completes
|
|
41
|
-
|
|
41
|
+
// block request completes. Bypass that cache until full metadata has been resolved,
|
|
42
|
+
// then reuse the full block response for subsequent block cards with the same URL.
|
|
43
|
+
shouldForceFetch = isReloading || needsOptimizedBlockData;
|
|
42
44
|
metadataStatus = appearance === 'inline' && !isMetadataRequest && fg('platform_smartlink_inline_resolve_optimization') ? 'pending' : undefined;
|
|
43
45
|
return _context.abrupt("return", connections.client.fetchData(url, shouldForceFetch, appearance).then(function (response) {
|
|
44
46
|
return handleResolvedLinkResponse(url, response, shouldForceFetch, isMetadataRequest, metadataStatus);
|