webapp/src/components/Nav/Snackbar.tsx

40 lines
1.1 KiB
TypeScript
Raw Normal View History

import { clsx } from 'clsx'
2023-02-09 22:39:52 +00:00
import { Show } from 'solid-js'
import { Transition } from 'solid-transition-group'
import { useSnackbar } from '../../context/snackbar'
2023-10-24 21:44:10 +00:00
import { Icon } from '../_shared/Icon'
import { ShowOnlyOnClient } from '../_shared/ShowOnlyOnClient'
2023-02-09 22:39:52 +00:00
import styles from './Snackbar.module.scss'
2023-02-09 22:39:52 +00:00
export const Snackbar = () => {
const { snackbarMessage } = useSnackbar()
return (
<div
class={clsx(styles.snackbar, {
2023-10-24 21:44:10 +00:00
[styles.error]: snackbarMessage()?.type === 'error',
2024-02-07 23:12:10 +00:00
[styles.success]: snackbarMessage()?.type === 'success'
2023-02-09 22:39:52 +00:00
})}
>
<ShowOnlyOnClient>
<Transition
enterClass={styles.enter}
exitToClass={styles.exitTo}
2024-02-05 15:49:08 +00:00
onExit={(_el, done) => setTimeout(() => done(), 300)}
>
<Show when={snackbarMessage()}>
<div class={styles.content}>
<Show when={snackbarMessage()?.type === 'success'}>
<Icon name="check-success" class={styles.icon} />
</Show>
{snackbarMessage().body}
</div>
</Show>
</Transition>
</ShowOnlyOnClient>
2023-02-09 22:39:52 +00:00
</div>
)
}