@atlaskit/smart-card 31.0.3 → 32.1.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 (70) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/cjs/extractors/action/extractDownloadActionProps.js +28 -0
  3. package/dist/cjs/extractors/action/extractPreviewActionProps.js +43 -0
  4. package/dist/cjs/extractors/action/extractViewActionProps.js +27 -0
  5. package/dist/cjs/extractors/common/actions/extractActions.js +5 -0
  6. package/dist/cjs/extractors/common/actions/extractPreviewAction.js +5 -0
  7. package/dist/cjs/extractors/common/actions/types.js +5 -0
  8. package/dist/cjs/extractors/common/lozenge/extractLozenge.js +24 -5
  9. package/dist/cjs/extractors/flexible/actions/extract-preview-action.js +3 -1
  10. package/dist/cjs/state/hooks-external/useSmartLinkActions.js +38 -0
  11. package/dist/cjs/utils/actions/to-action.js +18 -0
  12. package/dist/cjs/utils/analytics/analytics.js +1 -1
  13. package/dist/cjs/view/LinkUrl/index.js +1 -1
  14. package/dist/es2019/extractors/action/extractDownloadActionProps.js +19 -0
  15. package/dist/es2019/extractors/action/extractPreviewActionProps.js +31 -0
  16. package/dist/es2019/extractors/action/extractViewActionProps.js +18 -0
  17. package/dist/es2019/extractors/common/actions/extractActions.js +5 -0
  18. package/dist/es2019/extractors/common/actions/extractPreviewAction.js +5 -0
  19. package/dist/es2019/extractors/common/actions/types.js +1 -0
  20. package/dist/es2019/extractors/common/lozenge/extractLozenge.js +19 -0
  21. package/dist/es2019/extractors/flexible/actions/extract-preview-action.js +3 -1
  22. package/dist/es2019/state/hooks-external/useSmartLinkActions.js +38 -0
  23. package/dist/es2019/utils/actions/to-action.js +9 -0
  24. package/dist/es2019/utils/analytics/analytics.js +1 -1
  25. package/dist/es2019/view/LinkUrl/index.js +1 -1
  26. package/dist/esm/extractors/action/extractDownloadActionProps.js +22 -0
  27. package/dist/esm/extractors/action/extractPreviewActionProps.js +36 -0
  28. package/dist/esm/extractors/action/extractViewActionProps.js +21 -0
  29. package/dist/esm/extractors/common/actions/extractActions.js +5 -0
  30. package/dist/esm/extractors/common/actions/extractPreviewAction.js +5 -0
  31. package/dist/esm/extractors/common/actions/types.js +1 -0
  32. package/dist/esm/extractors/common/lozenge/extractLozenge.js +24 -5
  33. package/dist/esm/extractors/flexible/actions/extract-preview-action.js +3 -1
  34. package/dist/esm/state/hooks-external/useSmartLinkActions.js +38 -0
  35. package/dist/esm/utils/actions/to-action.js +11 -0
  36. package/dist/esm/utils/analytics/analytics.js +1 -1
  37. package/dist/esm/view/LinkUrl/index.js +1 -1
  38. package/dist/types/extractors/action/extractDownloadActionProps.d.ts +3 -0
  39. package/dist/types/extractors/action/extractPreviewActionProps.d.ts +3 -0
  40. package/dist/types/extractors/action/extractViewActionProps.d.ts +3 -0
  41. package/dist/types/extractors/common/__mocks__/jsonld.d.ts +5 -0
  42. package/dist/types/extractors/common/actions/extractActions.d.ts +4 -0
  43. package/dist/types/extractors/common/actions/extractPreviewAction.d.ts +4 -0
  44. package/dist/types/extractors/common/actions/types.d.ts +21 -0
  45. package/dist/types/extractors/common/lozenge/extractState.d.ts +2 -3
  46. package/dist/types/extractors/common/lozenge/types.d.ts +2 -0
  47. package/dist/types/state/flexible-ui-context/types.d.ts +1 -0
  48. package/dist/types/state/hooks/use-invoke-client-action/index.d.ts +2 -2
  49. package/dist/types/state/hooks/use-invoke-client-action/types.d.ts +1 -0
  50. package/dist/types/utils/actions/to-action.d.ts +8 -0
  51. package/dist/types-ts4.5/extractors/action/extractDownloadActionProps.d.ts +3 -0
  52. package/dist/types-ts4.5/extractors/action/extractPreviewActionProps.d.ts +3 -0
  53. package/dist/types-ts4.5/extractors/action/extractViewActionProps.d.ts +3 -0
  54. package/dist/types-ts4.5/extractors/common/__mocks__/jsonld.d.ts +5 -0
  55. package/dist/types-ts4.5/extractors/common/actions/extractActions.d.ts +4 -0
  56. package/dist/types-ts4.5/extractors/common/actions/extractPreviewAction.d.ts +4 -0
  57. package/dist/types-ts4.5/extractors/common/actions/types.d.ts +21 -0
  58. package/dist/types-ts4.5/extractors/common/lozenge/extractState.d.ts +2 -3
  59. package/dist/types-ts4.5/extractors/common/lozenge/types.d.ts +2 -0
  60. package/dist/types-ts4.5/state/flexible-ui-context/types.d.ts +1 -0
  61. package/dist/types-ts4.5/state/hooks/use-invoke-client-action/index.d.ts +2 -2
  62. package/dist/types-ts4.5/state/hooks/use-invoke-client-action/types.d.ts +1 -0
  63. package/dist/types-ts4.5/utils/actions/to-action.d.ts +8 -0
  64. package/package.json +10 -5
  65. package/client/package.json +0 -15
  66. package/dist/cjs/client/index.js +0 -12
  67. package/dist/es2019/client/index.js +0 -5
  68. package/dist/esm/client/index.js +0 -5
  69. package/dist/types/client/index.d.ts +0 -5
  70. package/dist/types-ts4.5/client/index.d.ts +0 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 32.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#170211](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/170211)
