diff --git a/src/actions/userManagement.js b/src/actions/userManagement.js index c5f008167b..b1fc01ad65 100644 --- a/src/actions/userManagement.js +++ b/src/actions/userManagement.js @@ -365,15 +365,15 @@ export const updateUserFinalDayStatusIsSet = (user, status, finalDayDate, isSet) * fetching all user profiles basic info * Added `source` parameter to identify the calling component. */ -export const getUserProfileBasicInfo = ({ userId, source }) => { +export const getUserProfileBasicInfo = ({ userId, source } = {}) => { // API request to fetch basic user profile information let userProfileBasicInfoPromise; if (userId) - userProfileBasicInfoPromise = axios.get(`${ENDPOINTS.USER_PROFILE_BASIC_INFO}?userId=${userId}`); + userProfileBasicInfoPromise = axios.get(ENDPOINTS.USER_PROFILE(userId)); else if (source) userProfileBasicInfoPromise = axios.get(ENDPOINTS.USER_PROFILE_BASIC_INFO(source)); else - userProfileBasicInfoPromise = axios.get(ENDPOINTS.USER_PROFILE_BASIC_INFO); + userProfileBasicInfoPromise = axios.get(ENDPOINTS.USER_PROFILES); return async dispatch => { // Dispatch action indicating the start of the fetch process diff --git a/src/components/BMDashboard/Team/CreateNewTeam/CreateNewTeam.jsx b/src/components/BMDashboard/Team/CreateNewTeam/CreateNewTeam.jsx index f36dfaea41..46256652d7 100644 --- a/src/components/BMDashboard/Team/CreateNewTeam/CreateNewTeam.jsx +++ b/src/components/BMDashboard/Team/CreateNewTeam/CreateNewTeam.jsx @@ -5,6 +5,7 @@ import Joi from 'joi'; import { boxStyle } from '../../../../styles'; import styles from './CreateNewTeam.module.css'; import { getUserProfileBasicInfo } from '../../../../actions/userManagement'; +import { toast } from 'react-toastify'; const initialFormState = { teamName: '', @@ -23,8 +24,8 @@ export default function CreateNewTeam() { const [selectedMember, setSelectedMember] = useState(''); const [selectedTask, setSelectedTask] = useState(''); const [members, setMembers] = useState([]); - // const [tasks, setTasks] = useState([]); - const [tasks] = useState([]); + const [tasks, setTasks] = useState([]); + //const [tasks] = useState([]); const [assignedMembers, setAssignedMembers] = useState([]); const [assignedTasks, setAssignedTasks] = useState([]); const [errorMessage, setErrorMessage] = useState(''); @@ -36,13 +37,26 @@ export default function CreateNewTeam() { additionalInformation: false, }); + const user = useSelector(state => state.auth.user); + + const dummyTasks = ['Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5']; + + const [loadingMembers, setLoadingMembers] = useState(false); useEffect(() => { - dispatch(getUserProfileBasicInfo()); + setLoadingMembers(true); + const result = dispatch(getUserProfileBasicInfo()); + // If the action returns a promise (thunk), handle it + if (result && typeof result.then === 'function') { + result.finally(() => setLoadingMembers(false)); + } else { + setLoadingMembers(false); + } + tasks.length === 0 && setTasks(dummyTasks); }, [dispatch]); useEffect(() => { - setMembers(userProfilesBasicInfo); - }, []); + setMembers(userProfilesBasicInfo || []); + }, [userProfilesBasicInfo]); const validationObj = { additionalInformation: Joi.string() @@ -63,7 +77,7 @@ export default function CreateNewTeam() { errorMessages[detail.path[0]] = detail.message; }); } - if (assignedMembers.length === 0) { + if ((!data.teamMembers || data.teamMembers.length === 0) && assignedMembers.length === 0) { errorMessages.assignedMembers = 'You must assign at least one member.'; } else { // Clear the assignedMembers error if members have been added @@ -118,6 +132,8 @@ export default function CreateNewTeam() { // eslint-disable-next-line no-console console.log('Form Submitted:', updatedFormData); + toast.success('Team created successfully!'); + setSelectedMember(''); setAssignedMembers([]); setSelectedTask(''); @@ -138,6 +154,7 @@ export default function CreateNewTeam() { setAssignedTasks([]); setFormData(initialFormState); setErrors({}); + setErrorMessage(''); setTouchedFields({ teamName: false, assignedMembers: false, @@ -202,6 +219,7 @@ export default function CreateNewTeam() { if (selectedTask && !assignedTasks.includes(selectedTask)) { setAssignedTasks([...assignedTasks, selectedTask]); setSelectedTask(''); + setTaskErrorMessage(''); } }; @@ -218,7 +236,7 @@ export default function CreateNewTeam() {
- + @@ -237,26 +255,36 @@ export default function CreateNewTeam() { )} - +
- - - {members.map((user, index) => ( - // eslint-disable-next-line react/no-array-index-key - - ))} - + {loadingMembers ? ( +
Loading members...
+ ) : ( + + {Array.isArray(members) && members.length > 0 ? ( + <> + + {members.map((user, index) => ( + // eslint-disable-next-line react/no-array-index-key + + ))} + + ) : ( + + )} + + )}
- {errorMessage && ( + {taskErrorMessage && ( @@ -331,7 +367,9 @@ export default function CreateNewTeam() {
{assignedTasks.length > 0 && ( - + )}
{assignedTasks.map((task, index) => { @@ -342,11 +380,9 @@ export default function CreateNewTeam() { handleRemoveMember(member)} - onKeyDown={e => - (e.key === 'Enter' || e.key === ' ') && handleRemoveMember(member) - } - aria-label={`Remove member ${member}`} + onClick={() => handleRemoveTask(task)} + onKeyDown={e => (e.key === 'Enter' || e.key === ' ') && handleRemoveTask(task)} + aria-label={`Remove task ${task}`} > X @@ -355,7 +391,7 @@ export default function CreateNewTeam() { })}
- +
- -
diff --git a/src/components/BMDashboard/Team/CreateNewTeam/CreateNewTeam.module.css b/src/components/BMDashboard/Team/CreateNewTeam/CreateNewTeam.module.css index 061c5cb6de..3696a5f126 100644 --- a/src/components/BMDashboard/Team/CreateNewTeam/CreateNewTeam.module.css +++ b/src/components/BMDashboard/Team/CreateNewTeam/CreateNewTeam.module.css @@ -59,16 +59,17 @@ border-color: #e53935; } - .teamFormError { + .addTeamForm .teamFormError { font-weight: 500; font-size: 11px !important; - color: red; + color: red !important; display: flex; justify-content: flex-start; + padding-left: 0; } - .fieldRequired{ - color: red; + .addTeamForm .fieldRequired{ + color: red !important; } .addTeamContainer{