@atlaskit/smart-card 41.0.2 → 41.0.4

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 (55) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/state/hooks/use-resolve-hyperlink/index.js +72 -0
  3. package/dist/cjs/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.js +36 -0
  4. package/dist/cjs/utils/analytics/analytics.js +1 -1
  5. package/dist/cjs/view/EmbedModal/components/link-info/index.js +3 -1
  6. package/dist/cjs/view/LinkUrl/Hyperlink/index.js +32 -0
  7. package/dist/cjs/view/LinkUrl/HyperlinkResolver/error-boundary.js +1 -0
  8. package/dist/cjs/view/LinkUrl/HyperlinkResolver/index.js +75 -18
  9. package/dist/cjs/view/LinkUrl/HyperlinkResolver/resolve-hyperlink.js +2 -1
  10. package/dist/cjs/view/LinkUrl/HyperlinkResolver/unauthorize-view.js +34 -0
  11. package/dist/cjs/view/LinkUrl/index.js +33 -4
  12. package/dist/cjs/view/RelatedLinksModal/components/RelatedLinksBaseModal.js +3 -7
  13. package/dist/cjs/view/common/intl-provider/index.js +21 -0
  14. package/dist/es2019/state/hooks/use-resolve-hyperlink/index.js +60 -0
  15. package/dist/es2019/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.js +28 -0
  16. package/dist/es2019/utils/analytics/analytics.js +1 -1
  17. package/dist/es2019/view/EmbedModal/components/link-info/index.js +5 -2
  18. package/dist/es2019/view/LinkUrl/Hyperlink/index.js +23 -0
  19. package/dist/es2019/view/LinkUrl/HyperlinkResolver/error-boundary.js +1 -0
  20. package/dist/es2019/view/LinkUrl/HyperlinkResolver/index.js +64 -14
  21. package/dist/es2019/view/LinkUrl/HyperlinkResolver/resolve-hyperlink.js +3 -1
  22. package/dist/es2019/view/LinkUrl/HyperlinkResolver/unauthorize-view.js +22 -0
  23. package/dist/es2019/view/LinkUrl/index.js +31 -4
  24. package/dist/es2019/view/RelatedLinksModal/components/RelatedLinksBaseModal.js +3 -7
  25. package/dist/es2019/view/common/intl-provider/index.js +13 -0
  26. package/dist/esm/state/hooks/use-resolve-hyperlink/index.js +63 -0
  27. package/dist/esm/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.js +29 -0
  28. package/dist/esm/utils/analytics/analytics.js +1 -1
  29. package/dist/esm/view/EmbedModal/components/link-info/index.js +4 -2
  30. package/dist/esm/view/LinkUrl/Hyperlink/index.js +25 -0
  31. package/dist/esm/view/LinkUrl/HyperlinkResolver/error-boundary.js +1 -0
  32. package/dist/esm/view/LinkUrl/HyperlinkResolver/index.js +73 -16
  33. package/dist/esm/view/LinkUrl/HyperlinkResolver/resolve-hyperlink.js +3 -1
  34. package/dist/esm/view/LinkUrl/HyperlinkResolver/unauthorize-view.js +25 -0
  35. package/dist/esm/view/LinkUrl/index.js +31 -4
  36. package/dist/esm/view/RelatedLinksModal/components/RelatedLinksBaseModal.js +3 -7
  37. package/dist/esm/view/common/intl-provider/index.js +15 -0
  38. package/dist/types/state/hooks/use-resolve-hyperlink/index.d.ts +13 -0
  39. package/dist/types/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.d.ts +4 -0
  40. package/dist/types/view/LinkUrl/Hyperlink/index.d.ts +8 -0
  41. package/dist/types/view/LinkUrl/HyperlinkResolver/index.d.ts +2 -0
  42. package/dist/types/view/LinkUrl/HyperlinkResolver/unauthorize-view.d.ts +9 -0
  43. package/dist/types/view/common/intl-provider/index.d.ts +7 -0
  44. package/dist/types-ts4.5/state/hooks/use-resolve-hyperlink/index.d.ts +13 -0
  45. package/dist/types-ts4.5/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.d.ts +4 -0
  46. package/dist/types-ts4.5/view/LinkUrl/Hyperlink/index.d.ts +8 -0
  47. package/dist/types-ts4.5/view/LinkUrl/HyperlinkResolver/index.d.ts +2 -0
  48. package/dist/types-ts4.5/view/LinkUrl/HyperlinkResolver/unauthorize-view.d.ts +9 -0
  49. package/dist/types-ts4.5/view/common/intl-provider/index.d.ts +7 -0
  50. package/package.json +12 -17
  51. /package/dist/cjs/{view/LinkUrl/HyperlinkResolver/hooks → state/hooks/use-resolve-hyperlink}/useScheduledRegister.js +0 -0
  52. /package/dist/es2019/{view/LinkUrl/HyperlinkResolver/hooks → state/hooks/use-resolve-hyperlink}/useScheduledRegister.js +0 -0
  53. /package/dist/esm/{view/LinkUrl/HyperlinkResolver/hooks → state/hooks/use-resolve-hyperlink}/useScheduledRegister.js +0 -0
  54. /package/dist/types/{view/LinkUrl/HyperlinkResolver/hooks → state/hooks/use-resolve-hyperlink}/useScheduledRegister.d.ts +0 -0
  55. /package/dist/types-ts4.5/{view/LinkUrl/HyperlinkResolver/hooks → state/hooks/use-resolve-hyperlink}/useScheduledRegister.d.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 41.0.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`715fccf11b23f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/715fccf11b23f) -
8
+ Refactor resolve LinkUrl experiment
9
+ - Updated dependencies
10
+
11
+ ## 41.0.3
12
+
13
+ ### Patch Changes
14
+
15
+ - [`335984a76875c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/335984a76875c) -
16
+ NAVX-1895 fixing error in home with embed modal close button label
17
+ - [`5ad76e50d561a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/5ad76e50d561a) -
18
+ NAVX-1851 cleaning up navx-1304-related-links-remove-false-autofocus
19
+ - Updated dependencies
20
+
3
21
  ## 41.0.2
4
22
 
5
23
  ### Patch Changes
@@ -0,0 +1,72 @@
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = require("react");
11
+ var _uuid = _interopRequireDefault(require("uuid"));
12
+ var _useAnalyticsEvents2 = require("../../../common/analytics/generated/use-analytics-events");
13
+ var measure = _interopRequireWildcard(require("../../../utils/performance"));
14
+ var _actions = require("../../actions");
15
+ var _helpers = require("../../helpers");
16
+ var _store = require("../../store");
17
+ var _useScheduledRegister = require("./useScheduledRegister");
18
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
19
+ var useResolveHyperlink = function useResolveHyperlink(_ref) {
20
+ var href = _ref.href;
21
+ var _useState = (0, _react.useState)(function () {
22
+ return (0, _uuid.default)();
23
+ }),
24
+ _useState2 = (0, _slicedToArray2.default)(_useState, 1),
25
+ id = _useState2[0];
26
+ var state = (0, _store.useSmartCardState)(href);
27
+ var definitionId = (0, _helpers.getDefinitionId)(state.details);
28
+ var extensionKey = (0, _helpers.getExtensionKey)(state.details);
29
+ var resourceType = (0, _helpers.getResourceType)(state.details);
30
+ var actions = (0, _actions.useSmartCardActions)(id, href);
31
+ var scheduledRegister = (0, _useScheduledRegister.useScheduledRegister)(href, actions.register);
32
+ var _useAnalyticsEvents = (0, _useAnalyticsEvents2.useAnalyticsEvents)(),
33
+ fireEvent = _useAnalyticsEvents.fireEvent;
34
+ (0, _react.useEffect)(function () {
35
+ scheduledRegister().catch(function (error) {
36
+ throw error;
37
+ });
38
+ }, [scheduledRegister]);
39
+ (0, _react.useEffect)(function () {
40
+ measure.mark(id, state.status);
41
+ if (state.status !== 'pending' && state.status !== 'resolving') {
42
+ var _state$error, _state$error2;
43
+ measure.create(id, state.status);
44
+ if (state.status === 'resolved') {
45
+ var _measure$getMeasure$d, _measure$getMeasure;
46
+ fireEvent('operational.hyperlink.resolved', {
47
+ definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null,
48
+ extensionKey: extensionKey !== null && extensionKey !== void 0 ? extensionKey : null,
49
+ resourceType: resourceType !== null && resourceType !== void 0 ? resourceType : null,
50
+ duration: (_measure$getMeasure$d = (_measure$getMeasure = measure.getMeasure(id, state.status)) === null || _measure$getMeasure === void 0 ? void 0 : _measure$getMeasure.duration) !== null && _measure$getMeasure$d !== void 0 ? _measure$getMeasure$d : null
51
+ });
52
+ } else if (((_state$error = state.error) === null || _state$error === void 0 ? void 0 : _state$error.type) !== 'ResolveUnsupportedError' && ((_state$error2 = state.error) === null || _state$error2 === void 0 ? void 0 : _state$error2.type) !== 'UnsupportedError') {
53
+ fireEvent('operational.hyperlink.unresolved', {
54
+ definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null,
55
+ extensionKey: extensionKey !== null && extensionKey !== void 0 ? extensionKey : null,
56
+ resourceType: resourceType !== null && resourceType !== void 0 ? resourceType : null,
57
+ reason: state.status,
58
+ error: state.error === undefined ? null : {
59
+ name: state.error.name,
60
+ kind: state.error.kind,
61
+ type: state.error.type
62
+ }
63
+ });
64
+ }
65
+ }
66
+ }, [id, state.status, state.error, definitionId, extensionKey, resourceType, fireEvent]);
67
+ return {
68
+ state: state,
69
+ actions: actions
70
+ };
71
+ };
72
+ var _default = exports.default = useResolveHyperlink;
@@ -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.isSharePointDomain = exports.isGoogleDomain = exports.default = void 0;
8
+ var _react = require("react");
9
+ var _featureGateJsClient = _interopRequireDefault(require("@atlaskit/feature-gate-js-client"));
10
+ var _linkProvider = require("@atlaskit/link-provider");
11
+ var isSharePointDomain = exports.isSharePointDomain = function isSharePointDomain(href) {
12
+ try {
13
+ var hostname = new URL(href).hostname.toLowerCase();
14
+ return hostname.includes('sharepoint.com') || hostname.includes('onedrive.live.com');
15
+ } catch (_unused) {
16
+ return false;
17
+ }
18
+ };
19
+ var isGoogleDomain = exports.isGoogleDomain = function isGoogleDomain(href) {
20
+ try {
21
+ var hostname = new URL(href).hostname.toLowerCase();
22
+ return hostname.includes('docs.google.com') || hostname.includes('drive.google.com');
23
+ } catch (_unused2) {
24
+ return false;
25
+ }
26
+ };
27
+ var useResolveHyperlinkValidator = function useResolveHyperlinkValidator() {
28
+ var href = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
29
+ var hasSmartCardProvider = !!(0, _react.useContext)(_linkProvider.SmartCardContext);
30
+ var isSharePointResolveEnabled = _featureGateJsClient.default.getExperimentValue('platform_editor_resolve_hyperlinks_confluence', 'isEnabled', false) || _featureGateJsClient.default.getExperimentValue('platform_editor_resolve_hyperlinks_jira', 'isEnabled', false);
31
+ var isGoogleResolveEnabled = _featureGateJsClient.default.getExperimentValue('platform_editor_resolve_google_hyperlinks', 'isEnabled', false);
32
+ var shouldResolveSharePoint = isSharePointDomain(href) && isSharePointResolveEnabled;
33
+ var shouldResolveGoogle = isGoogleDomain(href) && isGoogleResolveEnabled;
34
+ return hasSmartCardProvider && (shouldResolveSharePoint || shouldResolveGoogle);
35
+ };
36
+ var _default = exports.default = useResolveHyperlinkValidator;
@@ -11,7 +11,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
11
11
  var context = exports.context = {
12
12
  componentName: 'smart-cards',
13
13
  packageName: "@atlaskit/smart-card",
14
- packageVersion: "41.0.2"
14
+ packageVersion: "41.0.3"
15
15
  };
16
16
  var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
17
17
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -47,6 +47,8 @@ var LinkInfo = function LinkInfo(_ref) {
47
47
  title = _ref.title;
48
48
  var _useModal = (0, _modalDialog.useModal)(),
49
49
  onClose = _useModal.onClose;
50
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
51
+ formatMessage = _useIntl.formatMessage;
50
52
  var downloadButton = (0, _react.useMemo)(function () {
51
53
  if (onDownloadButtonClick) {
52
54
  return /*#__PURE__*/_react.default.createElement(_linkInfoButton.default, {
@@ -136,7 +138,7 @@ var LinkInfo = function LinkInfo(_ref) {
136
138
  testId: "".concat(testId, "-close-tooltip")
137
139
  }, /*#__PURE__*/_react.default.createElement(_modalDialog.CloseButton, {
138
140
  onClick: onClose,
139
- label: _messages.messages.preview_close.defaultMessage,
141
+ label: formatMessage(_messages.messages.preview_close),
140
142
  testId: "".concat(testId, "-close-button")
141
143
  })) : /*#__PURE__*/_react.default.createElement(_linkInfoButton.default, {
142
144
  content: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.preview_close),
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.LinkComponent = 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 _link = _interopRequireDefault(require("@atlaskit/link"));
12
+ var _click = require("../../../utils/analytics/click");
13
+ var _excluded = ["href", "children", "testId", "isLinkComponent"];
14
+ var Anchor = (0, _click.withLinkClickedEvent)('a');
15
+ var LinkComponent = exports.LinkComponent = (0, _click.withLinkClickedEvent)(_link.default);
16
+ var Hyperlink = function Hyperlink(_ref) {
17
+ var href = _ref.href,
18
+ children = _ref.children,
19
+ testId = _ref.testId,
20
+ _ref$isLinkComponent = _ref.isLinkComponent,
21
+ isLinkComponent = _ref$isLinkComponent === void 0 ? false : _ref$isLinkComponent,
22
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
23
+ var Link = isLinkComponent ? LinkComponent : Anchor;
24
+ return /*#__PURE__*/_react.default.createElement(Link, (0, _extends2.default)({}, isLinkComponent ? {
25
+ testId: testId
26
+ } : {
27
+ 'data-testid': testId
28
+ }, {
29
+ href: href || ''
30
+ }, props), children);
31
+ };
32
+ var _default = exports.default = Hyperlink;
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  var _reactErrorBoundary = require("react-error-boundary");
10
+ // Remove on navx-1834-refactor-resolved-hyperlink cleanup
10
11
  var withErrorBoundary = function withErrorBoundary(Component) {
11
12
  return function (props) {
12
13
  return /*#__PURE__*/_react.default.createElement(_reactErrorBoundary.ErrorBoundary, {
@@ -5,36 +5,93 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = void 0;
8
+ exports.default = exports.HyperlinkWithSmartLinkResolver = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
11
  var _react = _interopRequireWildcard(require("react"));
12
+ var _reactErrorBoundary = require("react-error-boundary");
13
+ var _reactIntlNext = require("react-intl-next");
10
14
  var _featureGateJsClient = _interopRequireDefault(require("@atlaskit/feature-gate-js-client"));
15
+ var _linkExtractors = require("@atlaskit/link-extractors");
16
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
17
  var _state = require("../../../state");
18
+ var _helpers = require("../../../state/helpers");
19
+ var _useResolveHyperlink2 = _interopRequireDefault(require("../../../state/hooks/use-resolve-hyperlink"));
20
+ var _useResolveHyperlinkValidator = _interopRequireWildcard(require("../../../state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator"));
21
+ var _intlProvider = _interopRequireDefault(require("../../common/intl-provider"));
22
+ var _Hyperlink = _interopRequireDefault(require("../Hyperlink"));
12
23
  var _errorBoundary = _interopRequireDefault(require("./error-boundary"));
13
24
  var _resolveHyperlink = require("./resolve-hyperlink");
25
+ var _unauthorizeView = _interopRequireDefault(require("./unauthorize-view"));
26
+ var _excluded = ["onClick"];
14
27
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
15
- var isSharePointDomain = function isSharePointDomain(href) {
16
- try {
17
- var hostname = new URL(href).hostname.toLowerCase();
18
- return hostname.includes('sharepoint.com') || hostname.includes('onedrive.live.com');
19
- } catch (_unused) {
20
- return false;
21
- }
28
+ var HyperlinkFallbackComponent = function HyperlinkFallbackComponent() {
29
+ return null;
30
+ };
31
+ var withValidator = function withValidator(Component, DefaultComponent) {
32
+ return function (props) {
33
+ var shouldResolveHyperlink = (0, _useResolveHyperlinkValidator.default)(props === null || props === void 0 ? void 0 : props.href);
34
+ return shouldResolveHyperlink ? /*#__PURE__*/_react.default.createElement(Component, props) : /*#__PURE__*/_react.default.createElement(DefaultComponent, props);
35
+ };
22
36
  };
23
- var isGoogleDomain = function isGoogleDomain(href) {
24
- try {
25
- var hostname = new URL(href).hostname.toLowerCase();
26
- return hostname.includes('docs.google.com') || hostname.includes('drive.google.com');
27
- } catch (_unused2) {
28
- return false;
37
+ var HyperlinkWithSmartLinkResolverInner = function HyperlinkWithSmartLinkResolverInner(_ref) {
38
+ var onClickCallback = _ref.onClick,
39
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
40
+ var _useResolveHyperlink = (0, _useResolveHyperlink2.default)({
41
+ href: props.href || ''
42
+ }),
43
+ actions = _useResolveHyperlink.actions,
44
+ state = _useResolveHyperlink.state;
45
+ var services = (0, _helpers.getServices)(state === null || state === void 0 ? void 0 : state.details);
46
+ var onClick = (0, _react.useCallback)(function (e) {
47
+ // TODO: AI3W-1203: 3P link click analytics
48
+
49
+ onClickCallback === null || onClickCallback === void 0 || onClickCallback(e);
50
+ }, [onClickCallback]);
51
+
52
+ // TODO: AI3W-1113: Show auth button
53
+ var onAuthorize = (0, _platformFeatureFlags.fg)('platform_linking_plain_hyperlink_connect_button') ?
54
+ // eslint-disable-next-line react-hooks/rules-of-hooks
55
+ (0, _react.useCallback)(function () {
56
+ return (
57
+ // TODO: Need to add hyperlink type
58
+ actions.authorize('inline')
59
+ );
60
+ }, [actions]) : undefined;
61
+ if ((0, _platformFeatureFlags.fg)('platform_linking_plain_hyperlink_connect_button')) {
62
+ switch (state === null || state === void 0 ? void 0 : state.status) {
63
+ case 'unauthorized':
64
+ var provider = (0, _linkExtractors.extractSmartLinkProvider)(state === null || state === void 0 ? void 0 : state.details);
65
+ return /*#__PURE__*/_react.default.createElement(_unauthorizeView.default, (0, _extends2.default)({}, props, {
66
+ onAuthorize: services !== null && services !== void 0 && services.length ? onAuthorize : undefined,
67
+ onClick: onClick,
68
+ provider: provider
69
+ }));
70
+ default:
71
+ return /*#__PURE__*/_react.default.createElement(_Hyperlink.default, (0, _extends2.default)({}, props, {
72
+ onClick: onClick
73
+ }));
74
+ }
29
75
  }
76
+ return /*#__PURE__*/_react.default.createElement(_Hyperlink.default, (0, _extends2.default)({}, props, {
77
+ onClick: onClick
78
+ }));
30
79
  };
31
- var HyperlinkResolver = function HyperlinkResolver(_ref) {
32
- var href = _ref.href;
80
+ var HyperlinkWithSmartLinkResolver = exports.HyperlinkWithSmartLinkResolver = (0, _reactErrorBoundary.withErrorBoundary)(withValidator((0, _reactIntlNext.injectIntl)((0, _intlProvider.default)(HyperlinkWithSmartLinkResolverInner), {
81
+ enforceContext: false
82
+ }), _Hyperlink.default), {
83
+ FallbackComponent: HyperlinkFallbackComponent
84
+ });
85
+
86
+ // Remove on navx-1834-refactor-resolved-hyperlink cleanup
87
+
88
+ var HyperlinkResolver = function HyperlinkResolver(_ref2) {
89
+ var href = _ref2.href;
33
90
  var hasSmartCardProvider = !!(0, _react.useContext)(_state.SmartCardContext);
34
91
  var isSharePointResolveEnabled = _featureGateJsClient.default.getExperimentValue('platform_editor_resolve_hyperlinks_confluence', 'isEnabled', false) || _featureGateJsClient.default.getExperimentValue('platform_editor_resolve_hyperlinks_jira', 'isEnabled', false);
35
92
  var isGoogleResolveEnabled = _featureGateJsClient.default.getExperimentValue('platform_editor_resolve_google_hyperlinks', 'isEnabled', false);
36
- var shouldResolveSharePoint = isSharePointDomain(href) && isSharePointResolveEnabled;
37
- var shouldResolveGoogle = isGoogleDomain(href) && isGoogleResolveEnabled;
93
+ var shouldResolveSharePoint = (0, _useResolveHyperlinkValidator.isSharePointDomain)(href) && isSharePointResolveEnabled;
94
+ var shouldResolveGoogle = (0, _useResolveHyperlinkValidator.isGoogleDomain)(href) && isGoogleResolveEnabled;
38
95
  var shouldResolveHyperlink = hasSmartCardProvider && (shouldResolveSharePoint || shouldResolveGoogle);
39
96
  if (!shouldResolveHyperlink) {
40
97
  return null;
@@ -12,10 +12,11 @@ var _uuid = _interopRequireDefault(require("uuid"));
12
12
  var _useAnalyticsEvents2 = require("../../../common/analytics/generated/use-analytics-events");
13
13
  var _actions = require("../../../state/actions");
14
14
  var _helpers = require("../../../state/helpers");
15
+ var _useScheduledRegister = require("../../../state/hooks/use-resolve-hyperlink/useScheduledRegister");
15
16
  var _store = require("../../../state/store");
16
17
  var measure = _interopRequireWildcard(require("../../../utils/performance"));
17
- var _useScheduledRegister = require("./hooks/useScheduledRegister");
18
18
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
19
+ // Remove on navx-1834-refactor-resolved-hyperlink cleanup
19
20
  var ResolveHyperlink = exports.ResolveHyperlink = function ResolveHyperlink(_ref) {
20
21
  var href = _ref.href;
21
22
  var _useState = (0, _react.useState)(function () {
@@ -0,0 +1,34 @@
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 _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _reactIntlNext = require("react-intl-next");
13
+ var _messages = require("../../../messages");
14
+ var _actionButton = require("../../InlineCard/common/action-button");
15
+ var _Hyperlink = _interopRequireDefault(require("../Hyperlink"));
16
+ var _excluded = ["onAuthorize", "provider"];
17
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
18
+ var HyperlinkUnauthorizedView = function HyperlinkUnauthorizedView(_ref) {
19
+ var onAuthorize = _ref.onAuthorize,
20
+ provider = _ref.provider,
21
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
22
+ var actionButton = (0, _react.useMemo)(function () {
23
+ return onAuthorize ? /*#__PURE__*/_react.default.createElement(_actionButton.ActionButton, {
24
+ onClick: onAuthorize,
25
+ testId: "button-connect-account"
26
+ }, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages.messages.connect_link_account_card_name, {
27
+ values: {
28
+ context: provider === null || provider === void 0 ? void 0 : provider.text
29
+ }
30
+ }))) : null;
31
+ }, [onAuthorize, provider === null || provider === void 0 ? void 0 : provider.text]);
32
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Hyperlink.default, props), actionButton);
33
+ };
34
+ var _default = exports.default = HyperlinkUnauthorizedView;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -12,16 +13,19 @@ var _reactMagneticDi = require("react-magnetic-di");
12
13
  var _analyticsNext = require("@atlaskit/analytics-next");
13
14
  var _featureGateJsClient = _interopRequireDefault(require("@atlaskit/feature-gate-js-client"));
14
15
  var _link = _interopRequireDefault(require("@atlaskit/link"));
16
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
17
  var _click = require("../../utils/analytics/click");
16
18
  var _LinkAnalyticsContext = require("../../utils/analytics/LinkAnalyticsContext");
17
- var _HyperlinkResolver = _interopRequireDefault(require("./HyperlinkResolver"));
19
+ var _Hyperlink = _interopRequireDefault(require("./Hyperlink"));
20
+ var _HyperlinkResolver = _interopRequireWildcard(require("./HyperlinkResolver"));
18
21
  var _LinkWarningModal = _interopRequireDefault(require("./LinkWarningModal"));
19
22
  var _useLinkWarningModal2 = require("./LinkWarningModal/hooks/use-link-warning-modal");
20
23
  var _excluded = ["href", "children", "checkSafety", "onClick", "testId", "isLinkComponent", "enableResolve"],
21
24
  _excluded2 = ["isLinkSafe", "showSafetyWarningModal"];
25
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
22
26
  var PACKAGE_DATA = {
23
27
  packageName: "@atlaskit/smart-card",
24
- packageVersion: "41.0.2",
28
+ packageVersion: "41.0.3",
25
29
  componentName: 'linkUrl'
26
30
  };
27
31
  var Anchor = (0, _click.withLinkClickedEvent)('a');
@@ -43,8 +47,33 @@ var LinkUrl = function LinkUrl(_ref) {
43
47
  isLinkSafe = _useLinkWarningModal.isLinkSafe,
44
48
  showSafetyWarningModal = _useLinkWarningModal.showSafetyWarningModal,
45
49
  linkWarningModalProps = (0, _objectWithoutProperties2.default)(_useLinkWarningModal, _excluded2);
46
- var Link = isLinkComponent ? LinkComponent : Anchor;
47
50
  var resolveHyperlinkFG = _featureGateJsClient.default.checkGate('platform_editor_resolve_hyperlinks_killswitch');
51
+ if ((0, _platformFeatureFlags.fg)('navx-1834-refactor-resolved-hyperlink')) {
52
+ if (resolveHyperlinkFG) {
53
+ var _Link = enableResolve ? _HyperlinkResolver.HyperlinkWithSmartLinkResolver : _Hyperlink.default;
54
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_LinkAnalyticsContext.LinkAnalyticsContext, {
55
+ url: href,
56
+ display: "url"
57
+ }, /*#__PURE__*/_react.default.createElement(_Link, (0, _extends2.default)({
58
+ href: href,
59
+ isLinkComponent: isLinkComponent,
60
+ onClick: function onClick(e) {
61
+ if (!checkSafety) {
62
+ _onClick && _onClick(e);
63
+ return;
64
+ }
65
+
66
+ // Only call the onClick if the link is safe
67
+ if (isLinkSafe(e, href)) {
68
+ _onClick && _onClick(e);
69
+ } else {
70
+ showSafetyWarningModal(e, href);
71
+ }
72
+ }
73
+ }, props), children)), checkSafety && /*#__PURE__*/_react.default.createElement(_LinkWarningModal.default, linkWarningModalProps));
74
+ }
75
+ }
76
+ var Link = isLinkComponent ? LinkComponent : Anchor;
48
77
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_LinkAnalyticsContext.LinkAnalyticsContext, {
49
78
  url: href,
50
79
  display: "url"
@@ -67,7 +96,7 @@ var LinkUrl = function LinkUrl(_ref) {
67
96
  showSafetyWarningModal(e, href);
68
97
  }
69
98
  }
70
- }, props), children)), checkSafety && /*#__PURE__*/_react.default.createElement(_LinkWarningModal.default, linkWarningModalProps), enableResolve && href && resolveHyperlinkFG && /*#__PURE__*/_react.default.createElement(_HyperlinkResolver.default, {
99
+ }, props), children)), checkSafety && /*#__PURE__*/_react.default.createElement(_LinkWarningModal.default, linkWarningModalProps), enableResolve && href && resolveHyperlinkFG && !(0, _platformFeatureFlags.fg)('navx-1834-refactor-resolved-hyperlink') && /*#__PURE__*/_react.default.createElement(_HyperlinkResolver.default, {
71
100
  href: href
72
101
  }));
73
102
  };
@@ -10,7 +10,6 @@ exports.default = void 0;
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var React = _react;
12
12
  var _runtime = require("@compiled/react/runtime");
13
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
13
  var _reactIntlNext = require("react-intl-next");
15
14
  var _new = _interopRequireDefault(require("@atlaskit/button/new"));
16
15
  var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
@@ -38,17 +37,14 @@ var RelatedLinksBaseModal = function RelatedLinksBaseModal(_ref) {
38
37
  });
39
38
  onClose === null || onClose === void 0 || onClose();
40
39
  }, [fireEvent, onClose]);
41
- return /*#__PURE__*/React.createElement(_modalDialog.ModalTransition, null, showModal && /*#__PURE__*/React.createElement(_modalDialog.default, (0, _extends2.default)({
40
+ return /*#__PURE__*/React.createElement(_modalDialog.ModalTransition, null, showModal && /*#__PURE__*/React.createElement(_modalDialog.default, {
42
41
  testId: "related-links-modal",
43
42
  onClose: closeHandler,
44
- width: fixedWidth
45
- }, (0, _platformFeatureFlags.fg)('navx-1304-related-links-remove-false-autofocus') ? {} : {
46
- autoFocus: false
47
- }, {
43
+ width: fixedWidth,
48
44
  shouldReturnFocus: false,
49
45
  onOpenComplete: openCompleteHandler,
50
46
  height: '504px'
51
- }), /*#__PURE__*/React.createElement(_modalDialog.ModalHeader, {
47
+ }, /*#__PURE__*/React.createElement(_modalDialog.ModalHeader, {
52
48
  hasCloseButton: (0, _platformFeatureFlags.fg)('navx-1483-a11y-close-button-in-modal-updates')
53
49
  }, /*#__PURE__*/React.createElement(_modalDialog.ModalTitle, null, /*#__PURE__*/React.createElement(_reactIntlNext.FormattedMessage, _messages.messages.related_links_modal_title))), /*#__PURE__*/React.createElement(_modalDialog.ModalBody, null, children), /*#__PURE__*/React.createElement(_modalDialog.ModalFooter, null, /*#__PURE__*/React.createElement(_new.default, {
54
50
  appearance: "primary",
@@ -0,0 +1,21 @@
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 _react = _interopRequireDefault(require("react"));
9
+ var _reactIntlNext = require("react-intl-next");
10
+ /**
11
+ * HOC to wrap component with IntlProvider if not available
12
+ */
13
+ var withIntlProvider = function withIntlProvider(Component) {
14
+ return function (props) {
15
+ var content = /*#__PURE__*/_react.default.createElement(Component, props);
16
+ return props !== null && props !== void 0 && props.intl ? content : /*#__PURE__*/_react.default.createElement(_reactIntlNext.IntlProvider, {
17
+ locale: "en"
18
+ }, content);
19
+ };
20
+ };
21
+ var _default = exports.default = withIntlProvider;
@@ -0,0 +1,60 @@
1
+ import { useEffect, useState } from 'react';
2
+ import uuid from 'uuid';
3
+ import { useAnalyticsEvents } from '../../../common/analytics/generated/use-analytics-events';
4
+ import * as measure from '../../../utils/performance';
5
+ import { useSmartCardActions } from '../../actions';
6
+ import { getDefinitionId, getExtensionKey, getResourceType } from '../../helpers';
7
+ import { useSmartCardState } from '../../store';
8
+ import { useScheduledRegister } from './useScheduledRegister';
9
+ const useResolveHyperlink = ({
10
+ href
11
+ }) => {
12
+ const [id] = useState(() => uuid());
13
+ const state = useSmartCardState(href);
14
+ const definitionId = getDefinitionId(state.details);
15
+ const extensionKey = getExtensionKey(state.details);
16
+ const resourceType = getResourceType(state.details);
17
+ const actions = useSmartCardActions(id, href);
18
+ const scheduledRegister = useScheduledRegister(href, actions.register);
19
+ const {
20
+ fireEvent
21
+ } = useAnalyticsEvents();
22
+ useEffect(() => {
23
+ scheduledRegister().catch(error => {
24
+ throw error;
25
+ });
26
+ }, [scheduledRegister]);
27
+ useEffect(() => {
28
+ measure.mark(id, state.status);
29
+ if (state.status !== 'pending' && state.status !== 'resolving') {
30
+ var _state$error, _state$error2;
31
+ measure.create(id, state.status);
32
+ if (state.status === 'resolved') {
33
+ var _measure$getMeasure$d, _measure$getMeasure;
34
+ fireEvent('operational.hyperlink.resolved', {
35
+ definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null,
36
+ extensionKey: extensionKey !== null && extensionKey !== void 0 ? extensionKey : null,
37
+ resourceType: resourceType !== null && resourceType !== void 0 ? resourceType : null,
38
+ duration: (_measure$getMeasure$d = (_measure$getMeasure = measure.getMeasure(id, state.status)) === null || _measure$getMeasure === void 0 ? void 0 : _measure$getMeasure.duration) !== null && _measure$getMeasure$d !== void 0 ? _measure$getMeasure$d : null
39
+ });
40
+ } else if (((_state$error = state.error) === null || _state$error === void 0 ? void 0 : _state$error.type) !== 'ResolveUnsupportedError' && ((_state$error2 = state.error) === null || _state$error2 === void 0 ? void 0 : _state$error2.type) !== 'UnsupportedError') {
41
+ fireEvent('operational.hyperlink.unresolved', {
42
+ definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null,
43
+ extensionKey: extensionKey !== null && extensionKey !== void 0 ? extensionKey : null,
44
+ resourceType: resourceType !== null && resourceType !== void 0 ? resourceType : null,
45
+ reason: state.status,
46
+ error: state.error === undefined ? null : {
47
+ name: state.error.name,
48
+ kind: state.error.kind,
49
+ type: state.error.type
50
+ }
51
+ });
52
+ }
53
+ }
54
+ }, [id, state.status, state.error, definitionId, extensionKey, resourceType, fireEvent]);
55
+ return {
56
+ state,
57
+ actions
58
+ };
59
+ };
60
+ export default useResolveHyperlink;
@@ -0,0 +1,28 @@
1
+ import { useContext } from 'react';
2
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
3
+ import { SmartCardContext } from '@atlaskit/link-provider';
4
+ export const isSharePointDomain = href => {
5
+ try {
6
+ const hostname = new URL(href).hostname.toLowerCase();
7
+ return hostname.includes('sharepoint.com') || hostname.includes('onedrive.live.com');
8
+ } catch {
9
+ return false;
10
+ }
11
+ };
12
+ export const isGoogleDomain = href => {
13
+ try {
14
+ const hostname = new URL(href).hostname.toLowerCase();
15
+ return hostname.includes('docs.google.com') || hostname.includes('drive.google.com');
16
+ } catch {
17
+ return false;
18
+ }
19
+ };
20
+ const useResolveHyperlinkValidator = (href = '') => {
21
+ const hasSmartCardProvider = !!useContext(SmartCardContext);
22
+ const isSharePointResolveEnabled = FeatureGates.getExperimentValue('platform_editor_resolve_hyperlinks_confluence', 'isEnabled', false) || FeatureGates.getExperimentValue('platform_editor_resolve_hyperlinks_jira', 'isEnabled', false);
23
+ const isGoogleResolveEnabled = FeatureGates.getExperimentValue('platform_editor_resolve_google_hyperlinks', 'isEnabled', false);
24
+ const shouldResolveSharePoint = isSharePointDomain(href) && isSharePointResolveEnabled;
25
+ const shouldResolveGoogle = isGoogleDomain(href) && isGoogleResolveEnabled;
26
+ return hasSmartCardProvider && (shouldResolveSharePoint || shouldResolveGoogle);
27
+ };
28
+ export default useResolveHyperlinkValidator;
@@ -2,7 +2,7 @@ export const ANALYTICS_CHANNEL = 'media';
2
2
  export const context = {
3
3
  componentName: 'smart-cards',
4
4
  packageName: "@atlaskit/smart-card",
5
- packageVersion: "41.0.2"
5
+ packageVersion: "41.0.3"
6
6
  };
7
7
  export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
8
8
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -2,7 +2,7 @@
2
2
  import "./index.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { useMemo } from 'react';
5
- import { FormattedMessage } from 'react-intl-next';
5
+ import { FormattedMessage, useIntl } from 'react-intl-next';
6
6
  import Heading from '@atlaskit/heading';
7
7
  import DownloadIcon from '@atlaskit/icon/core/download';
8
8
  import FullscreenExitIcon from '@atlaskit/icon/core/fullscreen-exit';
@@ -40,6 +40,9 @@ const LinkInfo = ({
40
40
  const {
41
41
  onClose
42
42
  } = useModal();
43
+ const {
44
+ formatMessage
45
+ } = useIntl();
43
46
  const downloadButton = useMemo(() => {
44
47
  if (onDownloadButtonClick) {
45
48
  return /*#__PURE__*/React.createElement(LinkInfoButton, {
@@ -123,7 +126,7 @@ const LinkInfo = ({
123
126
  testId: `${testId}-close-tooltip`
124
127
  }, /*#__PURE__*/React.createElement(CloseButton, {
125
128
  onClick: onClose,
126
- label: messages.preview_close.defaultMessage,
129
+ label: formatMessage(messages.preview_close),
127
130
  testId: `${testId}-close-button`
128
131
  })) : /*#__PURE__*/React.createElement(LinkInfoButton, {
129
132
  content: /*#__PURE__*/React.createElement(FormattedMessage, messages.preview_close),