Skip to content

Commit 3f08b16

Browse files
committed
Begin FE selector
1 parent c262998 commit 3f08b16

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

site/src/components/CreateUserForm/CreateUserForm.tsx

+31-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { FullPageForm } from "../FullPageForm/FullPageForm"
1313
import { Stack } from "../Stack/Stack"
1414
import { ErrorAlert } from "components/Alert/ErrorAlert"
1515
import { hasApiFieldErrors, isApiError } from "api/errors"
16+
import Select from "@mui/material/Select"
17+
import MenuItem from "@mui/material/MenuItem"
1618

1719
export const Language = {
1820
emailLabel: "Email",
@@ -31,6 +33,7 @@ export interface CreateUserFormProps {
3133
error?: unknown
3234
isLoading: boolean
3335
myOrgId: string
36+
authMethods?: TypesGen.AuthMethods
3437
}
3538

3639
const validationSchema = Yup.object({
@@ -42,9 +45,13 @@ const validationSchema = Yup.object({
4245
username: nameValidator(Language.usernameLabel),
4346
})
4447

48+
const authMethodSelect = (title: string, value: string) => {
49+
return <MenuItem value={value}>{title}</MenuItem>
50+
}
51+
4552
export const CreateUserForm: FC<
4653
React.PropsWithChildren<CreateUserFormProps>
47-
> = ({ onSubmit, onCancel, error, isLoading, myOrgId }) => {
54+
> = ({ onSubmit, onCancel, error, isLoading, myOrgId, authMethods }) => {
4855
const form: FormikContextType<TypesGen.CreateUserRequest> =
4956
useFormik<TypesGen.CreateUserRequest>({
5057
initialValues: {
@@ -53,7 +60,7 @@ export const CreateUserForm: FC<
5360
username: "",
5461
organization_id: myOrgId,
5562
disable_login: false,
56-
login_type: "",
63+
login_type: "password",
5764
},
5865
validationSchema,
5966
onSubmit,
@@ -63,6 +70,18 @@ export const CreateUserForm: FC<
6370
error,
6471
)
6572

73+
const methods = []
74+
if (authMethods?.password.enabled) {
75+
methods.push(authMethodSelect("Password", "password"))
76+
}
77+
if (authMethods?.oidc.enabled) {
78+
methods.push(authMethodSelect("OIDC", "oidc"))
79+
}
80+
if (authMethods?.github.enabled) {
81+
methods.push(authMethodSelect("Github", "github"))
82+
}
83+
methods.push(authMethodSelect("None", "none"))
84+
6685
return (
6786
<FullPageForm title="Create user">
6887
{isApiError(error) && !hasApiFieldErrors(error) && (
@@ -93,6 +112,16 @@ export const CreateUserForm: FC<
93112
label={Language.passwordLabel}
94113
type="password"
95114
/>
115+
<Select
116+
// {...getFieldHelpers("userLoginType", "ss")}
117+
labelId="user-login-type"
118+
id="login_type"
119+
value={form.values.login_type}
120+
label="Login Type"
121+
onChange={form.handleChange}
122+
>
123+
{methods}
124+
</Select>
96125
</Stack>
97126
<FormFooter onCancel={onCancel} isLoading={isLoading} />
98127
</form>

site/src/pages/UsersPage/CreateUserPage/CreateUserPage.tsx

+10
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import * as TypesGen from "../../../api/typesGenerated"
88
import { CreateUserForm } from "../../../components/CreateUserForm/CreateUserForm"
99
import { Margins } from "../../../components/Margins/Margins"
1010
import { pageTitle } from "../../../utils/page"
11+
import { getAuthMethods } from "api/api"
12+
import { useQuery } from "@tanstack/react-query"
1113

1214
export const Language = {
1315
unknownError: "Oops, an unknown error occurred.",
@@ -25,6 +27,13 @@ export const CreateUserPage: FC = () => {
2527
})
2628
const { error } = createUserState.context
2729

30+
// TODO: We should probably place this somewhere else to reduce the number of calls.
31+
// This would be called each time this page is loaded.
32+
const { data: authMethods } = useQuery({
33+
queryKey: ["authMethods"],
34+
queryFn: getAuthMethods,
35+
})
36+
2837
return (
2938
<Margins>
3039
<Helmet>
@@ -33,6 +42,7 @@ export const CreateUserPage: FC = () => {
3342

3443
<CreateUserForm
3544
error={error}
45+
authMethods={authMethods}
3646
onSubmit={(user: TypesGen.CreateUserRequest) =>
3747
createUserSend({ type: "CREATE", user })
3848
}

0 commit comments

Comments
 (0)