Skip to content

Commit 510287b

Browse files
committed
Fix repetitive results
1 parent b86abcf commit 510287b

File tree

4 files changed

+33
-4
lines changed

4 files changed

+33
-4
lines changed

site/src/components/UserOrGroupAutocomplete/UserOrGroupAutocomplete.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ export type UserOrGroupAutocompleteProps = {
1919
value: UserOrGroupAutocompleteValue
2020
onChange: (value: UserOrGroupAutocompleteValue) => void
2121
organizationId: string
22+
exclude: UserOrGroupAutocompleteValue[]
2223
}
2324

2425
export const UserOrGroupAutocomplete: React.FC<UserOrGroupAutocompleteProps> = ({
2526
value,
2627
onChange,
2728
organizationId,
29+
exclude,
2830
}) => {
2931
const styles = useStyles()
3032
const [isAutocompleteOpen, setIsAutocompleteOpen] = useState(false)
@@ -36,6 +38,11 @@ export const UserOrGroupAutocomplete: React.FC<UserOrGroupAutocompleteProps> = (
3638
},
3739
})
3840
const { userResults, groupResults } = searchState.context
41+
const options = [...groupResults, ...userResults].filter((result) => {
42+
const excludeIds = exclude.map((optionToExclude) => optionToExclude?.id)
43+
return !excludeIds.includes(result.id)
44+
})
45+
3946
const handleFilterChange = debounce((event: ChangeEvent<HTMLInputElement>) => {
4047
sendSearch("SEARCH", { query: event.target.value })
4148
}, 500)
@@ -80,7 +87,7 @@ export const UserOrGroupAutocomplete: React.FC<UserOrGroupAutocompleteProps> = (
8087
/>
8188
)
8289
}}
83-
options={[...groupResults, ...userResults]}
90+
options={options}
8491
loading={searchState.matches("searching")}
8592
className={styles.autocomplete}
8693
renderInput={(params) => (

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,27 @@ import {
2323
import { FC, useState } from "react"
2424
import { Maybe } from "components/Conditionals/Maybe"
2525

26-
const AddTemplateUserOrGroup: React.FC<{
26+
type AddTemplateUserOrGroupProps = {
2727
organizationId: string
2828
isLoading: boolean
29+
templateACL: TemplateACL | undefined
2930
onSubmit: (
3031
userOrGroup: TemplateUser | TemplateGroup,
3132
role: TemplateRole,
3233
reset: () => void,
3334
) => void
34-
}> = ({ isLoading, onSubmit, organizationId }) => {
35+
}
36+
37+
const AddTemplateUserOrGroup: React.FC<AddTemplateUserOrGroupProps> = ({
38+
isLoading,
39+
onSubmit,
40+
organizationId,
41+
templateACL,
42+
}) => {
3543
const styles = useStyles()
3644
const [selectedOption, setSelectedOption] = useState<UserOrGroupAutocompleteValue>(null)
3745
const [selectedRole, setSelectedRole] = useState<TemplateRole>("view")
46+
const excludeFromAutocomplete = templateACL ? [...templateACL.group, ...templateACL.users] : []
3847

3948
const resetValues = () => {
4049
setSelectedOption(null)
@@ -60,6 +69,7 @@ const AddTemplateUserOrGroup: React.FC<{
6069
>
6170
<Stack direction="row" alignItems="center" spacing={1}>
6271
<UserOrGroupAutocomplete
72+
exclude={excludeFromAutocomplete}
6373
organizationId={organizationId}
6474
value={selectedOption}
6575
onChange={(newValue) => {
@@ -144,6 +154,7 @@ export const TemplatePermissionsPageView: FC<
144154
<Stack spacing={2.5}>
145155
<Maybe condition={canUpdatePermissions}>
146156
<AddTemplateUserOrGroup
157+
templateACL={templateACL}
147158
organizationId={organizationId}
148159
isLoading={isAddingUser || isAddingGroup}
149160
onSubmit={(value, role, resetAutocomplete) =>

site/src/xServices/template/searchUsersAndGroupsXService.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export type SearchUsersAndGroupsEvent =
1010
export const searchUsersAndGroupsMachine = createMachine(
1111
{
1212
id: "searchUsersAndGroups",
13+
predictableActionArguments: true,
1314
schema: {
1415
context: {} as {
1516
organizationId: string
@@ -31,7 +32,10 @@ export const searchUsersAndGroupsMachine = createMachine(
3132
states: {
3233
idle: {
3334
on: {
34-
SEARCH: "searching",
35+
SEARCH: {
36+
target: "searching",
37+
cond: "queryHasMinLength",
38+
},
3539
CLEAR_RESULTS: {
3640
actions: ["clearResults"],
3741
target: "idle",
@@ -70,5 +74,8 @@ export const searchUsersAndGroupsMachine = createMachine(
7074
groupResults: (_) => [],
7175
}),
7276
},
77+
guards: {
78+
queryHasMinLength: (_, { query }) => query.length >= 3,
79+
},
7380
},
7481
)

yarn.lock

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2+
# yarn lockfile v1
3+
4+

0 commit comments

Comments
 (0)