@atlaskit/smart-card 26.40.0 → 26.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/messages.js +20 -0
  3. package/dist/cjs/state/hooks/use-related-urls/index.js +37 -0
  4. package/dist/cjs/utils/analytics/analytics.js +1 -1
  5. package/dist/cjs/view/FlexibleCard/components/blocks/index.js +8 -1
  6. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/errored/index.js +25 -0
  7. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/errored/types.js +5 -0
  8. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/index.js +99 -0
  9. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/resolved/index.js +30 -0
  10. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/index.js +78 -0
  11. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/index.js +43 -0
  12. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/types.js +5 -0
  13. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/types.js +5 -0
  14. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/resolved/types.js +5 -0
  15. package/dist/cjs/view/FlexibleCard/components/blocks/related-urls-block/resolving/index.js +23 -0
  16. package/dist/cjs/view/HoverCard/components/views/resolved/index.js +5 -1
  17. package/dist/cjs/view/LinkUrl/index.js +1 -1
  18. package/dist/es2019/messages.js +20 -0
  19. package/dist/es2019/state/hooks/use-related-urls/index.js +13 -0
  20. package/dist/es2019/utils/analytics/analytics.js +1 -1
  21. package/dist/es2019/view/FlexibleCard/components/blocks/index.js +2 -1
  22. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/errored/index.js +15 -0
  23. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/errored/types.js +1 -0
  24. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/index.js +54 -0
  25. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/resolved/index.js +24 -0
  26. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/index.js +61 -0
  27. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/index.js +32 -0
  28. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/types.js +1 -0
  29. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/types.js +1 -0
  30. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/resolved/types.js +1 -0
  31. package/dist/es2019/view/FlexibleCard/components/blocks/related-urls-block/resolving/index.js +13 -0
  32. package/dist/es2019/view/HoverCard/components/views/resolved/index.js +6 -2
  33. package/dist/es2019/view/LinkUrl/index.js +1 -1
  34. package/dist/esm/messages.js +20 -0
  35. package/dist/esm/state/hooks/use-related-urls/index.js +30 -0
  36. package/dist/esm/utils/analytics/analytics.js +1 -1
  37. package/dist/esm/view/FlexibleCard/components/blocks/index.js +2 -1
  38. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/errored/index.js +18 -0
  39. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/errored/types.js +1 -0
  40. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/index.js +89 -0
  41. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/resolved/index.js +23 -0
  42. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/index.js +68 -0
  43. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/index.js +33 -0
  44. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/types.js +1 -0
  45. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/types.js +1 -0
  46. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/resolved/types.js +1 -0
  47. package/dist/esm/view/FlexibleCard/components/blocks/related-urls-block/resolving/index.js +16 -0
  48. package/dist/esm/view/HoverCard/components/views/resolved/index.js +6 -2
  49. package/dist/esm/view/LinkUrl/index.js +1 -1
  50. package/dist/types/messages.d.ts +1 -1
  51. package/dist/types/state/hooks/use-related-urls/index.d.ts +6 -0
  52. package/dist/types/view/FlexibleCard/components/blocks/index.d.ts +1 -0
  53. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/errored/index.d.ts +3 -0
  54. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/errored/types.d.ts +4 -0
  55. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/index.d.ts +13 -0
  56. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/resolved/index.d.ts +3 -0
  57. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/index.d.ts +4 -0
  58. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/index.d.ts +4 -0
  59. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/types.d.ts +7 -0
  60. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/types.d.ts +10 -0
  61. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/resolved/types.d.ts +8 -0
  62. package/dist/types/view/FlexibleCard/components/blocks/related-urls-block/resolving/index.d.ts +5 -0
  63. package/dist/types-ts4.5/messages.d.ts +1 -1
  64. package/dist/types-ts4.5/state/hooks/use-related-urls/index.d.ts +6 -0
  65. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/index.d.ts +1 -0
  66. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/errored/index.d.ts +3 -0
  67. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/errored/types.d.ts +4 -0
  68. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/index.d.ts +13 -0
  69. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/resolved/index.d.ts +3 -0
  70. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/index.d.ts +4 -0
  71. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/index.d.ts +4 -0
  72. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/related-url-item/types.d.ts +7 -0
  73. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/resolved/related-url-list/types.d.ts +10 -0
  74. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/resolved/types.d.ts +8 -0
  75. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/related-urls-block/resolving/index.d.ts +5 -0
  76. package/package.json +6 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 26.41.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#41654](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/41654) [`dddfb1500d0`](https://bitbucket.org/atlassian/atlassian-frontend/commits/dddfb1500d0) - [ux] expermintal hover chard changes to show related urls section behind feature flag
