@atlaskit/smart-card 26.3.6 → 26.3.8
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/state/analytics/useLinkClicked.js +38 -0
- package/dist/cjs/utils/analytics/LinkAnalyticsContext.js +36 -0
- package/dist/cjs/utils/analytics/SmartLinkAnalyticsContext.js +18 -28
- package/dist/cjs/utils/analytics/click.js +22 -1
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/BlockCard/components/ContentHeader.js +2 -3
- package/dist/cjs/view/EmbedCard/components/ExpandedFrame.js +2 -3
- package/dist/cjs/view/EmbedModal/components/link-info/link-info-button/index.js +2 -2
- package/dist/cjs/view/FlexibleCard/components/blocks/title-block/index.js +2 -2
- package/dist/cjs/view/FlexibleCard/components/container/layered-link/index.js +2 -2
- package/dist/cjs/view/FlexibleCard/components/elements/link/index.js +2 -2
- package/dist/cjs/view/InlineCard/Frame/index.js +2 -3
- package/dist/cjs/view/LinkUrl/index.js +10 -15
- package/dist/es2019/state/analytics/useLinkClicked.js +25 -0
- package/dist/es2019/utils/analytics/LinkAnalyticsContext.js +29 -0
- package/dist/es2019/utils/analytics/SmartLinkAnalyticsContext.js +21 -24
- package/dist/es2019/utils/analytics/click.js +22 -1
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/BlockCard/components/ContentHeader.js +1 -1
- package/dist/es2019/view/EmbedCard/components/ExpandedFrame.js +1 -1
- package/dist/es2019/view/EmbedModal/components/link-info/link-info-button/index.js +1 -1
- package/dist/es2019/view/FlexibleCard/components/blocks/title-block/index.js +1 -1
- package/dist/es2019/view/FlexibleCard/components/container/layered-link/index.js +1 -1
- package/dist/es2019/view/FlexibleCard/components/elements/link/index.js +1 -1
- package/dist/es2019/view/InlineCard/Frame/index.js +1 -1
- package/dist/es2019/view/LinkUrl/index.js +10 -16
- package/dist/esm/state/analytics/useLinkClicked.js +29 -0
- package/dist/esm/utils/analytics/LinkAnalyticsContext.js +28 -0
- package/dist/esm/utils/analytics/SmartLinkAnalyticsContext.js +19 -26
- package/dist/esm/utils/analytics/click.js +21 -1
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/BlockCard/components/ContentHeader.js +1 -1
- package/dist/esm/view/EmbedCard/components/ExpandedFrame.js +1 -1
- package/dist/esm/view/EmbedModal/components/link-info/link-info-button/index.js +1 -1
- package/dist/esm/view/FlexibleCard/components/blocks/title-block/index.js +1 -1
- package/dist/esm/view/FlexibleCard/components/container/layered-link/index.js +1 -1
- package/dist/esm/view/FlexibleCard/components/elements/link/index.js +1 -1
- package/dist/esm/view/InlineCard/Frame/index.js +1 -1
- package/dist/esm/view/LinkUrl/index.js +11 -16
- package/dist/types/state/analytics/useLinkClicked.d.ts +8 -0
- package/dist/types/utils/analytics/LinkAnalyticsContext.d.ts +17 -0
- package/dist/types/utils/analytics/SmartLinkAnalyticsContext.d.ts +8 -3
- package/dist/types/utils/analytics/click.d.ts +11 -1
- package/dist/types-ts4.5/state/analytics/useLinkClicked.d.ts +8 -0
- package/dist/types-ts4.5/utils/analytics/LinkAnalyticsContext.d.ts +17 -0
- package/dist/types-ts4.5/utils/analytics/SmartLinkAnalyticsContext.d.ts +8 -3
- package/dist/types-ts4.5/utils/analytics/click.d.ts +11 -1
- package/package.json +6 -6
- package/dist/cjs/state/analytics/useMouseDownEvent.js +0 -24
- package/dist/es2019/state/analytics/useMouseDownEvent.js +0 -18
- package/dist/esm/state/analytics/useMouseDownEvent.js +0 -17
- package/dist/types/state/analytics/useMouseDownEvent.d.ts +0 -3
- package/dist/types-ts4.5/state/analytics/useMouseDownEvent.d.ts +0 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/smart-card
|
|
2
2
|
|
|
3
|
+
## 26.3.8
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
|
|
9
|
+
## 26.3.7
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`b270cd7542b`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b270cd7542b) - Updates internal analytics for link clicked events in Smart Card and adds more attributes to link clicked event fired by LinkUrl (blue links) that are rendered in editor.
|
|
14
|
+
|
|
3
15
|
## 26.3.6
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useMouseDownEvent = exports.useLinkClicked = exports.ClickButton = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
9
|
+
var _click = require("../../utils/analytics/click");
|
|
10
|
+
var ClickButton = /*#__PURE__*/function (ClickButton) {
|
|
11
|
+
ClickButton[ClickButton["Left"] = 0] = "Left";
|
|
12
|
+
ClickButton[ClickButton["Middle"] = 1] = "Middle";
|
|
13
|
+
ClickButton[ClickButton["Right"] = 2] = "Right";
|
|
14
|
+
return ClickButton;
|
|
15
|
+
}({});
|
|
16
|
+
exports.ClickButton = ClickButton;
|
|
17
|
+
var useLinkClicked = function useLinkClicked(handler, predicate) {
|
|
18
|
+
var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
19
|
+
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
20
|
+
return (0, _react.useCallback)(function () {
|
|
21
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
22
|
+
args[_key] = arguments[_key];
|
|
23
|
+
}
|
|
24
|
+
var event = args[0];
|
|
25
|
+
handler === null || handler === void 0 ? void 0 : handler.apply(null, args);
|
|
26
|
+
if (!predicate || predicate !== null && predicate !== void 0 && predicate(event)) {
|
|
27
|
+
(0, _click.fireLinkClickedEvent)(createAnalyticsEvent)(event);
|
|
28
|
+
}
|
|
29
|
+
}, [handler, predicate, createAnalyticsEvent]);
|
|
30
|
+
};
|
|
31
|
+
exports.useLinkClicked = useLinkClicked;
|
|
32
|
+
var isNotLeftClick = function isNotLeftClick(event) {
|
|
33
|
+
return event.button !== 0;
|
|
34
|
+
};
|
|
35
|
+
var useMouseDownEvent = function useMouseDownEvent(onMouseDown) {
|
|
36
|
+
return useLinkClicked(onMouseDown, isNotLeftClick);
|
|
37
|
+
};
|
|
38
|
+
exports.useMouseDownEvent = useMouseDownEvent;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.LinkAnalyticsContext = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
10
|
+
var _resolvedAttributes = require("@atlaskit/link-analytics/resolved-attributes");
|
|
11
|
+
/**
|
|
12
|
+
* Provides an analytics context to supply attributes to events based on a URL
|
|
13
|
+
*/
|
|
14
|
+
var LinkAnalyticsContext = function LinkAnalyticsContext(_ref) {
|
|
15
|
+
var _ref$url = _ref.url,
|
|
16
|
+
url = _ref$url === void 0 ? '' : _ref$url,
|
|
17
|
+
display = _ref.display,
|
|
18
|
+
id = _ref.id,
|
|
19
|
+
children = _ref.children,
|
|
20
|
+
source = _ref.source;
|
|
21
|
+
var _getUrlAttributes = (0, _resolvedAttributes.getUrlAttributes)(url),
|
|
22
|
+
urlHash = _getUrlAttributes.urlHash;
|
|
23
|
+
var displayCategory = display === 'url' ? 'link' : undefined;
|
|
24
|
+
return /*#__PURE__*/_react.default.createElement(_analyticsNext.AnalyticsContext, {
|
|
25
|
+
data: {
|
|
26
|
+
source: source,
|
|
27
|
+
attributes: {
|
|
28
|
+
displayCategory: displayCategory,
|
|
29
|
+
urlHash: urlHash,
|
|
30
|
+
display: display,
|
|
31
|
+
id: id
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}, children);
|
|
35
|
+
};
|
|
36
|
+
exports.LinkAnalyticsContext = LinkAnalyticsContext;
|
|
@@ -1,49 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.SmartLinkAnalyticsContext = void 0;
|
|
9
|
-
var
|
|
10
|
-
var _react =
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
10
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
12
11
|
var _resolvedAttributes = require("@atlaskit/link-analytics/resolved-attributes");
|
|
13
12
|
var _flexible = require("../flexible");
|
|
14
13
|
var _constants = require("../../constants");
|
|
15
14
|
var _store = require("../../state/store");
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
appearance =
|
|
24
|
-
|
|
25
|
-
source = _ref.source;
|
|
15
|
+
var _LinkAnalyticsContext = require("./LinkAnalyticsContext");
|
|
16
|
+
/**
|
|
17
|
+
* Provides an analytics context to supply attributes to events based on a URL
|
|
18
|
+
* and the link state in the store
|
|
19
|
+
*/
|
|
20
|
+
var SmartLinkAnalyticsContext = function SmartLinkAnalyticsContext(props) {
|
|
21
|
+
var children = props.children,
|
|
22
|
+
appearance = props.appearance,
|
|
23
|
+
url = props.url;
|
|
26
24
|
var _useSmartLinkState = (0, _store.useSmartCardState)(url),
|
|
27
25
|
details = _useSmartLinkState.details,
|
|
28
26
|
status = _useSmartLinkState.status;
|
|
29
|
-
var
|
|
27
|
+
var attributes = (0, _resolvedAttributes.getResolvedAttributes)({
|
|
30
28
|
url: url
|
|
31
29
|
}, details, status);
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}, [children]);
|
|
37
|
-
var display = isFlexibleUi ? _constants.CardDisplay.Flexible : appearance;
|
|
38
|
-
return /*#__PURE__*/_react.default.createElement(_analyticsNext.AnalyticsContext, {
|
|
30
|
+
var display = (0, _flexible.isFlexibleUiCard)(children) ? _constants.CardDisplay.Flexible : appearance;
|
|
31
|
+
return /*#__PURE__*/_react.default.createElement(_LinkAnalyticsContext.LinkAnalyticsContext, (0, _extends2.default)({}, props, {
|
|
32
|
+
display: display
|
|
33
|
+
}), /*#__PURE__*/_react.default.createElement(_analyticsNext.AnalyticsContext, {
|
|
39
34
|
data: {
|
|
40
|
-
|
|
41
|
-
attributes: _objectSpread(_objectSpread({}, resolvedAttributes), {}, {
|
|
42
|
-
urlHash: urlHash,
|
|
43
|
-
display: display,
|
|
44
|
-
id: id
|
|
45
|
-
})
|
|
35
|
+
attributes: attributes
|
|
46
36
|
}
|
|
47
|
-
}, children);
|
|
37
|
+
}, children));
|
|
48
38
|
};
|
|
49
39
|
exports.SmartLinkAnalyticsContext = SmartLinkAnalyticsContext;
|
|
@@ -6,9 +6,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.getKeys = exports.fireLinkClickedEvent = exports.createLinkClickedPayload = exports.buttonMap = void 0;
|
|
8
8
|
exports.getLinkClickOutcome = getLinkClickOutcome;
|
|
9
|
+
exports.withLinkClickedEvent = withLinkClickedEvent;
|
|
9
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
12
|
var _userAgent = require("@atlaskit/linking-common/user-agent");
|
|
11
13
|
var _analytics = require("./analytics");
|
|
14
|
+
var _useLinkClicked = require("../../state/analytics/useLinkClicked");
|
|
12
15
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
16
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
14
17
|
var buttonMap = new Map([[undefined, 'none'], [0, 'left'], [1, 'middle'], [2, 'right']]);
|
|
@@ -124,4 +127,22 @@ var fireLinkClickedEvent = function fireLinkClickedEvent(createAnalyticsEvent) {
|
|
|
124
127
|
}
|
|
125
128
|
};
|
|
126
129
|
};
|
|
127
|
-
exports.fireLinkClickedEvent = fireLinkClickedEvent;
|
|
130
|
+
exports.fireLinkClickedEvent = fireLinkClickedEvent;
|
|
131
|
+
var getDisplayName = function getDisplayName(WrappedComponent) {
|
|
132
|
+
if (typeof WrappedComponent === 'string') {
|
|
133
|
+
return WrappedComponent;
|
|
134
|
+
}
|
|
135
|
+
return WrappedComponent.displayName || WrappedComponent.name || 'Component';
|
|
136
|
+
};
|
|
137
|
+
function withLinkClickedEvent(WrappedComponent) {
|
|
138
|
+
var Component = function Component(props) {
|
|
139
|
+
var onClick = (0, _useLinkClicked.useLinkClicked)(props.onClick);
|
|
140
|
+
var onMouseDown = (0, _useLinkClicked.useMouseDownEvent)(props.onMouseDown);
|
|
141
|
+
return /*#__PURE__*/_react.default.createElement(WrappedComponent, _objectSpread(_objectSpread({}, props), {}, {
|
|
142
|
+
onClick: onClick,
|
|
143
|
+
onMouseDown: onMouseDown
|
|
144
|
+
}));
|
|
145
|
+
};
|
|
146
|
+
Component.displayName = "withLinkClickedEvent(".concat(getDisplayName(WrappedComponent), ")");
|
|
147
|
+
return Component;
|
|
148
|
+
}
|
package/dist/cjs/version.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.blockCardContentHeaderClassName = exports.ContentHeader = void 0;
|
|
8
7
|
var _react = require("@emotion/react");
|
|
9
|
-
var
|
|
8
|
+
var _useLinkClicked = require("../../../state/analytics/useLinkClicked");
|
|
10
9
|
/** @jsx jsx */
|
|
11
10
|
|
|
12
11
|
var blockCardContentHeaderClassName = 'block-card-content-header';
|
|
@@ -15,7 +14,7 @@ var ContentHeader = function ContentHeader(_ref) {
|
|
|
15
14
|
var onClick = _ref.onClick,
|
|
16
15
|
link = _ref.link,
|
|
17
16
|
children = _ref.children;
|
|
18
|
-
var onMouseDown = (0,
|
|
17
|
+
var onMouseDown = (0, _useLinkClicked.useMouseDownEvent)();
|
|
19
18
|
return (0, _react.jsx)("a", {
|
|
20
19
|
onClick: onClick,
|
|
21
20
|
onMouseDown: onMouseDown,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
@@ -9,7 +8,7 @@ exports.ExpandedFrame = void 0;
|
|
|
9
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
9
|
var _styled = require("./styled");
|
|
11
10
|
var _handlers = require("../../BlockCard/utils/handlers");
|
|
12
|
-
var
|
|
11
|
+
var _useLinkClicked = require("../../../state/analytics/useLinkClicked");
|
|
13
12
|
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); }
|
|
14
13
|
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; }
|
|
15
14
|
var ExpandedFrame = function ExpandedFrame(_ref) {
|
|
@@ -36,7 +35,7 @@ var ExpandedFrame = function ExpandedFrame(_ref) {
|
|
|
36
35
|
var handleClick = function handleClick(event) {
|
|
37
36
|
return (0, _handlers.handleClickCommon)(event, onClick);
|
|
38
37
|
};
|
|
39
|
-
var handleMouseDown = (0,
|
|
38
|
+
var handleMouseDown = (0, _useLinkClicked.useMouseDownEvent)();
|
|
40
39
|
var calculatedFrameStyle = (0, _react.useMemo)(function () {
|
|
41
40
|
return frameStyle !== undefined ? frameStyle : isFrameVisible ? 'show' : 'showOnHover';
|
|
42
41
|
}, [frameStyle, isFrameVisible]);
|
|
@@ -8,7 +8,7 @@ exports.default = void 0;
|
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
10
10
|
var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
|
|
11
|
-
var
|
|
11
|
+
var _useLinkClicked = require("../../../../../state/analytics/useLinkClicked");
|
|
12
12
|
var LinkInfoButton = function LinkInfoButton(_ref) {
|
|
13
13
|
var content = _ref.content,
|
|
14
14
|
href = _ref.href,
|
|
@@ -16,7 +16,7 @@ var LinkInfoButton = function LinkInfoButton(_ref) {
|
|
|
16
16
|
onClick = _ref.onClick,
|
|
17
17
|
target = _ref.target,
|
|
18
18
|
testId = _ref.testId;
|
|
19
|
-
var onMouseDown = (0,
|
|
19
|
+
var onMouseDown = (0, _useLinkClicked.useMouseDownEvent)();
|
|
20
20
|
return /*#__PURE__*/_react.default.createElement(_tooltip.default, {
|
|
21
21
|
content: content,
|
|
22
22
|
hideTooltipOnClick: true,
|
|
@@ -12,7 +12,7 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
|
|
|
12
12
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
13
13
|
var _react = _interopRequireWildcard(require("react"));
|
|
14
14
|
var _react2 = require("@emotion/react");
|
|
15
|
-
var
|
|
15
|
+
var _useLinkClicked = require("../../../../../state/analytics/useLinkClicked");
|
|
16
16
|
var _constants = require("../../../../../constants");
|
|
17
17
|
var _resolved = _interopRequireDefault(require("./resolved"));
|
|
18
18
|
var _errored = _interopRequireDefault(require("./errored"));
|
|
@@ -100,7 +100,7 @@ var TitleBlock = function TitleBlock(_ref) {
|
|
|
100
100
|
var overrideText = !!text ? {
|
|
101
101
|
text: text
|
|
102
102
|
} : {};
|
|
103
|
-
var onMouseDown = (0,
|
|
103
|
+
var onMouseDown = (0, _useLinkClicked.useMouseDownEvent)();
|
|
104
104
|
var title = /*#__PURE__*/_react.default.createElement(_elements.Title, (0, _extends2.default)({
|
|
105
105
|
hideTooltip: hideTitleTooltip,
|
|
106
106
|
maxLines: maxLines,
|
|
@@ -8,7 +8,7 @@ exports.default = void 0;
|
|
|
8
8
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
9
9
|
var _react = _interopRequireDefault(require("react"));
|
|
10
10
|
var _react2 = require("@emotion/react");
|
|
11
|
-
var
|
|
11
|
+
var _useLinkClicked = require("../../../../../state/analytics/useLinkClicked");
|
|
12
12
|
var _templateObject;
|
|
13
13
|
/** @jsx jsx */
|
|
14
14
|
var styles = (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n // Stretch the invisible link over the whole of the post.\n // Hide the link\u2019s text.\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n text-indent: 100%;\n white-space: nowrap;\n\n // Needs a heightened specificity to trump other anchor.\n // Stack it under all other links in the post text.\n a&.layered-link {\n position: absolute;\n z-index: 0;\n }\n\n // When hovering over the layered link, any hidden action buttons inside\n // the Container should become visible.\n // As actions resides inside blocks and layered link is expected to be\n // on the same level of blocks. That makes the blocks, e.g. TitleBlock,\n // its sibling. Using general sibling combinator here to apply styling to\n // all the siblings of layered link.\n // The general sibling combinator (~) separates two selectors and matches all\n // iterations of the second element, that are following the first element\n // (though not necessarily immediately), and are children of the same parent\n // element.\n &:hover ~ * {\n .actions-button-group {\n opacity: 1;\n }\n }\n"])));
|
|
@@ -24,7 +24,7 @@ var LayeredLink = function LayeredLink(_ref) {
|
|
|
24
24
|
testId = _ref.testId,
|
|
25
25
|
text = _ref.text,
|
|
26
26
|
url = _ref.url;
|
|
27
|
-
var onMouseDown = (0,
|
|
27
|
+
var onMouseDown = (0, _useLinkClicked.useMouseDownEvent)();
|
|
28
28
|
return (0, _react2.jsx)("a", {
|
|
29
29
|
className: "layered-link",
|
|
30
30
|
css: styles,
|
|
@@ -13,7 +13,7 @@ var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
|
13
13
|
var _constants = require("../../../../../constants");
|
|
14
14
|
var _utils = require("../../utils");
|
|
15
15
|
var _token = require("../../../../../utils/token");
|
|
16
|
-
var
|
|
16
|
+
var _useLinkClicked = require("../../../../../state/analytics/useLinkClicked");
|
|
17
17
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
18
18
|
/** @jsx jsx */
|
|
19
19
|
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); }
|
|
@@ -79,7 +79,7 @@ var Link = function Link(_ref) {
|
|
|
79
79
|
url = _ref.url,
|
|
80
80
|
onClick = _ref.onClick,
|
|
81
81
|
target = _ref.target;
|
|
82
|
-
var onMouseDown = (0,
|
|
82
|
+
var onMouseDown = (0, _useLinkClicked.useMouseDownEvent)();
|
|
83
83
|
var hasSpace = (0, _react.useMemo)(function () {
|
|
84
84
|
return text ? (0, _utils.hasWhiteSpace)(text) : false;
|
|
85
85
|
}, [text]);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
@@ -9,7 +8,7 @@ exports.Frame = void 0;
|
|
|
9
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
9
|
var _components = require("@atlaskit/theme/components");
|
|
11
10
|
var _styled = require("./styled");
|
|
12
|
-
var
|
|
11
|
+
var _useLinkClicked = require("../../../state/analytics/useLinkClicked");
|
|
13
12
|
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); }
|
|
14
13
|
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; }
|
|
15
14
|
var Frame = function Frame(props) {
|
|
@@ -37,7 +36,7 @@ var Frame = function Frame(props) {
|
|
|
37
36
|
onClick(event);
|
|
38
37
|
}
|
|
39
38
|
}, [onClick]);
|
|
40
|
-
var handleMouseDown = (0,
|
|
39
|
+
var handleMouseDown = (0, _useLinkClicked.useMouseDownEvent)();
|
|
41
40
|
var isInteractive = Boolean(onClick);
|
|
42
41
|
|
|
43
42
|
// Depending on whenever Frame was given onClick or link itself we display span or anchor elements
|
|
@@ -8,48 +8,43 @@ exports.default = void 0;
|
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
|
11
|
-
var _useLinkWarningModal2 = require("./LinkWarningModal/hooks/use-link-warning-modal");
|
|
12
|
-
var _LinkWarningModal = _interopRequireDefault(require("./LinkWarningModal"));
|
|
13
11
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
14
12
|
var _version = require("../../version.json");
|
|
15
13
|
var _click = require("../../utils/analytics/click");
|
|
16
|
-
var
|
|
17
|
-
var
|
|
14
|
+
var _LinkAnalyticsContext = require("../../utils/analytics/LinkAnalyticsContext");
|
|
15
|
+
var _useLinkWarningModal2 = require("./LinkWarningModal/hooks/use-link-warning-modal");
|
|
16
|
+
var _LinkWarningModal = _interopRequireDefault(require("./LinkWarningModal"));
|
|
17
|
+
var _excluded = ["href", "children", "checkSafety", "onClick", "testId"],
|
|
18
18
|
_excluded2 = ["checkLinkSafety"];
|
|
19
19
|
var PACKAGE_DATA = {
|
|
20
20
|
packageName: _version.name,
|
|
21
21
|
packageVersion: _version.version,
|
|
22
22
|
componentName: 'linkUrl'
|
|
23
23
|
};
|
|
24
|
+
var Link = (0, _click.withLinkClickedEvent)('a');
|
|
24
25
|
var LinkUrl = function LinkUrl(_ref) {
|
|
25
26
|
var href = _ref.href,
|
|
26
27
|
children = _ref.children,
|
|
27
28
|
_ref$checkSafety = _ref.checkSafety,
|
|
28
29
|
checkSafety = _ref$checkSafety === void 0 ? true : _ref$checkSafety,
|
|
29
30
|
_onClick = _ref.onClick,
|
|
30
|
-
_onMouseDown = _ref.onMouseDown,
|
|
31
31
|
_ref$testId = _ref.testId,
|
|
32
32
|
testId = _ref$testId === void 0 ? 'link-with-safety' : _ref$testId,
|
|
33
33
|
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
34
34
|
var _useLinkWarningModal = (0, _useLinkWarningModal2.useLinkWarningModal)(),
|
|
35
35
|
checkLinkSafety = _useLinkWarningModal.checkLinkSafety,
|
|
36
36
|
linkWarningModalProps = (0, _objectWithoutProperties2.default)(_useLinkWarningModal, _excluded2);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_LinkAnalyticsContext.LinkAnalyticsContext, {
|
|
38
|
+
url: href,
|
|
39
|
+
display: "url"
|
|
40
|
+
}, /*#__PURE__*/_react.default.createElement(Link, (0, _extends2.default)({
|
|
41
41
|
"data-testid": testId,
|
|
42
42
|
href: href,
|
|
43
43
|
onClick: function onClick(e) {
|
|
44
44
|
checkSafety && checkLinkSafety(e, href);
|
|
45
45
|
_onClick && _onClick(e);
|
|
46
|
-
(0, _click.fireLinkClickedEvent)(createAnalyticsEvent)(e);
|
|
47
|
-
},
|
|
48
|
-
onMouseDown: function onMouseDown(e) {
|
|
49
|
-
_onMouseDown && _onMouseDown(e);
|
|
50
|
-
handleMouseDown(e); // add analytics
|
|
51
46
|
}
|
|
52
|
-
}, props), children), checkSafety && /*#__PURE__*/_react.default.createElement(_LinkWarningModal.default, linkWarningModalProps));
|
|
47
|
+
}, props), children)), checkSafety && /*#__PURE__*/_react.default.createElement(_LinkWarningModal.default, linkWarningModalProps));
|
|
53
48
|
};
|
|
54
49
|
var _default = (0, _analyticsNext.withAnalyticsContext)(PACKAGE_DATA)(LinkUrl);
|
|
55
50
|
exports.default = _default;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { useAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
3
|
+
import { fireLinkClickedEvent } from '../../utils/analytics/click';
|
|
4
|
+
export let ClickButton = /*#__PURE__*/function (ClickButton) {
|
|
5
|
+
ClickButton[ClickButton["Left"] = 0] = "Left";
|
|
6
|
+
ClickButton[ClickButton["Middle"] = 1] = "Middle";
|
|
7
|
+
ClickButton[ClickButton["Right"] = 2] = "Right";
|
|
8
|
+
return ClickButton;
|
|
9
|
+
}({});
|
|
10
|
+
export const useLinkClicked = (handler, predicate) => {
|
|
11
|
+
const {
|
|
12
|
+
createAnalyticsEvent
|
|
13
|
+
} = useAnalyticsEvents();
|
|
14
|
+
return useCallback((...args) => {
|
|
15
|
+
const [event] = args;
|
|
16
|
+
handler === null || handler === void 0 ? void 0 : handler.apply(null, args);
|
|
17
|
+
if (!predicate || predicate !== null && predicate !== void 0 && predicate(event)) {
|
|
18
|
+
fireLinkClickedEvent(createAnalyticsEvent)(event);
|
|
19
|
+
}
|
|
20
|
+
}, [handler, predicate, createAnalyticsEvent]);
|
|
21
|
+
};
|
|
22
|
+
const isNotLeftClick = event => event.button !== 0;
|
|
23
|
+
export const useMouseDownEvent = onMouseDown => {
|
|
24
|
+
return useLinkClicked(onMouseDown, isNotLeftClick);
|
|
25
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AnalyticsContext } from '@atlaskit/analytics-next';
|
|
3
|
+
import { getUrlAttributes } from '@atlaskit/link-analytics/resolved-attributes';
|
|
4
|
+
/**
|
|
5
|
+
* Provides an analytics context to supply attributes to events based on a URL
|
|
6
|
+
*/
|
|
7
|
+
export const LinkAnalyticsContext = ({
|
|
8
|
+
url = '',
|
|
9
|
+
display,
|
|
10
|
+
id,
|
|
11
|
+
children,
|
|
12
|
+
source
|
|
13
|
+
}) => {
|
|
14
|
+
const {
|
|
15
|
+
urlHash
|
|
16
|
+
} = getUrlAttributes(url);
|
|
17
|
+
const displayCategory = display === 'url' ? 'link' : undefined;
|
|
18
|
+
return /*#__PURE__*/React.createElement(AnalyticsContext, {
|
|
19
|
+
data: {
|
|
20
|
+
source,
|
|
21
|
+
attributes: {
|
|
22
|
+
displayCategory,
|
|
23
|
+
urlHash,
|
|
24
|
+
display,
|
|
25
|
+
id
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}, children);
|
|
29
|
+
};
|
|
@@ -1,37 +1,34 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React from 'react';
|
|
2
3
|
import { AnalyticsContext } from '@atlaskit/analytics-next';
|
|
3
|
-
import { getResolvedAttributes
|
|
4
|
+
import { getResolvedAttributes } from '@atlaskit/link-analytics/resolved-attributes';
|
|
4
5
|
import { isFlexibleUiCard } from '../flexible';
|
|
5
6
|
import { CardDisplay } from '../../constants';
|
|
6
7
|
import { useSmartCardState as useSmartLinkState } from '../../state/store';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
import { LinkAnalyticsContext } from './LinkAnalyticsContext';
|
|
9
|
+
/**
|
|
10
|
+
* Provides an analytics context to supply attributes to events based on a URL
|
|
11
|
+
* and the link state in the store
|
|
12
|
+
*/
|
|
13
|
+
export const SmartLinkAnalyticsContext = props => {
|
|
14
|
+
const {
|
|
15
|
+
children,
|
|
16
|
+
appearance,
|
|
17
|
+
url
|
|
18
|
+
} = props;
|
|
14
19
|
const {
|
|
15
20
|
details,
|
|
16
21
|
status
|
|
17
22
|
} = useSmartLinkState(url);
|
|
18
|
-
const
|
|
23
|
+
const attributes = getResolvedAttributes({
|
|
19
24
|
url
|
|
20
25
|
}, details, status);
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const display = isFlexibleUi ? CardDisplay.Flexible : appearance;
|
|
26
|
-
return /*#__PURE__*/React.createElement(AnalyticsContext, {
|
|
26
|
+
const display = isFlexibleUiCard(children) ? CardDisplay.Flexible : appearance;
|
|
27
|
+
return /*#__PURE__*/React.createElement(LinkAnalyticsContext, _extends({}, props, {
|
|
28
|
+
display: display
|
|
29
|
+
}), /*#__PURE__*/React.createElement(AnalyticsContext, {
|
|
27
30
|
data: {
|
|
28
|
-
|
|
29
|
-
attributes: {
|
|
30
|
-
...resolvedAttributes,
|
|
31
|
-
urlHash,
|
|
32
|
-
display,
|
|
33
|
-
id
|
|
34
|
-
}
|
|
31
|
+
attributes
|
|
35
32
|
}
|
|
36
|
-
}, children);
|
|
33
|
+
}, children));
|
|
37
34
|
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { browser } from '@atlaskit/linking-common/user-agent';
|
|
2
3
|
import { ANALYTICS_CHANNEL } from './analytics';
|
|
4
|
+
import { useLinkClicked, useMouseDownEvent } from '../../state/analytics/useLinkClicked';
|
|
3
5
|
export const buttonMap = new Map([[undefined, 'none'], [0, 'left'], [1, 'middle'], [2, 'right']]);
|
|
4
6
|
export const getKeys = e => {
|
|
5
7
|
return ['alt', 'ctrl', 'meta', 'shift'].filter(key => e[`${key}Key`] === true);
|
|
@@ -109,4 +111,23 @@ export const fireLinkClickedEvent = createAnalyticsEvent => (event, overrides =
|
|
|
109
111
|
}
|
|
110
112
|
}).fire(ANALYTICS_CHANNEL);
|
|
111
113
|
}
|
|
112
|
-
};
|
|
114
|
+
};
|
|
115
|
+
const getDisplayName = WrappedComponent => {
|
|
116
|
+
if (typeof WrappedComponent === 'string') {
|
|
117
|
+
return WrappedComponent;
|
|
118
|
+
}
|
|
119
|
+
return WrappedComponent.displayName || WrappedComponent.name || 'Component';
|
|
120
|
+
};
|
|
121
|
+
export function withLinkClickedEvent(WrappedComponent) {
|
|
122
|
+
const Component = props => {
|
|
123
|
+
const onClick = useLinkClicked(props.onClick);
|
|
124
|
+
const onMouseDown = useMouseDownEvent(props.onMouseDown);
|
|
125
|
+
return /*#__PURE__*/React.createElement(WrappedComponent, {
|
|
126
|
+
...props,
|
|
127
|
+
onClick,
|
|
128
|
+
onMouseDown
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
Component.displayName = `withLinkClickedEvent(${getDisplayName(WrappedComponent)})`;
|
|
132
|
+
return Component;
|
|
133
|
+
}
|
package/dist/es2019/version.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
import { jsx } from '@emotion/react';
|
|
3
|
-
import useMouseDownEvent from '../../../state/analytics/
|
|
3
|
+
import { useMouseDownEvent } from '../../../state/analytics/useLinkClicked';
|
|
4
4
|
export const blockCardContentHeaderClassName = 'block-card-content-header';
|
|
5
5
|
export const ContentHeader = ({
|
|
6
6
|
onClick,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
2
|
import { className, LinkWrapper, Wrapper, Header, IconWrapper, TextWrapper, Content } from './styled';
|
|
3
3
|
import { handleClickCommon } from '../../BlockCard/utils/handlers';
|
|
4
|
-
import useMouseDownEvent from '../../../state/analytics/
|
|
4
|
+
import { useMouseDownEvent } from '../../../state/analytics/useLinkClicked';
|
|
5
5
|
export const ExpandedFrame = ({
|
|
6
6
|
isPlaceholder = false,
|
|
7
7
|
children,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import Tooltip from '@atlaskit/tooltip';
|
|
3
3
|
import Button from '@atlaskit/button/custom-theme-button';
|
|
4
|
-
import useMouseDownEvent from '../../../../../state/analytics/
|
|
4
|
+
import { useMouseDownEvent } from '../../../../../state/analytics/useLinkClicked';
|
|
5
5
|
const LinkInfoButton = ({
|
|
6
6
|
content,
|
|
7
7
|
href,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import React, { useCallback, useState } from 'react';
|
|
3
3
|
import { css } from '@emotion/react';
|
|
4
|
-
import useMouseDownEvent from '../../../../../state/analytics/
|
|
4
|
+
import { useMouseDownEvent } from '../../../../../state/analytics/useLinkClicked';
|
|
5
5
|
import { SmartLinkStatus } from '../../../../../constants';
|
|
6
6
|
import TitleBlockResolvedView from './resolved';
|
|
7
7
|
import TitleBlockErroredView from './errored';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { jsx, css } from '@emotion/react';
|
|
4
|
-
import useMouseDownEvent from '../../../../../state/analytics/
|
|
4
|
+
import { useMouseDownEvent } from '../../../../../state/analytics/useLinkClicked';
|
|
5
5
|
const styles = css`
|
|
6
6
|
// Stretch the invisible link over the whole of the post.
|
|
7
7
|
// Hide the link’s text.
|