diff --git a/client/src/components/ProjectForm.js b/client/src/components/ProjectForm.js index 9ff63055..d0c4efc0 100644 --- a/client/src/components/ProjectForm.js +++ b/client/src/components/ProjectForm.js @@ -3,6 +3,7 @@ import { useHistory } from 'react-router-dom'; import { useForm, useFormState } from 'react-hook-form'; import { Redirect } from 'react-router-dom'; import { + CircularProgress, Typography, Box, Button, @@ -69,10 +70,11 @@ export default function ProjectForm({ const history = useHistory(); // ----------------- States ----------------- + const { auth } = useAuth(); + const [isLoading, setIsLoading] = useState(false); const [locationType, setLocationType] = useState('remote'); // State to track the toggling from Project view to Edit Project View via edit icon. const [editMode, setEditMode] = useState(false); - const { auth } = useAuth(); const [isModalOpen, setIsModalOpen] = useState(false); const handleOpen = () => setIsModalOpen(true); const handleClose = () => setIsModalOpen(false); @@ -111,25 +113,31 @@ export default function ProjectForm({ // Handles POST request found in api/ProjectApiService. const submitNewProject = async (data) => { const projectApi = new ProjectApiService(); + try { + setIsLoading(true); const id = await projectApi.create(data); history.push(`/projects/${id}`); } catch (errors) { console.error(errors); - return; } + return () => setIsLoading(false); }; // Fires PUT request to update the project, const submitEditProject = async (data) => { const projectApi = new ProjectApiService(); try { + setIsLoading(true); await projectApi.updateProject(projectToEdit._id, data); } catch (errors) { console.error(errors); + setIsLoading(false); return; } // setOriginalProjectData(data); + + setIsLoading(false); setFormData(data); setEditMode(false); }; @@ -273,9 +281,9 @@ export default function ProjectForm({ !isEdit ? 'secondary' : !editMode ? 'contained' : 'secondary' } cursor="pointer" - disabled={isEdit ? !editMode : false} + disabled={isEdit && !isLoading ? !editMode : false} > - Save + {isLoading ? : 'Save'} diff --git a/client/src/pages/ManageProjects.js b/client/src/pages/ManageProjects.js index add89f59..ba15399f 100644 --- a/client/src/pages/ManageProjects.js +++ b/client/src/pages/ManageProjects.js @@ -31,7 +31,7 @@ const ManageProjects = () => { const user = auth?.user; - const fetchProjects = useCallback(async () => { + const fetchProjects = useCallback(async () => { setProjectsLoading(true); const projectRes = await projectApiService.fetchProjects(); setProjects(projectRes); @@ -43,7 +43,7 @@ const ManageProjects = () => { const eventsRes = await EventsApiService.fetchEvents(); setRegularEvents(eventsRes); setEventsLoading(false); - }, [recurringEventsApiService]); + }, [EventsApiService]); const fetchRecurringEvents = useCallback(async () => { setEventsLoading(true); @@ -94,13 +94,10 @@ const ManageProjects = () => { const updateRegularEvent = useCallback( async (eventToUpdate, eventId) => { - await EventsApiService.updateEvent( - eventToUpdate, - eventId - ); + await EventsApiService.updateEvent(eventToUpdate, eventId); fetchRegularEvents(); }, - [recurringEventsApiService, fetchRegularEvents] + [fetchRegularEvents, EventsApiService] ); useEffect(() => {