8
+
3
9
  ## 26.40.0
4
10
 
5
11
  ### Minor Changes
@@ -542,5 +542,25 @@ var messages = exports.messages = (0, _reactIntlNext.defineMessages)({
542
542
  id: 'fabric.linking.forbidden_description_crossjoin',
543
543
  defaultMessage: 'Contact your admin to request access to {hostname}.',
544
544
  description: 'Informs the user that they must contact the site administrator for access.'
545
+ },
546
+ related_work_items_not_found: {
547
+ id: 'fabric.linking.related_work_items_not_found',
548
+ defaultMessage: 'This link is not mentioned anywhere else.',
549
+ description: 'Informs the user that there are no related resources for a given url'
550
+ },
551
+ last_mentioned_in: {
552
+ id: 'fabric.linking.last_mentioned_in',
553
+ defaultMessage: 'Last mentioned in',
554
+ description: 'Informs the user about where the resource was last mentioned in'
555
+ },
556
+ related: {
557
+ id: 'fabric.linking.related',
558
+ defaultMessage: 'Related',
559
+ description: 'Informs the user about related resources'
560
+ },
561
+ generic_error_message: {
562
+ id: 'fabric.linking.generic_error_message',
563
+ defaultMessage: 'An error occurred',
564
+ description: 'A generic error message to the user'
545
565
  }
546
566
  });
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _react = require("react");
11
+ var _linkClientExtension = require("@atlaskit/link-client-extension");
12
+ var _linkProvider = require("@atlaskit/link-provider");
13
+ var useRelatedUrls = function useRelatedUrls() {
14
+ var _useSmartLinkContext = (0, _linkProvider.useSmartLinkContext)(),
15
+ connections = _useSmartLinkContext.connections;
16
+ var clientExt = (0, _linkClientExtension.useSmartLinkClientExtension)(connections.client);
17
+ return (0, _react.useCallback)( /*#__PURE__*/function () {
18
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url) {
19
+ return _regenerator.default.wrap(function _callee$(_context) {
20
+ while (1) switch (_context.prev = _context.next) {
21
+ case 0:
22
+ _context.next = 2;
23
+ return clientExt.relatedUrls(url);
24
+ case 2:
25
+ return _context.abrupt("return", _context.sent);
26
+ case 3:
27
+ case "end":
28
+ return _context.stop();
29
+ }
30
+ }, _callee);
31
+ }));
32
+ return function (_x) {
33
+ return _ref.apply(this, arguments);
34
+ };
35
+ }(), [clientExt]);
36
+ };
37
+ var _default = exports.default = useRelatedUrls;
@@ -22,7 +22,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
22
22
  var context = exports.context = {
23
23
  componentName: 'smart-cards',
24
24
  packageName: "@atlaskit/smart-card",
25
- packageVersion: "26.40.0"
25
+ packageVersion: "26.41.0"
26
26
  };
27
27
  var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
28
28
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -34,6 +34,12 @@ Object.defineProperty(exports, "PreviewBlock", {
34
34
  return _previewBlock.default;
35
35
  }
36
36
  });
