@atlaskit/teams-public 0.4.0 → 0.5.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 (45) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/common/utils/get-container-properties.js +16 -3
  3. package/dist/cjs/controllers/hooks/use-team-containers/use-product-permission/index.js +50 -0
  4. package/dist/cjs/controllers/product-permission/main.js +115 -0
  5. package/dist/cjs/controllers/product-permission/types.js +5 -0
  6. package/dist/cjs/controllers/product-permission/utils.js +34 -0
  7. package/dist/cjs/ui/team-containers/disconnect-dialog/async.js +25 -0
  8. package/dist/cjs/ui/team-containers/disconnect-dialog/index.js +106 -0
  9. package/dist/cjs/ui/team-containers/linked-container-card/index.js +3 -1
  10. package/dist/cjs/ui/team-containers/main.js +27 -4
  11. package/dist/es2019/common/utils/get-container-properties.js +16 -3
  12. package/dist/es2019/controllers/hooks/use-team-containers/use-product-permission/index.js +28 -0
  13. package/dist/es2019/controllers/product-permission/main.js +79 -0
  14. package/dist/es2019/controllers/product-permission/types.js +1 -0
  15. package/dist/es2019/controllers/product-permission/utils.js +30 -0
  16. package/dist/es2019/ui/team-containers/disconnect-dialog/async.js +8 -0
  17. package/dist/es2019/ui/team-containers/disconnect-dialog/index.js +77 -0
  18. package/dist/es2019/ui/team-containers/linked-container-card/index.js +3 -1
  19. package/dist/es2019/ui/team-containers/main.js +16 -4
  20. package/dist/esm/common/utils/get-container-properties.js +16 -3
  21. package/dist/esm/controllers/hooks/use-team-containers/use-product-permission/index.js +43 -0
  22. package/dist/esm/controllers/product-permission/main.js +108 -0
  23. package/dist/esm/controllers/product-permission/types.js +1 -0
  24. package/dist/esm/controllers/product-permission/utils.js +27 -0
  25. package/dist/esm/ui/team-containers/disconnect-dialog/async.js +13 -0
  26. package/dist/esm/ui/team-containers/disconnect-dialog/index.js +96 -0
  27. package/dist/esm/ui/team-containers/linked-container-card/index.js +3 -1
  28. package/dist/esm/ui/team-containers/main.js +27 -4
  29. package/dist/types/common/utils/get-container-properties.d.ts +11 -0
  30. package/dist/types/controllers/hooks/use-team-containers/use-product-permission/index.d.ts +2 -0
  31. package/dist/types/controllers/product-permission/main.d.ts +3 -0
  32. package/dist/types/controllers/product-permission/types.d.ts +43 -0
  33. package/dist/types/controllers/product-permission/utils.d.ts +3 -0
  34. package/dist/types/ui/team-containers/disconnect-dialog/async.d.ts +3 -0
  35. package/dist/types/ui/team-containers/disconnect-dialog/index.d.ts +36 -0
  36. package/dist/types/ui/team-containers/linked-container-card/index.d.ts +2 -1
  37. package/dist/types-ts4.5/common/utils/get-container-properties.d.ts +11 -0
  38. package/dist/types-ts4.5/controllers/hooks/use-team-containers/use-product-permission/index.d.ts +2 -0
  39. package/dist/types-ts4.5/controllers/product-permission/main.d.ts +3 -0
  40. package/dist/types-ts4.5/controllers/product-permission/types.d.ts +43 -0
  41. package/dist/types-ts4.5/controllers/product-permission/utils.d.ts +3 -0
  42. package/dist/types-ts4.5/ui/team-containers/disconnect-dialog/async.d.ts +3 -0
  43. package/dist/types-ts4.5/ui/team-containers/disconnect-dialog/index.d.ts +36 -0
  44. package/dist/types-ts4.5/ui/team-containers/linked-container-card/index.d.ts +2 -1
  45. package/package.json +4 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @atlaskit/teams-public
2
2
 
