1
0
mirror of https://github.com/ellmau/adf-obdd.git synced 2025-12-20 09:39:38 +01:00

Show colored snackbars

This commit is contained in:
monsterkrampe 2023-04-03 18:48:16 +02:00
parent b7fd34ee48
commit da8e79147b
No known key found for this signature in database
GPG Key ID: B8ADC1F5A5CE5057

View File

@ -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 (
<>
<form onSubmit={(e) => { e.preventDefault(); submitHandler(false); }}>
<DialogTitle>{formType}</DialogTitle>
<DialogContent>
<TextField variant="standard" type="text" label="Username" value={username} onChange={(event) => { setUsername(event.target.value); }} />
<TextField
variant="standard"
type="text"
label="Username"
value={username}
onChange={(event) => { setUsername(event.target.value); }}
/>
<br />
<TextField variant="standard" type="password" label="Password" value={password} onChange={(event) => { setPassword(event.target.value); }} />
<TextField
variant="standard"
type="password"
label="Password"
value={password}
onChange={(event) => { setPassword(event.target.value); }}
/>
{errorOccurred
&& <Alert severity="error">Check your inputs!</Alert>}
</DialogContent>
<DialogActions>
<Button onClick={() => close()}>Cancel</Button>
<Button onClick={() => submitHandler(false)}>{formType}</Button>
<Button type="button" onClick={() => close()}>Cancel</Button>
<Button type="submit">{formType}</Button>
{formType === UserFormType.Update
// TODO: add another confirm dialog here
&& (
<Button
type="button"
variant="outlined"
onClick={() => {
// eslint-disable-next-line no-alert
@ -117,7 +131,7 @@ function UserForm({ username: propUsername, formType, close }: UserFormProps) {
</Button>
)}
</DialogActions>
</>
</form>
);
}
@ -127,7 +141,10 @@ function Footer() {
const [username, setUsername] = useState<string>();
const [tempUser, setTempUser] = useState<boolean>();
const [dialogTypeOpen, setDialogTypeOpen] = useState<UserFormType | null>(null);
const [snackbarMessage, setSnackbarMessage] = useState<string | undefined>();
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() {
<Dialog open={!!dialogTypeOpen} onClose={() => setDialogTypeOpen(null)}>
<UserForm
formType={dialogTypeOpen}
close={(message) => { setDialogTypeOpen(null); setSnackbarMessage(message); }}
close={(message, severity) => {
setDialogTypeOpen(null);
setSnackbarInfo((!!message && !!severity) ? { message, severity } : undefined);
}}
username={dialogTypeOpen === UserFormType.Update ? username : undefined}
/>
</Dialog>
<Snackbar
open={!!snackbarMessage}
autoHideDuration={5000}
message={snackbarMessage}
onClose={() => setSnackbarMessage(undefined)}
/>
open={!!snackbarInfo}
autoHideDuration={10000}
onClose={() => setSnackbarInfo(undefined)}
>
<Alert severity={snackbarInfo?.severity}>{snackbarInfo?.message}</Alert>
</Snackbar>
</>
);
}