@atlaskit/teams-client 4.21.0 → 4.22.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 +7 -0
- package/dist/cjs/common/utils/permissions/constants.js +52 -8
- package/dist/cjs/common/utils/permissions/has-permission.js +4 -3
- package/dist/cjs/common/utils/permissions/types.js +2 -2
- package/dist/cjs/common/utils/ufo/constants.js +1 -1
- package/dist/cjs/common/utils/ufo/index.js +2 -2
- package/dist/cjs/services/legion-client/index.js +213 -192
- package/dist/cjs/services/main.js +566 -540
- package/dist/cjs/services/sentry/utils/get-sentry-config.js +1 -1
- package/dist/es2019/common/utils/permissions/constants.js +53 -8
- package/dist/es2019/common/utils/permissions/has-permission.js +4 -3
- package/dist/es2019/common/utils/permissions/types.js +2 -2
- package/dist/es2019/common/utils/ufo/constants.js +1 -1
- package/dist/es2019/common/utils/ufo/index.js +2 -2
- package/dist/es2019/services/legion-client/index.js +4 -0
- package/dist/es2019/services/main.js +6 -0
- package/dist/es2019/services/sentry/utils/get-sentry-config.js +1 -1
- package/dist/esm/common/utils/permissions/constants.js +52 -8
- package/dist/esm/common/utils/permissions/has-permission.js +4 -3
- package/dist/esm/common/utils/permissions/types.js +2 -2
- package/dist/esm/common/utils/ufo/constants.js +1 -1
- package/dist/esm/common/utils/ufo/index.js +2 -2
- package/dist/esm/services/legion-client/index.js +213 -192
- package/dist/esm/services/main.js +566 -540
- package/dist/esm/services/sentry/utils/get-sentry-config.js +1 -1
- package/dist/types/common/utils/permissions/constants.d.ts +3 -3
- package/dist/types/common/utils/permissions/has-permission.d.ts +3 -2
- package/dist/types/common/utils/permissions/types.d.ts +1 -1
- package/dist/types/common/utils/ufo/constants.d.ts +2 -2
- package/dist/types/services/legion-client/index.d.ts +1 -0
- package/dist/types/services/main.d.ts +4 -0
- package/dist/types-ts4.5/common/utils/permissions/constants.d.ts +3 -3
- package/dist/types-ts4.5/common/utils/permissions/has-permission.d.ts +3 -2
- package/dist/types-ts4.5/common/utils/permissions/types.d.ts +3 -1
- package/dist/types-ts4.5/common/utils/ufo/constants.d.ts +2 -1
- package/dist/types-ts4.5/services/legion-client/index.d.ts +1 -0
- package/dist/types-ts4.5/services/main.d.ts +4 -0
- package/package.json +1 -4
|
@@ -36,7 +36,7 @@ function getSentryConfig(options) {
|
|
|
36
36
|
return _objectSpread(_objectSpread(_objectSpread({}, otherOptions), DEFAULT_SENTRY_CONFIG), {}, {
|
|
37
37
|
// Standalone __VERSION__ is set from `bin/set-release-version.sh`
|
|
38
38
|
// when building to deploy to production
|
|
39
|
-
release: "".concat("@atlaskit/teams-client", "@").concat("
|
|
39
|
+
release: "".concat("@atlaskit/teams-client", "@").concat("0.0.0-development") ||
|
|
40
40
|
// @ts-ignore Jira - window.BUILD_KEY
|
|
41
41
|
window.BUILD_KEY || ( // @ts-ignore Confluence - window.__buildInfo
|
|
42
42
|
(_window$__buildInfo = window.__buildInfo) === null || _window$__buildInfo === void 0 ? void 0 : _window$__buildInfo.FRONTEND_VERSION) || '---',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import FeatureGates from '@atlaskit/feature-gate-js-client';
|
|
2
2
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
|
-
export const allPermissions = (defaultPermission, isMember) => ({
|
|
3
|
+
export const allPermissions = (defaultPermission, isMember, isOrgAdmin) => ({
|
|
4
4
|
ADD_MEMBER_TO_TEAM: defaultPermission,
|
|
5
5
|
JOIN_TEAM: defaultPermission,
|
|
6
6
|
REQUEST_TO_JOIN: defaultPermission,
|
|
@@ -17,9 +17,11 @@ export const allPermissions = (defaultPermission, isMember) => ({
|
|
|
17
17
|
DELETE_TEAM: defaultPermission,
|
|
18
18
|
EDIT_TEAM_SETTINGS: defaultPermission,
|
|
19
19
|
EDIT_TEAM_MEMBERSHIP: defaultPermission,
|
|
20
|
+
EDIT_TEAM_TYPE: defaultPermission && isOrgAdmin,
|
|
20
21
|
REMOVE_AGENT_FROM_TEAM: defaultPermission,
|
|
21
22
|
ADD_AGENT_TO_TEAM: defaultPermission,
|
|
22
|
-
ARCHIVE_TEAM: defaultPermission && isMember
|
|
23
|
+
ARCHIVE_TEAM: defaultPermission && isMember,
|
|
24
|
+
UNARCHIVE_TEAM: false
|
|
23
25
|
});
|
|
24
26
|
export const vanityActions = ['EDIT_DESCRIPTION', 'EDIT_TEAM_NAME', 'EDIT_PROFILE_HEADER', 'EDIT_TEAM_LINK'];
|
|
25
27
|
export const openPermissions = permission => ({
|
|
@@ -39,30 +41,73 @@ export const SCIMSyncTeamPermissions = (isMember, isOrgAdmin, source) => ({
|
|
|
39
41
|
EDIT_TEAM_LINK: isMember || isOrgAdmin,
|
|
40
42
|
EDIT_TEAM_NAME: isOrgAdmin && source === 'ATLASSIAN_GROUP' && fg('enable_edit_team_name_external_type_teams')
|
|
41
43
|
});
|
|
42
|
-
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Returns permission map for disbanded teams
|
|
47
|
+
* Only UNARCHIVE_TEAM action is allowed based on team settings and user permissions
|
|
48
|
+
*/
|
|
49
|
+
const getDisbandedTeamPermissionMap = (settings, permission, isMember, isOrgAdmin) => {
|
|
50
|
+
const newTeamProfileEnabled = FeatureGates.getExperimentValue('new_team_profile', 'isEnabled', false);
|
|
51
|
+
const isArchiveTeamEnabled = fg('legion-enable-archive-teams') && newTeamProfileEnabled;
|
|
52
|
+
|
|
53
|
+
// Base permission map - all actions disabled for disbanded teams
|
|
54
|
+
const basePermissions = allPermissions(false, false, false);
|
|
55
|
+
|
|
56
|
+
// UNARCHIVE_TEAM permission based on team settings
|
|
57
|
+
let canUnarchive = false;
|
|
58
|
+
if (isArchiveTeamEnabled) {
|
|
59
|
+
if (settings === 'EXTERNAL') {
|
|
60
|
+
// For EXTERNAL teams, only org admins can unarchive
|
|
61
|
+
canUnarchive = isOrgAdmin;
|
|
62
|
+
} else if (settings === 'OPEN' || settings === 'MEMBER_INVITE') {
|
|
63
|
+
// For OPEN and MEMBER_INVITE teams, members with FULL_WRITE can unarchive
|
|
64
|
+
canUnarchive = isMember && permission === 'FULL_WRITE';
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
...basePermissions,
|
|
69
|
+
UNARCHIVE_TEAM: canUnarchive,
|
|
70
|
+
DELETE_TEAM: canUnarchive
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Returns permission map for active teams based on team settings
|
|
76
|
+
*/
|
|
77
|
+
const getActiveTeamPermissionMap = (settings, permission, isMember, isOrgAdmin, source) => {
|
|
43
78
|
const newTeamProfileEnabled = FeatureGates.getExperimentValue('new_team_profile', 'isEnabled', false);
|
|
44
79
|
const isArchiveTeamEnabled = fg('legion-enable-archive-teams') && newTeamProfileEnabled;
|
|
45
80
|
if (settings === 'OPEN') {
|
|
46
81
|
return {
|
|
47
|
-
...allPermissions(permission === 'FULL_WRITE', isMember),
|
|
82
|
+
...allPermissions(permission === 'FULL_WRITE', isMember, isOrgAdmin),
|
|
48
83
|
...openPermissions(permission),
|
|
49
84
|
ARCHIVE_TEAM: isArchiveTeamEnabled && permission === 'FULL_WRITE' && isMember
|
|
50
85
|
};
|
|
51
86
|
}
|
|
52
87
|
if (settings === 'MEMBER_INVITE') {
|
|
53
88
|
return {
|
|
54
|
-
...allPermissions(permission === 'FULL_WRITE', isMember),
|
|
89
|
+
...allPermissions(permission === 'FULL_WRITE', isMember, isOrgAdmin),
|
|
55
90
|
...inviteOnlyPermissions(permission),
|
|
56
91
|
ARCHIVE_TEAM: isArchiveTeamEnabled && permission === 'FULL_WRITE' && isMember
|
|
57
92
|
};
|
|
58
93
|
} else if (settings === 'EXTERNAL') {
|
|
59
94
|
return {
|
|
60
|
-
...allPermissions(false, isMember),
|
|
95
|
+
...allPermissions(false, isMember, isOrgAdmin),
|
|
61
96
|
...SCIMSyncTeamPermissions(isMember, isOrgAdmin, source),
|
|
62
97
|
ADD_AGENT_TO_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
|
|
63
98
|
REMOVE_AGENT_FROM_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
|
|
64
|
-
ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin
|
|
99
|
+
ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin,
|
|
100
|
+
EDIT_TEAM_TYPE: isOrgAdmin
|
|
65
101
|
};
|
|
66
102
|
}
|
|
67
|
-
return allPermissions(false, false);
|
|
103
|
+
return allPermissions(false, false, false);
|
|
104
|
+
};
|
|
105
|
+
export const getPermissionMap = (settings, permission, isMember, isOrgAdmin, source, state) => {
|
|
106
|
+
// Handle disbanded teams with special permission map
|
|
107
|
+
if (state === 'DISBANDED') {
|
|
108
|
+
return getDisbandedTeamPermissionMap(settings, permission, isMember, isOrgAdmin);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// For active teams (or when state is not provided), use existing logic
|
|
112
|
+
return getActiveTeamPermissionMap(settings, permission, isMember, isOrgAdmin, source);
|
|
68
113
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isMember } from '../team';
|
|
2
2
|
import { getPermissionMap, vanityActions } from './constants';
|
|
3
|
-
export function hasPermission(action, settings, permission, isPeopleBrowseEnabled, currentUserMembership, teamVisibilityPermissions, source) {
|
|
3
|
+
export function hasPermission(action, settings, permission, isPeopleBrowseEnabled, currentUserMembership, teamVisibilityPermissions, source, state) {
|
|
4
4
|
if (!isPeopleBrowseEnabled && !vanityActions.includes(action)) {
|
|
5
5
|
return false;
|
|
6
6
|
}
|
|
@@ -11,14 +11,15 @@ export function hasPermission(action, settings, permission, isPeopleBrowseEnable
|
|
|
11
11
|
teamPermission: permission,
|
|
12
12
|
isMemberOfTeam,
|
|
13
13
|
isOrgAdmin,
|
|
14
|
-
source
|
|
14
|
+
source,
|
|
15
|
+
state
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
19
|
* Determines if a user has permission perform a given action on a team
|
|
19
20
|
*/
|
|
20
21
|
export function userCan(action, options) {
|
|
21
|
-
return getPermissionMap(options.membershipSettings, options.teamPermission, options.isMemberOfTeam, options.isOrgAdmin, options.source)[action];
|
|
22
|
+
return getPermissionMap(options.membershipSettings, options.teamPermission, options.isMemberOfTeam, options.isOrgAdmin, options.source, options.state)[action];
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const AllTeamActions = ['ADD_MEMBER_TO_TEAM', 'JOIN_TEAM', 'REQUEST_TO_JOIN', 'CANCEL_JOIN_REQUEST', 'APPROVE_JOIN_REQUEST', 'REJECT_JOIN_REQUEST', 'REMOVE_MEMBER_FROM_TEAM', 'CANCEL_INVITE', 'LEAVE_TEAM', 'REMOVE_AGENT_FROM_TEAM', 'ADD_AGENT_TO_TEAM',
|
|
2
2
|
// Visual
|
|
3
|
-
'EDIT_TEAM_NAME', 'EDIT_DESCRIPTION', 'EDIT_PROFILE_HEADER', 'EDIT_TEAM_LINK', 'EDIT_TEAM_SETTINGS', 'EDIT_TEAM_MEMBERSHIP',
|
|
3
|
+
'EDIT_TEAM_NAME', 'EDIT_DESCRIPTION', 'EDIT_PROFILE_HEADER', 'EDIT_TEAM_LINK', 'EDIT_TEAM_SETTINGS', 'EDIT_TEAM_MEMBERSHIP', 'EDIT_TEAM_TYPE',
|
|
4
4
|
// Serious
|
|
5
|
-
'DELETE_TEAM', 'ARCHIVE_TEAM'];
|
|
5
|
+
'DELETE_TEAM', 'ARCHIVE_TEAM', 'UNARCHIVE_TEAM'];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
|
|
2
2
|
import { TeamsUFOExperience } from './index';
|
|
3
|
-
const TeamsClientExperienceKeyList = ['getAllTeams', 'getTeamById', 'updateTeamById', 'querySettings', 'queryFeatureFlags', 'queryTeamMemberships', 'queryUser', 'inviteUsersToTeam', 'getMyTeamMembership', 'getTeamLinksByTeamId', 'createTeamLink', 'updateTeamLink', 'deleteTeamLink', 'reorderTeamLink', 'acceptTeamInvitation', 'declineTeamInvitation', 'selfJoinTeam', 'cancelJoinRequest', 'acceptJoinRequest', 'declineJoinRequest', 'deleteTeamMembership', 'revokeTeamInvite', 'deleteTeam', 'archiveTeam', 'isSingleFullMemberTeam', 'createTeam', 'createTeamContainers', 'createExternalTeam', 'getProfileWithMutability', 'getIsSiteAdmin', 'addUsersToTeam', 'removeTeamMemberships', 'getRecommendedProducts', 'joinOrRequestDefaultAccessToProductsBulk', 'getReadMediaToken', 'getWriteUserMediaToken', 'updateUserHeaderImage', 'getWriteTeamMediaToken', 'getSoftDeletedTeamById', 'restoreTeam', 'getUserInSiteUserBase', 'getLinkedTeamsBulk', 'getTeamProfileDetails', 'getUserContainers', 'getPermissions', 'getUserManageConfig', 'getMyAvatarUploadedStatus', 'deleteUserAvatar', 'getTeamLinkIcons', 'getTeamInSlack', 'getOrgScope', 'restoreTeamToSyncedGroup', 'getTeamAndGroupDiff', 'linkExistingTeamToGroup', 'fetchUserAvatarInfo', 'getOrgEligibilityForManagedTeams', 'updateUser', 'updateUserAvatar', 'disconnectTeamInSlack', 'updateTeamInSlack', 'getUserTenure', 'getAriFromUrl', 'getWebLinkTitle', 'addAgentToTeam', 'getTeamEnabledSites', 'assignTeamsToSites', 'removeAgentTeamAssociation', 'getAssignedTeams', 'setTeamSiteAssignmentPermission', 'getUnassignedTeams', 'getTeamSiteAssignmentOrgDetails', 'getTeamsToBeClonedToJsmSites', 'getReportingLines'];
|
|
3
|
+
const TeamsClientExperienceKeyList = ['getAllTeams', 'getTeamById', 'updateTeamById', 'querySettings', 'queryFeatureFlags', 'queryTeamMemberships', 'queryUser', 'inviteUsersToTeam', 'getMyTeamMembership', 'getTeamLinksByTeamId', 'createTeamLink', 'updateTeamLink', 'deleteTeamLink', 'reorderTeamLink', 'acceptTeamInvitation', 'declineTeamInvitation', 'selfJoinTeam', 'cancelJoinRequest', 'acceptJoinRequest', 'declineJoinRequest', 'deleteTeamMembership', 'revokeTeamInvite', 'deleteTeam', 'archiveTeam', 'unarchiveTeam', 'isSingleFullMemberTeam', 'createTeam', 'createTeamContainers', 'createExternalTeam', 'getProfileWithMutability', 'getIsSiteAdmin', 'addUsersToTeam', 'removeTeamMemberships', 'getRecommendedProducts', 'joinOrRequestDefaultAccessToProductsBulk', 'getReadMediaToken', 'getWriteUserMediaToken', 'updateUserHeaderImage', 'getWriteTeamMediaToken', 'getSoftDeletedTeamById', 'restoreTeam', 'getUserInSiteUserBase', 'getLinkedTeamsBulk', 'getTeamProfileDetails', 'getUserContainers', 'getPermissions', 'getUserManageConfig', 'getMyAvatarUploadedStatus', 'deleteUserAvatar', 'getTeamLinkIcons', 'getTeamInSlack', 'getOrgScope', 'restoreTeamToSyncedGroup', 'getTeamAndGroupDiff', 'linkExistingTeamToGroup', 'fetchUserAvatarInfo', 'getOrgEligibilityForManagedTeams', 'updateUser', 'updateUserAvatar', 'disconnectTeamInSlack', 'updateTeamInSlack', 'getUserTenure', 'getAriFromUrl', 'getWebLinkTitle', 'addAgentToTeam', 'getTeamEnabledSites', 'assignTeamsToSites', 'removeAgentTeamAssociation', 'getAssignedTeams', 'setTeamSiteAssignmentPermission', 'getUnassignedTeams', 'getTeamSiteAssignmentOrgDetails', 'getTeamsToBeClonedToJsmSites', 'getReportingLines'];
|
|
4
4
|
export const TEAMS_CLIENT_EXPERIENCES = new Map([...TeamsClientExperienceKeyList.map(key => [key,
|
|
5
5
|
// camelCase to kebab-case
|
|
6
6
|
new TeamsUFOExperience(`teams-client-${key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}`, {
|
|
@@ -27,7 +27,7 @@ export class TeamsUFOExperience extends UFOExperience {
|
|
|
27
27
|
return super.failure({
|
|
28
28
|
metadata: {
|
|
29
29
|
error: createErrorMetadata(error),
|
|
30
|
-
packageVersion: "
|
|
30
|
+
packageVersion: "0.0.0-development",
|
|
31
31
|
packageName: "@atlaskit/teams-client"
|
|
32
32
|
}
|
|
33
33
|
});
|
|
@@ -35,7 +35,7 @@ export class TeamsUFOExperience extends UFOExperience {
|
|
|
35
35
|
return super.failure({
|
|
36
36
|
metadata: {
|
|
37
37
|
error: 'unknown error',
|
|
38
|
-
packageVersion: "
|
|
38
|
+
packageVersion: "0.0.0-development",
|
|
39
39
|
packageName: "@atlaskit/teams-client"
|
|
40
40
|
}
|
|
41
41
|
});
|
|
@@ -251,6 +251,10 @@ export class LegionClient extends RestClient {
|
|
|
251
251
|
const siteId = this.getCloudId();
|
|
252
252
|
return this.postResourceRaw(`${v4UrlPath}/archive?siteId=${siteId}`, JSON.stringify([this.trimTeamARI(teamId)]));
|
|
253
253
|
}
|
|
254
|
+
async unArchiveTeam(teamId) {
|
|
255
|
+
const siteId = this.getCloudId();
|
|
256
|
+
return this.postResourceRaw(`${v4UrlPath}/unarchive?siteId=${siteId}`, JSON.stringify([this.trimTeamARI(teamId)]));
|
|
257
|
+
}
|
|
254
258
|
|
|
255
259
|
/**
|
|
256
260
|
* @private
|
|
@@ -350,6 +350,12 @@ export class TeamsClient {
|
|
|
350
350
|
async archiveTeam(teamId) {
|
|
351
351
|
return this.measurePerformance('archiveTeam', () => this._legionClient.archiveTeam(teamId));
|
|
352
352
|
}
|
|
353
|
+
/**
|
|
354
|
+
* Unarchive a team
|
|
355
|
+
*/
|
|
356
|
+
async unarchiveTeam(teamId) {
|
|
357
|
+
return this.measurePerformance('unarchiveTeam', () => this._legionClient.unArchiveTeam(teamId));
|
|
358
|
+
}
|
|
353
359
|
|
|
354
360
|
/**
|
|
355
361
|
* @private
|
|
@@ -28,7 +28,7 @@ export function getSentryConfig(options) {
|
|
|
28
28
|
...DEFAULT_SENTRY_CONFIG,
|
|
29
29
|
// Standalone __VERSION__ is set from `bin/set-release-version.sh`
|
|
30
30
|
// when building to deploy to production
|
|
31
|
-
release: `${"@atlaskit/teams-client"}@${"
|
|
31
|
+
release: `${"@atlaskit/teams-client"}@${"0.0.0-development"}` ||
|
|
32
32
|
// @ts-ignore Jira - window.BUILD_KEY
|
|
33
33
|
window.BUILD_KEY || ( // @ts-ignore Confluence - window.__buildInfo
|
|
34
34
|
(_window$__buildInfo = window.__buildInfo) === null || _window$__buildInfo === void 0 ? void 0 : _window$__buildInfo.FRONTEND_VERSION) || '---',
|
|
@@ -3,7 +3,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
|
|
|
3
3
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
4
|
import FeatureGates from '@atlaskit/feature-gate-js-client';
|
|
5
5
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
6
|
-
export var allPermissions = function allPermissions(defaultPermission, isMember) {
|
|
6
|
+
export var allPermissions = function allPermissions(defaultPermission, isMember, isOrgAdmin) {
|
|
7
7
|
return {
|
|
8
8
|
ADD_MEMBER_TO_TEAM: defaultPermission,
|
|
9
9
|
JOIN_TEAM: defaultPermission,
|
|
@@ -21,9 +21,11 @@ export var allPermissions = function allPermissions(defaultPermission, isMember)
|
|
|
21
21
|
DELETE_TEAM: defaultPermission,
|
|
22
22
|
EDIT_TEAM_SETTINGS: defaultPermission,
|
|
23
23
|
EDIT_TEAM_MEMBERSHIP: defaultPermission,
|
|
24
|
+
EDIT_TEAM_TYPE: defaultPermission && isOrgAdmin,
|
|
24
25
|
REMOVE_AGENT_FROM_TEAM: defaultPermission,
|
|
25
26
|
ADD_AGENT_TO_TEAM: defaultPermission,
|
|
26
|
-
ARCHIVE_TEAM: defaultPermission && isMember
|
|
27
|
+
ARCHIVE_TEAM: defaultPermission && isMember,
|
|
28
|
+
UNARCHIVE_TEAM: false
|
|
27
29
|
};
|
|
28
30
|
};
|
|
29
31
|
export var vanityActions = ['EDIT_DESCRIPTION', 'EDIT_TEAM_NAME', 'EDIT_PROFILE_HEADER', 'EDIT_TEAM_LINK'];
|
|
@@ -50,24 +52,66 @@ export var SCIMSyncTeamPermissions = function SCIMSyncTeamPermissions(isMember,
|
|
|
50
52
|
EDIT_TEAM_NAME: isOrgAdmin && source === 'ATLASSIAN_GROUP' && fg('enable_edit_team_name_external_type_teams')
|
|
51
53
|
};
|
|
52
54
|
};
|
|
53
|
-
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Returns permission map for disbanded teams
|
|
58
|
+
* Only UNARCHIVE_TEAM action is allowed based on team settings and user permissions
|
|
59
|
+
*/
|
|
60
|
+
var getDisbandedTeamPermissionMap = function getDisbandedTeamPermissionMap(settings, permission, isMember, isOrgAdmin) {
|
|
61
|
+
var newTeamProfileEnabled = FeatureGates.getExperimentValue('new_team_profile', 'isEnabled', false);
|
|
62
|
+
var isArchiveTeamEnabled = fg('legion-enable-archive-teams') && newTeamProfileEnabled;
|
|
63
|
+
|
|
64
|
+
// Base permission map - all actions disabled for disbanded teams
|
|
65
|
+
var basePermissions = allPermissions(false, false, false);
|
|
66
|
+
|
|
67
|
+
// UNARCHIVE_TEAM permission based on team settings
|
|
68
|
+
var canUnarchive = false;
|
|
69
|
+
if (isArchiveTeamEnabled) {
|
|
70
|
+
if (settings === 'EXTERNAL') {
|
|
71
|
+
// For EXTERNAL teams, only org admins can unarchive
|
|
72
|
+
canUnarchive = isOrgAdmin;
|
|
73
|
+
} else if (settings === 'OPEN' || settings === 'MEMBER_INVITE') {
|
|
74
|
+
// For OPEN and MEMBER_INVITE teams, members with FULL_WRITE can unarchive
|
|
75
|
+
canUnarchive = isMember && permission === 'FULL_WRITE';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return _objectSpread(_objectSpread({}, basePermissions), {}, {
|
|
79
|
+
UNARCHIVE_TEAM: canUnarchive,
|
|
80
|
+
DELETE_TEAM: canUnarchive
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Returns permission map for active teams based on team settings
|
|
86
|
+
*/
|
|
87
|
+
var getActiveTeamPermissionMap = function getActiveTeamPermissionMap(settings, permission, isMember, isOrgAdmin, source) {
|
|
54
88
|
var newTeamProfileEnabled = FeatureGates.getExperimentValue('new_team_profile', 'isEnabled', false);
|
|
55
89
|
var isArchiveTeamEnabled = fg('legion-enable-archive-teams') && newTeamProfileEnabled;
|
|
56
90
|
if (settings === 'OPEN') {
|
|
57
|
-
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(permission === 'FULL_WRITE', isMember)), openPermissions(permission)), {}, {
|
|
91
|
+
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(permission === 'FULL_WRITE', isMember, isOrgAdmin)), openPermissions(permission)), {}, {
|
|
58
92
|
ARCHIVE_TEAM: isArchiveTeamEnabled && permission === 'FULL_WRITE' && isMember
|
|
59
93
|
});
|
|
60
94
|
}
|
|
61
95
|
if (settings === 'MEMBER_INVITE') {
|
|
62
|
-
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(permission === 'FULL_WRITE', isMember)), inviteOnlyPermissions(permission)), {}, {
|
|
96
|
+
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(permission === 'FULL_WRITE', isMember, isOrgAdmin)), inviteOnlyPermissions(permission)), {}, {
|
|
63
97
|
ARCHIVE_TEAM: isArchiveTeamEnabled && permission === 'FULL_WRITE' && isMember
|
|
64
98
|
});
|
|
65
99
|
} else if (settings === 'EXTERNAL') {
|
|
66
|
-
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(false, isMember)), SCIMSyncTeamPermissions(isMember, isOrgAdmin, source)), {}, {
|
|
100
|
+
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(false, isMember, isOrgAdmin)), SCIMSyncTeamPermissions(isMember, isOrgAdmin, source)), {}, {
|
|
67
101
|
ADD_AGENT_TO_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
|
|
68
102
|
REMOVE_AGENT_FROM_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
|
|
69
|
-
ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin
|
|
103
|
+
ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin,
|
|
104
|
+
EDIT_TEAM_TYPE: isOrgAdmin
|
|
70
105
|
});
|
|
71
106
|
}
|
|
72
|
-
return allPermissions(false, false);
|
|
107
|
+
return allPermissions(false, false, false);
|
|
108
|
+
};
|
|
109
|
+
export var getPermissionMap = function getPermissionMap(settings, permission, isMember, isOrgAdmin, source, state) {
|
|
110
|
+
// Handle disbanded teams with special permission map
|
|
111
|
+
if (state === 'DISBANDED') {
|
|
112
|
+
return getDisbandedTeamPermissionMap(settings, permission, isMember, isOrgAdmin);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// For active teams (or when state is not provided), use existing logic
|
|
116
|
+
return getActiveTeamPermissionMap(settings, permission, isMember, isOrgAdmin, source);
|
|
73
117
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isMember } from '../team';
|
|
2
2
|
import { getPermissionMap, vanityActions } from './constants';
|
|
3
|
-
export function hasPermission(action, settings, permission, isPeopleBrowseEnabled, currentUserMembership, teamVisibilityPermissions, source) {
|
|
3
|
+
export function hasPermission(action, settings, permission, isPeopleBrowseEnabled, currentUserMembership, teamVisibilityPermissions, source, state) {
|
|
4
4
|
if (!isPeopleBrowseEnabled && !vanityActions.includes(action)) {
|
|
5
5
|
return false;
|
|
6
6
|
}
|
|
@@ -11,14 +11,15 @@ export function hasPermission(action, settings, permission, isPeopleBrowseEnable
|
|
|
11
11
|
teamPermission: permission,
|
|
12
12
|
isMemberOfTeam: isMemberOfTeam,
|
|
13
13
|
isOrgAdmin: isOrgAdmin,
|
|
14
|
-
source: source
|
|
14
|
+
source: source,
|
|
15
|
+
state: state
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
19
|
* Determines if a user has permission perform a given action on a team
|
|
19
20
|
*/
|
|
20
21
|
export function userCan(action, options) {
|
|
21
|
-
return getPermissionMap(options.membershipSettings, options.teamPermission, options.isMemberOfTeam, options.isOrgAdmin, options.source)[action];
|
|
22
|
+
return getPermissionMap(options.membershipSettings, options.teamPermission, options.isMemberOfTeam, options.isOrgAdmin, options.source, options.state)[action];
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export var AllTeamActions = ['ADD_MEMBER_TO_TEAM', 'JOIN_TEAM', 'REQUEST_TO_JOIN', 'CANCEL_JOIN_REQUEST', 'APPROVE_JOIN_REQUEST', 'REJECT_JOIN_REQUEST', 'REMOVE_MEMBER_FROM_TEAM', 'CANCEL_INVITE', 'LEAVE_TEAM', 'REMOVE_AGENT_FROM_TEAM', 'ADD_AGENT_TO_TEAM',
|
|
2
2
|
// Visual
|
|
3
|
-
'EDIT_TEAM_NAME', 'EDIT_DESCRIPTION', 'EDIT_PROFILE_HEADER', 'EDIT_TEAM_LINK', 'EDIT_TEAM_SETTINGS', 'EDIT_TEAM_MEMBERSHIP',
|
|
3
|
+
'EDIT_TEAM_NAME', 'EDIT_DESCRIPTION', 'EDIT_PROFILE_HEADER', 'EDIT_TEAM_LINK', 'EDIT_TEAM_SETTINGS', 'EDIT_TEAM_MEMBERSHIP', 'EDIT_TEAM_TYPE',
|
|
4
4
|
// Serious
|
|
5
|
-
'DELETE_TEAM', 'ARCHIVE_TEAM'];
|
|
5
|
+
'DELETE_TEAM', 'ARCHIVE_TEAM', 'UNARCHIVE_TEAM'];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
2
|
import { ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
|
|
3
3
|
import { TeamsUFOExperience } from './index';
|
|
4
|
-
var TeamsClientExperienceKeyList = ['getAllTeams', 'getTeamById', 'updateTeamById', 'querySettings', 'queryFeatureFlags', 'queryTeamMemberships', 'queryUser', 'inviteUsersToTeam', 'getMyTeamMembership', 'getTeamLinksByTeamId', 'createTeamLink', 'updateTeamLink', 'deleteTeamLink', 'reorderTeamLink', 'acceptTeamInvitation', 'declineTeamInvitation', 'selfJoinTeam', 'cancelJoinRequest', 'acceptJoinRequest', 'declineJoinRequest', 'deleteTeamMembership', 'revokeTeamInvite', 'deleteTeam', 'archiveTeam', 'isSingleFullMemberTeam', 'createTeam', 'createTeamContainers', 'createExternalTeam', 'getProfileWithMutability', 'getIsSiteAdmin', 'addUsersToTeam', 'removeTeamMemberships', 'getRecommendedProducts', 'joinOrRequestDefaultAccessToProductsBulk', 'getReadMediaToken', 'getWriteUserMediaToken', 'updateUserHeaderImage', 'getWriteTeamMediaToken', 'getSoftDeletedTeamById', 'restoreTeam', 'getUserInSiteUserBase', 'getLinkedTeamsBulk', 'getTeamProfileDetails', 'getUserContainers', 'getPermissions', 'getUserManageConfig', 'getMyAvatarUploadedStatus', 'deleteUserAvatar', 'getTeamLinkIcons', 'getTeamInSlack', 'getOrgScope', 'restoreTeamToSyncedGroup', 'getTeamAndGroupDiff', 'linkExistingTeamToGroup', 'fetchUserAvatarInfo', 'getOrgEligibilityForManagedTeams', 'updateUser', 'updateUserAvatar', 'disconnectTeamInSlack', 'updateTeamInSlack', 'getUserTenure', 'getAriFromUrl', 'getWebLinkTitle', 'addAgentToTeam', 'getTeamEnabledSites', 'assignTeamsToSites', 'removeAgentTeamAssociation', 'getAssignedTeams', 'setTeamSiteAssignmentPermission', 'getUnassignedTeams', 'getTeamSiteAssignmentOrgDetails', 'getTeamsToBeClonedToJsmSites', 'getReportingLines'];
|
|
4
|
+
var TeamsClientExperienceKeyList = ['getAllTeams', 'getTeamById', 'updateTeamById', 'querySettings', 'queryFeatureFlags', 'queryTeamMemberships', 'queryUser', 'inviteUsersToTeam', 'getMyTeamMembership', 'getTeamLinksByTeamId', 'createTeamLink', 'updateTeamLink', 'deleteTeamLink', 'reorderTeamLink', 'acceptTeamInvitation', 'declineTeamInvitation', 'selfJoinTeam', 'cancelJoinRequest', 'acceptJoinRequest', 'declineJoinRequest', 'deleteTeamMembership', 'revokeTeamInvite', 'deleteTeam', 'archiveTeam', 'unarchiveTeam', 'isSingleFullMemberTeam', 'createTeam', 'createTeamContainers', 'createExternalTeam', 'getProfileWithMutability', 'getIsSiteAdmin', 'addUsersToTeam', 'removeTeamMemberships', 'getRecommendedProducts', 'joinOrRequestDefaultAccessToProductsBulk', 'getReadMediaToken', 'getWriteUserMediaToken', 'updateUserHeaderImage', 'getWriteTeamMediaToken', 'getSoftDeletedTeamById', 'restoreTeam', 'getUserInSiteUserBase', 'getLinkedTeamsBulk', 'getTeamProfileDetails', 'getUserContainers', 'getPermissions', 'getUserManageConfig', 'getMyAvatarUploadedStatus', 'deleteUserAvatar', 'getTeamLinkIcons', 'getTeamInSlack', 'getOrgScope', 'restoreTeamToSyncedGroup', 'getTeamAndGroupDiff', 'linkExistingTeamToGroup', 'fetchUserAvatarInfo', 'getOrgEligibilityForManagedTeams', 'updateUser', 'updateUserAvatar', 'disconnectTeamInSlack', 'updateTeamInSlack', 'getUserTenure', 'getAriFromUrl', 'getWebLinkTitle', 'addAgentToTeam', 'getTeamEnabledSites', 'assignTeamsToSites', 'removeAgentTeamAssociation', 'getAssignedTeams', 'setTeamSiteAssignmentPermission', 'getUnassignedTeams', 'getTeamSiteAssignmentOrgDetails', 'getTeamsToBeClonedToJsmSites', 'getReportingLines'];
|
|
5
5
|
export var TEAMS_CLIENT_EXPERIENCES = new Map(_toConsumableArray(TeamsClientExperienceKeyList.map(function (key) {
|
|
6
6
|
return [key,
|
|
7
7
|
// camelCase to kebab-case
|
|
@@ -45,7 +45,7 @@ export var TeamsUFOExperience = /*#__PURE__*/function (_UFOExperience) {
|
|
|
45
45
|
return _superPropGet(TeamsUFOExperience, "failure", this, 3)([{
|
|
46
46
|
metadata: {
|
|
47
47
|
error: createErrorMetadata(error),
|
|
48
|
-
packageVersion: "
|
|
48
|
+
packageVersion: "0.0.0-development",
|
|
49
49
|
packageName: "@atlaskit/teams-client"
|
|
50
50
|
}
|
|
51
51
|
}]);
|
|
@@ -53,7 +53,7 @@ export var TeamsUFOExperience = /*#__PURE__*/function (_UFOExperience) {
|
|
|
53
53
|
return _superPropGet(TeamsUFOExperience, "failure", this, 3)([{
|
|
54
54
|
metadata: {
|
|
55
55
|
error: 'unknown error',
|
|
56
|
-
packageVersion: "
|
|
56
|
+
packageVersion: "0.0.0-development",
|
|
57
57
|
packageName: "@atlaskit/teams-client"
|
|
58
58
|
}
|
|
59
59
|
}]);
|