Skip to content

Instantly share code, notes, and snippets.

@rtymchyk
Last active April 16, 2021 13:55
Show Gist options
  • Save rtymchyk/b8ee7b8ddf3d7fb510f099fa14905bdb to your computer and use it in GitHub Desktop.
Save rtymchyk/b8ee7b8ddf3d7fb510f099fa14905bdb to your computer and use it in GitHub Desktop.
export const SnackBarContext = createContext()

const AUTO_DISMISS = 5000

export function SnackBarProvider({ children }) {
  const [alerts, setAlerts] = useState([])
  
  const activeAlertIds = alerts.join(',')
  useEffect(() => {
    if (activeAlertIds.length > 0) {
      const timer = setTimeout(() => setAlerts((alerts) => alerts.slice(0, alerts.length - 1)), AUTO_DISMISS)
      return () => clearTimeout(timer)
    }
  }, [activeAlertIds])

  const addAlert = (alert) => setAlerts((alerts) => [alert, ...alerts])

  const value = { addAlert }
    
  return (
    <SnackBarContext.Provider value={value}>
      {children}
      {alerts.map((alert) => <SnackBar key={alert}>{alert}</SnackBar>)}
    </SnackBarContext.Provider>
  )
}
@DVermeer
Copy link

Hi, you are missing a ) at the end here:

+{alerts.map((alert) => <SnackBar key={alert}>{alert}</SnackBar>)}
-{alerts.map((alert) => <SnackBar key={alert}>{alert}</SnackBar>}

@rtymchyk
Copy link
Author

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment