@atlaskit/smart-card 26.50.14 → 26.50.15

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 (59) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/extractors/flexible/actions/index.js +17 -0
  3. package/dist/cjs/extractors/flexible/index.js +2 -2
  4. package/dist/cjs/state/flexible-ui-context/types.js +1 -3
  5. package/dist/cjs/utils/analytics/analytics.js +1 -1
  6. package/dist/cjs/view/FlexibleCard/components/actions/index.js +8 -12
  7. package/dist/cjs/view/FlexibleCard/components/actions/preview-action/index.js +83 -0
  8. package/dist/cjs/view/FlexibleCard/components/actions/types.js +5 -0
  9. package/dist/cjs/view/FlexibleCard/components/actions/utils.js +0 -13
  10. package/dist/cjs/view/FlexibleCard/components/blocks/action-group/action-group-item/index.js +8 -6
  11. package/dist/cjs/view/FlexibleCard/components/blocks/utils.js +45 -11
  12. package/dist/cjs/view/LinkUrl/index.js +1 -1
  13. package/dist/es2019/extractors/flexible/actions/index.js +9 -0
  14. package/dist/es2019/extractors/flexible/index.js +2 -2
  15. package/dist/es2019/state/flexible-ui-context/types.js +6 -1
  16. package/dist/es2019/utils/analytics/analytics.js +1 -1
  17. package/dist/es2019/view/FlexibleCard/components/actions/index.js +1 -11
  18. package/dist/es2019/view/FlexibleCard/components/actions/preview-action/index.js +52 -0
  19. package/dist/es2019/view/FlexibleCard/components/actions/utils.js +0 -14
  20. package/dist/es2019/view/FlexibleCard/components/blocks/action-group/action-group-item/index.js +8 -6
  21. package/dist/es2019/view/FlexibleCard/components/blocks/utils.js +42 -33
  22. package/dist/es2019/view/LinkUrl/index.js +1 -1
  23. package/dist/esm/extractors/flexible/actions/index.js +10 -0
  24. package/dist/esm/extractors/flexible/index.js +2 -2
  25. package/dist/esm/state/flexible-ui-context/types.js +6 -1
  26. package/dist/esm/utils/analytics/analytics.js +1 -1
  27. package/dist/esm/view/FlexibleCard/components/actions/index.js +1 -11
  28. package/dist/esm/view/FlexibleCard/components/actions/preview-action/index.js +73 -0
  29. package/dist/esm/view/FlexibleCard/components/actions/preview-action/types.js +1 -0
  30. package/dist/esm/view/FlexibleCard/components/actions/types.js +1 -0
  31. package/dist/esm/view/FlexibleCard/components/actions/utils.js +0 -13
  32. package/dist/esm/view/FlexibleCard/components/blocks/action-group/action-group-item/index.js +8 -6
  33. package/dist/esm/view/FlexibleCard/components/blocks/utils.js +45 -11
  34. package/dist/esm/view/LinkUrl/index.js +1 -1
  35. package/dist/types/extractors/flexible/actions/index.d.ts +5 -0
  36. package/dist/types/state/flexible-ui-context/types.d.ts +8 -7
  37. package/dist/types/view/FlexibleCard/components/actions/index.d.ts +1 -7
  38. package/dist/types/view/FlexibleCard/components/actions/preview-action/index.d.ts +4 -0
  39. package/dist/types/view/FlexibleCard/components/actions/preview-action/types.d.ts +2 -0
  40. package/dist/types/view/FlexibleCard/components/actions/types.d.ts +7 -0
  41. package/dist/types/view/FlexibleCard/types.d.ts +20 -2
  42. package/dist/types-ts4.5/extractors/flexible/actions/index.d.ts +5 -0
  43. package/dist/types-ts4.5/state/flexible-ui-context/types.d.ts +8 -7
  44. package/dist/types-ts4.5/view/FlexibleCard/components/actions/index.d.ts +1 -7
  45. package/dist/types-ts4.5/view/FlexibleCard/components/actions/preview-action/index.d.ts +4 -0
  46. package/dist/types-ts4.5/view/FlexibleCard/components/actions/preview-action/types.d.ts +2 -0
  47. package/dist/types-ts4.5/view/FlexibleCard/components/actions/types.d.ts +7 -0
  48. package/dist/types-ts4.5/view/FlexibleCard/types.d.ts +20 -2
  49. package/package.json +1 -1
  50. package/dist/cjs/view/FlexibleCard/components/actions/action/preview-action/index.js +0 -87
  51. package/dist/es2019/view/FlexibleCard/components/actions/action/preview-action/index.js +0 -63
  52. package/dist/esm/view/FlexibleCard/components/actions/action/preview-action/index.js +0 -80
  53. package/dist/types/view/FlexibleCard/components/actions/action/preview-action/index.d.ts +0 -4
  54. package/dist/types/view/FlexibleCard/components/actions/action/preview-action/types.d.ts +0 -12
  55. package/dist/types-ts4.5/view/FlexibleCard/components/actions/action/preview-action/index.d.ts +0 -4
  56. package/dist/types-ts4.5/view/FlexibleCard/components/actions/action/preview-action/types.d.ts +0 -12
  57. /package/dist/cjs/view/FlexibleCard/components/actions/{action/preview-action → preview-action}/types.js +0 -0
  58. /package/dist/es2019/view/FlexibleCard/components/actions/{action/preview-action → preview-action}/types.js +0 -0
  59. /package/dist/{esm/view/FlexibleCard/components/actions/action/preview-action → es2019/view/FlexibleCard/components/actions}/types.js +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 26.50.15