8
+ [`c2506e15d813c`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c2506e15d813c) -
9
+ Smart card to always show lozenge if `atlassian:state` exists, regardless of json ld type
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
15
+ ## 32.0.0
16
+
17
+ ### Major Changes
18
+
19
+ - [#169454](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/169454)
20
+ [`c4bdbc7fc7e2e`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c4bdbc7fc7e2e) -
21
+ EDM-10924 Remove deprecated client entrypoint from smart-card
22
+
23
+ ### Minor Changes
24
+
25
+ - [#169491](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/169491)
26
+ [`b0b713c370025`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/b0b713c370025) -
27
+ Refactor useSmartLinkActions hook to remove dependency on extractBlockProps
28
+
3
29
  ## 31.0.3
4
30
 
5
31
  ### Patch Changes
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.extractDownloadActionProps = void 0;
7
+ var _constants = require("../../constants");
8
+ var _utils = require("../../utils");
9
+ var _extractDownloadAction = require("../flexible/actions/extract-download-action");
10
+ var extractDownloadActionProps = exports.extractDownloadActionProps = function extractDownloadActionProps(_ref) {
11
+ var response = _ref.response,
12
+ actionOptions = _ref.actionOptions,
13
+ _ref$extensionKey = _ref.extensionKey,
14
+ extensionKey = _ref$extensionKey === void 0 ? 'empty-object-provider' : _ref$extensionKey,
15
+ _ref$source = _ref.source,
16
+ source = _ref$source === void 0 ? 'block' : _ref$source;
17
+ var data = (0, _extractDownloadAction.extractDownloadAction)(response.data, actionOptions);
18
+ if (data) {
19
+ return {
20
+ actionType: _constants.ActionName.DownloadAction,
21
+ actionFn: function actionFn() {
22
+ return (0, _utils.downloadUrl)(data.downloadUrl);
23
+ },
24
+ display: source,
25
+ extensionKey: extensionKey
26
+ };
27
+ }
28
+ };
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.extractPreviewActionProps = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _constants = require("../../constants");
10
+ var _utils = require("../../view/EmbedModal/utils");
11
+ var _extractPreviewAction = require("../flexible/actions/extract-preview-action");
12
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ var extractPreviewActionProps = exports.extractPreviewActionProps = function extractPreviewActionProps(_ref) {
15
+ var response = _ref.response,
16
+ analytics = _ref.analytics,
17
+ _ref$extensionKey = _ref.extensionKey,
18
+ extensionKey = _ref$extensionKey === void 0 ? 'empty-object-provider' : _ref$extensionKey,
19
+ _ref$source = _ref.source,
20
+ source = _ref$source === void 0 ? 'block' : _ref$source,
21
+ actionOptions = _ref.actionOptions,
22
+ origin = _ref.origin;
23
+ var data = (0, _extractPreviewAction.extractPreviewAction)(response, actionOptions);
24
+ if (data !== null && data !== void 0 && data.src) {
25
+ return {
26
+ actionType: _constants.ActionName.PreviewAction,
27
+ actionFn: function actionFn() {
28
+ return (0, _utils.openEmbedModal)(_objectSpread({
29
+ download: data === null || data === void 0 ? void 0 : data.downloadUrl,
30
+ showModal: true,
31
+ onClose: function onClose() {},
32
+ analytics: analytics,
33
+ extensionKey: extensionKey,
34
+ origin: origin
35
+ }, data));
36
+ },
37
+ // These values have already been set in analytics context.
38
+ // We only pass these here for ufo experience.
39
+ display: source,
40
+ extensionKey: extensionKey
41
+ };
42
+ }
43
+ };
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.extractViewActionProps = void 0;
7
+ var _utils = require("../../utils");
8
+ var _extractViewAction = require("../flexible/actions/extract-view-action");
9
+ var extractViewActionProps = exports.extractViewActionProps = function extractViewActionProps(_ref) {
10
+ var response = _ref.response,
11
+ actionOptions = _ref.actionOptions,
12
+ _ref$extensionKey = _ref.extensionKey,
13
+ extensionKey = _ref$extensionKey === void 0 ? 'empty-object-provider' : _ref$extensionKey,
14
+ _ref$source = _ref.source,
15
+ source = _ref$source === void 0 ? 'block' : _ref$source;
16
+ var data = (0, _extractViewAction.extractViewAction)(response.data, actionOptions);
17
+ if (data) {
18
+ return {
19
+ actionType: 'ViewAction',
20
+ actionFn: function actionFn() {
21
+ return (0, _utils.openUrl)(data.viewUrl);
22
+ },
23
+ display: source,
24
+ extensionKey: extensionKey
25
+ };
26
+ }
27
+ };
@@ -65,6 +65,11 @@ var getActionsFromJsonLd = exports.getActionsFromJsonLd = function getActionsFro
65
65
  }
66
66
  return actions;
67
67
  };
