Skip to content

Commit c619138

Browse files
fix: Display Everyone group in the autocomplete (#4488)
1 parent 6235708 commit c619138

File tree

5 files changed

+34
-6
lines changed

5 files changed

+34
-6
lines changed

site/src/components/UserOrGroupAutocomplete/UserOrGroupAutocomplete.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Group, User } from "api/typesGenerated"
77
import { AvatarData } from "components/AvatarData/AvatarData"
88
import debounce from "just-debounce-it"
99
import { ChangeEvent, useState } from "react"
10+
import { getGroupSubtitle } from "util/groups"
1011
import { searchUsersAndGroupsMachine } from "xServices/template/searchUsersAndGroupsXService"
1112

1213
export type UserOrGroupAutocompleteValue = User | Group | null
@@ -75,9 +76,7 @@ export const UserOrGroupAutocomplete: React.FC<
7576
return (
7677
<AvatarData
7778
title={isOptionGroup ? option.name : option.username}
78-
subtitle={
79-
isOptionGroup ? `${option.members.length} members` : option.email
80-
}
79+
subtitle={isOptionGroup ? getGroupSubtitle(option) : option.email}
8180
highlightTitle
8281
avatar={
8382
!isOptionGroup && option.avatar_url ? (

site/src/pages/TemplatePage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
import { FC, useState } from "react"
3030
import { Maybe } from "components/Conditionals/Maybe"
3131
import { GroupAvatar } from "components/GroupAvatar/GroupAvatar"
32+
import { getGroupSubtitle } from "util/groups"
3233

3334
type AddTemplateUserOrGroupProps = {
3435
organizationId: string
@@ -239,7 +240,7 @@ export const TemplatePermissionsPageView: FC<
239240
<AvatarData
240241
avatar={<GroupAvatar name={group.name} />}
241242
title={group.name}
242-
subtitle={`${group.members.length} members`}
243+
subtitle={getGroupSubtitle(group)}
243244
highlightTitle
244245
/>
245246
</TableCell>

site/src/testHelpers/entities.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { FieldError } from "api/errors"
2+
import { everyOneGroup } from "util/groups"
23
import * as Types from "../api/types"
34
import * as TypesGen from "../api/typesGenerated"
45

@@ -918,7 +919,10 @@ export const MockGroup: TypesGen.Group = {
918919
}
919920

920921
export const MockTemplateACL: TypesGen.TemplateACL = {
921-
group: [{ ...MockGroup, role: "admin" }],
922+
group: [
923+
{ ...everyOneGroup(MockOrganization.id), role: "view" },
924+
{ ...MockGroup, role: "admin" },
925+
],
922926
users: [{ ...MockUser, role: "view" }],
923927
}
924928

site/src/util/groups.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { Group } from "api/typesGenerated"
2+
3+
export const everyOneGroup = (organizationId: string): Group => ({
4+
id: organizationId,
5+
name: "Everyone",
6+
organization_id: organizationId,
7+
members: [],
8+
})
9+
10+
export const getGroupSubtitle = (group: Group): string => {
11+
// It is the everyone group when a group id is the same of the org id
12+
if (group.id === group.organization_id) {
13+
return `All users`
14+
}
15+
16+
if (group.members.length === 1) {
17+
return `1 member`
18+
}
19+
20+
return `${group.members.length} members`
21+
}

site/src/xServices/template/searchUsersAndGroupsXService.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { getGroups, getUsers } from "api/api"
22
import { Group, User } from "api/typesGenerated"
33
import { queryToFilter } from "util/filters"
4+
import { everyOneGroup } from "util/groups"
45
import { assign, createMachine } from "xstate"
56

67
export type SearchUsersAndGroupsEvent =
@@ -61,7 +62,9 @@ export const searchUsersAndGroupsMachine = createMachine(
6162
getGroups(organizationId),
6263
])
6364

64-
return { users, groups }
65+
// The Everyone groups is not returned by the API so we have to add it
66+
// manually
67+
return { users, groups: [everyOneGroup(organizationId), ...groups] }
6568
},
6669
},
6770
actions: {

0 commit comments

Comments
 (0)