4
+
5
+ ### Patch Changes
6
+
7
+ - [#86332](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/86332) [`813df6eb80c9`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/813df6eb80c9) - Refactor FlexibleCard's PreviewAction creation
8
+
3
9
  ## 26.50.14
4
10
 
5
11
  ### Patch Changes
@@ -0,0 +1,17 @@
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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _constants = require("../../../constants");
10
+ var _extractPreviewAction = require("./extract-preview-action");
11
+ var extractActions = function extractActions(response, actionOptions) {
12
+ var action = (0, _defineProperty2.default)({}, _constants.ActionName.PreviewAction, (0, _extractPreviewAction.extractPreviewAction)(response, actionOptions));
13
+ return Object.values(action).some(function (value) {
14
+ return Boolean(value);
15
+ }) ? action : undefined;
16
+ };
17
+ var _default = exports.default = extractActions;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _primitives = require("../common/primitives");
9
+ var _actions = _interopRequireDefault(require("./actions"));
9
10
  var _extractFollowAction = _interopRequireDefault(require("./actions/extract-follow-action"));
10
11
  var _icon = require("./icon");
11
12
  var _utils = require("./utils");
@@ -16,7 +17,6 @@ var _extractProviderIcon = _interopRequireDefault(require("./icon/extract-provid
16
17
  var _extractPreview = _interopRequireDefault(require("./extract-preview"));
17
18
  var _extractState = _interopRequireDefault(require("./extract-state"));
18
19
  var _latestCommit = require("./latest-commit");
19
- var _extractPreviewAction = require("./actions/extract-preview-action");
20
20
  var _extractDownloadAction = require("./actions/extract-download-action");
21
21
  var _extractViewAction = require("./actions/extract-view-action");
22
22
  var extractFlexibleUiContext = function extractFlexibleUiContext() {
@@ -31,6 +31,7 @@ var extractFlexibleUiContext = function extractFlexibleUiContext() {
31
31
  var data = response.data;
32
32
  var url = (0, _linkExtractors.extractLink)(data);
33
33
  return {
34
+ actions: (0, _actions.default)(response, actionOptions),
34
35
  assignedToGroup: (0, _utils.extractPersonAssignedToAsArray)(data),
35
36
  attachmentCount: (0, _utils.extractAttachmentCount)(data),
36
37
  authorGroup: (0, _linkExtractors.extractPersonCreatedBy)(data),
@@ -47,7 +48,6 @@ var extractFlexibleUiContext = function extractFlexibleUiContext() {
47
48
  createdOn: (0, _linkExtractors.extractDateCreated)(data),
48
49
  dueOn: (0, _utils.extractDueOn)(data),
49
50
  followAction: (0, _extractFollowAction.default)(response, actionOptions, id),
50
- previewAction: (0, _extractPreviewAction.extractPreviewAction)(response, actionOptions),
51
51
  viewAction: (0, _extractViewAction.extractViewAction)(data, actionOptions),
52
52
  downloadAction: (0, _extractDownloadAction.extractDownloadAction)(data, actionOptions),
53
53
  latestCommit: (0, _latestCommit.extractLatestCommit)(data),
@@ -1,5 +1,3 @@
1
1
  "use strict";
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
3
+ var _constants = require("../../constants");
@@ -22,7 +22,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
22
22
  var context = exports.context = {
23
23
  componentName: 'smart-cards',
24
24
  packageName: "@atlaskit/smart-card",
25
- packageVersion: "26.50.14"
25
+ packageVersion: "26.50.15"
26
26
  };
27
27
  var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
28
28
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -11,14 +11,17 @@ Object.defineProperty(exports, "FollowAction", {
11
11
  return _followAction.default;
12
12
  }
13
13
  });
14
- exports.ViewAction = exports.PreviewAction = void 0;
14
+ Object.defineProperty(exports, "PreviewAction", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _previewAction.default;
18
+ }
19
+ });
20
+ exports.ViewAction = void 0;
15
21
  var _constants = require("../../../../constants");
16
22
  var _utils = require("./utils");
17
23
  var _followAction = _interopRequireDefault(require("./follow-action"));
18
- // Attention: Keep the export name and action name the same.
19
- // This will help reducing the code for mapping action inside
20
- // createAction and renderActionItems
21
-
24
+ var _previewAction = _interopRequireDefault(require("./preview-action"));
22
25
  /**
23
26
  * Creates a DeleteAction component. Accepts default ActionProps, but defaults
24
27
  * the icon to a cross icon.
@@ -32,13 +35,6 @@ var DeleteAction = exports.DeleteAction = (0, _utils.createUIAction)(_constants.
32
35
  */
33
36
  var EditAction = exports.EditAction = (0, _utils.createUIAction)(_constants.ActionName.EditAction);
34
37
 
35
- /**
36
- * Creates a PreviewAction component. Accepts default PreviewActionProps, and defaults
37
- * to the text 'Preview' inside the button.
38
- * @see Action
39
- */
40
- var PreviewAction = exports.PreviewAction = (0, _utils.createDataAction)(_constants.ActionName.PreviewAction);
41
-
42
38
  /**
43
39
  * Creates a ViewAction component. Accepts default ViewActionProps, and defaults
44
40
  * to the text 'View' inside the button.
@@ -0,0 +1,83 @@
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 _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
14
+ var _vidFullScreenOn = _interopRequireDefault(require("@atlaskit/icon/glyph/vid-full-screen-on"));
15
+ var _react = _interopRequireWildcard(require("react"));
16
+ var _reactIntlNext = require("react-intl-next");
17
+ var _constants = require("../../../../../constants");
18
+ var _messages = require("../../../../../messages");
19
+ var _flexibleUiContext = require("../../../../../state/flexible-ui-context");
20
+ var _useInvokeClientAction = _interopRequireDefault(require("../../../../../state/hooks/use-invoke-client-action"));
21
+ var _utils = require("../../utils");
22
+ var _action = _interopRequireDefault(require("../action"));
23
+ var _excluded = ["onClick"];
24
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
25
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
26
+ 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; }
27
+ 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; }
28
+ var PreviewAction = function PreviewAction(_ref) {
29
+ var _context$actions;
30
+ var onClickCallback = _ref.onClick,
31
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
32
+ var context = (0, _flexibleUiContext.useFlexibleUiContext)();
33
+ var analytics = (0, _flexibleUiContext.useFlexibleUiAnalyticsContext)();
34
+ var invoke = (0, _useInvokeClientAction.default)({
35
+ analytics: analytics
36
+ });
37
+ var data = context === null || context === void 0 || (_context$actions = context.actions) === null || _context$actions === void 0 ? void 0 : _context$actions[_constants.ActionName.PreviewAction];
38
+ var onClick = (0, _react.useCallback)(function () {
39
+ if (data) {
40
+ invoke({
41
+ actionType: _constants.ActionName.PreviewAction,
42
+ actionFn: function () {
43
+ var _actionFn = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
44
+ return _regenerator.default.wrap(function _callee$(_context) {
45
+ while (1) switch (_context.prev = _context.next) {
46
+ case 0:
47
+ return _context.abrupt("return", (0, _utils.openEmbedModalWithFlexibleUiIcon)(_objectSpread({
48
+ download: data === null || data === void 0 ? void 0 : data.downloadUrl,
49
+ extensionKey: analytics === null || analytics === void 0 ? void 0 : analytics.extensionKey,
50
+ analytics: analytics
51
+ }, data)));
52
+ case 1:
53
+ case "end":
54
+ return _context.stop();
55
+ }
56
+ }, _callee);
57
+ }));
58
+ function actionFn() {
59
+ return _actionFn.apply(this, arguments);
60
+ }
61
+ return actionFn;
62
+ }(),
63
+ // These values have already been set in analytics context.
64
+ // We only pass these here for ufo experience.
65
+ display: analytics === null || analytics === void 0 ? void 0 : analytics.display,
66
+ extensionKey: analytics === null || analytics === void 0 ? void 0 : analytics.extensionKey
67
+ });
68
+ }
69
+ if (onClickCallback) {
70
+ onClickCallback();
71
+ }
72
+ }, [analytics, data, invoke, onClickCallback]);
73
+ return data ? /*#__PURE__*/_react.default.createElement(_action.default, (0, _extends2.default)({
74
+ content: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.preview_improved),
75
+ icon: /*#__PURE__*/_react.default.createElement(_vidFullScreenOn.default, {
76
+ label: "Open preview"
77
+ }),
78
+ onClick: onClick,
79
+ testId: "smart-action-preview-action",
80
+ tooltipMessage: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.preview_improved)
81
+ }, data, props)) : null;
82
+ };
83
+ var _default = exports.default = PreviewAction;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -17,8 +17,6 @@ var _reactIntlNext = require("react-intl-next");
17
17
  var _messages = require("../../../../messages");
18
18
  var _cross = _interopRequireDefault(require("@atlaskit/icon/glyph/cross"));
19
19
  var _edit = _interopRequireDefault(require("@atlaskit/icon/glyph/edit"));
20
- var _previewAction = _interopRequireDefault(require("./action/preview-action"));
21
- var _vidFullScreenOn = _interopRequireDefault(require("@atlaskit/icon/glyph/vid-full-screen-on"));
22
20
  var _viewAction = _interopRequireDefault(require("./action/view-action"));
23
21
  var _shortcut = _interopRequireDefault(require("@atlaskit/icon/glyph/shortcut"));
24
22
  var _downloadAction = _interopRequireDefault(require("./action/download-action"));
@@ -51,16 +49,6 @@ var actionMappings = (_actionMappings = {}, (0, _defineProperty2.default)(_actio
51
49
  }),
52
50
  tooltipMessage: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.edit)
