import { useEffect, useState } from "react"; import { DEFAULT_SNACKBAR_POSITION } from "./constants"; import { hideSnackbar, showSnackbar } from "./helpers"; import { SnackbarHookProps } from "./types"; export const useSnackbar = ({ component, message, position = DEFAULT_SNACKBAR_POSITION, duration, isVisible, ...rest }: SnackbarHookProps) => { const [snackbarId, setSnackbarId] = useState(); const [wasViewed, setWasViewed] = useState(false); useEffect(() => { if (isVisible && !wasViewed) { if (message) { setSnackbarId( showSnackbar({ message, position, duration, ...rest, }), ); } else { setSnackbarId( showSnackbar({ component, position, duration, }), ); } setWasViewed(true); } if (!isVisible && wasViewed) { hideSnackbar(snackbarId); setWasViewed(false); } }, [ component, message, position, duration, isVisible, snackbarId, wasViewed, rest, ]); };