@atlaskit/smart-card 20.0.6 → 20.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/dist/cjs/state/actions/constants.js +4 -2
- package/dist/cjs/state/actions/index.js +51 -19
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/BlockCard/index.js +29 -0
- package/dist/cjs/view/CardWithUrl/component.js +7 -2
- package/dist/cjs/view/CardWithUrl/loader.js +2 -0
- package/dist/cjs/view/EmbedCard/index.js +29 -0
- package/dist/cjs/view/FlexibleCard/index.js +34 -7
- package/dist/cjs/view/HoverCard/components/HoverCardContent.js +9 -1
- package/dist/cjs/view/InlineCard/index.js +29 -0
- package/dist/es2019/state/actions/constants.js +2 -1
- package/dist/es2019/state/actions/index.js +46 -18
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/BlockCard/index.js +29 -0
- package/dist/es2019/view/CardWithUrl/component.js +7 -2
- package/dist/es2019/view/CardWithUrl/loader.js +2 -0
- package/dist/es2019/view/EmbedCard/index.js +29 -0
- package/dist/es2019/view/FlexibleCard/index.js +32 -7
- package/dist/es2019/view/HoverCard/components/HoverCardContent.js +6 -0
- package/dist/es2019/view/InlineCard/index.js +29 -0
- package/dist/esm/state/actions/constants.js +2 -1
- package/dist/esm/state/actions/index.js +51 -20
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/BlockCard/index.js +29 -0
- package/dist/esm/view/CardWithUrl/component.js +7 -2
- package/dist/esm/view/CardWithUrl/loader.js +2 -0
- package/dist/esm/view/EmbedCard/index.js +29 -0
- package/dist/esm/view/FlexibleCard/index.js +33 -7
- package/dist/esm/view/HoverCard/components/HoverCardContent.js +8 -1
- package/dist/esm/view/InlineCard/index.js +29 -0
- package/dist/types/state/actions/constants.d.ts +1 -0
- package/dist/types/state/actions/index.d.ts +1 -0
- package/dist/types/state/hooks/useSmartLink.d.ts +1 -0
- package/dist/types/view/BlockCard/types.d.ts +2 -0
- package/dist/types/view/Card/index.d.ts +1 -1
- package/dist/types/view/Card/types.d.ts +2 -1
- package/dist/types/view/CardWithUrl/component.d.ts +1 -1
- package/dist/types/view/CardWithUrl/types.d.ts +2 -1
- package/dist/types/view/EmbedCard/components/styled.d.ts +16 -16
- package/dist/types/view/EmbedCard/types.d.ts +2 -0
- package/dist/types/view/FlexibleCard/types.d.ts +9 -4
- package/dist/types/view/HoverCard/types.d.ts +1 -0
- package/dist/types/view/InlineCard/Frame/styled.d.ts +1 -1
- package/dist/types/view/InlineCard/Icon.d.ts +3 -3
- package/dist/types/view/InlineCard/IconAndTitleLayout/styled.d.ts +9 -9
- package/dist/types/view/InlineCard/ResolvingView/styled.d.ts +13 -5
- package/dist/types/view/InlineCard/styled.d.ts +8 -4
- package/dist/types/view/InlineCard/types.d.ts +2 -1
- package/dist/types/view/types.d.ts +6 -0
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# @atlaskit/smart-card
|
|
2
2
|
|
|
3
|
+
## 20.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`58eb89c70f5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/58eb89c70f5) - Add onError callback on Card component.
|
|
8
|
+
The callback is triggered when Card component unable to resolve the link.
|
|
9
|
+
|
|
10
|
+
Return statuses are errored, fallback, forbidden, not_found and unauthorized.
|
|
11
|
+
|
|
12
|
+
Usage
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
const onError = (data: { status: string; url: string }) => {};
|
|
16
|
+
|
|
17
|
+
<Card appearance="inline" onError={onError} url="https://link-url" />;
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- [`e15410365b2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e15410365b2) - - export types/functions in linking common to be used in smart card
|
|
23
|
+
|
|
24
|
+
- add flag to card action to override re-using previous 'resolved' state
|
|
25
|
+
|
|
26
|
+
- add prop to cardState which reflects the metadata state, can be pending, resolved or errored
|
|
27
|
+
|
|
28
|
+
- modified reducer and dispatchers to handle these new props
|
|
29
|
+
|
|
30
|
+
- Updated dependencies
|
|
31
|
+
|
|
3
32
|
## 20.0.6
|
|
4
33
|
|
|
5
34
|
### Patch Changes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.ERROR_MESSAGE_OAUTH = exports.ERROR_MESSAGE_FATAL = exports.ANALYTICS_RESOLVING = exports.ANALYTICS_FALLBACK = exports.ANALYTICS_ERROR = void 0;
|
|
6
|
+
exports.ERROR_MESSAGE_OAUTH = exports.ERROR_MESSAGE_METADATA = exports.ERROR_MESSAGE_FATAL = exports.ANALYTICS_RESOLVING = exports.ANALYTICS_FALLBACK = exports.ANALYTICS_ERROR = void 0;
|
|
7
7
|
var ANALYTICS_RESOLVING = 'resolving';
|
|
8
8
|
exports.ANALYTICS_RESOLVING = ANALYTICS_RESOLVING;
|
|
9
9
|
var ANALYTICS_ERROR = 'errored';
|
|
@@ -13,4 +13,6 @@ exports.ANALYTICS_FALLBACK = ANALYTICS_FALLBACK;
|
|
|
13
13
|
var ERROR_MESSAGE_OAUTH = 'Provider.authFlow is not set to OAuth2.';
|
|
14
14
|
exports.ERROR_MESSAGE_OAUTH = ERROR_MESSAGE_OAUTH;
|
|
15
15
|
var ERROR_MESSAGE_FATAL = 'Fatal error resolving URL';
|
|
16
|
-
exports.ERROR_MESSAGE_FATAL = ERROR_MESSAGE_FATAL;
|
|
16
|
+
exports.ERROR_MESSAGE_FATAL = ERROR_MESSAGE_FATAL;
|
|
17
|
+
var ERROR_MESSAGE_METADATA = 'Error resolving metadata.';
|
|
18
|
+
exports.ERROR_MESSAGE_METADATA = ERROR_MESSAGE_METADATA;
|
|
@@ -17,10 +17,10 @@ var _react = require("react");
|
|
|
17
17
|
|
|
18
18
|
var _outboundAuthFlowClient = require("@atlaskit/outbound-auth-flow-client");
|
|
19
19
|
|
|
20
|
-
var _linkingCommon = require("@atlaskit/linking-common");
|
|
21
|
-
|
|
22
20
|
var _linkProvider = require("@atlaskit/link-provider");
|
|
23
21
|
|
|
22
|
+
var _linkingCommon = require("@atlaskit/linking-common");
|
|
23
|
+
|
|
24
24
|
var _helpers = require("../helpers");
|
|
25
25
|
|
|
26
26
|
var _constants = require("./constants");
|
|
@@ -49,11 +49,23 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
|
|
|
49
49
|
details: undefined
|
|
50
50
|
},
|
|
51
51
|
details = _ref.details,
|
|
52
|
-
status = _ref.status
|
|
52
|
+
status = _ref.status,
|
|
53
|
+
metadataStatus = _ref.metadataStatus;
|
|
53
54
|
|
|
54
55
|
var hasAuthFlowSupported = config.authFlow !== 'disabled';
|
|
55
56
|
var hasData = !!(details && details.data);
|
|
56
|
-
var
|
|
57
|
+
var setMetadataStatus = (0, _react.useCallback)(function (metadataStatus) {
|
|
58
|
+
dispatch((0, _linkingCommon.cardAction)(_linkingCommon.ACTION_UPDATE_METADATA_STATUS, {
|
|
59
|
+
url: url
|
|
60
|
+
}, undefined, undefined, metadataStatus));
|
|
61
|
+
}, [dispatch, url]);
|
|
62
|
+
var handleResolvedLinkError = (0, _react.useCallback)(function (url, error, response, isMetadataRequest) {
|
|
63
|
+
// If metadata request then set metadata status, return and do not alter link status
|
|
64
|
+
if (isMetadataRequest) {
|
|
65
|
+
setMetadataStatus('errored');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
57
69
|
if (error.kind === 'fatal') {
|
|
58
70
|
// If there's no previous data in the store for this URL, then bail
|
|
59
71
|
// out and let the editor handle fallbacks (returns to a blue link).
|
|
@@ -90,25 +102,34 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
|
|
|
90
102
|
}, undefined, error));
|
|
91
103
|
}
|
|
92
104
|
}
|
|
93
|
-
}, [hasData, status, dispatch, details]);
|
|
105
|
+
}, [setMetadataStatus, hasData, status, dispatch, details]);
|
|
94
106
|
var handleResolvedLinkResponse = (0, _react.useCallback)(function (resourceUrl, response) {
|
|
95
107
|
var isReloading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
108
|
+
var isMetadataRequest = arguments.length > 3 ? arguments[3] : undefined;
|
|
96
109
|
var hostname = new URL(resourceUrl).hostname;
|
|
97
110
|
var nextStatus = response ? (0, _helpers.getStatus)(response) : 'fatal'; // If we require authorization & do not have an authFlow available,
|
|
98
111
|
// throw an error and render as a normal blue link.
|
|
99
112
|
|
|
100
113
|
if ((nextStatus === 'unauthorized' || nextStatus === 'forbidden') && !hasAuthFlowSupported) {
|
|
101
|
-
handleResolvedLinkError(resourceUrl, new _linkingCommon.APIError('fallback', hostname, _constants.ERROR_MESSAGE_OAUTH), response);
|
|
114
|
+
handleResolvedLinkError(resourceUrl, new _linkingCommon.APIError('fallback', hostname, _constants.ERROR_MESSAGE_OAUTH), response, isMetadataRequest);
|
|
102
115
|
return;
|
|
103
116
|
} // Handle any other errors
|
|
104
117
|
|
|
105
118
|
|
|
106
119
|
if (nextStatus === 'fatal') {
|
|
107
|
-
handleResolvedLinkError(resourceUrl, new _linkingCommon.APIError('fatal', hostname, _constants.ERROR_MESSAGE_FATAL));
|
|
120
|
+
handleResolvedLinkError(resourceUrl, new _linkingCommon.APIError('fatal', hostname, _constants.ERROR_MESSAGE_FATAL), undefined, isMetadataRequest);
|
|
108
121
|
return;
|
|
109
|
-
} //
|
|
122
|
+
} // Handle errors of any other kind in the metadata request response
|
|
110
123
|
|
|
111
124
|
|
|
125
|
+
if (isMetadataRequest && nextStatus !== 'resolved') {
|
|
126
|
+
handleResolvedLinkError(resourceUrl, new _linkingCommon.APIError('error', hostname, _constants.ERROR_MESSAGE_METADATA), response, isMetadataRequest);
|
|
127
|
+
return;
|
|
128
|
+
} //if a link resolves normally, metadata will also always be resolved
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
setMetadataStatus('resolved'); // Dispatch Analytics and resolved card action - including unauthorized states.
|
|
132
|
+
|
|
112
133
|
if (isReloading) {
|
|
113
134
|
dispatch((0, _linkingCommon.cardAction)(_linkingCommon.ACTION_RELOADING, {
|
|
114
135
|
url: resourceUrl
|
|
@@ -116,12 +137,13 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
|
|
|
116
137
|
} else {
|
|
117
138
|
dispatch((0, _linkingCommon.cardAction)(_linkingCommon.ACTION_RESOLVED, {
|
|
118
139
|
url: resourceUrl
|
|
119
|
-
}, response));
|
|
140
|
+
}, response, undefined, undefined, isMetadataRequest));
|
|
120
141
|
}
|
|
121
|
-
}, [dispatch, handleResolvedLinkError, hasAuthFlowSupported]);
|
|
142
|
+
}, [dispatch, handleResolvedLinkError, hasAuthFlowSupported, setMetadataStatus]);
|
|
122
143
|
var resolve = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
123
144
|
var resourceUrl,
|
|
124
145
|
isReloading,
|
|
146
|
+
isMetadataRequest,
|
|
125
147
|
_args = arguments;
|
|
126
148
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
127
149
|
while (1) {
|
|
@@ -129,24 +151,25 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
|
|
|
129
151
|
case 0:
|
|
130
152
|
resourceUrl = _args.length > 0 && _args[0] !== undefined ? _args[0] : url;
|
|
131
153
|
isReloading = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;
|
|
154
|
+
isMetadataRequest = _args.length > 2 && _args[2] !== undefined ? _args[2] : false;
|
|
132
155
|
|
|
133
|
-
if (!(isReloading || !hasData)) {
|
|
134
|
-
_context.next =
|
|
156
|
+
if (!(isReloading || !hasData || isMetadataRequest)) {
|
|
157
|
+
_context.next = 7;
|
|
135
158
|
break;
|
|
136
159
|
}
|
|
137
160
|
|
|
138
161
|
return _context.abrupt("return", connections.client.fetchData(resourceUrl).then(function (response) {
|
|
139
|
-
return handleResolvedLinkResponse(resourceUrl, response, isReloading);
|
|
162
|
+
return handleResolvedLinkResponse(resourceUrl, response, isReloading, isMetadataRequest);
|
|
140
163
|
}).catch(function (error) {
|
|
141
|
-
return handleResolvedLinkError(resourceUrl, error);
|
|
164
|
+
return handleResolvedLinkError(resourceUrl, error, undefined, isMetadataRequest);
|
|
142
165
|
}));
|
|
143
166
|
|
|
144
|
-
case
|
|
167
|
+
case 7:
|
|
145
168
|
(0, _analytics.addMetadataToExperience)('smart-link-rendered', id, {
|
|
146
169
|
cached: true
|
|
147
170
|
});
|
|
148
171
|
|
|
149
|
-
case
|
|
172
|
+
case 8:
|
|
150
173
|
case "end":
|
|
151
174
|
return _context.stop();
|
|
152
175
|
}
|
|
@@ -158,10 +181,11 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
|
|
|
158
181
|
dispatch((0, _linkingCommon.cardAction)(_linkingCommon.ACTION_PENDING, {
|
|
159
182
|
url: url
|
|
160
183
|
}));
|
|
184
|
+
setMetadataStatus('pending');
|
|
161
185
|
}
|
|
162
186
|
|
|
163
187
|
return resolve();
|
|
164
|
-
}, [
|
|
188
|
+
}, [details, resolve, dispatch, url, setMetadataStatus]);
|
|
165
189
|
var reload = (0, _react.useCallback)(function () {
|
|
166
190
|
var definitionId = (0, _helpers.getDefinitionId)(details);
|
|
167
191
|
|
|
@@ -173,6 +197,13 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
|
|
|
173
197
|
resolve(url, true);
|
|
174
198
|
}
|
|
175
199
|
}, [url, details, getState, resolve]);
|
|
200
|
+
var loadMetadata = (0, _react.useCallback)(function () {
|
|
201
|
+
//metadataStatus will be undefined for SSR links only
|
|
202
|
+
if (metadataStatus === undefined) {
|
|
203
|
+
setMetadataStatus('pending');
|
|
204
|
+
return resolve(url, false, true);
|
|
205
|
+
}
|
|
206
|
+
}, [metadataStatus, resolve, setMetadataStatus, url]);
|
|
176
207
|
var authorize = (0, _react.useCallback)(function (appearance) {
|
|
177
208
|
var definitionId = (0, _helpers.getDefinitionId)(details);
|
|
178
209
|
var extensionKey = (0, _helpers.getExtensionKey)(details);
|
|
@@ -268,9 +299,10 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
|
|
|
268
299
|
register: register,
|
|
269
300
|
reload: reload,
|
|
270
301
|
authorize: authorize,
|
|
271
|
-
invoke: invoke
|
|
302
|
+
invoke: invoke,
|
|
303
|
+
loadMetadata: loadMetadata
|
|
272
304
|
};
|
|
273
|
-
}, [register, reload, authorize, invoke]);
|
|
305
|
+
}, [register, reload, authorize, invoke, loadMetadata]);
|
|
274
306
|
};
|
|
275
307
|
|
|
276
308
|
exports.useSmartCardActions = useSmartCardActions;
|
package/dist/cjs/version.json
CHANGED
|
@@ -109,6 +109,7 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
109
109
|
renderers = _ref.renderers,
|
|
110
110
|
isSelected = _ref.isSelected,
|
|
111
111
|
onResolve = _ref.onResolve,
|
|
112
|
+
onError = _ref.onError,
|
|
112
113
|
testId = _ref.testId,
|
|
113
114
|
showActions = _ref.showActions,
|
|
114
115
|
platform = _ref.platform;
|
|
@@ -146,6 +147,13 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
146
147
|
}));
|
|
147
148
|
|
|
148
149
|
case 'unauthorized':
|
|
150
|
+
if (onError) {
|
|
151
|
+
onError({
|
|
152
|
+
url: url,
|
|
153
|
+
status: status
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
149
157
|
var unauthorizedViewProps = (0, _block.extractBlockProps)(data, meta, extractorOpts);
|
|
150
158
|
return /*#__PURE__*/_react.default.createElement(_UnauthorizedView.UnauthorizedView, (0, _extends2.default)({}, unauthorizedViewProps, {
|
|
151
159
|
isSelected: isSelected,
|
|
@@ -156,6 +164,13 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
156
164
|
}));
|
|
157
165
|
|
|
158
166
|
case 'forbidden':
|
|
167
|
+
if (onError) {
|
|
168
|
+
onError({
|
|
169
|
+
url: url,
|
|
170
|
+
status: status
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
159
174
|
var forbiddenViewProps = (0, _block.extractBlockProps)(data, meta, extractorOpts);
|
|
160
175
|
var cardMetadata = (_details$meta = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta !== void 0 ? _details$meta : (0, _jsonld.getUnauthorizedJsonLd)().meta;
|
|
161
176
|
var requestAccessContext = (0, _context.extractRequestAccessContext)({
|
|
@@ -172,6 +187,13 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
172
187
|
}));
|
|
173
188
|
|
|
174
189
|
case 'not_found':
|
|
190
|
+
if (onError) {
|
|
191
|
+
onError({
|
|
192
|
+
url: url,
|
|
193
|
+
status: status
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
|
|
175
197
|
var notFoundViewProps = (0, _block.extractBlockProps)(data, meta, extractorOpts);
|
|
176
198
|
return /*#__PURE__*/_react.default.createElement(_NotFoundView.NotFoundView, (0, _extends2.default)({}, notFoundViewProps, {
|
|
177
199
|
isSelected: isSelected,
|
|
@@ -181,6 +203,13 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
181
203
|
|
|
182
204
|
case 'fallback':
|
|
183
205
|
case 'errored':
|
|
206
|
+
if (onError) {
|
|
207
|
+
onError({
|
|
208
|
+
url: url,
|
|
209
|
+
status: status
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
|
|
184
213
|
if (authFlow && authFlow === 'disabled') {
|
|
185
214
|
return /*#__PURE__*/_react.default.createElement(_LinkView.CardLinkView, {
|
|
186
215
|
link: url,
|
|
@@ -47,6 +47,7 @@ function CardWithUrlContent(_ref) {
|
|
|
47
47
|
appearance = _ref.appearance,
|
|
48
48
|
dispatchAnalytics = _ref.dispatchAnalytics,
|
|
49
49
|
onResolve = _ref.onResolve,
|
|
50
|
+
onError = _ref.onError,
|
|
50
51
|
testId = _ref.testId,
|
|
51
52
|
showActions = _ref.showActions,
|
|
52
53
|
inheritDimensions = _ref.inheritDimensions,
|
|
@@ -124,7 +125,7 @@ function CardWithUrlContent(_ref) {
|
|
|
124
125
|
if ((0, _helpers.isFinalState)(state.status)) {
|
|
125
126
|
analytics.ui.renderSuccessEvent(appearance, state.status, id, definitionId, extensionKey);
|
|
126
127
|
}
|
|
127
|
-
}, [appearance, state.
|
|
128
|
+
}, [appearance, state.status, url, definitionId, extensionKey, analytics.ui, id]);
|
|
128
129
|
|
|
129
130
|
if (isFlexibleUi) {
|
|
130
131
|
var cardState = state;
|
|
@@ -148,7 +149,8 @@ function CardWithUrlContent(_ref) {
|
|
|
148
149
|
ui: ui,
|
|
149
150
|
url: url,
|
|
150
151
|
testId: testId,
|
|
151
|
-
onResolve: onResolve
|
|
152
|
+
onResolve: onResolve,
|
|
153
|
+
onError: onError
|
|
152
154
|
}, children);
|
|
153
155
|
} // We have to keep this last to prevent hook order from being violated
|
|
154
156
|
|
|
@@ -168,6 +170,7 @@ function CardWithUrlContent(_ref) {
|
|
|
168
170
|
handleFrameClick: handleClickWrapper,
|
|
169
171
|
isSelected: isSelected,
|
|
170
172
|
onResolve: onResolve,
|
|
173
|
+
onError: onError,
|
|
171
174
|
testId: testId,
|
|
172
175
|
inlinePreloaderStyle: inlinePreloaderStyle,
|
|
173
176
|
showHoverPreview: showHoverPreview
|
|
@@ -187,6 +190,7 @@ function CardWithUrlContent(_ref) {
|
|
|
187
190
|
handleAnalytics: dispatchAnalytics,
|
|
188
191
|
isSelected: isSelected,
|
|
189
192
|
onResolve: onResolve,
|
|
193
|
+
onError: onError,
|
|
190
194
|
testId: testId,
|
|
191
195
|
showActions: showActions,
|
|
192
196
|
platform: platform
|
|
@@ -206,6 +210,7 @@ function CardWithUrlContent(_ref) {
|
|
|
206
210
|
isFrameVisible: isFrameVisible,
|
|
207
211
|
platform: platform,
|
|
208
212
|
onResolve: onResolve,
|
|
213
|
+
onError: onError,
|
|
209
214
|
testId: testId,
|
|
210
215
|
inheritDimensions: inheritDimensions,
|
|
211
216
|
showActions: showActions,
|
|
@@ -56,6 +56,7 @@ function CardWithURLRenderer(props) {
|
|
|
56
56
|
onClick = props.onClick,
|
|
57
57
|
container = props.container,
|
|
58
58
|
onResolve = props.onResolve,
|
|
59
|
+
onError = props.onError,
|
|
59
60
|
testId = props.testId,
|
|
60
61
|
showActions = props.showActions,
|
|
61
62
|
inheritDimensions = props.inheritDimensions,
|
|
@@ -113,6 +114,7 @@ function CardWithURLRenderer(props) {
|
|
|
113
114
|
dispatchAnalytics: dispatchAnalytics,
|
|
114
115
|
container: container,
|
|
115
116
|
onResolve: onResolve,
|
|
117
|
+
onError: onError,
|
|
116
118
|
testId: testId,
|
|
117
119
|
showActions: showActions,
|
|
118
120
|
inheritDimensions: inheritDimensions,
|
|
@@ -54,6 +54,7 @@ var EmbedCard = /*#__PURE__*/_react.default.forwardRef(function (_ref, iframeRef
|
|
|
54
54
|
isFrameVisible = _ref.isFrameVisible,
|
|
55
55
|
platform = _ref.platform,
|
|
56
56
|
onResolve = _ref.onResolve,
|
|
57
|
+
onError = _ref.onError,
|
|
57
58
|
testId = _ref.testId,
|
|
58
59
|
inheritDimensions = _ref.inheritDimensions;
|
|
59
60
|
var data = details && details.data || (0, _jsonld.getEmptyJsonLd)();
|
|
@@ -113,6 +114,13 @@ var EmbedCard = /*#__PURE__*/_react.default.forwardRef(function (_ref, iframeRef
|
|
|
113
114
|
}
|
|
114
115
|
|
|
115
116
|
case 'unauthorized':
|
|
117
|
+
if (onError) {
|
|
118
|
+
onError({
|
|
119
|
+
url: url,
|
|
120
|
+
status: status
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
116
124
|
var unauthorisedViewProps = (0, _embed.extractEmbedProps)(data, meta, platform);
|
|
117
125
|
return /*#__PURE__*/_react.default.createElement(_UnauthorisedView.EmbedCardUnauthorisedView, (0, _extends2.default)({}, unauthorisedViewProps, {
|
|
118
126
|
isSelected: isSelected,
|
|
@@ -122,6 +130,13 @@ var EmbedCard = /*#__PURE__*/_react.default.forwardRef(function (_ref, iframeRef
|
|
|
122
130
|
}));
|
|
123
131
|
|
|
124
132
|
case 'forbidden':
|
|
133
|
+
if (onError) {
|
|
134
|
+
onError({
|
|
135
|
+
url: url,
|
|
136
|
+
status: status
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
125
140
|
var forbiddenViewProps = (0, _embed.extractEmbedProps)(data, meta, platform);
|
|
126
141
|
var cardMetadata = (_details$meta = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta !== void 0 ? _details$meta : (0, _jsonld.getUnauthorizedJsonLd)().meta;
|
|
127
142
|
var requestAccessContext = (0, _context.extractRequestAccessContext)({
|
|
@@ -138,6 +153,13 @@ var EmbedCard = /*#__PURE__*/_react.default.forwardRef(function (_ref, iframeRef
|
|
|
138
153
|
}));
|
|
139
154
|
|
|
140
155
|
case 'not_found':
|
|
156
|
+
if (onError) {
|
|
157
|
+
onError({
|
|
158
|
+
url: url,
|
|
159
|
+
status: status
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
141
163
|
var notFoundViewProps = (0, _embed.extractEmbedProps)(data, meta, platform);
|
|
142
164
|
return /*#__PURE__*/_react.default.createElement(_NotFoundView.EmbedCardNotFoundView, (0, _extends2.default)({}, notFoundViewProps, {
|
|
143
165
|
isSelected: isSelected,
|
|
@@ -147,6 +169,13 @@ var EmbedCard = /*#__PURE__*/_react.default.forwardRef(function (_ref, iframeRef
|
|
|
147
169
|
|
|
148
170
|
case 'fallback':
|
|
149
171
|
case 'errored':
|
|
172
|
+
if (onError) {
|
|
173
|
+
onError({
|
|
174
|
+
url: url,
|
|
175
|
+
status: status
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
|
|
150
179
|
return /*#__PURE__*/_react.default.createElement(_ErroredView.EmbedCardErroredView, {
|
|
151
180
|
onRetry: handleErrorRetry,
|
|
152
181
|
inheritDimensions: inheritDimensions,
|
|
@@ -13,6 +13,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
13
13
|
|
|
14
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
15
|
|
|
16
|
+
var _constants = require("../../constants");
|
|
17
|
+
|
|
16
18
|
var _container = _interopRequireDefault(require("./components/container"));
|
|
17
19
|
|
|
18
20
|
var _flexibleUiContext = require("../../state/flexible-ui-context");
|
|
@@ -33,24 +35,49 @@ var FlexibleCard = function FlexibleCard(_ref) {
|
|
|
33
35
|
var cardState = _ref.cardState,
|
|
34
36
|
children = _ref.children,
|
|
35
37
|
onAuthorize = _ref.onAuthorize,
|
|
38
|
+
onError = _ref.onError,
|
|
39
|
+
onResolve = _ref.onResolve,
|
|
36
40
|
renderers = _ref.renderers,
|
|
37
41
|
ui = _ref.ui,
|
|
38
42
|
url = _ref.url,
|
|
39
43
|
onClick = _ref.onClick,
|
|
40
|
-
testId = _ref.testId
|
|
41
|
-
onResolve = _ref.onResolve;
|
|
44
|
+
testId = _ref.testId;
|
|
42
45
|
var cardType = cardState.status,
|
|
43
46
|
details = cardState.details;
|
|
44
47
|
var status = cardType;
|
|
45
48
|
var context = (0, _utils.getContextByStatus)(url, status, details, renderers);
|
|
46
49
|
var retry = (0, _utils.getRetryOptions)(url, status, details, onAuthorize);
|
|
50
|
+
|
|
51
|
+
var _ref2 = context || {},
|
|
52
|
+
title = _ref2.title;
|
|
53
|
+
|
|
47
54
|
(0, _react.useEffect)(function () {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
switch (status) {
|
|
56
|
+
case _constants.SmartLinkStatus.Resolved:
|
|
57
|
+
if (onResolve) {
|
|
58
|
+
onResolve({
|
|
59
|
+
title: title,
|
|
60
|
+
url: url
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
break;
|
|
65
|
+
|
|
66
|
+
case _constants.SmartLinkStatus.Errored:
|
|
67
|
+
case _constants.SmartLinkStatus.Fallback:
|
|
68
|
+
case _constants.SmartLinkStatus.Forbidden:
|
|
69
|
+
case _constants.SmartLinkStatus.NotFound:
|
|
70
|
+
case _constants.SmartLinkStatus.Unauthorized:
|
|
71
|
+
if (onError) {
|
|
72
|
+
onError({
|
|
73
|
+
status: status,
|
|
74
|
+
url: url
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
break;
|
|
52
79
|
}
|
|
53
|
-
}, [onResolve, status, url]);
|
|
80
|
+
}, [onError, onResolve, status, title, url]);
|
|
54
81
|
return /*#__PURE__*/_react.default.createElement(_flexibleUiContext.FlexibleUiContext.Provider, {
|
|
55
82
|
value: context
|
|
56
83
|
}, /*#__PURE__*/_react.default.createElement(_container.default, (0, _extends2.default)({
|
|
@@ -21,6 +21,8 @@ var _extractPreview = _interopRequireDefault(require("../../../extractors/flexib
|
|
|
21
21
|
|
|
22
22
|
var _extractMetadata2 = require("../../../extractors/hover/extractMetadata");
|
|
23
23
|
|
|
24
|
+
var _actions = require("../../../state/actions");
|
|
25
|
+
|
|
24
26
|
var _helpers = require("../../../state/helpers");
|
|
25
27
|
|
|
26
28
|
var _utils = require("../../../utils");
|
|
@@ -81,7 +83,9 @@ exports.toFooterActions = toFooterActions;
|
|
|
81
83
|
var HoverCardContent = function HoverCardContent(_ref) {
|
|
82
84
|
var _cardState$details;
|
|
83
85
|
|
|
84
|
-
var
|
|
86
|
+
var _ref$id = _ref.id,
|
|
87
|
+
id = _ref$id === void 0 ? '' : _ref$id,
|
|
88
|
+
analytics = _ref.analytics,
|
|
85
89
|
_ref$cardActions = _ref.cardActions,
|
|
86
90
|
cardActions = _ref$cardActions === void 0 ? [] : _ref$cardActions,
|
|
87
91
|
cardState = _ref.cardState,
|
|
@@ -89,6 +93,10 @@ var HoverCardContent = function HoverCardContent(_ref) {
|
|
|
89
93
|
onResolve = _ref.onResolve,
|
|
90
94
|
renderers = _ref.renderers,
|
|
91
95
|
url = _ref.url;
|
|
96
|
+
var actions = (0, _actions.useSmartCardActions)(id, url, analytics);
|
|
97
|
+
(0, _react.useEffect)(function () {
|
|
98
|
+
actions.loadMetadata();
|
|
99
|
+
}, [actions]);
|
|
92
100
|
(0, _react.useEffect)(function () {
|
|
93
101
|
// Since hover preview only render on resolved status,
|
|
94
102
|
// there is no need to check for statuses.
|
|
@@ -72,6 +72,7 @@ var InlineCard = function InlineCard(_ref) {
|
|
|
72
72
|
isSelected = _ref.isSelected,
|
|
73
73
|
renderers = _ref.renderers,
|
|
74
74
|
onResolve = _ref.onResolve,
|
|
75
|
+
onError = _ref.onError,
|
|
75
76
|
testId = _ref.testId,
|
|
76
77
|
inlinePreloaderStyle = _ref.inlinePreloaderStyle,
|
|
77
78
|
showHoverPreview = _ref.showHoverPreview;
|
|
@@ -111,6 +112,13 @@ var InlineCard = function InlineCard(_ref) {
|
|
|
111
112
|
}));
|
|
112
113
|
|
|
113
114
|
case 'unauthorized':
|
|
115
|
+
if (onError) {
|
|
116
|
+
onError({
|
|
117
|
+
url: url,
|
|
118
|
+
status: status
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
114
122
|
var provider = (0, _extractors.extractProvider)(cardDetails);
|
|
115
123
|
return /*#__PURE__*/_react.default.createElement(_UnauthorisedView.InlineCardUnauthorizedView, {
|
|
116
124
|
icon: provider && provider.icon,
|
|
@@ -122,6 +130,13 @@ var InlineCard = function InlineCard(_ref) {
|
|
|
122
130
|
});
|
|
123
131
|
|
|
124
132
|
case 'forbidden':
|
|
133
|
+
if (onError) {
|
|
134
|
+
onError({
|
|
135
|
+
url: url,
|
|
136
|
+
status: status
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
125
140
|
var providerForbidden = (0, _extractors.extractProvider)(cardDetails);
|
|
126
141
|
var cardMetadata = (_details$meta = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta !== void 0 ? _details$meta : (0, _jsonld.getUnauthorizedJsonLd)().meta;
|
|
127
142
|
var requestAccessContext = (0, _context.extractRequestAccessContext)({
|
|
@@ -141,6 +156,13 @@ var InlineCard = function InlineCard(_ref) {
|
|
|
141
156
|
});
|
|
142
157
|
|
|
143
158
|
case 'not_found':
|
|
159
|
+
if (onError) {
|
|
160
|
+
onError({
|
|
161
|
+
url: url,
|
|
162
|
+
status: status
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
|
|
144
166
|
var providerNotFound = (0, _extractors.extractProvider)(cardDetails);
|
|
145
167
|
return /*#__PURE__*/_react.default.createElement(_ErroredView.InlineCardErroredView, {
|
|
146
168
|
url: url,
|
|
@@ -153,6 +175,13 @@ var InlineCard = function InlineCard(_ref) {
|
|
|
153
175
|
|
|
154
176
|
case 'fallback':
|
|
155
177
|
case 'errored':
|
|
178
|
+
if (onError) {
|
|
179
|
+
onError({
|
|
180
|
+
url: url,
|
|
181
|
+
status: status
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
156
185
|
return /*#__PURE__*/_react.default.createElement(_LinkView.CardLinkView, {
|
|
157
186
|
link: url,
|
|
158
187
|
isSelected: isSelected,
|
|
@@ -2,4 +2,5 @@ export const ANALYTICS_RESOLVING = 'resolving';
|
|
|
2
2
|
export const ANALYTICS_ERROR = 'errored';
|
|
3
3
|
export const ANALYTICS_FALLBACK = 'fallback';
|
|
4
4
|
export const ERROR_MESSAGE_OAUTH = 'Provider.authFlow is not set to OAuth2.';
|
|
5
|
-
export const ERROR_MESSAGE_FATAL = 'Fatal error resolving URL';
|
|
5
|
+
export const ERROR_MESSAGE_FATAL = 'Fatal error resolving URL';
|
|
6
|
+
export const ERROR_MESSAGE_METADATA = 'Error resolving metadata.';
|