53
51
  }
54
- }), (0, _defineProperty2.default)(_actionMappings, _constants.ActionName.PreviewAction, {
55
- component: _previewAction.default,
56
- props: {
57
- testId: 'smart-action-preview-action',
58
- content: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.preview_improved),
59
- icon: /*#__PURE__*/_react.default.createElement(_vidFullScreenOn.default, {
60
- label: "Open preview"
61
- }),
62
- tooltipMessage: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.preview_improved)
63
- }
64
52
  }), (0, _defineProperty2.default)(_actionMappings, _constants.ActionName.ViewAction, {
65
53
  component: _viewAction.default,
66
54
  props: {
@@ -93,7 +81,6 @@ var getActionData = function getActionData(actionName, contextKey, context) {
93
81
  }
94
82
  var data = context[contextKey];
95
83
  switch (actionName) {
96
- case _constants.ActionName.PreviewAction:
97
84
  case _constants.ActionName.ViewAction:
98
85
  case _constants.ActionName.DownloadAction:
99
86
  return data;
@@ -12,7 +12,6 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
12
12
  var _react = require("@emotion/react");
13
13
  var _react2 = _interopRequireWildcard(require("react"));
14
14
  var Actions = _interopRequireWildcard(require("../../../actions"));
15
- var _utils = require("../../utils");
16
15
  var _excluded = ["name", "hideContent", "hideIcon", "onClick", "isDisabled"];
17
16
  /** @jsx jsx */
18
17
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
@@ -50,7 +49,14 @@ var ActionGroupItem = function ActionGroupItem(_ref) {
50
49
  if (hideIcon) {
51
50
  actionProps.icon = undefined;
52
51
  }
53
- var action = (0, _react.jsx)(Action, (0, _extends2.default)({
52
+ return (0, _react.jsx)(Action
53
+ // Remove url once ViewAction is retired.
54
+ // This seems to be a typescript workaround
55
+ // because ViewAction marks it as required,
56
+ // which does not reflect actual implementation as the url
57
+ // came from data context and not all actions require url.
58
+ // https://product-fabric.atlassian.net/browse/EDM-9547
59
+ , (0, _extends2.default)({
54
60
  url: "",
55
61
  asDropDownItem: asDropDownItems,
56
62
  size: size,
@@ -58,9 +64,5 @@ var ActionGroupItem = function ActionGroupItem(_ref) {
58
64
  onClick: handleOnClick,
59
65
  isDisabled: isDisabled
60
66
  }, actionProps));
61
- if (!(0, _utils.isJSXElementNull)(action)) {
62
- return action;
63
- }
64
- return null;
65
67
  };
66
68
  var _default = exports.default = ActionGroupItem;
@@ -19,7 +19,7 @@ var _flexible = require("../../../../utils/flexible");
19
19
  var _actionGroup = _interopRequireDefault(require("./action-group"));
20
20
  var _elementGroup = _interopRequireDefault(require("./element-group"));
21
21
  var _excluded = ["name"];
22
- var _ElementDisplaySchema, _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
22
+ var _ElementDisplaySchema, _templateObject;
23
23
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
24
24
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
25
25
  // Determine whether the element can be display as inline/block.
@@ -28,10 +28,16 @@ var ElementDisplaySchema = exports.ElementDisplaySchema = (_ElementDisplaySchema
28
28
  var getDirectionStyles = function getDirectionStyles(direction) {
29
29
  switch (direction) {
30
30
  case _constants.SmartLinkDirection.Vertical:
31
- return (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n flex-direction: column;\n align-items: flex-start;\n "])));
31
+ return (0, _react2.css)({
32
+ flexDirection: 'column',
33
+ alignItems: 'flex-start'
34
+ });
32
35
  case _constants.SmartLinkDirection.Horizontal:
33
36
  default:
34
- return (0, _react2.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n flex-direction: row;\n align-items: center;\n "])));
37
+ return (0, _react2.css)({
38
+ flexDirection: 'row',
39
+ alignItems: 'center'
40
+ });
35
41
  }
36
42
  };
37
43
  var getGapSize = exports.getGapSize = function getGapSize(size) {
@@ -48,9 +54,26 @@ var getGapSize = exports.getGapSize = function getGapSize(size) {
48
54
  }
49
55
  };
50
56
  var getBaseStyles = exports.getBaseStyles = function getBaseStyles(direction, size) {
51
- return (0, _react2.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n align-items: center;\n display: flex;\n gap: ", "rem;\n line-height: 1rem;\n min-width: 0;\n overflow: hidden;\n ", ";\n &:empty {\n display: none;\n }\n & > * {\n min-width: 0;\n }\n & > [data-fit-to-content] {\n min-width: fit-content;\n }\n"])), getGapSize(size), getDirectionStyles(direction));
57
+ return (0, _react2.css)({
58
+ alignItems: 'center',
59
+ display: 'flex',
60
+ gap: "".concat(getGapSize(size), "rem"),
61
+ lineHeight: '1rem',
62
+ minWidth: 0,
63
+ overflow: 'hidden'
64
+ }, getDirectionStyles(direction), {
65
+ '&:empty': {
66
+ display: 'none'
67
+ },
68
+ '& > *': {
69
+ minWidth: 0
70
+ },
71
+ '& > [data-fit-to-content]': {
72
+ minWidth: 'fit-content'
73
+ }
74
+ });
52
75
  };
53
- var highlightRemoveStyles = exports.highlightRemoveStyles = (0, _react2.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n outline: none !important;\n outline-color: inherit;\n color: inherit;\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n"])));
76
+ var highlightRemoveStyles = exports.highlightRemoveStyles = (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n outline: none !important;\n outline-color: inherit;\n color: inherit;\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n"])));
54
77
  var isActionGroup = function isActionGroup(node) {
55
78
  return /*#__PURE__*/_react.default.isValidElement(node) && node.type === _actionGroup.default;
56
79
  };
@@ -69,26 +92,37 @@ var getActionGroupStyles = exports.getActionGroupStyles = function getActionGrou
69
92
  // The biggest height of the action button exceeds the max line-height
70
93
  // of the elements causing the action on the block with x-large size to
71
94
  // get cut at the bottom.
72
- return (0, _react2.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n max-height: 2rem;\n "])));
95
+ return (0, _react2.css)({
96
+ maxHeight: '2rem'
97
+ });
73
98
  }
74
99
  };
75
100
  var filterActionItems = exports.filterActionItems = function filterActionItems() {
76
101
  var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
77
102
  var context = arguments.length > 1 ? arguments[1] : undefined;
78
103
  return items.filter(function (item) {
104
+ var _context$actions;
79
105
  switch (item.name) {
80
- // Action that require data from the data context to render.
106
+ case _constants.ActionName.DeleteAction:
107
+ case _constants.ActionName.EditAction:
108
+ case _constants.ActionName.CustomAction:
109
+ // Named and custom actions that user defines.
110
+ return Boolean(_constants.ActionName[item.name]);
81
111
  case _constants.ActionName.DownloadAction:
112
+ // Remove once DownloadAction is refactored to context.action
113
+ // https://product-fabric.atlassian.net/browse/EDM-9545
82
114
  return Boolean(context === null || context === void 0 ? void 0 : context.downloadAction);
115
+ // Remove once FollowAction is refactored to context.action
116
+ // https://product-fabric.atlassian.net/browse/EDM-9559
83
117
  case _constants.ActionName.FollowAction:
84
118
  return Boolean(context === null || context === void 0 ? void 0 : context.followAction);
85
- case _constants.ActionName.PreviewAction:
86
- return Boolean(context === null || context === void 0 ? void 0 : context.previewAction);
119
+ // Remove once ViewAction is retired
120
+ // https://product-fabric.atlassian.net/browse/EDM-9547
87
121
  case _constants.ActionName.ViewAction:
88
122
  return Boolean(context === null || context === void 0 ? void 0 : context.viewAction);
89
123
  default:
90
- // Named and custom actions that user defines.
91
- return Boolean(_constants.ActionName[item.name]);
124
+ // Action that require data from the data context to render.
125
+ return Boolean(context === null || context === void 0 || (_context$actions = context.actions) === null || _context$actions === void 0 ? void 0 : _context$actions[item.name]);
92
126
  }
93
127
  });
94
128
  };
@@ -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: "26.50.14",
20
+ packageVersion: "26.50.15",
21
21
  componentName: 'linkUrl'
22
22
  };
23
23
  var Link = (0, _click.withLinkClickedEvent)('a');
@@ -0,0 +1,9 @@
1
+ import { ActionName } from '../../../constants';
2
+ import { extractPreviewAction } from './extract-preview-action';
3
+ const extractActions = (response, actionOptions) => {
4
+ const action = {
5
+ [ActionName.PreviewAction]: extractPreviewAction(response, actionOptions)
6
+ };
7
+ return Object.values(action).some(value => Boolean(value)) ? action : undefined;
8
+ };
9
+ export default extractActions;
@@ -1,4 +1,5 @@
1
1
  import { extractSummary } from '../common/primitives';
2
+ import extractActions from './actions';
2
3
  import extractFollowAction from './actions/extract-follow-action';
3
4
  import { extractLinkIcon } from './icon';
4
5
  import { extractAttachmentCount, extractChecklistProgress, extractCommentCount, extractCreatedBy, extractModifiedBy, extractProgrammingLanguage, extractSubscriberCount, extractViewCount, extractReactCount, extractVoteCount, extractSourceBranch, extractTargetBranch, extractDueOn, extractLocation, extractOwnedBy, extractAssignedTo, extractSubTasksProgress, extractStoryPoints, extractReadTime, extractSentOn, extractPersonAssignedToAsArray } from './utils';
@@ -9,7 +10,6 @@ import extractProviderIcon from './icon/extract-provider-icon';
9
10
  import extractPreview from './extract-preview';
10
11
  import extractState from './extract-state';
11
12
  import { extractLatestCommit } from './latest-commit';
12
- import { extractPreviewAction } from './actions/extract-preview-action';
13
13
  import { extractDownloadAction } from './actions/extract-download-action';
14
14
  import { extractViewAction } from './actions/extract-view-action';
15
15
  const extractFlexibleUiContext = ({
@@ -24,6 +24,7 @@ const extractFlexibleUiContext = ({
24
24
  const data = response.data;
25
25
  const url = extractLink(data);
26
26
  return {
27
+ actions: extractActions(response, actionOptions),
27
28
  assignedToGroup: extractPersonAssignedToAsArray(data),
28
29
  attachmentCount: extractAttachmentCount(data),
29
30
  authorGroup: extractPersonCreatedBy(data),
@@ -40,7 +41,6 @@ const extractFlexibleUiContext = ({
40
41
  createdOn: extractDateCreated(data),
41
42
  dueOn: extractDueOn(data),
42
43
  followAction: extractFollowAction(response, actionOptions, id),
43
- previewAction: extractPreviewAction(response, actionOptions),
44
44
  viewAction: extractViewAction(data, actionOptions),
45
45
  downloadAction: extractDownloadAction(data, actionOptions),
46
46
  latestCommit: extractLatestCommit(data),
@@ -1 +1,6 @@
1
- export {};
1
+ import { ActionName } from '../../constants';
2
+
3
+ /**
4
+ * This provides the data that will be used by Smart Links Flexible UI to populate it's
5
+ * underlying elements.
6
+ */
@@ -4,7 +4,7 @@ export const ANALYTICS_CHANNEL = 'media';
4
4
  export const context = {
5
5
  componentName: 'smart-cards',
6
6
  packageName: "@atlaskit/smart-card",
7
- packageVersion: "26.50.14"
7
+ packageVersion: "26.50.15"
8
8
  };
9
9
  export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
10
10
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -1,10 +1,7 @@
1
1
  import { ActionName } from '../../../../constants';
2
2
  import { createDataAction, createUIAction } from './utils';
3
3
  export { default as FollowAction } from './follow-action';
4
-
5
- // Attention: Keep the export name and action name the same.
6
- // This will help reducing the code for mapping action inside
7
- // createAction and renderActionItems
4
+ export { default as PreviewAction } from './preview-action';
8
5
 
9
6
  /**
10
7
  * Creates a DeleteAction component. Accepts default ActionProps, but defaults
@@ -19,13 +16,6 @@ export const DeleteAction = createUIAction(ActionName.DeleteAction);
19
16
  */
20
17
  export const EditAction = createUIAction(ActionName.EditAction);
21
18
 
22
- /**
23
- * Creates a PreviewAction component. Accepts default PreviewActionProps, and defaults
24
- * to the text 'Preview' inside the button.
25
- * @see Action
26
- */
27
- export const PreviewAction = createDataAction(ActionName.PreviewAction);
28
-
29
19
  /**
30
20
  * Creates a ViewAction component. Accepts default ViewActionProps, and defaults
31
21
  * to the text 'View' inside the button.
@@ -0,0 +1,52 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import VidFullScreenOnIcon from '@atlaskit/icon/glyph/vid-full-screen-on';
3
+ import React, { useCallback } from 'react';
4
+ import { FormattedMessage } from 'react-intl-next';
5
+ import { ActionName } from '../../../../../constants';
6
+ import { messages } from '../../../../../messages';
7
+ import { useFlexibleUiAnalyticsContext, useFlexibleUiContext } from '../../../../../state/flexible-ui-context';
8
+ import useInvokeClientAction from '../../../../../state/hooks/use-invoke-client-action';
9
+ import { openEmbedModalWithFlexibleUiIcon } from '../../utils';
10
+ import Action from '../action';
11
+ const PreviewAction = ({
12
+ onClick: onClickCallback,
13
+ ...props
14
+ }) => {
15
+ var _context$actions;
16
+ const context = useFlexibleUiContext();
17
+ const analytics = useFlexibleUiAnalyticsContext();
18
+ const invoke = useInvokeClientAction({
19
+ analytics
20
+ });
21
+ const data = context === null || context === void 0 ? void 0 : (_context$actions = context.actions) === null || _context$actions === void 0 ? void 0 : _context$actions[ActionName.PreviewAction];
22
+ const onClick = useCallback(() => {
23
+ if (data) {
24
+ invoke({
25
+ actionType: ActionName.PreviewAction,
26
+ actionFn: async () => openEmbedModalWithFlexibleUiIcon({
27
+ download: data === null || data === void 0 ? void 0 : data.downloadUrl,
28
+ extensionKey: analytics === null || analytics === void 0 ? void 0 : analytics.extensionKey,
29
+ analytics,
30
+ ...data
31
+ }),
32
+ // These values have already been set in analytics context.
33
+ // We only pass these here for ufo experience.
34
+ display: analytics === null || analytics === void 0 ? void 0 : analytics.display,
35
+ extensionKey: analytics === null || analytics === void 0 ? void 0 : analytics.extensionKey
36
+ });
37
+ }
38
+ if (onClickCallback) {
39
+ onClickCallback();
40
+ }
41
+ }, [analytics, data, invoke, onClickCallback]);
42
+ return data ? /*#__PURE__*/React.createElement(Action, _extends({
43
+ content: /*#__PURE__*/React.createElement(FormattedMessage, messages.preview_improved),
44
+ icon: /*#__PURE__*/React.createElement(VidFullScreenOnIcon, {
45
+ label: "Open preview"
46
+ }),
47
+ onClick: onClick,
48
+ testId: "smart-action-preview-action",
49
+ tooltipMessage: /*#__PURE__*/React.createElement(FormattedMessage, messages.preview_improved)
50
+ }, data, props)) : null;
51
+ };
52
+ export default PreviewAction;
@@ -7,8 +7,6 @@ import { FormattedMessage } from 'react-intl-next';
7
7
  import { messages } from '../../../../messages';
8
8
  import CrossIcon from '@atlaskit/icon/glyph/cross';
9
9
  import EditIcon from '@atlaskit/icon/glyph/edit';
10
- import PreviewAction from './action/preview-action';
11
- import VidFullScreenOnIcon from '@atlaskit/icon/glyph/vid-full-screen-on';
12
10
  import ViewAction from './action/view-action';
13
11
  import ShortcutIcon from '@atlaskit/icon/glyph/shortcut';
14
12
  import DownloadAction from './action/download-action';
@@ -40,17 +38,6 @@ const actionMappings = {
40
38
  tooltipMessage: /*#__PURE__*/React.createElement(FormattedMessage, messages.edit)
41
39
  }
42
40
  },
43
- [ActionName.PreviewAction]: {
44
- component: PreviewAction,
45
- props: {
46
- testId: 'smart-action-preview-action',
47
- content: /*#__PURE__*/React.createElement(FormattedMessage, messages.preview_improved),
48
- icon: /*#__PURE__*/React.createElement(VidFullScreenOnIcon, {
49
- label: "Open preview"
50
- }),
51
- tooltipMessage: /*#__PURE__*/React.createElement(FormattedMessage, messages.preview_improved)
52
- }
53
- },
54
41
  [ActionName.ViewAction]: {
55
42
  component: ViewAction,
56
43
  props: {
@@ -85,7 +72,6 @@ const getActionData = (actionName, contextKey, context) => {
85
72
  }
86
73
  const data = context[contextKey];
87
74
  switch (actionName) {
88
- case ActionName.PreviewAction:
89
75
  case ActionName.ViewAction:
90
76
  case ActionName.DownloadAction:
91
77
  return data;
@@ -3,7 +3,6 @@ import _extends from "@babel/runtime/helpers/extends";
3
3
  import { jsx } from '@emotion/react';
4
4
  import React, { useCallback } from 'react';
5
5
  import * as Actions from '../../../actions';
6
- import { isJSXElementNull } from '../../utils';
7
6
  const ActionGroupItem = ({
8
7
  item,
9
8
  size,
@@ -40,7 +39,14 @@ const ActionGroupItem = ({
40
39
  if (hideIcon) {
41
40
  actionProps.icon = undefined;
42
41
  }
43
- const action = jsx(Action, _extends({
42
+ return jsx(Action
43
+ // Remove url once ViewAction is retired.
44
+ // This seems to be a typescript workaround
45
+ // because ViewAction marks it as required,
46
+ // which does not reflect actual implementation as the url
47
+ // came from data context and not all actions require url.
48
+ // https://product-fabric.atlassian.net/browse/EDM-9547
49
+ , _extends({
44
50
  url: "",
45
51
  asDropDownItem: asDropDownItems,
46
52
  size: size,
@@ -48,9 +54,5 @@ const ActionGroupItem = ({
48
54
  onClick: handleOnClick,
49
55
  isDisabled: isDisabled
50
56
  }, actionProps));
51
- if (!isJSXElementNull(action)) {
52
- return action;
53
- }
54
- return null;
55
57
  };
56
58
  export default ActionGroupItem;