3
+ ## 0.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#116071](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/116071)
8
+ [`cd351ff2c2abc`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/cd351ff2c2abc) -
9
+ Move useProductPermissions to teams-public package
10
+ - [#116370](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/116370)
11
+ [`83accb97730ab`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/83accb97730ab) -
12
+ [ux] Add disconnect dialog to the teams container
13
+
3
14
  ## 0.4.0
4
15
 
5
16
  ### Minor Changes
@@ -38,6 +38,16 @@ var messages = exports.messages = (0, _reactIntlNext.defineMessages)({
38
38
  id: 'ptc-directory.team-profile-page.team-containers.add-loom-space-description.non-final',
39
39
  defaultMessage: 'Loom space',
40
40
  description: 'Description of the card to add a Loom space to a team'
41
+ },
42
+ projectContainerText: {
43
+ id: 'ptc-directory.team-profile-page.team-containers.project-container-text.non-final',
44
+ defaultMessage: 'project',
45
+ description: 'Text for project type containers'
46
+ },
47
+ spaceContainerText: {
48
+ id: 'ptc-directory.team-profile-page.team-containers.space-container-text.non-final',
49
+ defaultMessage: 'space',
50
+ description: 'Text for space type containers'
41
51
  }
42
52
  });
43
53
  var getContainerProperties = exports.getContainerProperties = function getContainerProperties(containerType) {
@@ -50,7 +60,8 @@ var getContainerProperties = exports.getContainerProperties = function getContai
50
60
  label: "",
51
61
  size: "xsmall"
52
62
  }),
53
- title: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.addConfluenceContainerTitle)
63
+ title: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.addConfluenceContainerTitle),
64
+ containerTypeText: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.spaceContainerText)
54
65
  };
55
66
  case 'JiraProject':
56
67
  return {
@@ -60,13 +71,15 @@ var getContainerProperties = exports.getContainerProperties = function getContai
60
71
  label: "",
61
72
  size: "xsmall"
62
73
  }),
63
- title: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.addJiraProjectTitle)
74
+ title: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.addJiraProjectTitle),
75
+ containerTypeText: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.projectContainerText)
64
76
  };
65
77
  default:
66
78
  return {
67
79
  description: null,
68
80
  icon: null,
69
- title: null
81
+ title: null,
82
+ containerTypeText: null
70
83
  };
71
84
  }
