@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.
- package/CHANGELOG.md +18 -0
- package/dist/cjs/state/hooks/use-resolve-hyperlink/index.js +72 -0
- package/dist/cjs/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.js +36 -0
- package/dist/cjs/utils/analytics/analytics.js +1 -1
- package/dist/cjs/view/EmbedModal/components/link-info/index.js +3 -1
- package/dist/cjs/view/LinkUrl/Hyperlink/index.js +32 -0
- package/dist/cjs/view/LinkUrl/HyperlinkResolver/error-boundary.js +1 -0
- package/dist/cjs/view/LinkUrl/HyperlinkResolver/index.js +75 -18
- package/dist/cjs/view/LinkUrl/HyperlinkResolver/resolve-hyperlink.js +2 -1
- package/dist/cjs/view/LinkUrl/HyperlinkResolver/unauthorize-view.js +34 -0
- package/dist/cjs/view/LinkUrl/index.js +33 -4
- package/dist/cjs/view/RelatedLinksModal/components/RelatedLinksBaseModal.js +3 -7
- package/dist/cjs/view/common/intl-provider/index.js +21 -0
- package/dist/es2019/state/hooks/use-resolve-hyperlink/index.js +60 -0
- package/dist/es2019/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.js +28 -0
- package/dist/es2019/utils/analytics/analytics.js +1 -1
- package/dist/es2019/view/EmbedModal/components/link-info/index.js +5 -2
- package/dist/es2019/view/LinkUrl/Hyperlink/index.js +23 -0
- package/dist/es2019/view/LinkUrl/HyperlinkResolver/error-boundary.js +1 -0
- package/dist/es2019/view/LinkUrl/HyperlinkResolver/index.js +64 -14
- package/dist/es2019/view/LinkUrl/HyperlinkResolver/resolve-hyperlink.js +3 -1
- package/dist/es2019/view/LinkUrl/HyperlinkResolver/unauthorize-view.js +22 -0
- package/dist/es2019/view/LinkUrl/index.js +31 -4
- package/dist/es2019/view/RelatedLinksModal/components/RelatedLinksBaseModal.js +3 -7
- package/dist/es2019/view/common/intl-provider/index.js +13 -0
- package/dist/esm/state/hooks/use-resolve-hyperlink/index.js +63 -0
- package/dist/esm/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.js +29 -0
- package/dist/esm/utils/analytics/analytics.js +1 -1
- package/dist/esm/view/EmbedModal/components/link-info/index.js +4 -2
- package/dist/esm/view/LinkUrl/Hyperlink/index.js +25 -0
- package/dist/esm/view/LinkUrl/HyperlinkResolver/error-boundary.js +1 -0
- package/dist/esm/view/LinkUrl/HyperlinkResolver/index.js +73 -16
- package/dist/esm/view/LinkUrl/HyperlinkResolver/resolve-hyperlink.js +3 -1
- package/dist/esm/view/LinkUrl/HyperlinkResolver/unauthorize-view.js +25 -0
- package/dist/esm/view/LinkUrl/index.js +31 -4
- package/dist/esm/view/RelatedLinksModal/components/RelatedLinksBaseModal.js +3 -7
- package/dist/esm/view/common/intl-provider/index.js +15 -0
- package/dist/types/state/hooks/use-resolve-hyperlink/index.d.ts +13 -0
- package/dist/types/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.d.ts +4 -0
- package/dist/types/view/LinkUrl/Hyperlink/index.d.ts +8 -0
- package/dist/types/view/LinkUrl/HyperlinkResolver/index.d.ts +2 -0
- package/dist/types/view/LinkUrl/HyperlinkResolver/unauthorize-view.d.ts +9 -0
- package/dist/types/view/common/intl-provider/index.d.ts +7 -0
- package/dist/types-ts4.5/state/hooks/use-resolve-hyperlink/index.d.ts +13 -0
- package/dist/types-ts4.5/state/hooks/use-resolve-hyperlink/useResolveHyperlinkValidator.d.ts +4 -0
- package/dist/types-ts4.5/view/LinkUrl/Hyperlink/index.d.ts +8 -0
- package/dist/types-ts4.5/view/LinkUrl/HyperlinkResolver/index.d.ts +2 -0
- package/dist/types-ts4.5/view/LinkUrl/HyperlinkResolver/unauthorize-view.d.ts +9 -0
- package/dist/types-ts4.5/view/common/intl-provider/index.d.ts +7 -0
- package/package.json +12 -17
- /package/dist/cjs/{view/LinkUrl/HyperlinkResolver/hooks → state/hooks/use-resolve-hyperlink}/useScheduledRegister.js +0 -0
- /package/dist/es2019/{view/LinkUrl/HyperlinkResolver/hooks → state/hooks/use-resolve-hyperlink}/useScheduledRegister.js +0 -0
- /package/dist/esm/{view/LinkUrl/HyperlinkResolver/hooks → state/hooks/use-resolve-hyperlink}/useScheduledRegister.js +0 -0
- /package/dist/types/{view/LinkUrl/HyperlinkResolver/hooks → state/hooks/use-resolve-hyperlink}/useScheduledRegister.d.ts +0 -0
- /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.
|
|
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
|
|
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
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
32
|
-
|
|
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
|
|
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.
|
|
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,
|
|
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
|
-
}
|
|
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.
|
|
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
|
|
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),
|