@atlaskit/smart-card 23.8.2 → 23.9.1
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 +12 -0
- package/dist/cjs/utils/flexible.js +8 -2
- package/dist/cjs/utils/mocks.js +38 -0
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/BlockCard/actions/flexible/AuthorizeAction.js +2 -1
- package/dist/cjs/view/BlockCard/actions/flexible/ForbiddenAction.js +2 -1
- package/dist/cjs/view/BlockCard/actions/flexible/RetryAction.js +2 -1
- package/dist/cjs/view/BlockCard/index.js +24 -0
- package/dist/cjs/view/BlockCard/views/flexible/FlexibleResolvedView.js +3 -1
- package/dist/cjs/view/CardWithUrl/component.js +1 -6
- package/dist/cjs/view/FlexibleCard/components/actions/action/action-button/index.js +1 -6
- package/dist/cjs/view/FlexibleCard/components/blocks/action-group/index.js +2 -7
- package/dist/cjs/view/FlexibleCard/components/blocks/footer-block/index.js +17 -2
- package/dist/cjs/view/FlexibleCard/components/container/index.js +34 -3
- package/dist/cjs/view/FlexibleCard/index.js +3 -1
- package/dist/cjs/view/HoverCard/components/HoverCardComponent.js +15 -3
- package/dist/cjs/view/InlineCard/index.js +7 -0
- package/dist/es2019/utils/flexible.js +3 -2
- package/dist/es2019/utils/mocks.js +38 -0
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/BlockCard/actions/flexible/AuthorizeAction.js +2 -1
- package/dist/es2019/view/BlockCard/actions/flexible/ForbiddenAction.js +2 -1
- package/dist/es2019/view/BlockCard/actions/flexible/RetryAction.js +2 -1
- package/dist/es2019/view/BlockCard/index.js +24 -0
- package/dist/es2019/view/BlockCard/views/flexible/FlexibleResolvedView.js +3 -1
- package/dist/es2019/view/CardWithUrl/component.js +1 -6
- package/dist/es2019/view/FlexibleCard/components/actions/action/action-button/index.js +1 -6
- package/dist/es2019/view/FlexibleCard/components/blocks/action-group/index.js +2 -5
- package/dist/es2019/view/FlexibleCard/components/blocks/footer-block/index.js +11 -2
- package/dist/es2019/view/FlexibleCard/components/container/index.js +25 -5
- package/dist/es2019/view/FlexibleCard/index.js +3 -1
- package/dist/es2019/view/HoverCard/components/HoverCardComponent.js +13 -3
- package/dist/es2019/view/InlineCard/index.js +6 -0
- package/dist/esm/utils/flexible.js +4 -1
- package/dist/esm/utils/mocks.js +38 -0
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/BlockCard/actions/flexible/AuthorizeAction.js +2 -1
- package/dist/esm/view/BlockCard/actions/flexible/ForbiddenAction.js +2 -1
- package/dist/esm/view/BlockCard/actions/flexible/RetryAction.js +2 -1
- package/dist/esm/view/BlockCard/index.js +24 -0
- package/dist/esm/view/BlockCard/views/flexible/FlexibleResolvedView.js +3 -1
- package/dist/esm/view/CardWithUrl/component.js +1 -6
- package/dist/esm/view/FlexibleCard/components/actions/action/action-button/index.js +1 -6
- package/dist/esm/view/FlexibleCard/components/blocks/action-group/index.js +2 -7
- package/dist/esm/view/FlexibleCard/components/blocks/footer-block/index.js +11 -2
- package/dist/esm/view/FlexibleCard/components/container/index.js +34 -5
- package/dist/esm/view/FlexibleCard/index.js +3 -1
- package/dist/esm/view/HoverCard/components/HoverCardComponent.js +15 -3
- package/dist/esm/view/InlineCard/index.js +6 -0
- package/dist/types/utils/flexible.d.ts +1 -0
- package/dist/types/utils/mocks.d.ts +2 -0
- package/dist/types/view/BlockCard/views/flexible/FlexibleResolvedView.d.ts +1 -1
- package/dist/types/view/Card/index.d.ts +1 -1
- package/dist/types/view/FlexibleCard/components/blocks/action-group/types.d.ts +1 -1
- package/dist/types/view/FlexibleCard/components/blocks/footer-block/types.d.ts +5 -0
- package/dist/types/view/FlexibleCard/components/container/types.d.ts +5 -0
- package/dist/types/view/FlexibleCard/types.d.ts +5 -0
- package/dist/types/view/HoverCard/index.d.ts +1 -1
- package/dist/types/view/HoverCard/types.d.ts +24 -0
- package/package.json +1 -1
- package/report.api.md +1 -0
- package/tmp/api-report-tmp.d.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/smart-card
|
|
2
2
|
|
|
3
|
+
## 23.9.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`484be3ed430`](https://bitbucket.org/atlassian/atlassian-frontend/commits/484be3ed430) - This adds onResolve back to Flexible Block Card
|
|
8
|
+
|
|
9
|
+
## 23.9.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [`5c7c532de88`](https://bitbucket.org/atlassian/atlassian-frontend/commits/5c7c532de88) - [ux] Add showHoverPreview as a ui parameter to allow hover cards on flex ui links.
|
|
14
|
+
|
|
3
15
|
## 23.8.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", {
|
|
8
8
|
value: true
|
|
9
9
|
});
|
|
10
|
-
exports.isFlexibleUiTitleBlock = exports.isFlexibleUiPreviewBlock = exports.isFlexibleUiElement = exports.isFlexibleUiCard = exports.isFlexibleUiBlock = void 0;
|
|
10
|
+
exports.isFlexibleUiTitleBlock = exports.isFlexibleUiPreviewBlock = exports.isFlexibleUiFooterBlock = exports.isFlexibleUiElement = exports.isFlexibleUiCard = exports.isFlexibleUiBlock = void 0;
|
|
11
11
|
|
|
12
12
|
var _react = _interopRequireDefault(require("react"));
|
|
13
13
|
|
|
@@ -57,4 +57,10 @@ var isFlexibleUiPreviewBlock = function isFlexibleUiPreviewBlock(node) {
|
|
|
57
57
|
return /*#__PURE__*/_react.default.isValidElement(node) && node.type === Blocks.PreviewBlock;
|
|
58
58
|
};
|
|
59
59
|
|
|
60
|
-
exports.isFlexibleUiPreviewBlock = isFlexibleUiPreviewBlock;
|
|
60
|
+
exports.isFlexibleUiPreviewBlock = isFlexibleUiPreviewBlock;
|
|
61
|
+
|
|
62
|
+
var isFlexibleUiFooterBlock = function isFlexibleUiFooterBlock(node) {
|
|
63
|
+
return /*#__PURE__*/_react.default.isValidElement(node) && node.type === Blocks.FooterBlock;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
exports.isFlexibleUiFooterBlock = isFlexibleUiFooterBlock;
|
package/dist/cjs/utils/mocks.js
CHANGED
|
@@ -139,6 +139,25 @@ var mocks = {
|
|
|
139
139
|
url: 'https://some.url'
|
|
140
140
|
}
|
|
141
141
|
},
|
|
142
|
+
forbiddenWithNoAuth: {
|
|
143
|
+
meta: {
|
|
144
|
+
visibility: 'restricted',
|
|
145
|
+
access: 'forbidden',
|
|
146
|
+
auth: [],
|
|
147
|
+
definitionId: 'd1',
|
|
148
|
+
key: 'object-provider'
|
|
149
|
+
},
|
|
150
|
+
data: {
|
|
151
|
+
'@context': {
|
|
152
|
+
'@vocab': 'https://www.w3.org/ns/activitystreams#',
|
|
153
|
+
atlassian: 'https://schema.atlassian.com/ns/vocabulary#',
|
|
154
|
+
schema: 'http://schema.org/'
|
|
155
|
+
},
|
|
156
|
+
'@type': 'Object',
|
|
157
|
+
name: 'I love cheese',
|
|
158
|
+
url: 'https://some.url'
|
|
159
|
+
}
|
|
160
|
+
},
|
|
142
161
|
unauthorized: {
|
|
143
162
|
meta: {
|
|
144
163
|
visibility: 'restricted',
|
|
@@ -162,6 +181,25 @@ var mocks = {
|
|
|
162
181
|
url: 'https://some.url'
|
|
163
182
|
}
|
|
164
183
|
},
|
|
184
|
+
unauthorizedWithNoAuth: {
|
|
185
|
+
meta: {
|
|
186
|
+
visibility: 'restricted',
|
|
187
|
+
access: 'unauthorized',
|
|
188
|
+
auth: [],
|
|
189
|
+
definitionId: 'd1',
|
|
190
|
+
key: 'object-provider'
|
|
191
|
+
},
|
|
192
|
+
data: {
|
|
193
|
+
'@context': {
|
|
194
|
+
'@vocab': 'https://www.w3.org/ns/activitystreams#',
|
|
195
|
+
atlassian: 'https://schema.atlassian.com/ns/vocabulary#',
|
|
196
|
+
schema: 'http://schema.org/'
|
|
197
|
+
},
|
|
198
|
+
'@type': 'Object',
|
|
199
|
+
name: 'I love cheese',
|
|
200
|
+
url: 'https://some.url'
|
|
201
|
+
}
|
|
202
|
+
},
|
|
165
203
|
actionSuccess: {
|
|
166
204
|
meta: {
|
|
167
205
|
visibility: 'public',
|
package/dist/cjs/version.json
CHANGED
|
@@ -32,7 +32,8 @@ var AuthorizeAction = function AuthorizeAction(onAuthorize, providerName) {
|
|
|
32
32
|
context: providerName
|
|
33
33
|
}
|
|
34
34
|
})) : /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.connect_link_account_card),
|
|
35
|
-
onClick: onAuthorize
|
|
35
|
+
onClick: onAuthorize,
|
|
36
|
+
testId: 'smart-action-connect-account'
|
|
36
37
|
};
|
|
37
38
|
};
|
|
38
39
|
|
|
@@ -25,7 +25,8 @@ var RetryAction = function RetryAction(onRetry) {
|
|
|
25
25
|
return {
|
|
26
26
|
name: _constants.ActionName.CustomAction,
|
|
27
27
|
onClick: onRetry,
|
|
28
|
-
content: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.try_again)
|
|
28
|
+
content: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.try_again),
|
|
29
|
+
testId: 'smart-action-try-again'
|
|
29
30
|
};
|
|
30
31
|
};
|
|
31
32
|
|
|
@@ -153,6 +153,7 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
153
153
|
url: url,
|
|
154
154
|
testId: testId,
|
|
155
155
|
onError: onError,
|
|
156
|
+
onResolve: onResolve,
|
|
156
157
|
renderers: renderers,
|
|
157
158
|
ui: ui,
|
|
158
159
|
analytics: analytics,
|
|
@@ -162,6 +163,12 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
162
163
|
switch (status) {
|
|
163
164
|
case 'pending':
|
|
164
165
|
case 'resolving':
|
|
166
|
+
return (0, _react.jsx)("div", {
|
|
167
|
+
css: flexibleBlockCardElevationStyle
|
|
168
|
+
}, (0, _react.jsx)(_FlexibleResolvedView.default, (0, _extends2.default)({}, flexibleProps, {
|
|
169
|
+
testId: 'smart-block-resolving-view'
|
|
170
|
+
})));
|
|
171
|
+
|
|
165
172
|
case 'resolved':
|
|
166
173
|
return (0, _react.jsx)("div", {
|
|
167
174
|
css: flexibleBlockCardElevationStyle
|
|
@@ -190,6 +197,23 @@ var BlockCard = function BlockCard(_ref) {
|
|
|
190
197
|
|
|
191
198
|
case 'fallback':
|
|
192
199
|
case 'errored':
|
|
200
|
+
default:
|
|
201
|
+
if (onError) {
|
|
202
|
+
onError({
|
|
203
|
+
url: url,
|
|
204
|
+
status: status
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (authFlow && authFlow === 'disabled') {
|
|
209
|
+
return (0, _react.jsx)(_LinkView.CardLinkView, {
|
|
210
|
+
link: url,
|
|
211
|
+
isSelected: isSelected,
|
|
212
|
+
onClick: handleFrameClick,
|
|
213
|
+
testId: "".concat(testId, "-").concat(status)
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
193
217
|
return (0, _react.jsx)("div", {
|
|
194
218
|
css: flexibleBlockCardElevationStyle
|
|
195
219
|
}, (0, _react.jsx)(_FlexibleErroredView.default, (0, _extends2.default)({}, flexibleProps, {
|
|
@@ -37,6 +37,7 @@ var FlexibleResolvedView = function FlexibleResolvedView(_ref) {
|
|
|
37
37
|
cardState = _ref.cardState,
|
|
38
38
|
onClick = _ref.onClick,
|
|
39
39
|
onError = _ref.onError,
|
|
40
|
+
onResolve = _ref.onResolve,
|
|
40
41
|
_ref$testId = _ref.testId,
|
|
41
42
|
testId = _ref$testId === void 0 ? 'smart-block-resolved-view' : _ref$testId,
|
|
42
43
|
ui = _ref.ui,
|
|
@@ -63,6 +64,7 @@ var FlexibleResolvedView = function FlexibleResolvedView(_ref) {
|
|
|
63
64
|
cardState: cardState,
|
|
64
65
|
onClick: onClick,
|
|
65
66
|
onError: onError,
|
|
67
|
+
onResolve: onResolve,
|
|
66
68
|
testId: testId,
|
|
67
69
|
ui: ui,
|
|
68
70
|
url: url
|
|
@@ -98,7 +100,7 @@ var FlexibleResolvedView = function FlexibleResolvedView(_ref) {
|
|
|
98
100
|
name: _constants.ElementName.DueOn
|
|
99
101
|
}],
|
|
100
102
|
maxLines: 1
|
|
101
|
-
}), /*#__PURE__*/_react.default.createElement(_blocks.
|
|
103
|
+
}), /*#__PURE__*/_react.default.createElement(_blocks.SnippetBlock, null), !isPreviewBlockErrored ? /*#__PURE__*/_react.default.createElement(_blocks.PreviewBlock, {
|
|
102
104
|
placement: _constants.MediaPlacement.Right,
|
|
103
105
|
ignoreContainerPadding: true,
|
|
104
106
|
onError: function onError() {
|
|
@@ -79,12 +79,6 @@ function CardWithUrlContent(_ref) {
|
|
|
79
79
|
var isFlexibleUi = (0, _react.useMemo)(function () {
|
|
80
80
|
return (0, _flexible.isFlexibleUiCard)(children);
|
|
81
81
|
}, [children]);
|
|
82
|
-
var showHoverPreviewFlag = (0, _linkProvider.useFeatureFlag)('showHoverPreview');
|
|
83
|
-
|
|
84
|
-
if (showHoverPreview === undefined && showHoverPreviewFlag !== undefined) {
|
|
85
|
-
showHoverPreview = Boolean(showHoverPreviewFlag);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
82
|
var showAuthTooltipValue = (0, _linkProvider.useFeatureFlag)('showAuthTooltip');
|
|
89
83
|
var showAuthTooltip = !!showAuthTooltipValue && showAuthTooltipValue === 'experiment';
|
|
90
84
|
var enableFlexibleBlockCardFlag = Boolean((0, _linkProvider.useFeatureFlag)('enableFlexibleBlockCard')); // Setup UI handlers.
|
|
@@ -174,6 +168,7 @@ function CardWithUrlContent(_ref) {
|
|
|
174
168
|
onClick: handleClickWrapper,
|
|
175
169
|
renderers: renderers,
|
|
176
170
|
ui: ui,
|
|
171
|
+
showHoverPreview: showHoverPreview,
|
|
177
172
|
url: url,
|
|
178
173
|
testId: testId,
|
|
179
174
|
onResolve: onResolve,
|
|
@@ -61,14 +61,9 @@ var ActionButton = function ActionButton(_ref) {
|
|
|
61
61
|
handler();
|
|
62
62
|
};
|
|
63
63
|
}, []);
|
|
64
|
-
var onContainerClick = (0, _react.useCallback)(function (e) {
|
|
65
|
-
// Stop button on click event from propagate into parent container.
|
|
66
|
-
e.stopPropagation();
|
|
67
|
-
}, []);
|
|
68
64
|
return (0, _react2.jsx)("div", {
|
|
69
65
|
css: [getButtonStyle(size, iconOnly), overrideCss],
|
|
70
|
-
"data-testid": "".concat(testId, "-button-wrapper")
|
|
71
|
-
onClick: onContainerClick
|
|
66
|
+
"data-testid": "".concat(testId, "-button-wrapper")
|
|
72
67
|
}, (0, _react2.jsx)(_tooltip.default, {
|
|
73
68
|
content: tooltipMessage,
|
|
74
69
|
hideTooltipOnClick: true,
|
|
@@ -68,12 +68,8 @@ var ActionGroup = function ActionGroup(_ref) {
|
|
|
68
68
|
var _useState = (0, _react.useState)(false),
|
|
69
69
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
70
70
|
isOpen = _useState2[0],
|
|
71
|
-
setIsOpen = _useState2[1];
|
|
71
|
+
setIsOpen = _useState2[1];
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
var onClick = (0, _react.useCallback)(function (e) {
|
|
75
|
-
return e.stopPropagation();
|
|
76
|
-
}, []);
|
|
77
73
|
var onOpenChange = (0, _react.useCallback)(function (attrs) {
|
|
78
74
|
setIsOpen(attrs.isOpen);
|
|
79
75
|
|
|
@@ -106,8 +102,7 @@ var ActionGroup = function ActionGroup(_ref) {
|
|
|
106
102
|
var buttonGroupElement = (0, _utils.renderActionItems)(buttonActions, size, appearance, false, onActionClick);
|
|
107
103
|
return (0, _react2.jsx)("div", {
|
|
108
104
|
css: styles,
|
|
109
|
-
className: "actions-button-group"
|
|
110
|
-
onClick: onClick
|
|
105
|
+
className: "actions-button-group"
|
|
111
106
|
}, (0, _react2.jsx)(_buttonGroup.default, null, buttonGroupElement, dropdownItemActions.length > 0 && dropdownMenuElement && dropdownMenuElement.length > 0 ? (0, _react2.jsx)(_dropdownMenu.default, {
|
|
112
107
|
isOpen: isOpen,
|
|
113
108
|
onOpenChange: onOpenChange,
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
@@ -11,7 +13,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
11
13
|
|
|
12
14
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
13
15
|
|
|
14
|
-
var _react =
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
17
|
|
|
16
18
|
var _react2 = require("@emotion/react");
|
|
17
19
|
|
|
@@ -27,6 +29,10 @@ var _actionGroup = _interopRequireDefault(require("../action-group"));
|
|
|
27
29
|
|
|
28
30
|
var _templateObject;
|
|
29
31
|
|
|
32
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
|
+
|
|
34
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
35
|
+
|
|
30
36
|
var getActionGroupStyles = function getActionGroupStyles(size) {
|
|
31
37
|
if (size === _constants.SmartLinkSize.XLarge) {
|
|
32
38
|
// The biggest height of the action button exceeds the max line-height
|
|
@@ -50,7 +56,15 @@ var FooterBlock = function FooterBlock(props) {
|
|
|
50
56
|
_props$size = props.size,
|
|
51
57
|
size = _props$size === void 0 ? _constants.SmartLinkSize.Medium : _props$size,
|
|
52
58
|
_props$testId = props.testId,
|
|
53
|
-
testId = _props$testId === void 0 ? 'smart-footer-block' : _props$testId
|
|
59
|
+
testId = _props$testId === void 0 ? 'smart-footer-block' : _props$testId,
|
|
60
|
+
onActionMenuOpenChange = props.onActionMenuOpenChange;
|
|
61
|
+
var onDropdownOpenChange = (0, _react.useCallback)(function (isOpen) {
|
|
62
|
+
if (onActionMenuOpenChange) {
|
|
63
|
+
onActionMenuOpenChange({
|
|
64
|
+
isOpen: isOpen
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}, [onActionMenuOpenChange]);
|
|
54
68
|
|
|
55
69
|
if (status !== _constants.SmartLinkStatus.Resolved) {
|
|
56
70
|
return null;
|
|
@@ -67,6 +81,7 @@ var FooterBlock = function FooterBlock(props) {
|
|
|
67
81
|
overrideCss: getActionGroupStyles(size),
|
|
68
82
|
width: _constants.SmartLinkWidth.Flexible
|
|
69
83
|
}, /*#__PURE__*/_react.default.createElement(_actionGroup.default, {
|
|
84
|
+
onDropdownOpenChange: onDropdownOpenChange,
|
|
70
85
|
items: actions,
|
|
71
86
|
appearance: "default"
|
|
72
87
|
})) : null);
|
|
@@ -9,6 +9,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
});
|
|
10
10
|
exports.getContainerStyles = exports.default = void 0;
|
|
11
11
|
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
12
14
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
13
15
|
|
|
14
16
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -25,6 +27,8 @@ var _flexibleUiContext = require("../../../../state/flexible-ui-context");
|
|
|
25
27
|
|
|
26
28
|
var _layeredLink = _interopRequireDefault(require("./layered-link"));
|
|
27
29
|
|
|
30
|
+
var _HoverCard = require("../../../HoverCard");
|
|
31
|
+
|
|
28
32
|
var _utils = require("../../../../state/flexible-ui-context/utils");
|
|
29
33
|
|
|
30
34
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4;
|
|
@@ -110,7 +114,7 @@ var getContainerStyles = function getContainerStyles(size, hideBackground, hideE
|
|
|
110
114
|
|
|
111
115
|
exports.getContainerStyles = getContainerStyles;
|
|
112
116
|
|
|
113
|
-
var renderChildren = function renderChildren(children, containerSize, containerTheme, status, retry, onClick) {
|
|
117
|
+
var renderChildren = function renderChildren(children, containerSize, containerTheme, status, retry, onClick, onActionMenuOpenChange) {
|
|
114
118
|
return _react.default.Children.map(children, function (child) {
|
|
115
119
|
if ( /*#__PURE__*/_react.default.isValidElement(child) && (0, _flexible.isFlexibleUiBlock)(child)) {
|
|
116
120
|
var blockSize = child.props.size;
|
|
@@ -124,6 +128,12 @@ var renderChildren = function renderChildren(children, containerSize, containerT
|
|
|
124
128
|
status: status,
|
|
125
129
|
theme: containerTheme
|
|
126
130
|
});
|
|
131
|
+
} else if (onActionMenuOpenChange && (0, _flexible.isFlexibleUiFooterBlock)(child)) {
|
|
132
|
+
return /*#__PURE__*/_react.default.cloneElement(child, {
|
|
133
|
+
size: size,
|
|
134
|
+
status: status,
|
|
135
|
+
onActionMenuOpenChange: onActionMenuOpenChange
|
|
136
|
+
});
|
|
127
137
|
}
|
|
128
138
|
|
|
129
139
|
return /*#__PURE__*/_react.default.cloneElement(child, {
|
|
@@ -182,6 +192,8 @@ var Container = function Container(_ref3) {
|
|
|
182
192
|
hideElevation = _ref3$hideElevation === void 0 ? false : _ref3$hideElevation,
|
|
183
193
|
_ref3$hidePadding = _ref3.hidePadding,
|
|
184
194
|
hidePadding = _ref3$hidePadding === void 0 ? false : _ref3$hidePadding,
|
|
195
|
+
_ref3$showHoverPrevie = _ref3.showHoverPreview,
|
|
196
|
+
showHoverPreview = _ref3$showHoverPrevie === void 0 ? false : _ref3$showHoverPrevie,
|
|
185
197
|
onClick = _ref3.onClick,
|
|
186
198
|
retry = _ref3.retry,
|
|
187
199
|
_ref3$size = _ref3.size,
|
|
@@ -193,11 +205,30 @@ var Container = function Container(_ref3) {
|
|
|
193
205
|
theme = _ref3$theme === void 0 ? _constants.SmartLinkTheme.Link : _ref3$theme;
|
|
194
206
|
var context = (0, _react.useContext)(_flexibleUiContext.FlexibleUiContext);
|
|
195
207
|
var childrenOptions = getChildrenOptions(children, context);
|
|
196
|
-
|
|
208
|
+
|
|
209
|
+
var _useState = (0, _react.useState)(true),
|
|
210
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
211
|
+
hoverCardCanOpen = _useState2[0],
|
|
212
|
+
setHoverCardCanOpen = _useState2[1];
|
|
213
|
+
|
|
214
|
+
var onActionMenuOpenChange = (0, _react.useCallback)(function (options) {
|
|
215
|
+
return setHoverCardCanOpen(!options.isOpen);
|
|
216
|
+
}, []);
|
|
217
|
+
var containerContent = (0, _react2.jsx)("div", {
|
|
197
218
|
css: getContainerStyles(size, hideBackground, hideElevation, hidePadding, clickableContainer, childrenOptions),
|
|
198
219
|
"data-smart-link-container": true,
|
|
199
220
|
"data-testid": testId
|
|
200
|
-
}, clickableContainer ? getLayeredLink(testId, context, children, onClick) : null, renderChildren(children, size, theme, status, retry, onClick));
|
|
221
|
+
}, clickableContainer ? getLayeredLink(testId, context, children, onClick) : null, renderChildren(children, size, theme, status, retry, onClick, showHoverPreview ? onActionMenuOpenChange : undefined));
|
|
222
|
+
|
|
223
|
+
if (showHoverPreview && context !== null && context !== void 0 && context.url) {
|
|
224
|
+
return (0, _react2.jsx)(_HoverCard.HoverCard, {
|
|
225
|
+
url: context === null || context === void 0 ? void 0 : context.url,
|
|
226
|
+
canOpen: hoverCardCanOpen,
|
|
227
|
+
closeOnChildClick: true
|
|
228
|
+
}, containerContent);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
return containerContent;
|
|
201
232
|
};
|
|
202
233
|
|
|
203
234
|
var _default = Container;
|
|
@@ -42,7 +42,8 @@ var FlexibleCard = function FlexibleCard(_ref) {
|
|
|
42
42
|
url = _ref.url,
|
|
43
43
|
onClick = _ref.onClick,
|
|
44
44
|
testId = _ref.testId,
|
|
45
|
-
analytics = _ref.analytics
|
|
45
|
+
analytics = _ref.analytics,
|
|
46
|
+
showHoverPreview = _ref.showHoverPreview;
|
|
46
47
|
var cardType = cardState.status,
|
|
47
48
|
details = cardState.details;
|
|
48
49
|
var status = cardType;
|
|
@@ -86,6 +87,7 @@ var FlexibleCard = function FlexibleCard(_ref) {
|
|
|
86
87
|
}, /*#__PURE__*/_react.default.createElement(_container.default, (0, _extends2.default)({
|
|
87
88
|
testId: testId
|
|
88
89
|
}, ui, {
|
|
90
|
+
showHoverPreview: showHoverPreview,
|
|
89
91
|
onClick: onClick,
|
|
90
92
|
retry: retry,
|
|
91
93
|
status: status
|
|
@@ -40,7 +40,11 @@ var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
40
40
|
var children = _ref.children,
|
|
41
41
|
url = _ref.url,
|
|
42
42
|
analyticsHandler = _ref.analyticsHandler,
|
|
43
|
-
analytics = _ref.analytics
|
|
43
|
+
analytics = _ref.analytics,
|
|
44
|
+
_ref$canOpen = _ref.canOpen,
|
|
45
|
+
canOpen = _ref$canOpen === void 0 ? true : _ref$canOpen,
|
|
46
|
+
_ref$closeOnChildClic = _ref.closeOnChildClick,
|
|
47
|
+
closeOnChildClick = _ref$closeOnChildClic === void 0 ? false : _ref$closeOnChildClic;
|
|
44
48
|
var delay = 300;
|
|
45
49
|
|
|
46
50
|
var _React$useState = _react2.default.useState(false),
|
|
@@ -134,9 +138,16 @@ var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
134
138
|
}
|
|
135
139
|
}, [hideCard]); // Stop hover preview content to propagate event to parent.
|
|
136
140
|
|
|
141
|
+
var onChildClick = (0, _react2.useCallback)(function (e) {
|
|
142
|
+
e.stopPropagation();
|
|
143
|
+
|
|
144
|
+
if (closeOnChildClick) {
|
|
145
|
+
hideCard();
|
|
146
|
+
}
|
|
147
|
+
}, [closeOnChildClick, hideCard]);
|
|
137
148
|
return (0, _react.jsx)(_popup.default, {
|
|
138
149
|
testId: "hover-card",
|
|
139
|
-
isOpen: isOpen,
|
|
150
|
+
isOpen: isOpen && canOpen,
|
|
140
151
|
onClose: hideCard,
|
|
141
152
|
placement: "bottom-start",
|
|
142
153
|
offset: popupOffset.current,
|
|
@@ -161,7 +172,8 @@ var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
161
172
|
}, (0, _react.jsx)("span", (0, _extends2.default)({}, triggerProps, {
|
|
162
173
|
onMouseEnter: initShowCard,
|
|
163
174
|
onMouseLeave: initHideCard,
|
|
164
|
-
onMouseMove: setMousePosition
|
|
175
|
+
onMouseMove: setMousePosition,
|
|
176
|
+
onClick: onChildClick
|
|
165
177
|
}), children));
|
|
166
178
|
},
|
|
167
179
|
zIndex: 511 // Temporary fix for Confluence inline comment on editor mod has z-index of 500, Jira issue view has z-index of 510
|
|
@@ -61,6 +61,8 @@ var _UnauthorisedView = require("./UnauthorisedView");
|
|
|
61
61
|
|
|
62
62
|
var _extractors = require("@atlaskit/linking-common/extractors");
|
|
63
63
|
|
|
64
|
+
var _linkProvider = require("@atlaskit/link-provider");
|
|
65
|
+
|
|
64
66
|
var InlineCard = function InlineCard(_ref) {
|
|
65
67
|
var _details$meta;
|
|
66
68
|
|
|
@@ -81,6 +83,11 @@ var InlineCard = function InlineCard(_ref) {
|
|
|
81
83
|
details = cardState.details;
|
|
82
84
|
var cardDetails = details && details.data || (0, _jsonld.getEmptyJsonLd)();
|
|
83
85
|
var testIdWithStatus = testId ? "".concat(testId, "-").concat(status, "-view") : undefined;
|
|
86
|
+
var showHoverPreviewFlag = (0, _linkProvider.useFeatureFlag)('showHoverPreview');
|
|
87
|
+
|
|
88
|
+
if (showHoverPreview === undefined && showHoverPreviewFlag !== undefined) {
|
|
89
|
+
showHoverPreview = Boolean(showHoverPreviewFlag);
|
|
90
|
+
}
|
|
84
91
|
|
|
85
92
|
switch (status) {
|
|
86
93
|
case 'pending':
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import * as Blocks from '../view/FlexibleCard/components/blocks';
|
|
3
|
-
import { PreviewBlock, TitleBlock } from '../view/FlexibleCard/components/blocks';
|
|
3
|
+
import { PreviewBlock, TitleBlock, FooterBlock } from '../view/FlexibleCard/components/blocks';
|
|
4
4
|
import * as Elements from '../view/FlexibleCard/components/elements';
|
|
5
5
|
export const isFlexibleUiCard = children => {
|
|
6
6
|
if (children && React.Children.toArray(children).some(child => isFlexibleUiTitleBlock(child))) {
|
|
@@ -12,4 +12,5 @@ export const isFlexibleUiCard = children => {
|
|
|
12
12
|
export const isFlexibleUiBlock = node => /*#__PURE__*/React.isValidElement(node) && Object.values(Blocks).some(type => type === node.type);
|
|
13
13
|
export const isFlexibleUiElement = node => /*#__PURE__*/React.isValidElement(node) && Object.values(Elements).some(type => type === node.type);
|
|
14
14
|
export const isFlexibleUiTitleBlock = node => /*#__PURE__*/React.isValidElement(node) && node.type === TitleBlock;
|
|
15
|
-
export const isFlexibleUiPreviewBlock = node => /*#__PURE__*/React.isValidElement(node) && node.type === PreviewBlock;
|
|
15
|
+
export const isFlexibleUiPreviewBlock = node => /*#__PURE__*/React.isValidElement(node) && node.type === PreviewBlock;
|
|
16
|
+
export const isFlexibleUiFooterBlock = node => /*#__PURE__*/React.isValidElement(node) && node.type === FooterBlock;
|
|
@@ -107,6 +107,25 @@ export const mocks = {
|
|
|
107
107
|
url: 'https://some.url'
|
|
108
108
|
}
|
|
109
109
|
},
|
|
110
|
+
forbiddenWithNoAuth: {
|
|
111
|
+
meta: {
|
|
112
|
+
visibility: 'restricted',
|
|
113
|
+
access: 'forbidden',
|
|
114
|
+
auth: [],
|
|
115
|
+
definitionId: 'd1',
|
|
116
|
+
key: 'object-provider'
|
|
117
|
+
},
|
|
118
|
+
data: {
|
|
119
|
+
'@context': {
|
|
120
|
+
'@vocab': 'https://www.w3.org/ns/activitystreams#',
|
|
121
|
+
atlassian: 'https://schema.atlassian.com/ns/vocabulary#',
|
|
122
|
+
schema: 'http://schema.org/'
|
|
123
|
+
},
|
|
124
|
+
'@type': 'Object',
|
|
125
|
+
name: 'I love cheese',
|
|
126
|
+
url: 'https://some.url'
|
|
127
|
+
}
|
|
128
|
+
},
|
|
110
129
|
unauthorized: {
|
|
111
130
|
meta: {
|
|
112
131
|
visibility: 'restricted',
|
|
@@ -130,6 +149,25 @@ export const mocks = {
|
|
|
130
149
|
url: 'https://some.url'
|
|
131
150
|
}
|
|
132
151
|
},
|
|
152
|
+
unauthorizedWithNoAuth: {
|
|
153
|
+
meta: {
|
|
154
|
+
visibility: 'restricted',
|
|
155
|
+
access: 'unauthorized',
|
|
156
|
+
auth: [],
|
|
157
|
+
definitionId: 'd1',
|
|
158
|
+
key: 'object-provider'
|
|
159
|
+
},
|
|
160
|
+
data: {
|
|
161
|
+
'@context': {
|
|
162
|
+
'@vocab': 'https://www.w3.org/ns/activitystreams#',
|
|
163
|
+
atlassian: 'https://schema.atlassian.com/ns/vocabulary#',
|
|
164
|
+
schema: 'http://schema.org/'
|
|
165
|
+
},
|
|
166
|
+
'@type': 'Object',
|
|
167
|
+
name: 'I love cheese',
|
|
168
|
+
url: 'https://some.url'
|
|
169
|
+
}
|
|
170
|
+
},
|
|
133
171
|
actionSuccess: {
|
|
134
172
|
meta: {
|
|
135
173
|
visibility: 'public',
|
package/dist/es2019/version.json
CHANGED
|
@@ -18,5 +18,6 @@ export const AuthorizeAction = (onAuthorize, providerName) => ({
|
|
|
18
18
|
context: providerName
|
|
19
19
|
}
|
|
20
20
|
})) : /*#__PURE__*/React.createElement(FormattedMessage, messages.connect_link_account_card),
|
|
21
|
-
onClick: onAuthorize
|
|
21
|
+
onClick: onAuthorize,
|
|
22
|
+
testId: 'smart-action-connect-account'
|
|
22
23
|
});
|
|
@@ -12,5 +12,6 @@ import { messages } from '../../../../messages';
|
|
|
12
12
|
export const RetryAction = onRetry => ({
|
|
13
13
|
name: ActionName.CustomAction,
|
|
14
14
|
onClick: onRetry,
|
|
15
|
-
content: /*#__PURE__*/React.createElement(FormattedMessage, messages.try_again)
|
|
15
|
+
content: /*#__PURE__*/React.createElement(FormattedMessage, messages.try_again),
|
|
16
|
+
testId: 'smart-action-try-again'
|
|
16
17
|
});
|
|
@@ -73,6 +73,7 @@ export const BlockCard = ({
|
|
|
73
73
|
url,
|
|
74
74
|
testId,
|
|
75
75
|
onError,
|
|
76
|
+
onResolve,
|
|
76
77
|
renderers,
|
|
77
78
|
ui,
|
|
78
79
|
analytics,
|
|
@@ -82,6 +83,12 @@ export const BlockCard = ({
|
|
|
82
83
|
switch (status) {
|
|
83
84
|
case 'pending':
|
|
84
85
|
case 'resolving':
|
|
86
|
+
return jsx("div", {
|
|
87
|
+
css: flexibleBlockCardElevationStyle
|
|
88
|
+
}, jsx(FlexibleResolvedView, _extends({}, flexibleProps, {
|
|
89
|
+
testId: 'smart-block-resolving-view'
|
|
90
|
+
})));
|
|
91
|
+
|
|
85
92
|
case 'resolved':
|
|
86
93
|
return jsx("div", {
|
|
87
94
|
css: flexibleBlockCardElevationStyle
|
|
@@ -110,6 +117,23 @@ export const BlockCard = ({
|
|
|
110
117
|
|
|
111
118
|
case 'fallback':
|
|
112
119
|
case 'errored':
|
|
120
|
+
default:
|
|
121
|
+
if (onError) {
|
|
122
|
+
onError({
|
|
123
|
+
url,
|
|
124
|
+
status
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (authFlow && authFlow === 'disabled') {
|
|
129
|
+
return jsx(CardLinkView, {
|
|
130
|
+
link: url,
|
|
131
|
+
isSelected: isSelected,
|
|
132
|
+
onClick: handleFrameClick,
|
|
133
|
+
testId: `${testId}-${status}`
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
113
137
|
return jsx("div", {
|
|
114
138
|
css: flexibleBlockCardElevationStyle
|
|
115
139
|
}, jsx(FlexibleErroredView, _extends({}, flexibleProps, {
|
|
@@ -15,6 +15,7 @@ const FlexibleResolvedView = ({
|
|
|
15
15
|
cardState,
|
|
16
16
|
onClick,
|
|
17
17
|
onError,
|
|
18
|
+
onResolve,
|
|
18
19
|
testId = 'smart-block-resolved-view',
|
|
19
20
|
ui,
|
|
20
21
|
url,
|
|
@@ -30,6 +31,7 @@ const FlexibleResolvedView = ({
|
|
|
30
31
|
cardState: cardState,
|
|
31
32
|
onClick: onClick,
|
|
32
33
|
onError: onError,
|
|
34
|
+
onResolve: onResolve,
|
|
33
35
|
testId: testId,
|
|
34
36
|
ui: ui,
|
|
35
37
|
url: url
|
|
@@ -65,7 +67,7 @@ const FlexibleResolvedView = ({
|
|
|
65
67
|
name: ElementName.DueOn
|
|
66
68
|
}],
|
|
67
69
|
maxLines: 1
|
|
68
|
-
}), /*#__PURE__*/React.createElement(
|
|
70
|
+
}), /*#__PURE__*/React.createElement(SnippetBlock, null), !isPreviewBlockErrored ? /*#__PURE__*/React.createElement(PreviewBlock, {
|
|
69
71
|
placement: MediaPlacement.Right,
|
|
70
72
|
ignoreContainerPadding: true,
|
|
71
73
|
onError: () => {
|