MCPcopy Create free account
hub / github.com/coder/coder / RoleSelector

Function RoleSelector

site/src/modules/roles/RoleSelector.tsx:23–86  ·  view source on GitHub ↗
({
	hideLabel,
	loading,
	error,
	availableRoles = [],
	selectedRoles,
	onChange,
})

Source from the content-addressed store, hash-verified

21};
22
23export const RoleSelector: FC<RoleSelectorProps> = ({
24 hideLabel,
25 loading,
26 error,
27 availableRoles = [],
28 selectedRoles,
29 onChange,
30}) => {
31 if (loading) {
32 return (
33 <RoleSelectorLayout>
34 <RoleSelectorSkeleton />
35 <MemberRole />
36 </RoleSelectorLayout>
37 );
38 }
39
40 if (error) {
41 return (
42 <RoleSelectorLayout>
43 <Alert severity="error">
44 <AlertTitle>
45 {getErrorMessage(error, "Failed to load roles.")}
46 </AlertTitle>
47 </Alert>
48 </RoleSelectorLayout>
49 );
50 }
51
52 const { selectableRoles = [], advancedRoles = [] } = Object.groupBy(
53 availableRoles.filter((r) => r.name !== "member"),
54 (it) =>
55 advancedRoleNames.includes(it.name) ? "advancedRoles" : "selectableRoles",
56 );
57
58 if (selectableRoles.length === 0) {
59 return null;
60 }
61
62 const handleToggle = (roleName: string) => {
63 const newRoles = new Set(selectedRoles);
64 if (newRoles.has(roleName)) {
65 newRoles.delete(roleName);
66 } else {
67 newRoles.add(roleName);
68 }
69 onChange(newRoles);
70 };
71
72 return (
73 <RoleSelectorLayout hideLabel={hideLabel}>
74 {selectableRoles.length > 0 && (
75 <RoleSelectorList
76 selectableRoles={selectableRoles}
77 advancedRoles={advancedRoles}
78 selectedRoles={selectedRoles}
79 handleToggle={handleToggle}
80 />

Callers

nothing calls this directly

Calls 2

getErrorMessageFunction · 0.90
filterMethod · 0.80

Tested by

no test coverage detected