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:
parent
b7fd34ee48
commit
da8e79147b
@ -3,6 +3,7 @@ import React, {
|
|||||||
} from 'react';
|
} from 'react';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
AlertColor,
|
||||||
Alert,
|
Alert,
|
||||||
AppBar,
|
AppBar,
|
||||||
Button,
|
Button,
|
||||||
@ -25,7 +26,7 @@ enum UserFormType {
|
|||||||
|
|
||||||
interface UserFormProps {
|
interface UserFormProps {
|
||||||
formType: UserFormType | null;
|
formType: UserFormType | null;
|
||||||
close: (message?: string) => void;
|
close: (message?: string, severity?: AlertColor) => void;
|
||||||
username?: string;
|
username?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ function UserForm({ username: propUsername, formType, close }: UserFormProps) {
|
|||||||
.then((res) => {
|
.then((res) => {
|
||||||
switch (res.status) {
|
switch (res.status) {
|
||||||
case 200:
|
case 200:
|
||||||
close(`Action '${formType}' successful!`);
|
close(`Action '${formType}' successful!`, 'success');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
setError(true);
|
setError(true);
|
||||||
@ -89,22 +90,35 @@ function UserForm({ username: propUsername, formType, close }: UserFormProps) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<form onSubmit={(e) => { e.preventDefault(); submitHandler(false); }}>
|
||||||
<DialogTitle>{formType}</DialogTitle>
|
<DialogTitle>{formType}</DialogTitle>
|
||||||
<DialogContent>
|
<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 />
|
<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
|
{errorOccurred
|
||||||
&& <Alert severity="error">Check your inputs!</Alert>}
|
&& <Alert severity="error">Check your inputs!</Alert>}
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button onClick={() => close()}>Cancel</Button>
|
<Button type="button" onClick={() => close()}>Cancel</Button>
|
||||||
<Button onClick={() => submitHandler(false)}>{formType}</Button>
|
<Button type="submit">{formType}</Button>
|
||||||
{formType === UserFormType.Update
|
{formType === UserFormType.Update
|
||||||
// TODO: add another confirm dialog here
|
// TODO: add another confirm dialog here
|
||||||
&& (
|
&& (
|
||||||
<Button
|
<Button
|
||||||
|
type="button"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
// eslint-disable-next-line no-alert
|
// eslint-disable-next-line no-alert
|
||||||
@ -117,7 +131,7 @@ function UserForm({ username: propUsername, formType, close }: UserFormProps) {
|
|||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
</>
|
</form>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +141,10 @@ function Footer() {
|
|||||||
const [username, setUsername] = useState<string>();
|
const [username, setUsername] = useState<string>();
|
||||||
const [tempUser, setTempUser] = useState<boolean>();
|
const [tempUser, setTempUser] = useState<boolean>();
|
||||||
const [dialogTypeOpen, setDialogTypeOpen] = useState<UserFormType | null>(null);
|
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(() => {
|
const logout = useCallback(() => {
|
||||||
fetch(`${process.env.NODE_ENV === 'development' ? '//localhost:8080' : ''}/users/logout`, {
|
fetch(`${process.env.NODE_ENV === 'development' ? '//localhost:8080' : ''}/users/logout`, {
|
||||||
@ -140,15 +157,15 @@ function Footer() {
|
|||||||
.then((res) => {
|
.then((res) => {
|
||||||
switch (res.status) {
|
switch (res.status) {
|
||||||
case 200:
|
case 200:
|
||||||
setSnackbarMessage('Logout successful!');
|
setSnackbarInfo({ message: 'Logout successful!', severity: 'success' });
|
||||||
setUsername(undefined);
|
setUsername(undefined);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
setSnackbarMessage('An error occurred while trying to log out.');
|
setSnackbarInfo({ message: 'An error occurred while trying to log out.', severity: 'error' });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, [setSnackbarMessage]);
|
}, [setSnackbarInfo]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Intuition: If the dialog was just closed (or on first render).
|
// Intuition: If the dialog was just closed (or on first render).
|
||||||
@ -203,16 +220,20 @@ function Footer() {
|
|||||||
<Dialog open={!!dialogTypeOpen} onClose={() => setDialogTypeOpen(null)}>
|
<Dialog open={!!dialogTypeOpen} onClose={() => setDialogTypeOpen(null)}>
|
||||||
<UserForm
|
<UserForm
|
||||||
formType={dialogTypeOpen}
|
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}
|
username={dialogTypeOpen === UserFormType.Update ? username : undefined}
|
||||||
/>
|
/>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
<Snackbar
|
<Snackbar
|
||||||
open={!!snackbarMessage}
|
open={!!snackbarInfo}
|
||||||
autoHideDuration={5000}
|
autoHideDuration={10000}
|
||||||
message={snackbarMessage}
|
onClose={() => setSnackbarInfo(undefined)}
|
||||||
onClose={() => setSnackbarMessage(undefined)}
|
>
|
||||||
/>
|
<Alert severity={snackbarInfo?.severity}>{snackbarInfo?.message}</Alert>
|
||||||
|
</Snackbar>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user