@@ -19,13 +19,13 @@ function JoinProjectForm({
19
19
projectSecret,
20
20
onSecretChange,
21
21
invalidText,
22
- validatingSecret ,
23
- onValidate ,
22
+ pendingJoiningProject ,
23
+ onClickDone ,
24
24
} ) {
25
25
const validateButtonContent = (
26
26
< ButtonWithPendingState
27
- pending = { validatingSecret }
28
- pendingText = "Searching ..."
27
+ pending = { pendingJoiningProject }
28
+ pendingText = "joining ..."
29
29
actionText = "Join Project"
30
30
/>
31
31
)
@@ -51,7 +51,13 @@ function JoinProjectForm({
51
51
/>
52
52
</ ProjectModalContent >
53
53
</ ProjectModalContentSpacer >
54
- < ProjectModalButton text = { validateButtonContent } onClick = { onValidate } />
54
+ < ProjectModalButton
55
+ text = { validateButtonContent }
56
+ onClick = { onClickDone }
57
+ // show the button as disabled if there is a text about invalid secret input
58
+ // or if there is no input
59
+ disabled = { invalidText !== '' || projectSecret === '' }
60
+ />
55
61
</ div >
56
62
)
57
63
}
@@ -74,7 +80,11 @@ function ProjectJoinFollowUp({ onDone, checkDone }) {
74
80
required before you can access it.
75
81
</ div >
76
82
</ ProjectModalContent >
77
- < ProjectModalButton text = "I understand" onClick = { onDone } />
83
+ < ProjectModalButton
84
+ text = "I understand"
85
+ onClick = { onDone }
86
+ disabled = { false }
87
+ />
78
88
</ div >
79
89
)
80
90
}
@@ -87,26 +97,22 @@ export default function JoinProjectModal({
87
97
} ) {
88
98
const reset = ( ) => {
89
99
setProjectSecret ( '' )
90
- setValidatingSecret ( false )
100
+ setPendingJoiningProject ( false )
91
101
setInvalidText ( '' )
92
102
setCheckDone ( false )
93
103
}
94
- const onValidate = async ( ) => {
95
- // check if the sectrest is five words or not
96
- if ( invalidText || projectSecret . length === 0 ) {
97
- setInvalidText ( 'Secret must be 5 words.' )
98
- return
99
- }
100
- // Check if the secret is already joined
101
- if ( joinedProjectsSecrets . includes ( projectSecret ) ) {
102
- setInvalidText ( "You've already joined this project!" )
103
- return
104
- }
105
- setValidatingSecret ( true )
104
+
105
+ const [ checkDone , setCheckDone ] = useState ( false )
106
+ const [ projectSecret , setProjectSecret ] = useState ( '' )
107
+ const [ invalidText , setInvalidText ] = useState ( '' )
108
+ const [ pendingJoiningProject , setPendingJoiningProject ] = useState ( false )
109
+
110
+ const onClickDone = async ( ) => {
111
+ setPendingJoiningProject ( true )
106
112
try {
107
113
await onJoinProject ( projectSecret )
108
114
setCheckDone ( true )
109
- setValidatingSecret ( false )
115
+ setPendingJoiningProject ( false )
110
116
} catch ( e ) {
111
117
console . log ( e )
112
118
// TODO: add better detail here
@@ -118,21 +124,17 @@ export default function JoinProjectModal({
118
124
onClose ( )
119
125
}
120
126
121
- const [ checkDone , setCheckDone ] = useState ( false )
122
- const [ projectSecret , setProjectSecret ] = useState ( '' )
123
- const [ invalidText , setInvalidText ] = useState ( '' )
124
-
125
- const [ validatingSecret , setValidatingSecret ] = useState ( false )
126
-
127
- const onSecretChange = ( val ) => {
127
+ const onSecretChange = ( userInputText : string ) => {
128
128
setInvalidText ( '' )
129
- setValidatingSecret ( false )
130
- setProjectSecret ( val )
131
- if ( ! val ) {
129
+ setPendingJoiningProject ( false )
130
+ setProjectSecret ( userInputText )
131
+ if ( ! userInputText ) {
132
132
setInvalidText ( '' )
133
+ } else if ( joinedProjectsSecrets . includes ( userInputText ) ) {
134
+ setInvalidText ( "You've already joined this project!" )
133
135
} else if (
134
- val . split ( ' ' ) . length !== 5 ||
135
- ! val . split ( ' ' ) . every ( ( word ) => word . length )
136
+ userInputText . split ( ' ' ) . length !== 5 ||
137
+ ! userInputText . split ( ' ' ) . every ( ( word ) => word . length )
136
138
) {
137
139
setInvalidText ( 'Secret must be 5 words.' )
138
140
}
@@ -151,8 +153,8 @@ export default function JoinProjectModal({
151
153
projectSecret = { projectSecret }
152
154
onSecretChange = { onSecretChange }
153
155
invalidText = { invalidText }
154
- validatingSecret = { validatingSecret }
155
- onValidate = { onValidate }
156
+ pendingJoiningProject = { pendingJoiningProject }
157
+ onClickDone = { onClickDone }
156
158
/>
157
159
</ Modal >
158
160
)
0 commit comments