68
+
69
+ /**
70
+ * @private
71
+ * @deprecated - use flexible extractors instead
72
+ */
68
73
  function extractClientActions(jsonLd, handler, actionOptions) {
69
74
  var actions = getActionsFromJsonLd(jsonLd);
70
75
  var clientActions = actions.filter(function (action) {
@@ -54,6 +54,11 @@ var getInvokeOpts = function getInvokeOpts(key, action, source) {
54
54
  }
55
55
  };
56
56
  };
57
+
58
+ /**
59
+ * @private
60
+ * @deprecated - use extractPreviewActionProps instead
61
+ */
57
62
  var extractPreviewAction = exports.extractPreviewAction = function extractPreviewAction(_ref) {
58
63
  var _ref$extensionKey = _ref.extensionKey,
59
64
  extensionKey = _ref$extensionKey === void 0 ? 'empty-object-provider' : _ref$extensionKey,
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.extractLozenge = void 0;
7
7
  var _linkExtractors = require("@atlaskit/link-extractors");
8
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
8
9
  var _extractState = require("./extractState");
9
10
  var _extractTag = require("./extractTag");
10
11
  var _extractTaskStatus = require("./extractTaskStatus");
@@ -13,14 +14,32 @@ var DOC_TYPES = ['schema:BlogPosting', 'schema:TextDigitalDocument', 'schema:Dig
13
14
  var extractLozenge = exports.extractLozenge = function extractLozenge(jsonLd) {
14
15
  var type = (0, _linkExtractors.extractType)(jsonLd);
15
16
  if (type) {
17
+ if ((0, _platformFeatureFlags.fg)('linking_platform_show_lozenge_atlassian_state')) {
18
+ if (type.includes('atlassian:Task')) {
19
+ var jsonLdTask = jsonLd;
20
+ var lozengeFromTag = (0, _extractTag.extractTag)(jsonLdTask);
21
+ var lozengeFromStatus = (0, _extractTaskStatus.extractTaskStatus)(jsonLdTask);
22
+ var lozengeFromTaskType = extractLozengeFromTaskType(jsonLdTask);
23
+ return lozengeFromTag || lozengeFromStatus || lozengeFromTaskType;
24
+ }
25
+ if (type.includes('atlassian:UndefinedLink')) {
26
+ return {
27
+ text: 'UNDEFINED',
28
+ appearance: 'inprogress'
29
+ };
30
+ }
31
+
32
+ // casting it because `extractState` can safely handle missing properties
33
+ return (0, _extractState.extractState)(jsonLd);
34
+ }
16
35
  if (type.includes('atlassian:SourceCodePullRequest')) {
17
36
  return (0, _extractState.extractState)(jsonLd);
18
37
  } else if (type.includes('atlassian:Task')) {
19
- var jsonLdTask = jsonLd;
20
- var lozengeFromTag = (0, _extractTag.extractTag)(jsonLdTask);
21
- var lozengeFromStatus = (0, _extractTaskStatus.extractTaskStatus)(jsonLdTask);
22
- var lozengeFromTaskType = extractLozengeFromTaskType(jsonLdTask);
23
- return lozengeFromTag || lozengeFromStatus || lozengeFromTaskType;
38
+ var _jsonLdTask = jsonLd;
39
+ var _lozengeFromTag = (0, _extractTag.extractTag)(_jsonLdTask);
40
+ var _lozengeFromStatus = (0, _extractTaskStatus.extractTaskStatus)(_jsonLdTask);
41
+ var _lozengeFromTaskType = extractLozengeFromTaskType(_jsonLdTask);
42
+ return _lozengeFromTag || _lozengeFromStatus || _lozengeFromTaskType;
24
43
  } else if (type.some(function (types) {
25
44
  return DOC_TYPES.includes(types);
26
45
  })) {
@@ -9,6 +9,7 @@ var _canShowAction = require("../../../utils/actions/can-show-action");
9
9
  var _types = require("../../../view/Card/types");
10
10
  var _detail = require("../../common/detail");
11
11
  var _extractIsSupportTheming = require("../../common/meta/extractIsSupportTheming");
12
+ var _extractIsTrusted = require("../../common/meta/extractIsTrusted");
12
13
  var _icon = require("../icon");
13
14
  var extractPreviewAction = exports.extractPreviewAction = function extractPreviewAction(response, actionOptions) {
14
15
  var _extractPreviewData;
@@ -27,7 +28,8 @@ var extractPreviewAction = exports.extractPreviewAction = function extractPrevie
27
28
  title: (0, _linkExtractors.extractTitle)(data),
28
29
  linkIcon: (0, _icon.extractLinkIcon)(response),
29
30
  url: (0, _linkExtractors.extractLink)(data),
30
- isSupportTheming: (0, _extractIsSupportTheming.extractIsSupportTheming)(meta)
31
+ isSupportTheming: (0, _extractIsSupportTheming.extractIsSupportTheming)(meta),
32
+ isTrusted: (0, _extractIsTrusted.extractIsTrusted)(meta)
31
33
  };
32
34
  }
33
35
  };
@@ -7,10 +7,17 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useSmartLinkActions = useSmartLinkActions;
8
8
  var _react = require("react");
9
9
  var _uuid = _interopRequireDefault(require("uuid"));
10
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
+ var _extractDownloadActionProps = require("../../extractors/action/extractDownloadActionProps");
12
+ var _extractPreviewActionProps = require("../../extractors/action/extractPreviewActionProps");
13
+ var _extractViewActionProps = require("../../extractors/action/extractViewActionProps");
10
14
  var _block = require("../../extractors/block");
15
+ var _messages = require("../../messages");
16
+ var _toAction = require("../../utils/actions/to-action");
11
17
  var _actions = require("../actions");
12
18
  var _analytics = require("../analytics");
13
19
  var _helpers = require("../helpers");
20
+ var _useInvokeClientAction = _interopRequireDefault(require("../hooks/use-invoke-client-action"));
14
21
  var _store = require("../store");
15
22
  function useSmartLinkActions(_ref) {
16
23
  var url = _ref.url,
@@ -25,6 +32,37 @@ function useSmartLinkActions(_ref) {
25
32
  var linkState = (0, _store.useSmartCardState)(url);
26
33
  var linkAnalytics = (0, _analytics.useSmartLinkAnalytics)(url, id);
27
34
  var linkActions = (0, _actions.useSmartCardActions)(id, url, linkAnalytics);
35
+ var invokeClientAction = (0, _useInvokeClientAction.default)({
36
+ analytics: linkAnalytics
37
+ });
38
+ if ((0, _platformFeatureFlags.fg)('smart-card-use-refactored-usesmartlinkactions')) {
39
+ if (linkState.details && !(actionOptions !== null && actionOptions !== void 0 && actionOptions.hide)) {
40
+ var opts = {
41
+ response: linkState.details,
42
+ handleInvoke: invokeClientAction,
43
+ analytics: linkAnalytics,
44
+ origin: origin,
45
+ extensionKey: (0, _helpers.getExtensionKey)(linkState.details),
46
+ source: appearance,
47
+ actionOptions: actionOptions
48
+ };
49
+ var actions = [];
50
+ var downloadActionProps = (0, _extractDownloadActionProps.extractDownloadActionProps)(opts);
51
+ if (downloadActionProps) {
52
+ actions.push((0, _toAction.toAction)(downloadActionProps, invokeClientAction, _messages.messages.download, 'download-content'));
53
+ }
54
+ var viewActionProps = (0, _extractViewActionProps.extractViewActionProps)(opts);
55
+ if (viewActionProps) {
56
+ actions.push((0, _toAction.toAction)(viewActionProps, invokeClientAction, _messages.messages.view, 'view-content'));
57
+ }
58
+ var previewActionProps = (0, _extractPreviewActionProps.extractPreviewActionProps)(opts);
59
+ if (previewActionProps) {
60
+ actions.push((0, _toAction.toAction)(previewActionProps, invokeClientAction, _messages.messages.preview_improved, 'preview-content'));
61
+ }
62
+ return actions;
63
+ }
64
+ return [];
65
+ }
28
66
  if (linkState.details && !(actionOptions !== null && actionOptions !== void 0 && actionOptions.hide)) {
29
67
  var cardProperties = (0, _block.extractBlockProps)(linkState.details.data, linkState.details.meta, {
30
68
  handleInvoke: function handleInvoke(opts) {
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.toAction = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _reactIntlNext = require("react-intl-next");
10
+ var toAction = exports.toAction = function toAction(action, invokeClientAction, message, id) {
11
+ return {
12
+ id: id,
13
+ text: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, message),
14
+ invoke: function invoke() {
15
+ return invokeClientAction(action);
16
+ }
17
+ };
18
+ };
@@ -17,7 +17,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
17
17
  var context = exports.context = {
18
18
  componentName: 'smart-cards',
19
19
  packageName: "@atlaskit/smart-card",
20
- packageVersion: "31.0.3"
20
+ packageVersion: "32.1.0"
21
21
  };
22
22
  var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
23
23
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -17,7 +17,7 @@ var _excluded = ["href", "children", "checkSafety", "onClick", "testId"],
17
17
  _excluded2 = ["isLinkSafe", "showSafetyWarningModal"];
18
18
  var PACKAGE_DATA = {
19
19
  packageName: "@atlaskit/smart-card",
20
- packageVersion: "31.0.3",
20
+ packageVersion: "32.1.0",
21
21
  componentName: 'linkUrl'
22
22
  };
23
23
  var Link = (0, _click.withLinkClickedEvent)('a');
@@ -0,0 +1,19 @@
1
+ import { ActionName } from '../../constants';
2
+ import { downloadUrl } from '../../utils';
3
+ import { extractDownloadAction as extractDownloadActionData } from '../flexible/actions/extract-download-action';
4
+ export const extractDownloadActionProps = ({
5
+ response,
6
+ actionOptions,
7
+ extensionKey = 'empty-object-provider',
8
+ source = 'block'
9
+ }) => {
10
+ const data = extractDownloadActionData(response.data, actionOptions);
11
+ if (data) {
12
+ return {
13
+ actionType: ActionName.DownloadAction,
14
+ actionFn: () => downloadUrl(data.downloadUrl),
15
+ display: source,
16
+ extensionKey
17
+ };
18
+ }
19
+ };
@@ -0,0 +1,31 @@
1
+ import { ActionName } from '../../constants';
2
+ import { openEmbedModal } from '../../view/EmbedModal/utils';
3
+ import { extractPreviewAction as extractPreviewActionData } from '../flexible/actions/extract-preview-action';
4
+ export const extractPreviewActionProps = ({
5
+ response,
6
+ analytics,
7
+ extensionKey = 'empty-object-provider',
8
+ source = 'block',
9
+ actionOptions,
10
+ origin
11
+ }) => {
12
+ const data = extractPreviewActionData(response, actionOptions);
13
+ if (data !== null && data !== void 0 && data.src) {
14
+ return {
15
+ actionType: ActionName.PreviewAction,
16
+ actionFn: () => openEmbedModal({
17
+ download: data === null || data === void 0 ? void 0 : data.downloadUrl,
18
+ showModal: true,
19
+ onClose: () => {},
20
+ analytics,
21
+ extensionKey,
22
+ origin,
23
+ ...data
24
+ }),
25
+ // These values have already been set in analytics context.
26
+ // We only pass these here for ufo experience.
27
+ display: source,
28
+ extensionKey
29
+ };
30
+ }
31
+ };
@@ -0,0 +1,18 @@
1
+ import { openUrl } from '../../utils';
2
+ import { extractViewAction as extractViewActionData } from '../flexible/actions/extract-view-action';
3
+ export const extractViewActionProps = ({
4
+ response,
5
+ actionOptions,
6
+ extensionKey = 'empty-object-provider',
7
+ source = 'block'
8
+ }) => {
9
+ const data = extractViewActionData(response.data, actionOptions);
10
+ if (data) {
11
+ return {
12
+ actionType: 'ViewAction',
13
+ actionFn: () => openUrl(data.viewUrl),
14
+ display: source,
15
+ extensionKey
16
+ };
17
+ }
18
+ };
@@ -51,6 +51,11 @@ export const getActionsFromJsonLd = jsonLd => {
51
51
  }
52
52
  return actions;
53
53
  };
54
+
55
+ /**
56
+ * @private
57
+ * @deprecated - use flexible extractors instead
58
+ */
54
59
  export function extractClientActions(jsonLd, handler, actionOptions) {
55
60
  const actions = getActionsFromJsonLd(jsonLd);
56
61
  const clientActions = actions.filter(action => isClientAction(action) && isActionEnabled(action, actionOptions));
@@ -38,6 +38,11 @@ const getInvokeOpts = (key, action, source) => ({
38
38
  promise: () => Promise.resolve()
39
39
  }
40
40
  });
41
+
42
+ /**
43
+ * @private
44
+ * @deprecated - use extractPreviewActionProps instead
45
+ */
41
46
  export const extractPreviewAction = ({
42
47
  extensionKey = 'empty-object-provider',
43
48
  viewProps,
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { extractType } from '@atlaskit/link-extractors';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
2
3
  import { extractState } from './extractState';
3
4
  import { extractTag } from './extractTag';
4
5
  import { extractTaskStatus } from './extractTaskStatus';
@@ -7,6 +8,24 @@ const DOC_TYPES = ['schema:BlogPosting', 'schema:TextDigitalDocument', 'schema:D
7
8
  export const extractLozenge = jsonLd => {
8
9
  const type = extractType(jsonLd);
9
10
  if (type) {
11
+ if (fg('linking_platform_show_lozenge_atlassian_state')) {
12
+ if (type.includes('atlassian:Task')) {
13
+ const jsonLdTask = jsonLd;
14
+ const lozengeFromTag = extractTag(jsonLdTask);
15
+ const lozengeFromStatus = extractTaskStatus(jsonLdTask);
16
+ const lozengeFromTaskType = extractLozengeFromTaskType(jsonLdTask);
17
+ return lozengeFromTag || lozengeFromStatus || lozengeFromTaskType;
18
+ }
19
+ if (type.includes('atlassian:UndefinedLink')) {
20
+ return {
21
+ text: 'UNDEFINED',
22
+ appearance: 'inprogress'
23
+ };
24
+ }
25
+
26
+ // casting it because `extractState` can safely handle missing properties
27
+ return extractState(jsonLd);
28
+ }
10
29
  if (type.includes('atlassian:SourceCodePullRequest')) {
11
30
  return extractState(jsonLd);
12
31
  } else if (type.includes('atlassian:Task')) {
@@ -3,6 +3,7 @@ import { canShowAction } from '../../../utils/actions/can-show-action';
3
3
  import { CardAction } from '../../../view/Card/types';
4
4
  import { extractDownloadUrl } from '../../common/detail';
5
5
  import { extractIsSupportTheming } from '../../common/meta/extractIsSupportTheming';
6
+ import { extractIsTrusted } from '../../common/meta/extractIsTrusted';
6
7
  import { extractLinkIcon } from '../icon';
7
8
  export const extractPreviewAction = (response, actionOptions) => {
8
9
  var _extractPreviewData;
@@ -21,7 +22,8 @@ export const extractPreviewAction = (response, actionOptions) => {
21
22
  title: extractTitle(data),
22
23
  linkIcon: extractLinkIcon(response),
23
24
  url: extractLink(data),
24
- isSupportTheming: extractIsSupportTheming(meta)
25
+ isSupportTheming: extractIsSupportTheming(meta),
26
+ isTrusted: extractIsTrusted(meta)
25
27
  };
26
28
  }
27
29
  };
@@ -1,9 +1,16 @@
1
1
  import { useMemo } from 'react';
2
2
  import uuid from 'uuid';
3
+ import { fg } from '@atlaskit/platform-feature-flags';
4
+ import { extractDownloadActionProps } from '../../extractors/action/extractDownloadActionProps';
5
+ import { extractPreviewActionProps } from '../../extractors/action/extractPreviewActionProps';
6
+ import { extractViewActionProps } from '../../extractors/action/extractViewActionProps';
3
7
  import { extractBlockProps as extractCardProps } from '../../extractors/block';
8
+ import { messages } from '../../messages';
9
+ import { toAction } from '../../utils/actions/to-action';
4
10
  import { useSmartCardActions as useLinkActions } from '../actions';
5
11
  import { useSmartLinkAnalytics as useLinkAnalytics } from '../analytics';
6
12
  import { getExtensionKey } from '../helpers';
13
+ import useInvokeClientAction from '../hooks/use-invoke-client-action';
7
14
  import { useSmartCardState as useLinkState } from '../store';
8
15
  export function useSmartLinkActions({
9
16
  url,
@@ -16,6 +23,37 @@ export function useSmartLinkActions({
16
23
  const linkState = useLinkState(url);
17
24
  const linkAnalytics = useLinkAnalytics(url, id);
18
25
  const linkActions = useLinkActions(id, url, linkAnalytics);
26
+ const invokeClientAction = useInvokeClientAction({
27
+ analytics: linkAnalytics
28
+ });
29
+ if (fg('smart-card-use-refactored-usesmartlinkactions')) {
30
+ if (linkState.details && !(actionOptions !== null && actionOptions !== void 0 && actionOptions.hide)) {
31
+ const opts = {
32
+ response: linkState.details,
33
+ handleInvoke: invokeClientAction,
34
+ analytics: linkAnalytics,
35
+ origin,
36
+ extensionKey: getExtensionKey(linkState.details),
37
+ source: appearance,
38
+ actionOptions
39
+ };
40
+ const actions = [];
41
+ const downloadActionProps = extractDownloadActionProps(opts);
42
+ if (downloadActionProps) {
43
+ actions.push(toAction(downloadActionProps, invokeClientAction, messages.download, 'download-content'));
44
+ }
45
+ const viewActionProps = extractViewActionProps(opts);
46
+ if (viewActionProps) {
47
+ actions.push(toAction(viewActionProps, invokeClientAction, messages.view, 'view-content'));
48
+ }
49
+ const previewActionProps = extractPreviewActionProps(opts);
50
+ if (previewActionProps) {
51
+ actions.push(toAction(previewActionProps, invokeClientAction, messages.preview_improved, 'preview-content'));
52
+ }
53
+ return actions;
54
+ }
55
+ return [];
56
+ }
19
57
  if (linkState.details && !(actionOptions !== null && actionOptions !== void 0 && actionOptions.hide)) {
20
58
  const cardProperties = extractCardProps(linkState.details.data, linkState.details.meta, {
21
59
  handleInvoke: opts => linkActions.invoke(opts, appearance),
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { FormattedMessage } from 'react-intl-next';
3
+ export const toAction = (action, invokeClientAction, message, id) => {
4
+ return {
5
+ id,
6
+ text: /*#__PURE__*/React.createElement(FormattedMessage, message),
7
+ invoke: () => invokeClientAction(action)
8
+ };
9
+ };
@@ -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: "31.0.3"
7
+ packageVersion: "32.1.0"
8
8
  };
9
9
  export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
10
10
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -7,7 +7,7 @@ import LinkWarningModal from './LinkWarningModal';
7
7
  import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-modal';
8
8
  const PACKAGE_DATA = {
9
9
  packageName: "@atlaskit/smart-card",
10
- packageVersion: "31.0.3",
10
+ packageVersion: "32.1.0",
11
11
  componentName: 'linkUrl'
12
12
  };
13
13
  const Link = withLinkClickedEvent('a');
@@ -0,0 +1,22 @@
1
+ import { ActionName } from '../../constants';
2
+ import { downloadUrl } from '../../utils';
3
+ import { extractDownloadAction as extractDownloadActionData } from '../flexible/actions/extract-download-action';
4
+ export var extractDownloadActionProps = function extractDownloadActionProps(_ref) {
5
+ var response = _ref.response,
6
+ actionOptions = _ref.actionOptions,
7
+ _ref$extensionKey = _ref.extensionKey,
8
+ extensionKey = _ref$extensionKey === void 0 ? 'empty-object-provider' : _ref$extensionKey,
9
+ _ref$source = _ref.source,
10
+ source = _ref$source === void 0 ? 'block' : _ref$source;
11
+ var data = extractDownloadActionData(response.data, actionOptions);
12
+ if (data) {
13
+ return {
14
+ actionType: ActionName.DownloadAction,
15
+ actionFn: function actionFn() {
16
+ return downloadUrl(data.downloadUrl);
17
+ },
18
+ display: source,
19
+ extensionKey: extensionKey
20
+ };
21
+ }
22
+ };
@@ -0,0 +1,36 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import { ActionName } from '../../constants';
5
+ import { openEmbedModal } from '../../view/EmbedModal/utils';
6
+ import { extractPreviewAction as extractPreviewActionData } from '../flexible/actions/extract-preview-action';
7
+ export var extractPreviewActionProps = function extractPreviewActionProps(_ref) {
8
+ var response = _ref.response,
9
+ analytics = _ref.analytics,
10
+ _ref$extensionKey = _ref.extensionKey,
11
+ extensionKey = _ref$extensionKey === void 0 ? 'empty-object-provider' : _ref$extensionKey,
12
+ _ref$source = _ref.source,
13
+ source = _ref$source === void 0 ? 'block' : _ref$source,
14
+ actionOptions = _ref.actionOptions,
15
+ origin = _ref.origin;
16
+ var data = extractPreviewActionData(response, actionOptions);
17
+ if (data !== null && data !== void 0 && data.src) {
18
+ return {
19
+ actionType: ActionName.PreviewAction,
20
+ actionFn: function actionFn() {
21
+ return openEmbedModal(_objectSpread({
22
+ download: data === null || data === void 0 ? void 0 : data.downloadUrl,
23
+ showModal: true,
24
+ onClose: function onClose() {},
25
+ analytics: analytics,
26
+ extensionKey: extensionKey,
27
+ origin: origin
28
+ }, data));
29
+ },
30
+ // These values have already been set in analytics context.
31
+ // We only pass these here for ufo experience.
32
+ display: source,
33
+ extensionKey: extensionKey
34
+ };
35
+ }
36
+ };
@@ -0,0 +1,21 @@
1
+ import { openUrl } from '../../utils';
2
+ import { extractViewAction as extractViewActionData } from '../flexible/actions/extract-view-action';
3
+ export var extractViewActionProps = function extractViewActionProps(_ref) {
4
+ var response = _ref.response,
5
+ actionOptions = _ref.actionOptions,
6
+ _ref$extensionKey = _ref.extensionKey,
7
+ extensionKey = _ref$extensionKey === void 0 ? 'empty-object-provider' : _ref$extensionKey,
8
+ _ref$source = _ref.source,
9
+ source = _ref$source === void 0 ? 'block' : _ref$source;
10
+ var data = extractViewActionData(response.data, actionOptions);
11
+ if (data) {
12
+ return {
13
+ actionType: 'ViewAction',
14
+ actionFn: function actionFn() {
15
+ return openUrl(data.viewUrl);
16
+ },
17
+ display: source,
18
+ extensionKey: extensionKey
19
+ };
20
+ }
21
+ };