72
85
  };
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useProductPermissions = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _react = require("react");
13
+ var _main = require("../../../product-permission/main");
14
+ 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; }
15
+ 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; }
16
+ var useProductPermissions = exports.useProductPermissions = function useProductPermissions(userId, cloudId) {
17
+ var permissionId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'read';
18
+ var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
19
+ enabled: true
20
+ },
21
+ enabled = _ref.enabled;
22
+ var _useProductPermission = (0, _main.useProductPermissionsStore)(),
23
+ _useProductPermission2 = (0, _slicedToArray2.default)(_useProductPermission, 2),
24
+ state = _useProductPermission2[0],
25
+ getPermissions = _useProductPermission2[1].getPermissions;
26
+ var fetchData = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
27
+ return _regenerator.default.wrap(function _callee$(_context) {
28
+ while (1) switch (_context.prev = _context.next) {
29
+ case 0:
30
+ getPermissions({
31
+ cloudId: cloudId,
32
+ userId: userId,
33
+ enabled: enabled,
34
+ permissionId: permissionId
35
+ });
36
+ case 1:
37
+ case "end":
38
+ return _context.stop();
39
+ }
40
+ }, _callee);
41
+ })), [cloudId, enabled, getPermissions, userId, permissionId]);
42
+ (0, _react.useEffect)(function () {
43
+ fetchData();
44
+ }, [fetchData]);
45
+ return _objectSpread({
46
+ loading: state.isLoading,
47
+ data: state.permissions,
48
+ error: state.error
49
+ }, state);
50
+ };
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useProductPermissionsStore = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _reactSweetState = require("react-sweet-state");
11
+ var _utils = require("./utils");
12
+ var actions = {
13
+ getPermissions: function getPermissions(_ref) {
14
+ var userId = _ref.userId,
15
+ cloudId = _ref.cloudId,
16
+ enabled = _ref.enabled,
17
+ permissionId = _ref.permissionId;
18
+ return /*#__PURE__*/function () {
19
+ var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref2) {
20
+ var setState, getState, dispatch, _getState, hasLoaded, isLoading, response, permissions;
21
+ return _regenerator.default.wrap(function _callee$(_context) {
22
+ while (1) switch (_context.prev = _context.next) {
23
+ case 0:
24
+ setState = _ref2.setState, getState = _ref2.getState, dispatch = _ref2.dispatch;
25
+ _getState = getState(), hasLoaded = _getState.hasLoaded, isLoading = _getState.isLoading;
26
+ if (!(hasLoaded || isLoading || !userId || !cloudId || !enabled)) {
27
+ _context.next = 4;
28
+ break;
29
+ }
30
+ return _context.abrupt("return");
31
+ case 4:
32
+ _context.prev = 4;
33
+ setState({
34
+ isLoading: true
35
+ });
36
+ _context.next = 8;
37
+ return fetch('/gateway/api/permissions/bulk/permitted', {
38
+ headers: {
39
+ 'Content-Type': 'application/json'
40
+ },
41
+ method: 'POST',
42
+ credentials: 'include',
43
+ body: (0, _utils.getProductPermissionRequestBody)(cloudId, userId, permissionId)
44
+ });
45
+ case 8:
46
+ response = _context.sent;
47
+ if (response.ok) {
48
+ _context.next = 11;
49
+ break;
50
+ }
51
+ throw new Error('Failed to fetch product permissions');
52
+ case 11:
53
+ _context.next = 13;
54
+ return response.json();
55
+ case 13:
56
+ permissions = _context.sent;
57
+ dispatch(actions.setPermissions(permissions));
58
+ _context.next = 20;
59
+ break;
60
+ case 17:
61
+ _context.prev = 17;
62
+ _context.t0 = _context["catch"](4);
63
+ dispatch(actions.setError(new Error('Failed to fetch product permissions')));
64
+ case 20:
65
+ case "end":
66
+ return _context.stop();
67
+ }
68
+ }, _callee, null, [[4, 17]]);
69
+ }));
70
+ return function (_x) {
71
+ return _ref3.apply(this, arguments);
72
+ };
73
+ }();
74
+ },
75
+ setError: function setError(error) {
76
+ return function (_ref4) {
77
+ var setState = _ref4.setState;
78
+ setState({
79
+ hasLoaded: true,
80
+ isLoading: false,
81
+ error: error
82
+ });
83
+ };
84
+ },
85
+ setLoading: function setLoading(isLoading) {
86
+ return function (_ref5) {
87
+ var setState = _ref5.setState;
88
+ setState({
89
+ isLoading: isLoading
90
+ });
91
+ };
92
+ },
93
+ setPermissions: function setPermissions(permissions) {
94
+ return function (_ref6) {
95
+ var setState = _ref6.setState;
96
+ setState({
97
+ hasLoaded: true,
98
+ isLoading: false,
99
+ permissions: (0, _utils.transformPermissions)(permissions),
100
+ permissionsResponse: permissions
101
+ });
102
+ };
103
+ }
104
+ };
105
+ var Store = (0, _reactSweetState.createStore)({
106
+ initialState: {
107
+ error: undefined,
108
+ hasLoaded: false,
109
+ isLoading: false,
110
+ permissions: {}
111
+ },
112
+ actions: actions,
113
+ name: 'product-permissions'
114
+ });
115
+ var useProductPermissionsStore = exports.useProductPermissionsStore = (0, _reactSweetState.createHook)(Store);
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.transformPermissions = exports.getProductPermissionRequestBody = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ 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; }
10
+ 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; }
11
+ var transformPermissions = exports.transformPermissions = function transformPermissions(permissions) {
12
+ return permissions.reduce(function (acc, permission) {
13
+ if (permission.resourceId.includes('jira-software')) {
14
+ acc['jira'] = _objectSpread(_objectSpread({}, acc['jira']), {}, (0, _defineProperty2.default)({}, permission.permissionId, permission.permitted));
15
+ } else if (permission.resourceId.includes('confluence')) {
16
+ acc['confluence'] = _objectSpread(_objectSpread({}, acc['confluence']), {}, (0, _defineProperty2.default)({}, permission.permissionId, permission.permitted));
17
+ }
18
+ return acc;
19
+ }, {});
20
+ };
21
+ var getProductPermissionRequestBody = exports.getProductPermissionRequestBody = function getProductPermissionRequestBody(cloudId, userId, permissionId) {
22
+ var body = [{
23
+ permissionId: permissionId,
24
+ resourceId: "ari:cloud:confluence::site/".concat(cloudId),
25
+ principalId: "ari:cloud:identity::user/".concat(userId),
26
+ dontRequirePrincipalInSite: true
27
+ }, {
28
+ permissionId: permissionId,
29
+ resourceId: "ari:cloud:jira-software::site/".concat(cloudId),
30
+ principalId: "ari:cloud:identity::user/".concat(userId),
31
+ dontRequirePrincipalInSite: true
32
+ }];
33
+ return JSON.stringify(body);
34
+ };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DisconnectDialogLazy = void 0;
8
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _reactLooselyLazy = require("react-loosely-lazy");
11
+ 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); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != (0, _typeof2.default)(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 && {}.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; }
13
+ var DisconnectDialogLazyInner = (0, _reactLooselyLazy.lazyForPaint)(function () {
14
+ return Promise.resolve().then(function () {
15
+ return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_teams-public_disconnect-dialog" */'./index'));
16
+ }).then(function (_ref) {
17
+ var DisconnectDialog = _ref.DisconnectDialog;
18
+ return DisconnectDialog;
19
+ });
20
+ });
21
+ var DisconnectDialogLazy = exports.DisconnectDialogLazy = function DisconnectDialogLazy(props) {
22
+ return /*#__PURE__*/_react.default.createElement(_reactLooselyLazy.LazySuspense, {
23
+ fallback: null
24
+ }, /*#__PURE__*/_react.default.createElement(DisconnectDialogLazyInner, props));
25
+ };
@@ -0,0 +1,106 @@
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.messages = exports.DisconnectDialog = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+ var _react = _interopRequireDefault(require("react"));
14
+ var _reactIntlNext = require("react-intl-next");
15
+ var _new = _interopRequireDefault(require("@atlaskit/button/new"));
16
+ var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
17
+ var _compiled = require("@atlaskit/primitives/compiled");
18
+ var _getContainerProperties = require("../../../common/utils/get-container-properties");
19
+ 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); }
20
+ 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 && {}.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; }
21
+ var messages = exports.messages = (0, _reactIntlNext.defineMessages)({
22
+ disconnectDialogTitle: {
23
+ id: 'ptc-directory.team-profile-page.team-containers.disconnect-dialog.title.non-final',
24
+ defaultMessage: 'Disconnect place',
25
+ description: 'Title of the disconnect dialog for team containers'
26
+ },
27
+ disconnectDialogDescription: {
28
+ id: 'ptc-directory.team-profile-page.team-containers.disconnect-dialog.description.non-final',
29
+ defaultMessage: 'This team will no longer be connected to the {containerName} {containerType}.',
30
+ description: 'Description of the disconnect dialog for team containers'
31
+ },
32
+ disconnectDialogDisclaimer: {
33
+ id: 'ptc-directory.team-profile-page.team-containers.disconnect-dialog.disclaimer.non-final',
34
+ defaultMessage: 'Disconnecting the team from the {containerType} will not affect any work connected to the team within the {containerType}.',
35
+ description: 'Disclaimer of the disconnect dialog for team containers'
36
+ },
37
+ disconnectDialogCancelButton: {
38
+ id: 'ptc-directory.team-profile-page.team-containers.disconnect-dialog.cancel-button.non-final',
39
+ defaultMessage: 'Cancel',
40
+ description: 'Button to cancel the dialog'
41
+ },
42
+ disconnectDialogRemoveButton: {
43
+ id: 'ptc-directory.team-profile-page.team-containers.disconnect-dialog.remove-button.non-final',
44
+ defaultMessage: 'Remove',
45
+ description: 'Button to disconnect the team from the container'
46
+ }
47
+ });
48
+ var DisconnectDialog = exports.DisconnectDialog = function DisconnectDialog(_ref) {
49
+ var containerName = _ref.containerName,
50
+ containerType = _ref.containerType,
51
+ onDisconnect = _ref.onDisconnect,
52
+ onClose = _ref.onClose;
53
+ var _React$useState = _react.default.useState(false),
54
+ _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
55
+ isDisconnecting = _React$useState2[0],
56
+ setIsDisconnecting = _React$useState2[1];
57
+ var handleDisconnect = /*#__PURE__*/function () {
58
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
59
+ return _regenerator.default.wrap(function _callee$(_context) {
60
+ while (1) switch (_context.prev = _context.next) {
61
+ case 0:
62
+ setIsDisconnecting(true);
63
+ _context.next = 3;
64
+ return onDisconnect();
65
+ case 3:
66
+ setIsDisconnecting(false);
67
+ case 4:
68
+ case "end":
69
+ return _context.stop();
70
+ }
71
+ }, _callee);
72
+ }));
73
+ return function handleDisconnect() {
74
+ return _ref2.apply(this, arguments);
75
+ };
76
+ }();
77
+ var _getContainerProperti = (0, _getContainerProperties.getContainerProperties)(containerType),
78
+ containerTypeText = _getContainerProperti.containerTypeText,
79
+ description = _getContainerProperti.description;
80
+ return /*#__PURE__*/_react.default.createElement(_modalDialog.default, {
81
+ onClose: onClose,
82
+ width: "small",
83
+ testId: "team-containers-disconnect-dialog",
84
+ shouldScrollInViewport: true
85
+ }, /*#__PURE__*/_react.default.createElement(_modalDialog.ModalHeader, null, /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTitle, {
86
+ appearance: "warning"
87
+ }, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.disconnectDialogTitle))), /*#__PURE__*/_react.default.createElement(_modalDialog.ModalBody, null, /*#__PURE__*/_react.default.createElement(_compiled.Stack, {
88
+ space: "space.150"
89
+ }, /*#__PURE__*/_react.default.createElement(_compiled.Box, null, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, messages.disconnectDialogDescription, {
90
+ values: {
91
+ containerName: /*#__PURE__*/_react.default.createElement("b", null, containerName),
92
+ containerType: description
93
+ }
94
+ }))), /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, messages.disconnectDialogDisclaimer, {
95
+ values: {
96
+ containerType: containerTypeText
97
+ }
98
+ })))), /*#__PURE__*/_react.default.createElement(_modalDialog.ModalFooter, null, /*#__PURE__*/_react.default.createElement(_new.default, {
99
+ appearance: "subtle",
100
+ onClick: onClose
101
+ }, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.disconnectDialogCancelButton)), /*#__PURE__*/_react.default.createElement(_new.default, {
102
+ appearance: "warning",
103
+ onClick: handleDisconnect,
104
+ isLoading: isDisconnecting
105
+ }, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.disconnectDialogRemoveButton))));
106
+ };
@@ -56,7 +56,8 @@ var LinkedContainerCard = exports.LinkedContainerCard = function LinkedContainer
56
56
  var containerType = _ref2.containerType,
