diff --git a/frontend/src/components/footer.tsx b/frontend/src/components/footer.tsx index ad0a30c..6055d1d 100644 --- a/frontend/src/components/footer.tsx +++ b/frontend/src/components/footer.tsx @@ -3,6 +3,7 @@ import React, { } from 'react'; import { + AlertColor, Alert, AppBar, Button, @@ -25,7 +26,7 @@ enum UserFormType { interface UserFormProps { formType: UserFormType | null; - close: (message?: string) => void; + close: (message?: string, severity?: AlertColor) => void; username?: string; } @@ -76,7 +77,7 @@ function UserForm({ username: propUsername, formType, close }: UserFormProps) { .then((res) => { switch (res.status) { case 200: - close(`Action '${formType}' successful!`); + close(`Action '${formType}' successful!`, 'success'); break; default: setError(true); @@ -89,22 +90,35 @@ function UserForm({ username: propUsername, formType, close }: UserFormProps) { ); return ( - <> +
{ e.preventDefault(); submitHandler(false); }}> {formType} - { setUsername(event.target.value); }} /> + { setUsername(event.target.value); }} + />
- { setPassword(event.target.value); }} /> + { setPassword(event.target.value); }} + /> {errorOccurred && Check your inputs!}
- - + + {formType === UserFormType.Update // TODO: add another confirm dialog here && ( )} - +
); } @@ -127,7 +141,10 @@ function Footer() { const [username, setUsername] = useState(); const [tempUser, setTempUser] = useState(); const [dialogTypeOpen, setDialogTypeOpen] = useState(null); - const [snackbarMessage, setSnackbarMessage] = useState(); + const [snackbarInfo, setSnackbarInfo] = useState<{ + message: string, + severity: AlertColor, + } | undefined>(); const logout = useCallback(() => { fetch(`${process.env.NODE_ENV === 'development' ? '//localhost:8080' : ''}/users/logout`, { @@ -140,15 +157,15 @@ function Footer() { .then((res) => { switch (res.status) { case 200: - setSnackbarMessage('Logout successful!'); + setSnackbarInfo({ message: 'Logout successful!', severity: 'success' }); setUsername(undefined); break; default: - setSnackbarMessage('An error occurred while trying to log out.'); + setSnackbarInfo({ message: 'An error occurred while trying to log out.', severity: 'error' }); break; } }); - }, [setSnackbarMessage]); + }, [setSnackbarInfo]); useEffect(() => { // Intuition: If the dialog was just closed (or on first render). @@ -203,16 +220,20 @@ function Footer() { setDialogTypeOpen(null)}> { setDialogTypeOpen(null); setSnackbarMessage(message); }} + close={(message, severity) => { + setDialogTypeOpen(null); + setSnackbarInfo((!!message && !!severity) ? { message, severity } : undefined); + }} username={dialogTypeOpen === UserFormType.Update ? username : undefined} /> setSnackbarMessage(undefined)} - /> + open={!!snackbarInfo} + autoHideDuration={10000} + onClose={() => setSnackbarInfo(undefined)} + > + {snackbarInfo?.message} + ); }