Files
react-test/docs/data/joy/components/snackbar/SnackbarCloseReason.tsx
how2ice 005cf56baf
Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
init project
2025-12-12 14:26:25 +09:00

83 lines
2.3 KiB
TypeScript

import * as React from 'react';
import Button from '@mui/joy/Button';
import List from '@mui/joy/List';
import ListItem from '@mui/joy/ListItem';
import Typography from '@mui/joy/Typography';
import Stack from '@mui/joy/Stack';
import Snackbar, {
SnackbarCloseReason as SnackbarCloseReasonType,
} from '@mui/joy/Snackbar';
import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
import CheckBoxIcon from '@mui/icons-material/CheckBox';
export default function SnackbarCloseReason() {
const [open, setOpen] = React.useState(false);
const [reasons, setReasons] = React.useState<SnackbarCloseReasonType[]>([]);
React.useEffect(() => {
if (
(['timeout', 'clickaway', 'escapeKeyDown'] as const).every((item) =>
reasons.includes(item),
)
) {
setOpen(false);
}
}, [reasons]);
return (
<div>
<Button
variant="outlined"
color="neutral"
onClick={() => {
setOpen(true);
}}
>
Show snackbar
</Button>
<Snackbar
autoHideDuration={3000}
open={open}
onClose={(event, reason) => {
// @ts-ignore
setReasons((prev) => [...new Set([...prev, reason])]);
}}
onUnmount={() => {
setReasons([]);
}}
sx={{ minWidth: 360 }}
>
<Stack spacing={0.5}>
<Typography level="title-md">
To close this snackbar, you have to:
</Typography>
<List size="sm">
<ListItem>
{reasons.includes('timeout') ? (
<CheckBoxIcon color="success" />
) : (
<CheckBoxOutlineBlankIcon />
)}{' '}
Wait for 3 seconds.
</ListItem>
<ListItem>
{reasons.includes('clickaway') ? (
<CheckBoxIcon color="success" />
) : (
<CheckBoxOutlineBlankIcon />
)}{' '}
Click outside of the snackbar.
</ListItem>
<ListItem>
{reasons.includes('escapeKeyDown') ? (
<CheckBoxIcon color="success" />
) : (
<CheckBoxOutlineBlankIcon />
)}{' '}
Press ESC key.
</ListItem>
</List>
</Stack>
</Snackbar>
</div>
);
}