@@ -3,6 +3,8 @@ import type { AdminViewProps, Field } from 'payload'
3
3
import { buildStateFromSchema } from '@payloadcms/ui/forms/buildStateFromSchema'
4
4
import React from 'react'
5
5
6
+ import type { LoginFieldProps } from '../Login/LoginField/index.js'
7
+
6
8
import { CreateFirstUserClient } from './index.client.js'
7
9
import './index.scss'
8
10
@@ -16,17 +18,39 @@ export const CreateFirstUserView: React.FC<AdminViewProps> = async ({ initPageRe
16
18
config : {
17
19
admin : { user : userSlug } ,
18
20
} ,
21
+ config,
19
22
} ,
20
23
} ,
21
24
} = initPageResult
22
25
23
- const fields : Field [ ] = [
24
- {
25
- name : 'email' ,
26
- type : 'email' ,
27
- label : req . t ( 'general:emailAddress' ) ,
28
- required : true ,
29
- } ,
26
+ const collectionConfig = config . collections ?. find ( ( collection ) => collection ?. slug === userSlug )
27
+ const { auth : authOptions } = collectionConfig
28
+ const loginWithUsername = authOptions . loginWithUsername
29
+ const loginWithEmail = ! loginWithUsername || loginWithUsername . allowEmailLogin
30
+ const emailRequired = loginWithUsername && loginWithUsername . requireEmail
31
+
32
+ let loginType : LoginFieldProps [ 'type' ] = loginWithUsername ? 'username' : 'email'
33
+ if ( loginWithUsername && ( loginWithUsername . allowEmailLogin || loginWithUsername . requireEmail ) ) {
34
+ loginType = 'emailOrUsername'
35
+ }
36
+
37
+ const emailField = {
38
+ name : 'email' ,
39
+ type : 'email' ,
40
+ label : req . t ( 'general:emailAddress' ) ,
41
+ required : emailRequired ? true : false ,
42
+ }
43
+
44
+ const usernameField = {
45
+ name : 'username' ,
46
+ type : 'text' ,
47
+ label : req . t ( 'authentication:username' ) ,
48
+ required : true ,
49
+ }
50
+
51
+ const fields = [
52
+ ...( loginWithUsername ? [ usernameField ] : [ ] ) ,
53
+ ...( emailRequired || loginWithEmail ? [ emailField ] : [ ] ) ,
30
54
{
31
55
name : 'password' ,
32
56
type : 'text' ,
@@ -42,7 +66,7 @@ export const CreateFirstUserView: React.FC<AdminViewProps> = async ({ initPageRe
42
66
]
43
67
44
68
const formState = await buildStateFromSchema ( {
45
- fieldSchema : fields ,
69
+ fieldSchema : fields as Field [ ] ,
46
70
operation : 'create' ,
47
71
preferences : { fields : { } } ,
48
72
req,
@@ -52,7 +76,12 @@ export const CreateFirstUserView: React.FC<AdminViewProps> = async ({ initPageRe
52
76
< div className = "create-first-user" >
53
77
< h1 > { req . t ( 'general:welcome' ) } </ h1 >
54
78
< p > { req . t ( 'authentication:beginCreateFirstUser' ) } </ p >
55
- < CreateFirstUserClient initialState = { formState } userSlug = { userSlug } />
79
+ < CreateFirstUserClient
80
+ initialState = { formState }
81
+ loginType = { loginType }
82
+ requireEmail = { emailRequired }
83
+ userSlug = { userSlug }
84
+ />
56
85
</ div >
57
86
)
58
87
}
0 commit comments