@atlaskit/smart-card 20.0.4 → 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 +41 -0
- package/dist/cjs/state/actions/constants.js +4 -2
- package/dist/cjs/state/actions/index.js +51 -19
- package/dist/cjs/state/analytics/useSmartLinkAnalytics.js +26 -6
- 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 +7 -9
- package/dist/cjs/view/EmbedCard/index.js +29 -0
- package/dist/cjs/view/FlexibleCard/components/blocks/element-group/index.js +2 -2
- package/dist/cjs/view/FlexibleCard/index.js +34 -7
- package/dist/cjs/view/HoverCard/components/HoverCardComponent.js +143 -0
- package/dist/cjs/view/HoverCard/components/{hover-card-content.js → HoverCardContent.js} +29 -25
- package/dist/cjs/view/HoverCard/index.js +25 -126
- package/dist/cjs/view/HoverCard/styled.js +11 -1
- package/dist/cjs/view/HoverCard/utils.js +3 -3
- 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/state/analytics/useSmartLinkAnalytics.js +24 -7
- 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 +8 -10
- package/dist/es2019/view/EmbedCard/index.js +29 -0
- package/dist/es2019/view/FlexibleCard/components/blocks/element-group/index.js +4 -0
- package/dist/es2019/view/FlexibleCard/index.js +32 -7
- package/dist/es2019/view/HoverCard/components/HoverCardComponent.js +102 -0
- package/dist/es2019/view/HoverCard/components/{hover-card-content.js → HoverCardContent.js} +18 -21
- package/dist/es2019/view/HoverCard/index.js +26 -97
- package/dist/es2019/view/HoverCard/styled.js +8 -0
- package/dist/es2019/view/HoverCard/utils.js +1 -1
- 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/state/analytics/useSmartLinkAnalytics.js +27 -7
- 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 +8 -10
- package/dist/esm/view/EmbedCard/index.js +29 -0
- package/dist/esm/view/FlexibleCard/components/blocks/element-group/index.js +2 -2
- package/dist/esm/view/FlexibleCard/index.js +33 -7
- package/dist/esm/view/HoverCard/components/HoverCardComponent.js +114 -0
- package/dist/esm/view/HoverCard/components/{hover-card-content.js → HoverCardContent.js} +20 -22
- package/dist/esm/view/HoverCard/index.js +24 -109
- package/dist/esm/view/HoverCard/styled.js +8 -0
- package/dist/esm/view/HoverCard/utils.js +1 -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/analytics/useSmartLinkAnalytics.d.ts +9 -0
- package/dist/types/state/hooks/useSmartLink.d.ts +3 -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/components/HoverCardComponent.d.ts +4 -0
- package/dist/types/view/HoverCard/components/HoverCardContent.d.ts +9 -0
- package/dist/types/view/HoverCard/index.d.ts +2 -4
- package/dist/types/view/HoverCard/styled.d.ts +2 -0
- package/dist/types/view/HoverCard/types.d.ts +8 -0
- package/dist/types/view/HoverCard/utils.d.ts +1 -1
- 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/dist/types/view/HoverCard/components/hover-card-content.d.ts +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
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
|
+
|
|
32
|
+
## 20.0.6
|
|
33
|
+
|
|
34
|
+
### Patch Changes
|
|
35
|
+
|
|
36
|
+
- [`afb579e5778`](https://bitbucket.org/atlassian/atlassian-frontend/commits/afb579e5778) - Flexible UI: Fix styling on MetadataBlock and FooterBlock in Firefox and Safari browser
|
|
37
|
+
|
|
38
|
+
## 20.0.5
|
|
39
|
+
|
|
40
|
+
### Patch Changes
|
|
41
|
+
|
|
42
|
+
- [`6e4810f82c3`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6e4810f82c3) - wrap hover preview in error boundary and emit failure event
|
|
43
|
+
|
|
3
44
|
## 20.0.4
|
|
4
45
|
|
|
5
46
|
### 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;
|
|
@@ -32,12 +32,13 @@ var useSmartLinkAnalytics = function useSmartLinkAnalytics(url, dispatchAnalytic
|
|
|
32
32
|
var _useSmartLinkContext = (0, _linkProvider.useSmartLinkContext)(),
|
|
33
33
|
store = _useSmartLinkContext.store;
|
|
34
34
|
|
|
35
|
-
var state = (0, _linkingCommon.getUrl)(store, url);
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var
|
|
40
|
-
var
|
|
35
|
+
var state = store ? (0, _linkingCommon.getUrl)(store, url) : undefined;
|
|
36
|
+
var details = state ? state.details : undefined;
|
|
37
|
+
var extractedDefinitionId = (0, _helpers.getDefinitionId)(details);
|
|
38
|
+
var extractedExtensionKey = (0, _helpers.getExtensionKey)(details);
|
|
39
|
+
var extractedResourceType = (0, _helpers.getResourceType)(details);
|
|
40
|
+
var extractedSubproduct = (0, _helpers.getSubproduct)(details);
|
|
41
|
+
var extractedProduct = (0, _helpers.getProduct)(details);
|
|
41
42
|
/** Contains all ui analytics events */
|
|
42
43
|
|
|
43
44
|
var ui = (0, _react.useMemo)(function () {
|
|
@@ -172,6 +173,25 @@ var useSmartLinkAnalytics = function useSmartLinkAnalytics(url, dispatchAnalytic
|
|
|
172
173
|
dispatchAnalytics((0, _analytics.uiRenderSuccessEvent)(display, status, definitionId, extensionKey));
|
|
173
174
|
},
|
|
174
175
|
|
|
176
|
+
/**
|
|
177
|
+
* This fires an event that represents when a Smart Link renders unsuccessfuly.
|
|
178
|
+
* @param display Whether the card was an Inline, Block, Embed or Flexible UI.
|
|
179
|
+
* @param id The unique ID for this Smart Link.
|
|
180
|
+
* @param error: An error representing why the Smart Link render failed.
|
|
181
|
+
* @param errorInfo: Additional details about the error including the stack trace.
|
|
182
|
+
*/
|
|
183
|
+
renderFailedEvent: function renderFailedEvent(display) {
|
|
184
|
+
var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultId;
|
|
185
|
+
var error = arguments.length > 2 ? arguments[2] : undefined;
|
|
186
|
+
var errorInfo = arguments.length > 3 ? arguments[3] : undefined;
|
|
187
|
+
// Start and fail the smart-link-rendered experience. If it has already
|
|
188
|
+
// been started nothing happens.
|
|
189
|
+
(0, _ufoExperiences.startUfoExperience)('smart-link-rendered', id);
|
|
190
|
+
(0, _ufoExperiences.failUfoExperience)('smart-link-rendered', id);
|
|
191
|
+
(0, _ufoExperiences.failUfoExperience)('smart-link-authenticated', id);
|
|
192
|
+
dispatchAnalytics((0, _analytics.uiRenderFailedEvent)(display, error, errorInfo));
|
|
193
|
+
},
|
|
194
|
+
|
|
175
195
|
/**
|
|
176
196
|
* This fires an event that represents a hover preview being opened.
|
|
177
197
|
* @param hoverDisplay Whether the hover preview was displayed as a card or embed.
|
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,
|
|
@@ -21,7 +21,7 @@ var _performance = require("../../utils/performance");
|
|
|
21
21
|
|
|
22
22
|
var _reactErrorBoundary = require("react-error-boundary");
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var _analytics2 = require("../../state/analytics");
|
|
25
25
|
|
|
26
26
|
var _LazyFallback = require("./component-lazy/LazyFallback");
|
|
27
27
|
|
|
@@ -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,
|
|
@@ -80,6 +81,7 @@ function CardWithURLRenderer(props) {
|
|
|
80
81
|
|
|
81
82
|
(0, _analytics.fireSmartLinkEvent)(analyticsPayload, createAnalyticsEvent);
|
|
82
83
|
}, [appearance, createAnalyticsEvent]);
|
|
84
|
+
var analytics = (0, _analytics2.useSmartLinkAnalytics)(url !== null && url !== void 0 ? url : '', dispatchAnalytics, id);
|
|
83
85
|
var logError = (0, _react.useCallback)(function (error, info) {
|
|
84
86
|
var componentStack = info.componentStack; // NB: APIErrors are thrown in response to Object Resolver Service.
|
|
85
87
|
// In these cases, control is handed back to the Editor. We do not
|
|
@@ -93,15 +95,10 @@ function CardWithURLRenderer(props) {
|
|
|
93
95
|
else {
|
|
94
96
|
var errorInfo = {
|
|
95
97
|
componentStack: componentStack
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
(0, _ufoExperiences.startUfoExperience)('smart-link-rendered', id);
|
|
100
|
-
(0, _ufoExperiences.failUfoExperience)('smart-link-rendered', id);
|
|
101
|
-
(0, _ufoExperiences.failUfoExperience)('smart-link-authenticated', id);
|
|
102
|
-
dispatchAnalytics((0, _analytics.uiRenderFailedEvent)(appearance, error, errorInfo));
|
|
98
|
+
};
|
|
99
|
+
analytics.ui.renderFailedEvent(appearance, id, error, errorInfo);
|
|
103
100
|
}
|
|
104
|
-
}, [
|
|
101
|
+
}, [analytics.ui, appearance, id]);
|
|
105
102
|
|
|
106
103
|
if (!url) {
|
|
107
104
|
throw new Error('@atlaskit/smart-card: url property is missing.');
|
|
@@ -117,6 +114,7 @@ function CardWithURLRenderer(props) {
|
|
|
117
114
|
dispatchAnalytics: dispatchAnalytics,
|
|
118
115
|
container: container,
|
|
119
116
|
onResolve: onResolve,
|
|
117
|
+
onError: onError,
|
|
120
118
|
testId: testId,
|
|
121
119
|
showActions: showActions,
|
|
122
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,
|
|
@@ -24,11 +24,11 @@ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _temp
|
|
|
24
24
|
var getAlignmentStyles = function getAlignmentStyles(align) {
|
|
25
25
|
switch (align) {
|
|
26
26
|
case _constants.SmartLinkAlignment.Right:
|
|
27
|
-
return (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n justify-content: flex-end;\n text-align: right;\n "])));
|
|
27
|
+
return (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n -webkit-box-align: end;\n -ms-flex-align: end;\n justify-content: flex-end;\n text-align: right;\n "])));
|
|
28
28
|
|
|
29
29
|
case _constants.SmartLinkAlignment.Left:
|
|
30
30
|
default:
|
|
31
|
-
return (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n justify-content: flex-start;\n text-align: left;\n "])));
|
|
31
|
+
return (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n -webkit-box-align: start;\n -ms-flex-align: start;\n justify-content: flex-start;\n text-align: left;\n "])));
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
34
|
|
|
@@ -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)({
|