57
57
  title = _ref2.title,
58
58
  containerIcon = _ref2.containerIcon,
59
- link = _ref2.link;
59
+ link = _ref2.link,
60
+ onDisconnectButtonClick = _ref2.onDisconnectButtonClick;
60
61
  var _getContainerProperti = (0, _getContainerProperties.getContainerProperties)(containerType),
61
62
  description = _getContainerProperti.description,
62
63
  icon = _getContainerProperti.icon;
@@ -82,6 +83,7 @@ var LinkedContainerCard = exports.LinkedContainerCard = function LinkedContainer
82
83
  spacing: "compact",
83
84
  onClick: function onClick(e) {
84
85
  e.preventDefault();
86
+ onDisconnectButtonClick();
85
87
  }
86
88
  })),
87
89
  href: link,
@@ -10,10 +10,12 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _reactIntlNext = require("react-intl-next");
12
12
  var _new = _interopRequireDefault(require("@atlaskit/button/new"));
13
+ var _modalTransition = _interopRequireDefault(require("@atlaskit/modal-dialog/modal-transition"));
13
14
  var _primitives = require("@atlaskit/primitives");
14
15
  var _colors = require("@atlaskit/theme/colors");
15
16
  var _useTeamContainers2 = require("../../controllers/hooks/use-team-containers");
