@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.
- package/CHANGELOG.md +11 -0
- package/dist/cjs/common/utils/get-container-properties.js +16 -3
- package/dist/cjs/controllers/hooks/use-team-containers/use-product-permission/index.js +50 -0
- package/dist/cjs/controllers/product-permission/main.js +115 -0
- package/dist/cjs/controllers/product-permission/types.js +5 -0
- package/dist/cjs/controllers/product-permission/utils.js +34 -0
- package/dist/cjs/ui/team-containers/disconnect-dialog/async.js +25 -0
- package/dist/cjs/ui/team-containers/disconnect-dialog/index.js +106 -0
- package/dist/cjs/ui/team-containers/linked-container-card/index.js +3 -1
- package/dist/cjs/ui/team-containers/main.js +27 -4
- package/dist/es2019/common/utils/get-container-properties.js +16 -3
- package/dist/es2019/controllers/hooks/use-team-containers/use-product-permission/index.js +28 -0
- package/dist/es2019/controllers/product-permission/main.js +79 -0
- package/dist/es2019/controllers/product-permission/types.js +1 -0
- package/dist/es2019/controllers/product-permission/utils.js +30 -0
- package/dist/es2019/ui/team-containers/disconnect-dialog/async.js +8 -0
- package/dist/es2019/ui/team-containers/disconnect-dialog/index.js +77 -0
- package/dist/es2019/ui/team-containers/linked-container-card/index.js +3 -1
- package/dist/es2019/ui/team-containers/main.js +16 -4
- package/dist/esm/common/utils/get-container-properties.js +16 -3
- package/dist/esm/controllers/hooks/use-team-containers/use-product-permission/index.js +43 -0
- package/dist/esm/controllers/product-permission/main.js +108 -0
- package/dist/esm/controllers/product-permission/types.js +1 -0
- package/dist/esm/controllers/product-permission/utils.js +27 -0
- package/dist/esm/ui/team-containers/disconnect-dialog/async.js +13 -0
- package/dist/esm/ui/team-containers/disconnect-dialog/index.js +96 -0
- package/dist/esm/ui/team-containers/linked-container-card/index.js +3 -1
- package/dist/esm/ui/team-containers/main.js +27 -4
- package/dist/types/common/utils/get-container-properties.d.ts +11 -0
- package/dist/types/controllers/hooks/use-team-containers/use-product-permission/index.d.ts +2 -0
- package/dist/types/controllers/product-permission/main.d.ts +3 -0
- package/dist/types/controllers/product-permission/types.d.ts +43 -0
- package/dist/types/controllers/product-permission/utils.d.ts +3 -0
- package/dist/types/ui/team-containers/disconnect-dialog/async.d.ts +3 -0
- package/dist/types/ui/team-containers/disconnect-dialog/index.d.ts +36 -0
- package/dist/types/ui/team-containers/linked-container-card/index.d.ts +2 -1
- package/dist/types-ts4.5/common/utils/get-container-properties.d.ts +11 -0
- package/dist/types-ts4.5/controllers/hooks/use-team-containers/use-product-permission/index.d.ts +2 -0
- package/dist/types-ts4.5/controllers/product-permission/main.d.ts +3 -0
- package/dist/types-ts4.5/controllers/product-permission/types.d.ts +43 -0
- package/dist/types-ts4.5/controllers/product-permission/utils.d.ts +3 -0
- package/dist/types-ts4.5/ui/team-containers/disconnect-dialog/async.d.ts +3 -0
- package/dist/types-ts4.5/ui/team-containers/disconnect-dialog/index.d.ts +36 -0
- package/dist/types-ts4.5/ui/team-containers/linked-container-card/index.d.ts +2 -1
- 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,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);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|