@@ -5,6 +5,7 @@ import Joi from 'joi';
55import { boxStyle } from '../../../../styles' ;
66import styles from './CreateNewTeam.module.css' ;
77import { getUserProfileBasicInfo } from '../../../../actions/userManagement' ;
8+ import { toast } from 'react-toastify' ;
89
910const initialFormState = {
1011 teamName : '' ,
@@ -23,8 +24,8 @@ export default function CreateNewTeam() {
2324 const [ selectedMember , setSelectedMember ] = useState ( '' ) ;
2425 const [ selectedTask , setSelectedTask ] = useState ( '' ) ;
2526 const [ members , setMembers ] = useState ( [ ] ) ;
26- // const [tasks, setTasks] = useState([]);
27- const [ tasks ] = useState ( [ ] ) ;
27+ const [ tasks , setTasks ] = useState ( [ ] ) ;
28+ // const [tasks] = useState([]);
2829 const [ assignedMembers , setAssignedMembers ] = useState ( [ ] ) ;
2930 const [ assignedTasks , setAssignedTasks ] = useState ( [ ] ) ;
3031 const [ errorMessage , setErrorMessage ] = useState ( '' ) ;
@@ -36,13 +37,26 @@ export default function CreateNewTeam() {
3637 additionalInformation : false ,
3738 } ) ;
3839
40+ const user = useSelector ( state => state . auth . user ) ;
41+
42+ const dummyTasks = [ 'Task 1' , 'Task 2' , 'Task 3' , 'Task 4' , 'Task 5' ] ;
43+
44+ const [ loadingMembers , setLoadingMembers ] = useState ( false ) ;
3945 useEffect ( ( ) => {
40- dispatch ( getUserProfileBasicInfo ( ) ) ;
46+ setLoadingMembers ( true ) ;
47+ const result = dispatch ( getUserProfileBasicInfo ( ) ) ;
48+ // If the action returns a promise (thunk), handle it
49+ if ( result && typeof result . then === 'function' ) {
50+ result . finally ( ( ) => setLoadingMembers ( false ) ) ;
51+ } else {
52+ setLoadingMembers ( false ) ;
53+ }
54+ tasks . length === 0 && setTasks ( dummyTasks ) ;
4155 } , [ dispatch ] ) ;
4256
4357 useEffect ( ( ) => {
44- setMembers ( userProfilesBasicInfo ) ;
45- } , [ ] ) ;
58+ setMembers ( userProfilesBasicInfo || [ ] ) ;
59+ } , [ userProfilesBasicInfo ] ) ;
4660
4761 const validationObj = {
4862 additionalInformation : Joi . string ( )
@@ -63,7 +77,7 @@ export default function CreateNewTeam() {
6377 errorMessages [ detail . path [ 0 ] ] = detail . message ;
6478 } ) ;
6579 }
66- if ( assignedMembers . length === 0 ) {
80+ if ( ( ! data . teamMembers || data . teamMembers . length === 0 ) && assignedMembers . length === 0 ) {
6781 errorMessages . assignedMembers = 'You must assign at least one member.' ;
6882 } else {
6983 // Clear the assignedMembers error if members have been added
@@ -118,6 +132,8 @@ export default function CreateNewTeam() {
118132 // eslint-disable-next-line no-console
119133 console . log ( 'Form Submitted:' , updatedFormData ) ;
120134
135+ toast . success ( 'Team created successfully!' ) ;
136+
121137 setSelectedMember ( '' ) ;
122138 setAssignedMembers ( [ ] ) ;
123139 setSelectedTask ( '' ) ;
@@ -138,6 +154,7 @@ export default function CreateNewTeam() {
138154 setAssignedTasks ( [ ] ) ;
139155 setFormData ( initialFormState ) ;
140156 setErrors ( { } ) ;
157+ setErrorMessage ( '' ) ;
141158 setTouchedFields ( {
142159 teamName : false ,
143160 assignedMembers : false ,
@@ -202,6 +219,7 @@ export default function CreateNewTeam() {
202219 if ( selectedTask && ! assignedTasks . includes ( selectedTask ) ) {
203220 setAssignedTasks ( [ ...assignedTasks , selectedTask ] ) ;
204221 setSelectedTask ( '' ) ;
222+ setTaskErrorMessage ( '' ) ;
205223 }
206224 } ;
207225
@@ -218,7 +236,7 @@ export default function CreateNewTeam() {
218236 </ header >
219237
220238 < Form className = { `${ styles . addTeamForm } container` } onSubmit = { handleSubmit } >
221- < FormGroup >
239+ < FormGroup style = { { marginTop : '1.5rem' , marginBottom : 0 } } >
222240 < Label for = "teamName" >
223241 Team Name< span className = { `${ styles . fieldRequired } ` } > *</ span >
224242 </ Label >
@@ -237,26 +255,36 @@ export default function CreateNewTeam() {
237255 </ Label >
238256 ) }
239257 </ FormGroup >
240- < FormGroup >
258+ < FormGroup style = { { marginTop : '1.5rem' , marginBottom : 0 } } >
241259 < Label for = "member-select" >
242260 Add Members< span className = { `${ styles . fieldRequired } ` } > *</ span >
243261 </ Label >
244262 < div className = { `${ styles . selectContainer } ` } >
245- < Input
246- id = "members-select"
247- type = "select"
248- value = { selectedMember }
249- onChange = { handleMemberChange }
250- className = { `${ styles . memberDropdown } ` }
251- >
252- < option value = "" > Select a Member</ option >
253- { members . map ( ( user , index ) => (
254- // eslint-disable-next-line react/no-array-index-key
255- < option key = { index } value = { user . id } >
256- { user . firstName } { user . lastName }
257- </ option >
258- ) ) }
259- </ Input >
263+ { loadingMembers ? (
264+ < div style = { { padding : '0.5rem' } } > Loading members...</ div >
265+ ) : (
266+ < Input
267+ id = "members-select"
268+ type = "select"
269+ value = { selectedMember }
270+ onChange = { handleMemberChange }
271+ className = { `${ styles . memberDropdown } ` }
272+ >
273+ { Array . isArray ( members ) && members . length > 0 ? (
274+ < >
275+ < option value = "" > Select a Member</ option >
276+ { members . map ( ( user , index ) => (
277+ // eslint-disable-next-line react/no-array-index-key
278+ < option key = { index } value = { user . id } >
279+ { user . firstName } { user . lastName }
280+ </ option >
281+ ) ) }
282+ </ >
283+ ) : (
284+ < option value = "" > No members available</ option >
285+ ) }
286+ </ Input >
287+ ) }
260288 < Button
261289 onClick = { handleAddMember }
262290 // disabled={!selectedMember || isMemberAssigned}
@@ -278,7 +306,9 @@ export default function CreateNewTeam() {
278306 </ FormGroup >
279307 < div >
280308 { assignedMembers . length > 0 && (
281- < p className = { styles . label } > Currently Assigned Members:</ p >
309+ < label htmlFor = "assigned-members" className = { styles . label } >
310+ Currently Assigned Members:
311+ </ label >
282312 ) }
283313 < div className = { `${ styles . badgeContainer } ` } >
284314 { assignedMembers . map ( ( member , index ) => {
@@ -302,17 +332,23 @@ export default function CreateNewTeam() {
302332 } ) }
303333 </ div >
304334 </ div >
305- < FormGroup >
335+ < FormGroup style = { { marginTop : '1.5rem' , marginBottom : 0 } } >
306336 < Label for = "task-select" > Add Main Tasks</ Label >
307337 < div className = { `${ styles . selectContainer } ` } >
308338 < Input id = "tasks-select" type = "select" value = { selectedTask } onChange = { handleTaskChange } >
309- < option value = "" > Select a Task</ option >
310- { tasks . map ( ( task , index ) => (
311- // eslint-disable-next-line react/no-array-index-key
312- < option key = { index } value = { task . id } >
313- { task }
314- </ option >
315- ) ) }
339+ { Array . isArray ( tasks ) && tasks . length > 0 ? (
340+ < >
341+ < option value = "" > Select a Task</ option >
342+ { tasks . map ( ( task , index ) => (
343+ // eslint-disable-next-line react/no-array-index-key
344+ < option key = { index } value = { task . id } >
345+ { task }
346+ </ option >
347+ ) ) }
348+ </ >
349+ ) : (
350+ < option value = "" > No tasks available</ option >
351+ ) }
316352 </ Input >
317353 < Button
318354 onClick = { handleAddTask }
@@ -322,7 +358,7 @@ export default function CreateNewTeam() {
322358 Add
323359 </ Button >
324360 </ div >
325- { errorMessage && (
361+ { taskErrorMessage && (
326362 < Label className = { `${ styles . teamFormError } ` } style = { { color : 'red' } } >
327363 { taskErrorMessage }
328364 </ Label >
@@ -331,7 +367,9 @@ export default function CreateNewTeam() {
331367
332368 < div >
333369 { assignedTasks . length > 0 && (
334- < label htmlFor = "assigned-tasks" > Currently Assigned Tasks:</ label >
370+ < label htmlFor = "assigned-tasks" className = { styles . label } >
371+ Currently Assigned Tasks:
372+ </ label >
335373 ) }
336374 < div className = { `${ styles . badgeContainer } ` } >
337375 { assignedTasks . map ( ( task , index ) => {
@@ -342,11 +380,9 @@ export default function CreateNewTeam() {
342380 < span
343381 role = "button"
344382 tabIndex = { 0 }
345- onClick = { ( ) => handleRemoveMember ( member ) }
346- onKeyDown = { e =>
347- ( e . key === 'Enter' || e . key === ' ' ) && handleRemoveMember ( member )
348- }
349- aria-label = { `Remove member ${ member } ` }
383+ onClick = { ( ) => handleRemoveTask ( task ) }
384+ onKeyDown = { e => ( e . key === 'Enter' || e . key === ' ' ) && handleRemoveTask ( task ) }
385+ aria-label = { `Remove task ${ task } ` }
350386 >
351387 X
352388 </ span >
@@ -355,7 +391,7 @@ export default function CreateNewTeam() {
355391 } ) }
356392 </ div >
357393 </ div >
358- < FormGroup >
394+ < FormGroup style = { { marginTop : '1.5rem' , marginBottom : 0 } } >
359395 < Label for = "additional-information-label" > Additional Information</ Label >
360396 < Input
361397 type = "textarea"
@@ -373,10 +409,10 @@ export default function CreateNewTeam() {
373409 ) }
374410 </ FormGroup >
375411 < div className = { `${ styles . addTeamButtons } ` } >
376- < Button id = "cancel-button" outline style = { boxStyle } onClick = { handleCancelClick } >
412+ < Button id = "cancel-button" style = { boxStyle } onClick = { handleCancelClick } >
377413 Cancel
378414 </ Button >
379- < Button id = "submit-button" style = { boxStyle } >
415+ < Button id = "submit-button" style = { boxStyle } onClick = { handleSubmit } >
380416 Submit
381417 </ Button >
382418 </ div >
0 commit comments