16
17
  var _addContainerCard = require("./add-container-card");
18
+ var _async = require("./disconnect-dialog/async");
17
19
  var _linkedContainerCard = require("./linked-container-card");
18
20
  var _teamContainersSkeleton = require("./team-containers-skeleton");
19
21
  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); }
@@ -39,6 +41,10 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
39
41
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
40
42
  showMore = _useState6[0],
41
43
  setShowMore = _useState6[1];
44
+ var _useState7 = (0, _react.useState)(false),
45
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
46
+ isDisconnectDialogOpen = _useState8[0],
47
+ setIsDisconnectDialogOpen = _useState8[1];
42
48
  (0, _react.useEffect)(function () {
43
49
  if (teamContainers.length > MAX_NUMBER_OF_CONTAINERS_TO_SHOW) {
44
50
  setShowAddJiraContainer(false);
@@ -62,7 +68,7 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
62
68
  numberOfContainers: MAX_NUMBER_OF_CONTAINERS_TO_SHOW
63
69
  });
64
70
  }
65
- return /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
71
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
66
72
  space: "space.200"
67
73
  }, /*#__PURE__*/_react.default.createElement(_primitives.Grid, {
68
74
  templateColumns: "1fr 1fr",
@@ -74,7 +80,10 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
74
80
  containerType: container.type,
75
81
  title: container.name,
76
82
  containerIcon: container.icon,
77
- link: container.link
83
+ link: container.link,
84
+ onDisconnectButtonClick: function onDisconnectButtonClick() {
85
+ return setIsDisconnectDialogOpen(true);
86
+ }
78
87
  });
