-
-
Notifications
You must be signed in to change notification settings - Fork 658
/
AutoCreateForm.tsx
126 lines (120 loc) · 4.21 KB
/
AutoCreateForm.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import { type ChangeEvent, Fragment } from 'react';
import {
FormControl,
FormControlLabel,
Grid,
Switch,
TextField,
} from '@mui/material';
import { RoleSelect } from 'component/common/RoleSelect/RoleSelect';
import { useRoles } from 'hooks/api/getters/useRoles/useRoles';
import type { IRole } from 'interfaces/role';
interface IAutoCreateFormProps {
data?: {
enabled: boolean;
autoCreate: boolean;
defaultRootRole?: string;
defaultRootRoleId?: number;
emailDomains?: string;
};
setValue: (
name: string,
value: string | boolean | number | undefined,
) => void;
onUpdateRole: (role: IRole | null) => void;
}
export const AutoCreateForm = ({
data = { enabled: false, autoCreate: false },
setValue,
onUpdateRole,
}: IAutoCreateFormProps) => {
const { roles } = useRoles();
const updateAutoCreate = () => {
setValue('autoCreate', !data.autoCreate);
};
const updateField = (e: ChangeEvent<HTMLInputElement>) => {
setValue(e.target.name, e.target.value);
};
const resolveRole = ({
defaultRootRole,
defaultRootRoleId,
}: {
defaultRootRole?: string;
defaultRootRoleId?: number;
}): IRole | null => {
if (defaultRootRoleId) {
return roles.find(({ id }) => id === defaultRootRoleId) || null;
}
return roles.find(({ name }) => name === defaultRootRole) || null;
};
return (
<Fragment>
<Grid container spacing={3} mb={2}>
<Grid item md={5}>
<strong>Auto-create users</strong>
<p>
Enable automatic creation of new users when signing in.
</p>
</Grid>
<Grid item md={6} style={{ padding: '20px' }}>
<FormControlLabel
control={
<Switch
onChange={updateAutoCreate}
name='enabled'
checked={data.autoCreate}
disabled={!data.enabled}
/>
}
label='Auto-create users'
/>
</Grid>
</Grid>
<Grid container spacing={3} mb={2}>
<Grid item md={5}>
<strong>Default Root Role</strong>
<p>
Choose which root role the user should get when no
explicit role mapping exists.
</p>
</Grid>
<Grid item md={6}>
<FormControl style={{ width: '400px' }}>
<RoleSelect
roles={roles}
value={resolveRole(data)}
setValue={onUpdateRole}
disabled={!data.autoCreate || !data.enabled}
required
hideDescription
/>
</FormControl>
</Grid>
</Grid>
<Grid container spacing={3} mb={2}>
<Grid item md={5}>
<strong>Email domains</strong>
<p>
Comma separated list of email domains that should be
allowed to sign in.
</p>
</Grid>
<Grid item md={6}>
<TextField
onChange={updateField}
label='Email domains'
name='emailDomains'
disabled={!data.autoCreate || !data.enabled}
required={Boolean(data.autoCreate)}
value={data.emailDomains || ''}
placeholder='@company.com, @anotherCompany.com'
style={{ width: '400px' }}
rows={2}
variant='outlined'
size='small'
/>
</Grid>
</Grid>
</Fragment>
);
};