Files
YG-Datasets/easy-dataset-main/hooks/useSnackbar.js

74 lines
1.5 KiB
JavaScript
Raw Normal View History

2026-03-17 14:36:31 +08:00
'use client';
import { useState, useCallback } from 'react';
import { Snackbar, Alert } from '@mui/material';
export const useSnackbar = () => {
const [open, setOpen] = useState(false);
const [message, setMessage] = useState('');
const [severity, setSeverity] = useState('info');
const showMessage = useCallback((newMessage, newSeverity = 'info') => {
setMessage(newMessage);
setSeverity(newSeverity);
setOpen(true);
}, []);
const showSuccess = useCallback(
message => {
showMessage(message, 'success');
},
[showMessage]
);
const showError = useCallback(
message => {
showMessage(message, 'error');
},
[showMessage]
);
const showInfo = useCallback(
message => {
showMessage(message, 'info');
},
[showMessage]
);
const showWarning = useCallback(
message => {
showMessage(message, 'warning');
},
[showMessage]
);
const handleClose = useCallback(() => {
setOpen(false);
}, []);
const SnackbarComponent = useCallback(
() => (
<Snackbar
open={open}
autoHideDuration={2000}
onClose={handleClose}
anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
>
<Alert onClose={handleClose} severity={severity}>
{message}
</Alert>
</Snackbar>
),
[open, message, severity, handleClose]
);
return {
showMessage,
showSuccess,
showError,
showInfo,
showWarning,
SnackbarComponent
};
};