79
88
  }), showAddJiraContainer && /*#__PURE__*/_react.default.createElement(_addContainerCard.AddContainerCard, {
80
89
  onAddAContainerClick: onAddAContainerClick,
@@ -88,12 +97,26 @@ var TeamContainers = exports.TeamContainers = function TeamContainers(_ref) {
88
97
  containerType: container.type,
89
98
  title: container.name,
90
99
  containerIcon: container.icon,
91
- link: container.link
100
+ link: container.link,
101
+ onDisconnectButtonClick: function onDisconnectButtonClick() {
102
+ return setIsDisconnectDialogOpen(true);
103
+ }
92
104
  });
93
105
  })), teamContainers.length > MAX_NUMBER_OF_CONTAINERS_TO_SHOW && /*#__PURE__*/_react.default.createElement(_primitives.Inline, null, /*#__PURE__*/_react.default.createElement(_new.default, {
94
106
  appearance: "subtle",
95
107
  onClick: handleShowMore
96
- }, showMore ? /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.showLess) : /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.showMore))));
108
+ }, showMore ? /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.showLess) : /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, messages.showMore)))), /*#__PURE__*/_react.default.createElement(_modalTransition.default, null, isDisconnectDialogOpen && /*#__PURE__*/_react.default.createElement(_async.DisconnectDialogLazy, {
109
+ containerName: "something",
110
+ containerType: "ConfluenceSpace",
111
+ onClose: function onClose() {
112
+ return setIsDisconnectDialogOpen(false);
113
+ }
114
+ // TODO: hook the mutation
115
+ ,
116
+ onDisconnect: function onDisconnect() {
117
+ return Promise.resolve();
118
+ }
119
+ })));
97
120
  };
98
121
  var messages = (0, _reactIntlNext.defineMessages)({
99
122
  showMore: {
@@ -31,6 +31,16 @@ export const messages = defineMessages({
31
31
  id: 'ptc-directory.team-profile-page.team-containers.add-loom-space-description.non-final',
32
32
  defaultMessage: 'Loom space',
33
33
  description: 'Description of the card to add a Loom space to a team'
34
+ },
35
+ projectContainerText: {
36
+ id: 'ptc-directory.team-profile-page.team-containers.project-container-text.non-final',
37
+ defaultMessage: 'project',
38
+ description: 'Text for project type containers'
39
+ },
40
+ spaceContainerText: {
41
+ id: 'ptc-directory.team-profile-page.team-containers.space-container-text.non-final',
42
+ defaultMessage: 'space',
43
+ description: 'Text for space type containers'
34
44
  }
35
45
  });
36
46
  export const getContainerProperties = containerType => {
@@ -43,7 +53,8 @@ export const getContainerProperties = containerType => {
43
53
  label: "",
44
54
  size: "xsmall"
45
55
  }),
46
- title: /*#__PURE__*/React.createElement(FormattedMessage, messages.addConfluenceContainerTitle)
56
+ title: /*#__PURE__*/React.createElement(FormattedMessage, messages.addConfluenceContainerTitle),
57
+ containerTypeText: /*#__PURE__*/React.createElement(FormattedMessage, messages.spaceContainerText)
47
58
  };
48
59
  case 'JiraProject':
49
60
  return {
@@ -53,13 +64,15 @@ export const getContainerProperties = containerType => {
53
64
  label: "",
54
65
  size: "xsmall"
55
66
  }),
56
- title: /*#__PURE__*/React.createElement(FormattedMessage, messages.addJiraProjectTitle)
67
+ title: /*#__PURE__*/React.createElement(FormattedMessage, messages.addJiraProjectTitle),
68
+ containerTypeText: /*#__PURE__*/React.createElement(FormattedMessage, messages.projectContainerText)
57
69
  };
