@atlaskit/teams-client 4.21.0 → 4.23.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 +14 -0
- package/dist/cjs/common/utils/permissions/constants.js +55 -8
- package/dist/cjs/common/utils/permissions/has-permission.js +4 -3
- package/dist/cjs/common/utils/permissions/types.js +3 -3
- 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 +241 -196
- package/dist/cjs/services/main.js +592 -540
- package/dist/cjs/services/sentry/utils/get-sentry-config.js +1 -1
- package/dist/es2019/common/utils/permissions/constants.js +56 -8
- package/dist/es2019/common/utils/permissions/has-permission.js +4 -3
- package/dist/es2019/common/utils/permissions/types.js +3 -3
- 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 +12 -2
- package/dist/es2019/services/main.js +13 -0
- package/dist/es2019/services/sentry/utils/get-sentry-config.js +1 -1
- package/dist/esm/common/utils/permissions/constants.js +55 -8
- package/dist/esm/common/utils/permissions/has-permission.js +4 -3
- package/dist/esm/common/utils/permissions/types.js +3 -3
- 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 +241 -196
- package/dist/esm/services/main.js +592 -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 +3 -1
- package/dist/types/services/main.d.ts +8 -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 +4 -1
- package/dist/types-ts4.5/common/utils/ufo/constants.d.ts +3 -1
- package/dist/types-ts4.5/services/legion-client/index.d.ts +3 -1
- package/dist/types-ts4.5/services/main.d.ts +8 -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("4.
|
|
39
|
+
release: "".concat("@atlaskit/teams-client", "@").concat("4.23.0") ||
|
|
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,12 @@ 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,
|
|
25
|
+
CAN_EDIT_HIERARCHY: defaultPermission && isMember
|
|
23
26
|
});
|
|
24
27
|
export const vanityActions = ['EDIT_DESCRIPTION', 'EDIT_TEAM_NAME', 'EDIT_PROFILE_HEADER', 'EDIT_TEAM_LINK'];
|
|
25
28
|
export const openPermissions = permission => ({
|
|
@@ -39,30 +42,75 @@ export const SCIMSyncTeamPermissions = (isMember, isOrgAdmin, source) => ({
|
|
|
39
42
|
EDIT_TEAM_LINK: isMember || isOrgAdmin,
|
|
40
43
|
EDIT_TEAM_NAME: isOrgAdmin && source === 'ATLASSIAN_GROUP' && fg('enable_edit_team_name_external_type_teams')
|
|
41
44
|
});
|
|
42
|
-
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Returns permission map for disbanded teams
|
|
48
|
+
* Only UNARCHIVE_TEAM action is allowed based on team settings and user permissions
|
|
49
|
+
*/
|
|
50
|
+
const getDisbandedTeamPermissionMap = (settings, permission, isMember, isOrgAdmin) => {
|
|
51
|
+
const newTeamProfileEnabled = FeatureGates.getExperimentValue('new_team_profile', 'isEnabled', false);
|
|
52
|
+
const isArchiveTeamEnabled = fg('legion-enable-archive-teams') && newTeamProfileEnabled;
|
|
53
|
+
|
|
54
|
+
// Base permission map - all actions disabled for disbanded teams
|
|
55
|
+
const basePermissions = allPermissions(false, false, false);
|
|
56
|
+
|
|
57
|
+
// UNARCHIVE_TEAM permission based on team settings
|
|
58
|
+
let canUnarchive = false;
|
|
59
|
+
if (isArchiveTeamEnabled) {
|
|
60
|
+
if (settings === 'EXTERNAL') {
|
|
61
|
+
// For EXTERNAL teams, only org admins can unarchive
|
|
62
|
+
canUnarchive = isOrgAdmin;
|
|
63
|
+
} else if (settings === 'OPEN' || settings === 'MEMBER_INVITE') {
|
|
64
|
+
// For OPEN and MEMBER_INVITE teams, members with FULL_WRITE can unarchive
|
|
65
|
+
canUnarchive = isMember && permission === 'FULL_WRITE';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
...basePermissions,
|
|
70
|
+
CAN_EDIT_HIERARCHY: false,
|
|
71
|
+
UNARCHIVE_TEAM: canUnarchive,
|
|
72
|
+
DELETE_TEAM: canUnarchive
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Returns permission map for active teams based on team settings
|
|
78
|
+
*/
|
|
79
|
+
const getActiveTeamPermissionMap = (settings, permission, isMember, isOrgAdmin, source) => {
|
|
43
80
|
const newTeamProfileEnabled = FeatureGates.getExperimentValue('new_team_profile', 'isEnabled', false);
|
|
44
81
|
const isArchiveTeamEnabled = fg('legion-enable-archive-teams') && newTeamProfileEnabled;
|
|
45
82
|
if (settings === 'OPEN') {
|
|
46
83
|
return {
|
|
47
|
-
...allPermissions(permission === 'FULL_WRITE', isMember),
|
|
84
|
+
...allPermissions(permission === 'FULL_WRITE', isMember, isOrgAdmin),
|
|
48
85
|
...openPermissions(permission),
|
|
49
86
|
ARCHIVE_TEAM: isArchiveTeamEnabled && permission === 'FULL_WRITE' && isMember
|
|
50
87
|
};
|
|
51
88
|
}
|
|
52
89
|
if (settings === 'MEMBER_INVITE') {
|
|
53
90
|
return {
|
|
54
|
-
...allPermissions(permission === 'FULL_WRITE', isMember),
|
|
91
|
+
...allPermissions(permission === 'FULL_WRITE', isMember, isOrgAdmin),
|
|
55
92
|
...inviteOnlyPermissions(permission),
|
|
56
93
|
ARCHIVE_TEAM: isArchiveTeamEnabled && permission === 'FULL_WRITE' && isMember
|
|
57
94
|
};
|
|
58
95
|
} else if (settings === 'EXTERNAL') {
|
|
59
96
|
return {
|
|
60
|
-
...allPermissions(false, isMember),
|
|
97
|
+
...allPermissions(false, isMember, isOrgAdmin),
|
|
61
98
|
...SCIMSyncTeamPermissions(isMember, isOrgAdmin, source),
|
|
62
99
|
ADD_AGENT_TO_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
|
|
63
100
|
REMOVE_AGENT_FROM_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
|
|
64
|
-
ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin
|
|
101
|
+
ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin,
|
|
102
|
+
EDIT_TEAM_TYPE: isOrgAdmin,
|
|
103
|
+
CAN_EDIT_HIERARCHY: permission === 'FULL_WRITE' && isOrgAdmin
|
|
65
104
|
};
|
|
66
105
|
}
|
|
67
|
-
return allPermissions(false, false);
|
|
106
|
+
return allPermissions(false, false, false);
|
|
107
|
+
};
|
|
108
|
+
export const getPermissionMap = (settings, permission, isMember, isOrgAdmin, source, state) => {
|
|
109
|
+
// Handle disbanded teams with special permission map
|
|
110
|
+
if (state === 'DISBANDED') {
|
|
111
|
+
return getDisbandedTeamPermissionMap(settings, permission, isMember, isOrgAdmin);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// For active teams (or when state is not provided), use existing logic
|
|
115
|
+
return getActiveTeamPermissionMap(settings, permission, isMember, isOrgAdmin, source);
|
|
68
116
|
};
|
|
@@ -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
|
-
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',
|
|
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', 'CAN_EDIT_HIERARCHY',
|
|
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', 'unlinkTeamFromGroup', '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: "4.
|
|
30
|
+
packageVersion: "4.23.0",
|
|
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: "4.
|
|
38
|
+
packageVersion: "4.23.0",
|
|
39
39
|
packageName: "@atlaskit/teams-client"
|
|
40
40
|
}
|
|
41
41
|
});
|
|
@@ -251,6 +251,15 @@ 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
|
+
}
|
|
258
|
+
async unlinkTeamFromGroup(teamId, membershipSettings) {
|
|
259
|
+
return this.patchResource(`${v4UrlPath}/${this.trimTeamARI(teamId)}`, {
|
|
260
|
+
membershipSettings
|
|
261
|
+
});
|
|
262
|
+
}
|
|
254
263
|
|
|
255
264
|
/**
|
|
256
265
|
* @private
|
|
@@ -261,7 +270,7 @@ export class LegionClient extends RestClient {
|
|
|
261
270
|
const members = await this.getResource(`${v4UrlPath}/${this.trimTeamARI(teamId)}/members?size=2&membershipState=FULL_MEMBER&siteId=${this.getCloudId()}`);
|
|
262
271
|
return members.entities.length === 1;
|
|
263
272
|
}
|
|
264
|
-
async createTeam(displayName, originQuery, members, membershipSettings = 'OPEN') {
|
|
273
|
+
async createTeam(displayName, originQuery, members, membershipSettings = 'OPEN', typeId) {
|
|
265
274
|
const organizationId = this.getContext().orgId;
|
|
266
275
|
if (!organizationId) {
|
|
267
276
|
const err = new Error('Organization ID is required');
|
|
@@ -275,7 +284,8 @@ export class LegionClient extends RestClient {
|
|
|
275
284
|
membershipSettings: membershipSettings,
|
|
276
285
|
siteId: this.getCloudId(),
|
|
277
286
|
organizationId: organizationId,
|
|
278
|
-
members: [...new Set(members)]
|
|
287
|
+
members: [...new Set(members)],
|
|
288
|
+
typeId
|
|
279
289
|
});
|
|
280
290
|
return this.mapTeamCreateResponseV4ToTeam(legionTeam);
|
|
281
291
|
}
|
|
@@ -350,6 +350,19 @@ 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
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Unlink a team from group
|
|
362
|
+
*/
|
|
363
|
+
async unlinkTeamFromGroup(teamId) {
|
|
364
|
+
return this.measurePerformance('unlinkTeamFromGroup', () => this._legionClient.unlinkTeamFromGroup(teamId, 'MEMBER_INVITE'));
|
|
365
|
+
}
|
|
353
366
|
|
|
354
367
|
/**
|
|
355
368
|
* @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"}@${"4.
|
|
31
|
+
release: `${"@atlaskit/teams-client"}@${"4.23.0"}` ||
|
|
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,12 @@ 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,
|
|
29
|
+
CAN_EDIT_HIERARCHY: defaultPermission && isMember
|
|
27
30
|
};
|
|
28
31
|
};
|
|
29
32
|
export var vanityActions = ['EDIT_DESCRIPTION', 'EDIT_TEAM_NAME', 'EDIT_PROFILE_HEADER', 'EDIT_TEAM_LINK'];
|
|
@@ -50,24 +53,68 @@ export var SCIMSyncTeamPermissions = function SCIMSyncTeamPermissions(isMember,
|
|
|
50
53
|
EDIT_TEAM_NAME: isOrgAdmin && source === 'ATLASSIAN_GROUP' && fg('enable_edit_team_name_external_type_teams')
|
|
51
54
|
};
|
|
52
55
|
};
|
|
53
|
-
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Returns permission map for disbanded teams
|
|
59
|
+
* Only UNARCHIVE_TEAM action is allowed based on team settings and user permissions
|
|
60
|
+
*/
|
|
61
|
+
var getDisbandedTeamPermissionMap = function getDisbandedTeamPermissionMap(settings, permission, isMember, isOrgAdmin) {
|
|
62
|
+
var newTeamProfileEnabled = FeatureGates.getExperimentValue('new_team_profile', 'isEnabled', false);
|
|
63
|
+
var isArchiveTeamEnabled = fg('legion-enable-archive-teams') && newTeamProfileEnabled;
|
|
64
|
+
|
|
65
|
+
// Base permission map - all actions disabled for disbanded teams
|
|
66
|
+
var basePermissions = allPermissions(false, false, false);
|
|
67
|
+
|
|
68
|
+
// UNARCHIVE_TEAM permission based on team settings
|
|
69
|
+
var canUnarchive = false;
|
|
70
|
+
if (isArchiveTeamEnabled) {
|
|
71
|
+
if (settings === 'EXTERNAL') {
|
|
72
|
+
// For EXTERNAL teams, only org admins can unarchive
|
|
73
|
+
canUnarchive = isOrgAdmin;
|
|
74
|
+
} else if (settings === 'OPEN' || settings === 'MEMBER_INVITE') {
|
|
75
|
+
// For OPEN and MEMBER_INVITE teams, members with FULL_WRITE can unarchive
|
|
76
|
+
canUnarchive = isMember && permission === 'FULL_WRITE';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return _objectSpread(_objectSpread({}, basePermissions), {}, {
|
|
80
|
+
CAN_EDIT_HIERARCHY: false,
|
|
81
|
+
UNARCHIVE_TEAM: canUnarchive,
|
|
82
|
+
DELETE_TEAM: canUnarchive
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Returns permission map for active teams based on team settings
|
|
88
|
+
*/
|
|
89
|
+
var getActiveTeamPermissionMap = function getActiveTeamPermissionMap(settings, permission, isMember, isOrgAdmin, source) {
|
|
54
90
|
var newTeamProfileEnabled = FeatureGates.getExperimentValue('new_team_profile', 'isEnabled', false);
|
|
55
91
|
var isArchiveTeamEnabled = fg('legion-enable-archive-teams') && newTeamProfileEnabled;
|
|
56
92
|
if (settings === 'OPEN') {
|
|
57
|
-
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(permission === 'FULL_WRITE', isMember)), openPermissions(permission)), {}, {
|
|
93
|
+
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(permission === 'FULL_WRITE', isMember, isOrgAdmin)), openPermissions(permission)), {}, {
|
|
58
94
|
ARCHIVE_TEAM: isArchiveTeamEnabled && permission === 'FULL_WRITE' && isMember
|
|
59
95
|
});
|
|
60
96
|
}
|
|
61
97
|
if (settings === 'MEMBER_INVITE') {
|
|
62
|
-
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(permission === 'FULL_WRITE', isMember)), inviteOnlyPermissions(permission)), {}, {
|
|
98
|
+
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(permission === 'FULL_WRITE', isMember, isOrgAdmin)), inviteOnlyPermissions(permission)), {}, {
|
|
63
99
|
ARCHIVE_TEAM: isArchiveTeamEnabled && permission === 'FULL_WRITE' && isMember
|
|
64
100
|
});
|
|
65
101
|
} else if (settings === 'EXTERNAL') {
|
|
66
|
-
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(false, isMember)), SCIMSyncTeamPermissions(isMember, isOrgAdmin, source)), {}, {
|
|
102
|
+
return _objectSpread(_objectSpread(_objectSpread({}, allPermissions(false, isMember, isOrgAdmin)), SCIMSyncTeamPermissions(isMember, isOrgAdmin, source)), {}, {
|
|
67
103
|
ADD_AGENT_TO_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
|
|
68
104
|
REMOVE_AGENT_FROM_TEAM: newTeamProfileEnabled && (isMember || isOrgAdmin),
|
|
69
|
-
ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin
|
|
105
|
+
ARCHIVE_TEAM: isArchiveTeamEnabled && isOrgAdmin,
|
|
106
|
+
EDIT_TEAM_TYPE: isOrgAdmin,
|
|
107
|
+
CAN_EDIT_HIERARCHY: permission === 'FULL_WRITE' && isOrgAdmin
|
|
70
108
|
});
|
|
71
109
|
}
|
|
72
|
-
return allPermissions(false, false);
|
|
110
|
+
return allPermissions(false, false, false);
|
|
111
|
+
};
|
|
112
|
+
export var getPermissionMap = function getPermissionMap(settings, permission, isMember, isOrgAdmin, source, state) {
|
|
113
|
+
// Handle disbanded teams with special permission map
|
|
114
|
+
if (state === 'DISBANDED') {
|
|
115
|
+
return getDisbandedTeamPermissionMap(settings, permission, isMember, isOrgAdmin);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// For active teams (or when state is not provided), use existing logic
|
|
119
|
+
return getActiveTeamPermissionMap(settings, permission, isMember, isOrgAdmin, source);
|
|
73
120
|
};
|
|
@@ -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
|
-
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',
|
|
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', 'CAN_EDIT_HIERARCHY',
|
|
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', 'unlinkTeamFromGroup', '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: "4.
|
|
48
|
+
packageVersion: "4.23.0",
|
|
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: "4.
|
|
56
|
+
packageVersion: "4.23.0",
|
|
57
57
|
packageName: "@atlaskit/teams-client"
|
|
58
58
|
}
|
|
59
59
|
}]);
|