2023-11-14 15:10:00 +00:00
|
|
|
import { clsx } from 'clsx'
|
2023-02-09 22:39:52 +00:00
|
|
|
import { Show } from 'solid-js'
|
|
|
|
import { Transition } from 'solid-transition-group'
|
2023-11-14 15:10:00 +00:00
|
|
|
|
|
|
|
import { useSnackbar } from '../../context/snackbar'
|
2023-10-24 21:44:10 +00:00
|
|
|
import { Icon } from '../_shared/Icon'
|
2023-11-14 07:47:22 +00:00
|
|
|
import { ShowOnlyOnClient } from '../_shared/ShowOnlyOnClient'
|
2023-02-09 22:39:52 +00:00
|
|
|
|
2023-11-14 15:10:00 +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
|
|
|
})}
|
|
|
|
>
|
2023-11-14 07:47:22 +00:00
|
|
|
<ShowOnlyOnClient>
|
|
|
|
<Transition
|
|
|
|
enterClass={styles.enter}
|
|
|
|
exitToClass={styles.exitTo}
|
2024-02-05 15:49:08 +00:00
|
|
|
onExit={(_el, done) => setTimeout(() => done(), 300)}
|
2023-11-14 07:47:22 +00:00
|
|
|
>
|
|
|
|
<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>
|
|
|
|
)
|
|
|
|
}
|