37
+ Object.defineProperty(exports, "RelatedUrlsBlock", {
38
+ enumerable: true,
39
+ get: function get() {
40
+ return _relatedUrlsBlock.default;
41
+ }
42
+ });
37
43
  Object.defineProperty(exports, "SnippetBlock", {
38
44
  enumerable: true,
39
45
  get: function get() {
@@ -52,4 +58,5 @@ var _previewBlock = _interopRequireDefault(require("./preview-block"));
52
58
  var _snippetBlock = _interopRequireDefault(require("./snippet-block"));
53
59
  var _titleBlock = _interopRequireDefault(require("./title-block"));
54
60
  var _block = _interopRequireDefault(require("./block"));
55
- var _resolved = _interopRequireDefault(require("./footer-block/resolved"));
61
+ var _resolved = _interopRequireDefault(require("./footer-block/resolved"));
62
+ var _relatedUrlsBlock = _interopRequireDefault(require("./related-urls-block"));
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RelatedUrlsBlockErroredView = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _messages = require("../../../../../../messages");
12
+ var _text = _interopRequireDefault(require("../../../elements/text"));
13
+ var _block = _interopRequireDefault(require("../../block"));
14
+ var _excluded = ["testId"];
15
+ var RelatedUrlsBlockErroredView = exports.RelatedUrlsBlockErroredView = function RelatedUrlsBlockErroredView(_ref) {
16
+ var testId = _ref.testId,
17
+ blockProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
18
+ return /*#__PURE__*/_react.default.createElement(_block.default, (0, _extends2.default)({}, blockProps, {
19
+ testId: testId
20
+ }), /*#__PURE__*/_react.default.createElement(_text.default, {
21
+ message: {
22
+ descriptor: _messages.messages.generic_error_message
23
+ }
24
+ }));
25
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
+ var _react = _interopRequireWildcard(require("react"));
16
+ var _reactMagneticDi = require("react-magnetic-di");
17
+ var _react2 = require("@emotion/react");
18
+ var _useRelatedUrls = _interopRequireDefault(require("../../../../../state/hooks/use-related-urls"));
19
+ var _errored = require("./errored");
20
+ var _resolved = require("./resolved");
21
+ var _resolving = require("./resolving");
22
+ var _templateObject;
23
+ var _excluded = ["testId", "url", "renderers"];
24
+ 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); }
25
+ 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; }
26
+ /**
27
+ * Represents a block to display related resources of a url
28
+ */
29
+ var RelatedUrlsBlock = function RelatedUrlsBlock(_ref) {
30
+ var _ref$testId = _ref.testId,
31
+ testId = _ref$testId === void 0 ? 'smart-block-related-urls' : _ref$testId,
32
+ url = _ref.url,
33
+ renderers = _ref.renderers,
34
+ blockProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
35
+ var _useState = (0, _react.useState)(true),
36
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
37
+ loadingRelatedUrls = _useState2[0],
38
+ setLoadingRelatedUrls = _useState2[1];
39
+ var _useState3 = (0, _react.useState)(),
40
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
41
+ err = _useState4[0],
42
+ setErr = _useState4[1];
43
+ var _useState5 = (0, _react.useState)(),
44
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
45
+ relatedUrls = _useState6[0],
46
+ setRelatedUrls = _useState6[1];
47
+ var getRelatedUrls = (0, _useRelatedUrls.default)();
48
+ (0, _react.useEffect)(function () {
49
+ var fetchRelatedUrls = /*#__PURE__*/function () {
50
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
51
+ var relUrls;
52
+ return _regenerator.default.wrap(function _callee$(_context) {
53
+ while (1) switch (_context.prev = _context.next) {
54
+ case 0:
55
+ _context.prev = 0;
56
+ _context.next = 3;
57
+ return getRelatedUrls(url);
58
+ case 3:
59
+ relUrls = _context.sent;
60
+ setRelatedUrls(relUrls);
61
+ _context.next = 10;
62
+ break;
63
+ case 7:
64
+ _context.prev = 7;
65
+ _context.t0 = _context["catch"](0);
66
+ setErr(_context.t0);
67
+ case 10:
68
+ setLoadingRelatedUrls(false);
69
+ case 11:
70
+ case "end":
71
+ return _context.stop();
72
+ }
73
+ }, _callee, null, [[0, 7]]);
74
+ }));
75
+ return function fetchRelatedUrls() {
76
+ return _ref2.apply(this, arguments);
77
+ };
78
+ }();
79
+ fetchRelatedUrls();
80
+ }, [getRelatedUrls, url]);
81
+ if (loadingRelatedUrls) {
82
+ return /*#__PURE__*/_react.default.createElement(_resolving.RelatedUrlsBlockResolvingView, (0, _extends2.default)({
83
+ testId: "".concat(testId, "-resolving-view")
84
+ }, blockProps));
85
+ }
86
+ if (relatedUrls) {
87
+ return /*#__PURE__*/_react.default.createElement(_resolved.RelatedUrlsResolvedView, (0, _extends2.default)({
88
+ renderers: renderers,
89
+ overrideCss: (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n min-height: 1.55rem;\n "]))),
90
+ testId: "".concat(testId, "-resolved-view"),
91
+ relatedUrlsResponse: relatedUrls
92
+ }, blockProps));
93
+ }
94
+ return /*#__PURE__*/_react.default.createElement(_errored.RelatedUrlsBlockErroredView, (0, _extends2.default)({
95
+ err: err,
96
+ testId: "".concat(testId, "-errored-view")
97
+ }, blockProps));
98
+ };
99
+ var _default = exports.default = RelatedUrlsBlock;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RelatedUrlsResolvedView = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _messages = require("../../../../../../messages");
12
+ var _block = _interopRequireDefault(require("../../block"));
13
+ var _relatedUrlList = _interopRequireDefault(require("./related-url-list"));
14
+ var _excluded = ["relatedUrlsResponse", "renderers", "testId", "initializeOpened"];
15
+ var RelatedUrlsResolvedView = exports.RelatedUrlsResolvedView = function RelatedUrlsResolvedView(_ref) {
16
+ var resolvedResults = _ref.relatedUrlsResponse.resolvedResults,
17
+ renderers = _ref.renderers,
18
+ testId = _ref.testId,
19
+ initializeOpened = _ref.initializeOpened,
20
+ blockProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
21
+ return /*#__PURE__*/_react.default.createElement(_block.default, (0, _extends2.default)({}, blockProps, {
22
+ testId: testId
23
+ }), resolvedResults && /*#__PURE__*/_react.default.createElement(_relatedUrlList.default, {
24
+ testId: "".concat(testId, "-list"),
25
+ renderers: renderers,
26
+ initializeOpened: initializeOpened,
27
+ title: _messages.messages.last_mentioned_in,
28
+ resolvedResults: resolvedResults
29
+ }));
30
+ };
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _reactIntlNext = require("react-intl-next");
13
+ var _chevronDown = _interopRequireDefault(require("@atlaskit/icon/glyph/chevron-down"));
14
+ var _chevronUp = _interopRequireDefault(require("@atlaskit/icon/glyph/chevron-up"));
15
+ var _primitives = require("@atlaskit/primitives");
16
+ var _react2 = require("@emotion/react");
17
+ var _messages = require("../../../../../../../messages");
18
+ var _utils = require("../../../../../components/utils");
19
+ var _text = _interopRequireDefault(require("../../../../elements/text"));
20
+ var _relatedUrlItem = _interopRequireDefault(require("./related-url-item"));
21
+ var _templateObject;
22
+ 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); }
23
+ 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; }
24
+ var RelatedUrlList = function RelatedUrlList(_ref) {
25
+ var resolvedResults = _ref.resolvedResults,
26
+ title = _ref.title,
27
+ renderers = _ref.renderers,
28
+ testId = _ref.testId,
29
+ initializeOpened = _ref.initializeOpened;
30
+ var _useState = (0, _react.useState)(initializeOpened),
31
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
32
+ isOpen = _useState2[0],
33
+ setIsOpen = _useState2[1];
34
+ var chevronClickHandler = (0, _react.useCallback)(function () {
35
+ return setIsOpen(!isOpen);
36
+ }, [isOpen]);
37
+ var ChevronComponent = isOpen ? _chevronUp.default : _chevronDown.default;
38
+ var intl = (0, _reactIntlNext.useIntl)();
39
+ var resolvedResultsStack = (0, _react.useMemo)(function () {
40
+ return /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
41
+ space: "space.050",
42
+ testId: "".concat(testId, "-items-wrapper")
43
+ }, resolvedResults.map(function (resolvedResults, idx) {
44
+ return /*#__PURE__*/_react.default.createElement(_relatedUrlItem.default, {
45
+ testId: "".concat(testId, "-item"),
46
+ key: idx,
47
+ results: resolvedResults,
48
+ renderers: renderers
49
+ });
50
+ }));
51
+ }, [renderers, resolvedResults, testId]);
52
+ return resolvedResults.length > 0 ? /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
53
+ testId: testId,
54
+ xcss: (0, _primitives.xcss)({
55
+ width: '100%'
56
+ })
57
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Box, {
58
+ onClick: chevronClickHandler,
59
+ testId: "".concat(testId, "-expand-title")
60
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Inline, {
61
+ alignBlock: "center",
62
+ spread: "space-between"
63
+ }, /*#__PURE__*/_react.default.createElement(_text.default, {
64
+ overrideCss: (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n font-weight: ", ";\n "])), "var(--ds-font-weight-medium, 500)"),
65
+ message: {
66
+ descriptor: title
67
+ }
68
+ }), /*#__PURE__*/_react.default.createElement(ChevronComponent, {
69
+ label: (0, _utils.getFormattedMessageAsString)(intl, title),
70
+ size: 'medium'
71
+ }))), isOpen && resolvedResultsStack) : /*#__PURE__*/_react.default.createElement(_text.default, {
72
+ testId: testId,
73
+ message: {
74
+ descriptor: _messages.messages.related_work_items_not_found
75
+ }
76
+ });
77
+ };
78
+ var _default = exports.default = RelatedUrlList;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _primitives = require("@atlaskit/primitives");
12
+ var _constants = require("../../../../../../../../constants");
13
+ var _flexible = _interopRequireDefault(require("../../../../../../../../extractors/flexible"));
14
+ var _icon = _interopRequireDefault(require("../../../../../elements/icon"));
15
+ var _link = _interopRequireDefault(require("../../../../../elements/link"));
16
+ 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); }
17
+ 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; }
18
+ var RelatedUrlItem = function RelatedUrlItem(_ref) {
19
+ var results = _ref.results,
20
+ renderers = _ref.renderers,
21
+ testId = _ref.testId;
22
+ var flexibleDataContext = (0, _react.useMemo)(function () {
23
+ return (0, _flexible.default)({
24
+ response: results,
25
+ renderers: renderers
26
+ });
27
+ }, [renderers, results]);
28
+ return /*#__PURE__*/_react.default.createElement(_primitives.Inline, {
29
+ alignBlock: "center",
30
+ space: "space.050",
31
+ testId: testId
32
+ }, /*#__PURE__*/_react.default.createElement(_icon.default, (0, _extends2.default)({}, flexibleDataContext === null || flexibleDataContext === void 0 ? void 0 : flexibleDataContext.linkIcon, {
33
+ testId: "".concat(testId, "-icon"),
34
+ size: _constants.SmartLinkSize.Small
35
+ })), /*#__PURE__*/_react.default.createElement(_link.default, {
36
+ testId: "".concat(testId, "-link"),
37
+ text: flexibleDataContext === null || flexibleDataContext === void 0 ? void 0 : flexibleDataContext.title,
38
+ url: flexibleDataContext === null || flexibleDataContext === void 0 ? void 0 : flexibleDataContext.url,
39
+ size: _constants.SmartLinkSize.Small,
40
+ maxLines: 1
41
+ }));
42
+ };
43
+ var _default = exports.default = RelatedUrlItem;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RelatedUrlsBlockResolvingView = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _loadingSkeleton = _interopRequireDefault(require("../../../common/loading-skeleton"));
12
+ var _block = _interopRequireDefault(require("../../block"));
13
+ var _excluded = ["testId"];
14
+ var RelatedUrlsBlockResolvingView = exports.RelatedUrlsBlockResolvingView = function RelatedUrlsBlockResolvingView(_ref) {
15
+ var testId = _ref.testId,
16
+ blockProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
17
+ return /*#__PURE__*/_react.default.createElement(_block.default, (0, _extends2.default)({}, blockProps, {
18
+ testId: testId
19
+ }), /*#__PURE__*/_react.default.createElement(_loadingSkeleton.default, {
20
+ height: 1.55,
21
+ width: 22
22
+ }));
23
+ };
@@ -65,7 +65,8 @@ var HoverCardResolvedView = function HoverCardResolvedView(_ref) {
65
65
  _ref$cardActions = _ref.cardActions,
66
66
  cardActions = _ref$cardActions === void 0 ? [] : _ref$cardActions,
67
67
  onActionClick = _ref.onActionClick,
68
- extensionKey = _ref.extensionKey;
68
+ extensionKey = _ref.extensionKey,
69
+ url = _ref.url;
69
70
  var canBeDatasource = (0, _helpers.getCanBeDatasource)(cardState.details);
70
71
  (0, _react.useEffect)(function () {
71
72
  // Since this hover view is only rendered on resolved status,
@@ -129,6 +130,9 @@ var HoverCardResolvedView = function HoverCardResolvedView(_ref) {
129
130
  size: _constants.SmartLinkSize.Large,
130
131
  overrideCss: _styled.metadataBlockCss,
131
132
  maxLines: 1
133
+ }), (0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.smart-card.enable-hover-card-related-urls') && /*#__PURE__*/_react.default.createElement(_blocks.RelatedUrlsBlock, {
134
+ url: url,
135
+ size: _constants.SmartLinkSize.Small
132
136
  }), /*#__PURE__*/_react.default.createElement(_blocks.FooterBlock, {
133
137
  actions: footerActions,
134
138
  size: _constants.SmartLinkSize.Large,
@@ -18,7 +18,7 @@ var _excluded = ["href", "children", "checkSafety", "onClick", "testId"],
18
18
  _excluded2 = ["isLinkSafe", "showSafetyWarningModal"];
19
19
  var PACKAGE_DATA = {
20
20
  packageName: "@atlaskit/smart-card",
21
- packageVersion: "26.40.0",
21
+ packageVersion: "26.41.0",
22
22
  componentName: 'linkUrl'
23
23
  };
24
24
  var Link = (0, _click.withLinkClickedEvent)('a');
@@ -536,5 +536,25 @@ export const messages = defineMessages({
536
536
  id: 'fabric.linking.forbidden_description_crossjoin',
537
537
  defaultMessage: 'Contact your admin to request access to {hostname}.',
538
538
  description: 'Informs the user that they must contact the site administrator for access.'
539
+ },
540
+ related_work_items_not_found: {
541
+ id: 'fabric.linking.related_work_items_not_found',
542
+ defaultMessage: 'This link is not mentioned anywhere else.',
543
+ description: 'Informs the user that there are no related resources for a given url'
544
+ },
545
+ last_mentioned_in: {
546
+ id: 'fabric.linking.last_mentioned_in',
547
+ defaultMessage: 'Last mentioned in',
548
+ description: 'Informs the user about where the resource was last mentioned in'
549
+ },
550
+ related: {
551
+ id: 'fabric.linking.related',
552
+ defaultMessage: 'Related',
553
+ description: 'Informs the user about related resources'
554
+ },
555
+ generic_error_message: {
556
+ id: 'fabric.linking.generic_error_message',
557
+ defaultMessage: 'An error occurred',
558
+ description: 'A generic error message to the user'
539
559
  }
540
560
  });
@@ -0,0 +1,13 @@
1
+ import { useCallback } from 'react';
2
+ import { useSmartLinkClientExtension } from '@atlaskit/link-client-extension';
3
+ import { useSmartLinkContext } from '@atlaskit/link-provider';
4
+ const useRelatedUrls = () => {
5
+ const {
6
+ connections
7
+ } = useSmartLinkContext();
8
+ const clientExt = useSmartLinkClientExtension(connections.client);
9
+ return useCallback(async url => {
10
+ return await clientExt.relatedUrls(url);
11
+ }, [clientExt]);
12
+ };
13
+ export default useRelatedUrls;
@@ -4,7 +4,7 @@ export const ANALYTICS_CHANNEL = 'media';
4
4
  export const context = {
5
5
  componentName: 'smart-cards',
6
6
  packageName: "@atlaskit/smart-card",
7
- packageVersion: "26.40.0"
7
+ packageVersion: "26.41.0"
8
8
  };
9
9
  export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
10
10
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -6,4 +6,5 @@ export { default as TitleBlock } from './title-block';
6
6
  export { default as CustomBlock } from './block';
7
7
 
8
8
  // Internal components to be used within @atlaskit/smart-card only.
9
- export { default as InternalFooterBlock } from './footer-block/resolved';
9
+ export { default as InternalFooterBlock } from './footer-block/resolved';
10
+ export { default as RelatedUrlsBlock } from './related-urls-block';
@@ -0,0 +1,15 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React from 'react';
3
+ import { messages } from '../../../../../../messages';
4
+ import Text from '../../../elements/text';
5
+ import Block from '../../block';
6
+ export const RelatedUrlsBlockErroredView = ({
7
+ testId,
8
+ ...blockProps
9
+ }) => /*#__PURE__*/React.createElement(Block, _extends({}, blockProps, {
10
+ testId: testId
11
+ }), /*#__PURE__*/React.createElement(Text, {
12
+ message: {
13
+ descriptor: messages.generic_error_message
14
+ }
15
+ }));
@@ -0,0 +1,54 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { useEffect, useState } from 'react';
3
+ import { di } from 'react-magnetic-di';
4
+ import { css } from '@emotion/react';
5
+ import useRelatedUrls from '../../../../../state/hooks/use-related-urls';
6
+ import { RelatedUrlsBlockErroredView } from './errored';
7
+ import { RelatedUrlsResolvedView } from './resolved';
8
+ import { RelatedUrlsBlockResolvingView } from './resolving';
9
+ /**
10
+ * Represents a block to display related resources of a url
11
+ */
12
+ const RelatedUrlsBlock = ({
13
+ testId = 'smart-block-related-urls',
14
+ url,
15
+ renderers,
16
+ ...blockProps
17
+ }) => {
18
+ const [loadingRelatedUrls, setLoadingRelatedUrls] = useState(true);
19
+ const [err, setErr] = useState();
20
+ const [relatedUrls, setRelatedUrls] = useState();
21
+ const getRelatedUrls = useRelatedUrls();
22
+ useEffect(() => {
23
+ const fetchRelatedUrls = async () => {
24
+ try {
25
+ const relUrls = await getRelatedUrls(url);
26
+ setRelatedUrls(relUrls);
27
+ } catch (error) {
28
+ setErr(error);
29
+ }
30
+ setLoadingRelatedUrls(false);
31
+ };
32
+ fetchRelatedUrls();
33
+ }, [getRelatedUrls, url]);
34
+ if (loadingRelatedUrls) {
35
+ return /*#__PURE__*/React.createElement(RelatedUrlsBlockResolvingView, _extends({
36
+ testId: `${testId}-resolving-view`
37
+ }, blockProps));
38
+ }
39
+ if (relatedUrls) {
40
+ return /*#__PURE__*/React.createElement(RelatedUrlsResolvedView, _extends({
41
+ renderers: renderers,
42
+ overrideCss: css`
43
+ min-height: 1.55rem;
44
+ `,
45
+ testId: `${testId}-resolved-view`,
46
+ relatedUrlsResponse: relatedUrls
47
+ }, blockProps));
48
+ }
49
+ return /*#__PURE__*/React.createElement(RelatedUrlsBlockErroredView, _extends({
50
+ err: err,
51
+ testId: `${testId}-errored-view`
52
+ }, blockProps));
53
+ };
54
+ export default RelatedUrlsBlock;
@@ -0,0 +1,24 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React from 'react';
3
+ import { messages } from '../../../../../../messages';
4
+ import Block from '../../block';
5
+ import RelatedUrlsList from './related-url-list';
6
+ export const RelatedUrlsResolvedView = ({
7
+ relatedUrlsResponse: {
8
+ resolvedResults
9
+ },
10
+ renderers,
11
+ testId,
12
+ initializeOpened,
13
+ ...blockProps
14
+ }) => {
15
+ return /*#__PURE__*/React.createElement(Block, _extends({}, blockProps, {
16
+ testId: testId
17
+ }), resolvedResults && /*#__PURE__*/React.createElement(RelatedUrlsList, {
18
+ testId: `${testId}-list`,
19
+ renderers: renderers,
20
+ initializeOpened: initializeOpened,
21
+ title: messages.last_mentioned_in,
22
+ resolvedResults: resolvedResults
23
+ }));
24
+ };