@atlaskit/smart-card 20.0.0 → 20.0.3
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 +20 -0
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/BlockCard/components/Provider.js +3 -2
- package/dist/cjs/view/FlexibleCard/components/blocks/action-group/index.js +9 -2
- package/dist/cjs/view/HoverCard/components/hover-card-content.js +15 -6
- package/dist/cjs/view/HoverCard/index.js +28 -13
- package/dist/cjs/view/common/Modal.js +2 -1
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/BlockCard/components/Provider.js +3 -2
- package/dist/es2019/view/FlexibleCard/components/blocks/action-group/index.js +6 -2
- package/dist/es2019/view/HoverCard/components/hover-card-content.js +16 -5
- package/dist/es2019/view/HoverCard/index.js +24 -13
- package/dist/es2019/view/common/Modal.js +1 -1
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/BlockCard/components/Provider.js +3 -2
- package/dist/esm/view/FlexibleCard/components/blocks/action-group/index.js +8 -2
- package/dist/esm/view/HoverCard/components/hover-card-content.js +15 -6
- package/dist/esm/view/HoverCard/index.js +25 -12
- package/dist/esm/view/common/Modal.js +2 -1
- package/dist/types/view/HoverCard/index.d.ts +1 -0
- package/dist/types/view/HoverCard/types.d.ts +1 -0
- package/package.json +3 -3
- package/report.api.md +864 -159
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @atlaskit/smart-card
|
|
2
2
|
|
|
3
|
+
## 20.0.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`4c2c26ca270`](https://bitbucket.org/atlassian/atlassian-frontend/commits/4c2c26ca270) - Fix regression in logos in BlockCard footers in preview mode cuased by the `appearance` prop.
|
|
8
|
+
- [`d4133fe0edc`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d4133fe0edc) - Fix regression in logos in BlockCard footers caused by inheriting ProseMirror styles after a change in @atlaskit/logo internals.
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
|
|
11
|
+
## 20.0.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [`12950ccea1b`](https://bitbucket.org/atlassian/atlassian-frontend/commits/12950ccea1b) - Hover Preview: Stop hover preview from propagating click event to parent element
|
|
16
|
+
|
|
17
|
+
## 20.0.1
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- [`3e4f8e1490a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/3e4f8e1490a) - Hover Preview: Fix Hover Preview shows on top of Preview modal
|
|
22
|
+
|
|
3
23
|
## 20.0.0
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/dist/cjs/version.json
CHANGED
|
@@ -33,11 +33,12 @@ var Provider = function Provider(_ref) {
|
|
|
33
33
|
return (0, _core.jsx)("div", {
|
|
34
34
|
css: {
|
|
35
35
|
display: 'flex',
|
|
36
|
-
alignItems: 'center'
|
|
36
|
+
alignItems: 'center',
|
|
37
|
+
fontSize: (0, _utils.gs)(1.5),
|
|
38
|
+
whiteSpace: 'normal'
|
|
37
39
|
}
|
|
38
40
|
}, iconToRender, (0, _core.jsx)("span", {
|
|
39
41
|
css: {
|
|
40
|
-
fontSize: (0, _utils.gs)(1.5),
|
|
41
42
|
color: (0, _tokens.token)('color.text.subtlest', _colors.N300),
|
|
42
43
|
margin: 0,
|
|
43
44
|
marginLeft: (0, _utils.gs)(0.5),
|
|
@@ -13,6 +13,8 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
|
|
|
13
13
|
|
|
14
14
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
15
15
|
|
|
16
|
+
var _react = require("react");
|
|
17
|
+
|
|
16
18
|
var _reactIntlNext = require("react-intl-next");
|
|
17
19
|
|
|
18
20
|
var _core = require("@emotion/core");
|
|
@@ -62,10 +64,15 @@ var ActionGroup = function ActionGroup(_ref) {
|
|
|
62
64
|
testId = _ref.testId;
|
|
63
65
|
var isMoreThenTwoItems = items.length > visibleButtonsNum;
|
|
64
66
|
var firstActions = isMoreThenTwoItems ? items.slice(0, visibleButtonsNum - 1) : items;
|
|
65
|
-
var restActions = isMoreThenTwoItems ? items.slice(visibleButtonsNum - 1) : [];
|
|
67
|
+
var restActions = isMoreThenTwoItems ? items.slice(visibleButtonsNum - 1) : []; // Stop AK dropdown menu to propagate event on click.
|
|
68
|
+
|
|
69
|
+
var onClick = (0, _react.useCallback)(function (e) {
|
|
70
|
+
return e.stopPropagation();
|
|
71
|
+
}, []);
|
|
66
72
|
return (0, _core.jsx)("div", {
|
|
67
73
|
css: styles,
|
|
68
|
-
className: "actions-button-group"
|
|
74
|
+
className: "actions-button-group",
|
|
75
|
+
onClick: onClick
|
|
69
76
|
}, (0, _core.jsx)(_buttonGroup.default, null, (0, _utils.renderActionItems)(firstActions, size, appearance), restActions.length > 0 ? (0, _core.jsx)(_dropdownMenu.default, {
|
|
70
77
|
onOpenChange: function onOpenChange(_ref2) {
|
|
71
78
|
var isOpen = _ref2.isOpen;
|
|
@@ -45,7 +45,7 @@ var flexibleUiOptions = {
|
|
|
45
45
|
hidePadding: true
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
var getOpenAction = function getOpenAction(url, analytics) {
|
|
48
|
+
var getOpenAction = function getOpenAction(url, analytics, onActionClick) {
|
|
49
49
|
return {
|
|
50
50
|
name: _constants.ActionName.CustomAction,
|
|
51
51
|
icon: /*#__PURE__*/_react.default.createElement(_shortcut.default, {
|
|
@@ -54,6 +54,10 @@ var getOpenAction = function getOpenAction(url, analytics) {
|
|
|
54
54
|
}),
|
|
55
55
|
iconPosition: 'before',
|
|
56
56
|
onClick: function onClick() {
|
|
57
|
+
if (onActionClick) {
|
|
58
|
+
onActionClick('open-content');
|
|
59
|
+
}
|
|
60
|
+
|
|
57
61
|
window.open(url, '_blank');
|
|
58
62
|
analytics.ui.hoverCardOpenLinkClickedEvent('card');
|
|
59
63
|
},
|
|
@@ -61,12 +65,16 @@ var getOpenAction = function getOpenAction(url, analytics) {
|
|
|
61
65
|
};
|
|
62
66
|
};
|
|
63
67
|
|
|
64
|
-
var toFooterActions = function toFooterActions(cardActions) {
|
|
68
|
+
var toFooterActions = function toFooterActions(cardActions, onActionClick) {
|
|
65
69
|
return cardActions.map(function (action) {
|
|
66
70
|
return {
|
|
67
71
|
content: action.text,
|
|
68
72
|
name: _constants.ActionName.CustomAction,
|
|
69
73
|
onClick: function onClick() {
|
|
74
|
+
if (onActionClick) {
|
|
75
|
+
onActionClick(action.id);
|
|
76
|
+
}
|
|
77
|
+
|
|
70
78
|
return action.invoke();
|
|
71
79
|
},
|
|
72
80
|
testId: action.id
|
|
@@ -81,6 +89,7 @@ var HoverCardContent = function HoverCardContent(_ref) {
|
|
|
81
89
|
_ref$cardActions = _ref.cardActions,
|
|
82
90
|
cardActions = _ref$cardActions === void 0 ? [] : _ref$cardActions,
|
|
83
91
|
cardState = _ref.cardState,
|
|
92
|
+
onActionClick = _ref.onActionClick,
|
|
84
93
|
onResolve = _ref.onResolve,
|
|
85
94
|
renderers = _ref.renderers,
|
|
86
95
|
url = _ref.url;
|
|
@@ -97,11 +106,11 @@ var HoverCardContent = function HoverCardContent(_ref) {
|
|
|
97
106
|
analytics.ui.cardClickedEvent(undefined, _utils.HOVER_CARD_ANALYTICS_DISPLAY, cardState.status, undefined, undefined, isModifierKeyPressed, undefined, undefined, undefined, 'titleGoToLink');
|
|
98
107
|
}, [cardState.status, analytics.ui]);
|
|
99
108
|
var titleActions = (0, _react.useMemo)(function () {
|
|
100
|
-
return [getOpenAction(url, analytics)];
|
|
101
|
-
}, [url, analytics]);
|
|
109
|
+
return [getOpenAction(url, analytics, onActionClick)];
|
|
110
|
+
}, [url, analytics, onActionClick]);
|
|
102
111
|
var footerActions = (0, _react.useMemo)(function () {
|
|
103
|
-
return toFooterActions(cardActions);
|
|
104
|
-
}, [cardActions]);
|
|
112
|
+
return toFooterActions(cardActions, onActionClick);
|
|
113
|
+
}, [cardActions, onActionClick]);
|
|
105
114
|
var data = (_cardState$details = cardState.details) === null || _cardState$details === void 0 ? void 0 : _cardState$details.data;
|
|
106
115
|
var types = data ? (0, _extractors.extractType)(data) : undefined; //TODO: EDM-3224 deleted simulated and use real JsonLd
|
|
107
116
|
|
|
@@ -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.HoverCardComponent = exports.HoverCard = void 0;
|
|
10
|
+
exports.hoverCardClassName = exports.HoverCardComponent = exports.HoverCard = void 0;
|
|
11
11
|
|
|
12
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
13
|
|
|
@@ -42,6 +42,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
42
42
|
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; }
|
|
43
43
|
|
|
44
44
|
/** @jsx jsx */
|
|
45
|
+
var hoverCardClassName = 'smart-links-hover-preview';
|
|
46
|
+
exports.hoverCardClassName = hoverCardClassName;
|
|
47
|
+
|
|
45
48
|
var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
46
49
|
var children = _ref.children,
|
|
47
50
|
id = _ref.id,
|
|
@@ -63,21 +66,24 @@ var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
63
66
|
var renderers = (0, _renderers.useSmartLinkRenderers)();
|
|
64
67
|
var linkState = (0, _store.useSmartCardState)(url);
|
|
65
68
|
var analytics = (0, _analytics2.useSmartLinkAnalytics)(url, analyticsHandler, id);
|
|
69
|
+
var hideCard = (0, _react.useCallback)(function () {
|
|
70
|
+
//Check its previously open to avoid firing events when moving between the child and hover card components
|
|
71
|
+
if (isOpen === true && cardOpenTime.current) {
|
|
72
|
+
var hoverTime = Date.now() - cardOpenTime.current;
|
|
73
|
+
analytics.ui.hoverCardDismissedEvent('card', hoverTime, 'mouse_hover');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
setIsOpen(false);
|
|
77
|
+
}, [analytics.ui, isOpen]);
|
|
66
78
|
var initHideCard = (0, _react.useCallback)(function () {
|
|
67
79
|
if (fadeInTimeoutId.current) {
|
|
68
80
|
clearTimeout(fadeInTimeoutId.current);
|
|
69
81
|
}
|
|
70
82
|
|
|
71
83
|
fadeOutTimeoutId.current = setTimeout(function () {
|
|
72
|
-
|
|
73
|
-
if (isOpen === true && cardOpenTime.current) {
|
|
74
|
-
var hoverTime = Date.now() - cardOpenTime.current;
|
|
75
|
-
analytics.ui.hoverCardDismissedEvent('card', hoverTime, 'mouse_hover');
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
setIsOpen(false);
|
|
84
|
+
return hideCard();
|
|
79
85
|
}, delay);
|
|
80
|
-
}, [
|
|
86
|
+
}, [hideCard]);
|
|
81
87
|
var initShowCard = (0, _react.useCallback)(function () {
|
|
82
88
|
if (fadeOutTimeoutId.current) {
|
|
83
89
|
clearTimeout(fadeOutTimeoutId.current);
|
|
@@ -98,24 +104,33 @@ var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
98
104
|
appearance: _utils.HOVER_CARD_ANALYTICS_DISPLAY,
|
|
99
105
|
analyticsHandler: analyticsHandler
|
|
100
106
|
});
|
|
101
|
-
var
|
|
102
|
-
|
|
107
|
+
var onActionClick = (0, _react.useCallback)(function (actionId) {
|
|
108
|
+
if (actionId === 'preview-content') {
|
|
109
|
+
hideCard();
|
|
110
|
+
}
|
|
111
|
+
}, [hideCard]); // Stop hover preview content to propagate event to parent.
|
|
112
|
+
|
|
113
|
+
var onClick = (0, _react.useCallback)(function (e) {
|
|
114
|
+
return e.stopPropagation();
|
|
103
115
|
}, []);
|
|
104
116
|
return (0, _core.jsx)(_popup.default, {
|
|
105
117
|
testId: "hover-card",
|
|
106
118
|
isOpen: isOpen,
|
|
107
|
-
onClose:
|
|
119
|
+
onClose: hideCard,
|
|
108
120
|
placement: "bottom-start",
|
|
109
121
|
content: function content(_ref2) {
|
|
110
122
|
var update = _ref2.update;
|
|
111
123
|
return (0, _core.jsx)("div", {
|
|
112
124
|
onMouseEnter: initShowCard,
|
|
113
125
|
onMouseLeave: initHideCard,
|
|
114
|
-
|
|
126
|
+
className: hoverCardClassName,
|
|
127
|
+
css: _styled.HoverCardContainer,
|
|
128
|
+
onClick: onClick
|
|
115
129
|
}, (0, _core.jsx)(_hoverCardContent.default, {
|
|
116
130
|
analytics: analytics,
|
|
117
131
|
cardActions: linkActions,
|
|
118
132
|
cardState: linkState,
|
|
133
|
+
onActionClick: onActionClick,
|
|
119
134
|
onResolve: update,
|
|
120
135
|
renderers: renderers,
|
|
121
136
|
url: url
|
|
@@ -72,7 +72,8 @@ var Modal = function Modal(_ref) {
|
|
|
72
72
|
var onClose = _ref.onClose,
|
|
73
73
|
onOpen = _ref.onOpen,
|
|
74
74
|
src = _ref.src,
|
|
75
|
-
testId = _ref.testId,
|
|
75
|
+
_ref$testId = _ref.testId,
|
|
76
|
+
testId = _ref$testId === void 0 ? 'smart-links-preview-modal' : _ref$testId,
|
|
76
77
|
showModal = _ref.showModal,
|
|
77
78
|
providerName = _ref.providerName,
|
|
78
79
|
metadata = _ref.metadata,
|
package/dist/es2019/version.json
CHANGED
|
@@ -23,11 +23,12 @@ export const Provider = ({
|
|
|
23
23
|
return jsx("div", {
|
|
24
24
|
css: {
|
|
25
25
|
display: 'flex',
|
|
26
|
-
alignItems: 'center'
|
|
26
|
+
alignItems: 'center',
|
|
27
|
+
fontSize: gs(1.5),
|
|
28
|
+
whiteSpace: 'normal'
|
|
27
29
|
}
|
|
28
30
|
}, iconToRender, jsx("span", {
|
|
29
31
|
css: {
|
|
30
|
-
fontSize: gs(1.5),
|
|
31
32
|
color: token('color.text.subtlest', N300),
|
|
32
33
|
margin: 0,
|
|
33
34
|
marginLeft: gs(0.5),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
|
|
3
3
|
/** @jsx jsx */
|
|
4
|
+
import { useCallback } from 'react';
|
|
4
5
|
import { FormattedMessage } from 'react-intl-next';
|
|
5
6
|
import { css, jsx } from '@emotion/core';
|
|
6
7
|
import ButtonGroup from '@atlaskit/button/button-group';
|
|
@@ -47,10 +48,13 @@ const ActionGroup = ({
|
|
|
47
48
|
}) => {
|
|
48
49
|
const isMoreThenTwoItems = items.length > visibleButtonsNum;
|
|
49
50
|
const firstActions = isMoreThenTwoItems ? items.slice(0, visibleButtonsNum - 1) : items;
|
|
50
|
-
const restActions = isMoreThenTwoItems ? items.slice(visibleButtonsNum - 1) : [];
|
|
51
|
+
const restActions = isMoreThenTwoItems ? items.slice(visibleButtonsNum - 1) : []; // Stop AK dropdown menu to propagate event on click.
|
|
52
|
+
|
|
53
|
+
const onClick = useCallback(e => e.stopPropagation(), []);
|
|
51
54
|
return jsx("div", {
|
|
52
55
|
css: styles,
|
|
53
|
-
className: "actions-button-group"
|
|
56
|
+
className: "actions-button-group",
|
|
57
|
+
onClick: onClick
|
|
54
58
|
}, jsx(ButtonGroup, null, renderActionItems(firstActions, size, appearance), restActions.length > 0 ? jsx(DropdownMenu, {
|
|
55
59
|
onOpenChange: ({
|
|
56
60
|
isOpen
|
|
@@ -18,7 +18,7 @@ const flexibleUiOptions = {
|
|
|
18
18
|
hidePadding: true
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
const getOpenAction = (url, analytics) => ({
|
|
21
|
+
const getOpenAction = (url, analytics, onActionClick) => ({
|
|
22
22
|
name: ActionName.CustomAction,
|
|
23
23
|
icon: /*#__PURE__*/React.createElement(ShortcutIcon, {
|
|
24
24
|
label: "open in new tab",
|
|
@@ -26,16 +26,26 @@ const getOpenAction = (url, analytics) => ({
|
|
|
26
26
|
}),
|
|
27
27
|
iconPosition: 'before',
|
|
28
28
|
onClick: () => {
|
|
29
|
+
if (onActionClick) {
|
|
30
|
+
onActionClick('open-content');
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
window.open(url, '_blank');
|
|
30
34
|
analytics.ui.hoverCardOpenLinkClickedEvent('card');
|
|
31
35
|
},
|
|
32
36
|
testId: 'hover-card-open-button'
|
|
33
37
|
});
|
|
34
38
|
|
|
35
|
-
const toFooterActions = cardActions => cardActions.map(action => ({
|
|
39
|
+
const toFooterActions = (cardActions, onActionClick) => cardActions.map(action => ({
|
|
36
40
|
content: action.text,
|
|
37
41
|
name: ActionName.CustomAction,
|
|
38
|
-
onClick: () =>
|
|
42
|
+
onClick: () => {
|
|
43
|
+
if (onActionClick) {
|
|
44
|
+
onActionClick(action.id);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return action.invoke();
|
|
48
|
+
},
|
|
39
49
|
testId: action.id
|
|
40
50
|
}));
|
|
41
51
|
|
|
@@ -43,6 +53,7 @@ const HoverCardContent = ({
|
|
|
43
53
|
analytics,
|
|
44
54
|
cardActions = [],
|
|
45
55
|
cardState,
|
|
56
|
+
onActionClick,
|
|
46
57
|
onResolve,
|
|
47
58
|
renderers,
|
|
48
59
|
url
|
|
@@ -59,8 +70,8 @@ const HoverCardContent = ({
|
|
|
59
70
|
const isModifierKeyPressed = isSpecialEvent(event);
|
|
60
71
|
analytics.ui.cardClickedEvent(undefined, HOVER_CARD_ANALYTICS_DISPLAY, cardState.status, undefined, undefined, isModifierKeyPressed, undefined, undefined, undefined, 'titleGoToLink');
|
|
61
72
|
}, [cardState.status, analytics.ui]);
|
|
62
|
-
const titleActions = useMemo(() => [getOpenAction(url, analytics)], [url, analytics]);
|
|
63
|
-
const footerActions = useMemo(() => toFooterActions(cardActions), [cardActions]);
|
|
73
|
+
const titleActions = useMemo(() => [getOpenAction(url, analytics, onActionClick)], [url, analytics, onActionClick]);
|
|
74
|
+
const footerActions = useMemo(() => toFooterActions(cardActions, onActionClick), [cardActions, onActionClick]);
|
|
64
75
|
const data = (_cardState$details = cardState.details) === null || _cardState$details === void 0 ? void 0 : _cardState$details.data;
|
|
65
76
|
const types = data ? extractType(data) : undefined; //TODO: EDM-3224 deleted simulated and use real JsonLd
|
|
66
77
|
|
|
@@ -13,6 +13,7 @@ import { useSmartLinkAnalytics } from '../../state/analytics';
|
|
|
13
13
|
import { useSmartLinkRenderers } from '../../state/renderers';
|
|
14
14
|
import HoverCardContent from './components/hover-card-content';
|
|
15
15
|
import { HOVER_CARD_ANALYTICS_DISPLAY } from './utils';
|
|
16
|
+
export const hoverCardClassName = 'smart-links-hover-preview';
|
|
16
17
|
export const HoverCardComponent = ({
|
|
17
18
|
children,
|
|
18
19
|
id,
|
|
@@ -30,21 +31,22 @@ export const HoverCardComponent = ({
|
|
|
30
31
|
const renderers = useSmartLinkRenderers();
|
|
31
32
|
const linkState = useLinkState(url);
|
|
32
33
|
const analytics = useSmartLinkAnalytics(url, analyticsHandler, id);
|
|
34
|
+
const hideCard = useCallback(() => {
|
|
35
|
+
//Check its previously open to avoid firing events when moving between the child and hover card components
|
|
36
|
+
if (isOpen === true && cardOpenTime.current) {
|
|
37
|
+
const hoverTime = Date.now() - cardOpenTime.current;
|
|
38
|
+
analytics.ui.hoverCardDismissedEvent('card', hoverTime, 'mouse_hover');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
setIsOpen(false);
|
|
42
|
+
}, [analytics.ui, isOpen]);
|
|
33
43
|
const initHideCard = useCallback(() => {
|
|
34
44
|
if (fadeInTimeoutId.current) {
|
|
35
45
|
clearTimeout(fadeInTimeoutId.current);
|
|
36
46
|
}
|
|
37
47
|
|
|
38
|
-
fadeOutTimeoutId.current = setTimeout(() =>
|
|
39
|
-
|
|
40
|
-
if (isOpen === true && cardOpenTime.current) {
|
|
41
|
-
const hoverTime = Date.now() - cardOpenTime.current;
|
|
42
|
-
analytics.ui.hoverCardDismissedEvent('card', hoverTime, 'mouse_hover');
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
setIsOpen(false);
|
|
46
|
-
}, delay);
|
|
47
|
-
}, [delay, isOpen, analytics.ui]);
|
|
48
|
+
fadeOutTimeoutId.current = setTimeout(() => hideCard(), delay);
|
|
49
|
+
}, [hideCard]);
|
|
48
50
|
const initShowCard = useCallback(() => {
|
|
49
51
|
if (fadeOutTimeoutId.current) {
|
|
50
52
|
clearTimeout(fadeOutTimeoutId.current);
|
|
@@ -65,22 +67,31 @@ export const HoverCardComponent = ({
|
|
|
65
67
|
appearance: HOVER_CARD_ANALYTICS_DISPLAY,
|
|
66
68
|
analyticsHandler
|
|
67
69
|
});
|
|
68
|
-
const
|
|
70
|
+
const onActionClick = useCallback(actionId => {
|
|
71
|
+
if (actionId === 'preview-content') {
|
|
72
|
+
hideCard();
|
|
73
|
+
}
|
|
74
|
+
}, [hideCard]); // Stop hover preview content to propagate event to parent.
|
|
75
|
+
|
|
76
|
+
const onClick = useCallback(e => e.stopPropagation(), []);
|
|
69
77
|
return jsx(Popup, {
|
|
70
78
|
testId: "hover-card",
|
|
71
79
|
isOpen: isOpen,
|
|
72
|
-
onClose:
|
|
80
|
+
onClose: hideCard,
|
|
73
81
|
placement: "bottom-start",
|
|
74
82
|
content: ({
|
|
75
83
|
update
|
|
76
84
|
}) => jsx("div", {
|
|
77
85
|
onMouseEnter: initShowCard,
|
|
78
86
|
onMouseLeave: initHideCard,
|
|
79
|
-
|
|
87
|
+
className: hoverCardClassName,
|
|
88
|
+
css: HoverCardContainer,
|
|
89
|
+
onClick: onClick
|
|
80
90
|
}, jsx(HoverCardContent, {
|
|
81
91
|
analytics: analytics,
|
|
82
92
|
cardActions: linkActions,
|
|
83
93
|
cardState: linkState,
|
|
94
|
+
onActionClick: onActionClick,
|
|
84
95
|
onResolve: update,
|
|
85
96
|
renderers: renderers,
|
|
86
97
|
url: url
|
package/dist/esm/version.json
CHANGED
|
@@ -22,11 +22,12 @@ export var Provider = function Provider(_ref) {
|
|
|
22
22
|
return jsx("div", {
|
|
23
23
|
css: {
|
|
24
24
|
display: 'flex',
|
|
25
|
-
alignItems: 'center'
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
fontSize: gs(1.5),
|
|
27
|
+
whiteSpace: 'normal'
|
|
26
28
|
}
|
|
27
29
|
}, iconToRender, jsx("span", {
|
|
28
30
|
css: {
|
|
29
|
-
fontSize: gs(1.5),
|
|
30
31
|
color: token('color.text.subtlest', N300),
|
|
31
32
|
margin: 0,
|
|
32
33
|
marginLeft: gs(0.5),
|
|
@@ -6,6 +6,7 @@ var _excluded = ["triggerRef"];
|
|
|
6
6
|
var _templateObject;
|
|
7
7
|
|
|
8
8
|
/** @jsx jsx */
|
|
9
|
+
import { useCallback } from 'react';
|
|
9
10
|
import { FormattedMessage } from 'react-intl-next';
|
|
10
11
|
import { css, jsx } from '@emotion/core';
|
|
11
12
|
import ButtonGroup from '@atlaskit/button/button-group';
|
|
@@ -39,10 +40,15 @@ var ActionGroup = function ActionGroup(_ref) {
|
|
|
39
40
|
testId = _ref.testId;
|
|
40
41
|
var isMoreThenTwoItems = items.length > visibleButtonsNum;
|
|
41
42
|
var firstActions = isMoreThenTwoItems ? items.slice(0, visibleButtonsNum - 1) : items;
|
|
42
|
-
var restActions = isMoreThenTwoItems ? items.slice(visibleButtonsNum - 1) : [];
|
|
43
|
+
var restActions = isMoreThenTwoItems ? items.slice(visibleButtonsNum - 1) : []; // Stop AK dropdown menu to propagate event on click.
|
|
44
|
+
|
|
45
|
+
var onClick = useCallback(function (e) {
|
|
46
|
+
return e.stopPropagation();
|
|
47
|
+
}, []);
|
|
43
48
|
return jsx("div", {
|
|
44
49
|
css: styles,
|
|
45
|
-
className: "actions-button-group"
|
|
50
|
+
className: "actions-button-group",
|
|
51
|
+
onClick: onClick
|
|
46
52
|
}, jsx(ButtonGroup, null, renderActionItems(firstActions, size, appearance), restActions.length > 0 ? jsx(DropdownMenu, {
|
|
47
53
|
onOpenChange: function onOpenChange(_ref2) {
|
|
48
54
|
var isOpen = _ref2.isOpen;
|
|
@@ -18,7 +18,7 @@ var flexibleUiOptions = {
|
|
|
18
18
|
hidePadding: true
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
var getOpenAction = function getOpenAction(url, analytics) {
|
|
21
|
+
var getOpenAction = function getOpenAction(url, analytics, onActionClick) {
|
|
22
22
|
return {
|
|
23
23
|
name: ActionName.CustomAction,
|
|
24
24
|
icon: /*#__PURE__*/React.createElement(ShortcutIcon, {
|
|
@@ -27,6 +27,10 @@ var getOpenAction = function getOpenAction(url, analytics) {
|
|
|
27
27
|
}),
|
|
28
28
|
iconPosition: 'before',
|
|
29
29
|
onClick: function onClick() {
|
|
30
|
+
if (onActionClick) {
|
|
31
|
+
onActionClick('open-content');
|
|
32
|
+
}
|
|
33
|
+
|
|
30
34
|
window.open(url, '_blank');
|
|
31
35
|
analytics.ui.hoverCardOpenLinkClickedEvent('card');
|
|
32
36
|
},
|
|
@@ -34,12 +38,16 @@ var getOpenAction = function getOpenAction(url, analytics) {
|
|
|
34
38
|
};
|
|
35
39
|
};
|
|
36
40
|
|
|
37
|
-
var toFooterActions = function toFooterActions(cardActions) {
|
|
41
|
+
var toFooterActions = function toFooterActions(cardActions, onActionClick) {
|
|
38
42
|
return cardActions.map(function (action) {
|
|
39
43
|
return {
|
|
40
44
|
content: action.text,
|
|
41
45
|
name: ActionName.CustomAction,
|
|
42
46
|
onClick: function onClick() {
|
|
47
|
+
if (onActionClick) {
|
|
48
|
+
onActionClick(action.id);
|
|
49
|
+
}
|
|
50
|
+
|
|
43
51
|
return action.invoke();
|
|
44
52
|
},
|
|
45
53
|
testId: action.id
|
|
@@ -54,6 +62,7 @@ var HoverCardContent = function HoverCardContent(_ref) {
|
|
|
54
62
|
_ref$cardActions = _ref.cardActions,
|
|
55
63
|
cardActions = _ref$cardActions === void 0 ? [] : _ref$cardActions,
|
|
56
64
|
cardState = _ref.cardState,
|
|
65
|
+
onActionClick = _ref.onActionClick,
|
|
57
66
|
onResolve = _ref.onResolve,
|
|
58
67
|
renderers = _ref.renderers,
|
|
59
68
|
url = _ref.url;
|
|
@@ -70,11 +79,11 @@ var HoverCardContent = function HoverCardContent(_ref) {
|
|
|
70
79
|
analytics.ui.cardClickedEvent(undefined, HOVER_CARD_ANALYTICS_DISPLAY, cardState.status, undefined, undefined, isModifierKeyPressed, undefined, undefined, undefined, 'titleGoToLink');
|
|
71
80
|
}, [cardState.status, analytics.ui]);
|
|
72
81
|
var titleActions = useMemo(function () {
|
|
73
|
-
return [getOpenAction(url, analytics)];
|
|
74
|
-
}, [url, analytics]);
|
|
82
|
+
return [getOpenAction(url, analytics, onActionClick)];
|
|
83
|
+
}, [url, analytics, onActionClick]);
|
|
75
84
|
var footerActions = useMemo(function () {
|
|
76
|
-
return toFooterActions(cardActions);
|
|
77
|
-
}, [cardActions]);
|
|
85
|
+
return toFooterActions(cardActions, onActionClick);
|
|
86
|
+
}, [cardActions, onActionClick]);
|
|
78
87
|
var data = (_cardState$details = cardState.details) === null || _cardState$details === void 0 ? void 0 : _cardState$details.data;
|
|
79
88
|
var types = data ? extractType(data) : undefined; //TODO: EDM-3224 deleted simulated and use real JsonLd
|
|
80
89
|
|
|
@@ -14,6 +14,7 @@ import { useSmartLinkAnalytics } from '../../state/analytics';
|
|
|
14
14
|
import { useSmartLinkRenderers } from '../../state/renderers';
|
|
15
15
|
import HoverCardContent from './components/hover-card-content';
|
|
16
16
|
import { HOVER_CARD_ANALYTICS_DISPLAY } from './utils';
|
|
17
|
+
export var hoverCardClassName = 'smart-links-hover-preview';
|
|
17
18
|
export var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
18
19
|
var children = _ref.children,
|
|
19
20
|
id = _ref.id,
|
|
@@ -35,21 +36,24 @@ export var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
35
36
|
var renderers = useSmartLinkRenderers();
|
|
36
37
|
var linkState = useLinkState(url);
|
|
37
38
|
var analytics = useSmartLinkAnalytics(url, analyticsHandler, id);
|
|
39
|
+
var hideCard = useCallback(function () {
|
|
40
|
+
//Check its previously open to avoid firing events when moving between the child and hover card components
|
|
41
|
+
if (isOpen === true && cardOpenTime.current) {
|
|
42
|
+
var hoverTime = Date.now() - cardOpenTime.current;
|
|
43
|
+
analytics.ui.hoverCardDismissedEvent('card', hoverTime, 'mouse_hover');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
setIsOpen(false);
|
|
47
|
+
}, [analytics.ui, isOpen]);
|
|
38
48
|
var initHideCard = useCallback(function () {
|
|
39
49
|
if (fadeInTimeoutId.current) {
|
|
40
50
|
clearTimeout(fadeInTimeoutId.current);
|
|
41
51
|
}
|
|
42
52
|
|
|
43
53
|
fadeOutTimeoutId.current = setTimeout(function () {
|
|
44
|
-
|
|
45
|
-
if (isOpen === true && cardOpenTime.current) {
|
|
46
|
-
var hoverTime = Date.now() - cardOpenTime.current;
|
|
47
|
-
analytics.ui.hoverCardDismissedEvent('card', hoverTime, 'mouse_hover');
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
setIsOpen(false);
|
|
54
|
+
return hideCard();
|
|
51
55
|
}, delay);
|
|
52
|
-
}, [
|
|
56
|
+
}, [hideCard]);
|
|
53
57
|
var initShowCard = useCallback(function () {
|
|
54
58
|
if (fadeOutTimeoutId.current) {
|
|
55
59
|
clearTimeout(fadeOutTimeoutId.current);
|
|
@@ -70,24 +74,33 @@ export var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
70
74
|
appearance: HOVER_CARD_ANALYTICS_DISPLAY,
|
|
71
75
|
analyticsHandler: analyticsHandler
|
|
72
76
|
});
|
|
73
|
-
var
|
|
74
|
-
|
|
77
|
+
var onActionClick = useCallback(function (actionId) {
|
|
78
|
+
if (actionId === 'preview-content') {
|
|
79
|
+
hideCard();
|
|
80
|
+
}
|
|
81
|
+
}, [hideCard]); // Stop hover preview content to propagate event to parent.
|
|
82
|
+
|
|
83
|
+
var onClick = useCallback(function (e) {
|
|
84
|
+
return e.stopPropagation();
|
|
75
85
|
}, []);
|
|
76
86
|
return jsx(Popup, {
|
|
77
87
|
testId: "hover-card",
|
|
78
88
|
isOpen: isOpen,
|
|
79
|
-
onClose:
|
|
89
|
+
onClose: hideCard,
|
|
80
90
|
placement: "bottom-start",
|
|
81
91
|
content: function content(_ref2) {
|
|
82
92
|
var update = _ref2.update;
|
|
83
93
|
return jsx("div", {
|
|
84
94
|
onMouseEnter: initShowCard,
|
|
85
95
|
onMouseLeave: initHideCard,
|
|
86
|
-
|
|
96
|
+
className: hoverCardClassName,
|
|
97
|
+
css: HoverCardContainer,
|
|
98
|
+
onClick: onClick
|
|
87
99
|
}, jsx(HoverCardContent, {
|
|
88
100
|
analytics: analytics,
|
|
89
101
|
cardActions: linkActions,
|
|
90
102
|
cardState: linkState,
|
|
103
|
+
onActionClick: onActionClick,
|
|
91
104
|
onResolve: update,
|
|
92
105
|
renderers: renderers,
|
|
93
106
|
url: url
|
|
@@ -66,7 +66,8 @@ var Modal = function Modal(_ref) {
|
|
|
66
66
|
var onClose = _ref.onClose,
|
|
67
67
|
onOpen = _ref.onOpen,
|
|
68
68
|
src = _ref.src,
|
|
69
|
-
testId = _ref.testId,
|
|
69
|
+
_ref$testId = _ref.testId,
|
|
70
|
+
testId = _ref$testId === void 0 ? 'smart-links-preview-modal' : _ref$testId,
|
|
70
71
|
showModal = _ref.showModal,
|
|
71
72
|
providerName = _ref.providerName,
|
|
72
73
|
metadata = _ref.metadata,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
2
|
import { HoverCardProps } from './types';
|
|
3
|
+
export declare const hoverCardClassName = "smart-links-hover-preview";
|
|
3
4
|
export declare const HoverCardComponent: FC<HoverCardProps>;
|
|
4
5
|
export declare const HoverCard: React.ForwardRefExoticComponent<Pick<Omit<React.PropsWithChildren<HoverCardProps>, keyof import("@atlaskit/analytics-next").WithAnalyticsEventsProps> & React.RefAttributes<any> & import("@atlaskit/analytics-next").WithContextProps, "children" | "id" | "analyticsContext" | "key" | "url"> & React.RefAttributes<any>>;
|