58
70
  default:
59
71
  return {
60
72
  description: null,
61
73
  icon: null,
62
- title: null
74
+ title: null,
75
+ containerTypeText: null
63
76
  };
64
77
  }
65
78
  };
@@ -0,0 +1,28 @@
1
+ import { useCallback, useEffect } from 'react';
2
+ import { useProductPermissionsStore } from '../../../product-permission/main';
3
+ export const useProductPermissions = (userId, cloudId, permissionId = 'read', {
4
+ enabled
5
+ } = {
6
+ enabled: true
7
+ }) => {
8
+ const [state, {
9
+ getPermissions
10
+ }] = useProductPermissionsStore();
11
+ const fetchData = useCallback(async () => {
12
+ getPermissions({
13
+ cloudId,
14
+ userId,
15
+ enabled,
16
+ permissionId
17
+ });
18
+ }, [cloudId, enabled, getPermissions, userId, permissionId]);
19
+ useEffect(() => {
20
+ fetchData();
21
+ }, [fetchData]);
22
+ return {
23
+ loading: state.isLoading,
24
+ data: state.permissions,
25
+ error: state.error,
26
+ ...state
27
+ };
28
+ };
@@ -0,0 +1,79 @@
1
+ import { createHook, createStore } from 'react-sweet-state';
2
+ import { getProductPermissionRequestBody, transformPermissions } from './utils';
3
+ const actions = {
4
+ getPermissions: ({
5
+ userId,
6
+ cloudId,
7
+ enabled,
8
+ permissionId
9
+ }) => async ({
10
+ setState,
11
+ getState,
12
+ dispatch
13
+ }) => {
14
+ const {
15
+ hasLoaded,
16
+ isLoading
17
+ } = getState();
18
+ if (hasLoaded || isLoading || !userId || !cloudId || !enabled) {
19
+ return;
20
+ }
21
+ try {
22
+ setState({
23
+ isLoading: true
24
+ });
25
+ const response = await fetch('/gateway/api/permissions/bulk/permitted', {
26
+ headers: {
27
+ 'Content-Type': 'application/json'
28
+ },
29
+ method: 'POST',
30
+ credentials: 'include',
31
+ body: getProductPermissionRequestBody(cloudId, userId, permissionId)
32
+ });
33
+ if (!response.ok) {
34
+ throw new Error('Failed to fetch product permissions');
35
+ }
36
+ const permissions = await response.json();
37
+ dispatch(actions.setPermissions(permissions));
38
+ } catch (error) {
39
+ dispatch(actions.setError(new Error('Failed to fetch product permissions')));
40
+ }
41
+ },
42
+ setError: error => ({
43
+ setState
44
+ }) => {
45
+ setState({
46
+ hasLoaded: true,
47
+ isLoading: false,
48
+ error
49
+ });
50
+ },
51
+ setLoading: isLoading => ({
52
+ setState
53
+ }) => {
54
+ setState({
55
+ isLoading
56
+ });
57
+ },
58
+ setPermissions: permissions => ({
59
+ setState
60
+ }) => {
61
+ setState({
62
+ hasLoaded: true,
63
+ isLoading: false,
64
+ permissions: transformPermissions(permissions),
65
+ permissionsResponse: permissions
66
+ });
67
+ }
68
+ };
69
+ const Store = createStore({
70
+ initialState: {
71
+ error: undefined,
72
+ hasLoaded: false,
73
+ isLoading: false,
74
+ permissions: {}
75
+ },
76
+ actions,
77
+ name: 'product-permissions'
78
+ });
79
+ export const useProductPermissionsStore = createHook(Store);