npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

material-ui-snackbar-provider

v2.0.0

Published

A convenient way to use material-ui's snackbars.

Downloads

6,622

Readme

Material-UI Snackbar Provider

JavaScript Style Guide Build Status Coverage Status

A convenient way to use material-ui's snackbars.

Installation

npm i --save material-ui-snackbar-provider

Usage

Simply wrap all components that should display snackbars with the SnackbarProvider component, e.g. by wrapping your router with it.

import { SnackbarProvider } from 'material-ui-snackbar-provider'

// somewhere at the root of your app
<SnackbarProvider SnackbarProps={{ autoHideDuration: 4000 }}>
  {/* the rest of your app belongs here, e.g. the router */}
</SnackbarProvider>

You can then display messages with the useSnackbar hook. More examples can be found here.

import { useSnackbar } from 'material-ui-snackbar-provider'

export default function MyComponent (props) {
  const snackbar = useSnackbar()

  const handleSomething = () => {
    snackbar.showMessage(
      'Something happened!',
      'Undo', () => handleUndo()
    )
  }

  const handleUndo = () => {
    // *snip*
  }

  return (
    // *snip*
  )
}

If you're not using React ^16.8.0 and our you can't use hooks (e.g. in a class component), you can use the withSnackbar HOC and the injected snackbar prop instead.

import { withSnackbar } from 'material-ui-snackbar-provider'

class MyComponent {
  // *snip*

  handleSomething () {
    this.props.snackbar.showMessage(
      'Something happened!',
      'Undo', () => this.handleUndo())
  }

  handleUndo () {
    // *snip*
  }
}

export default withSnackbar()(MyComponent) // export the wrapped component

Snackbar variants

Snackbar variants (i.e. diffent styles for different types of messages) can be implemented using the Alert component from @material-ui/lab. An example that also adds a custom hook to display snackbars with different severities is available here.

SnackbarProvider Props

|Name |Type |Default |Description |----------------|------------|------------|-------------------------------- |ButtonProps|object||Props to pass through to the action button. |children|node||The children that are wrapped by this provider. |SnackbarComponent|ReactElement||Custom snackbar component. |SnackbarProps|object||Props to pass through to the snackbar.

* required property

Snackbar methods

snackbar.showMessage(message, [action, handler, customParameters, closeWithoutActionHandler])

  • message (string) – message to display
  • action (string, optional) – label for the action button
  • handler (function, optional) – click handler for the action button
  • customParameters (any, optional) - custom parameters that will be passed to the snackbar renderer
  • closeWithoutActionHandler (function, optional) - function that is called when the snackbar hides and the action button was not clicked

Concerns

Dude, this is not pretty React-like, I don't want to call a function to do something that changes the UI! I want to display a snackbar based on the state only, e.g. by using Redux.

I agree. And if it wouldn't be an absolute pain to do that if you intend to display more than one snackbar, this package wouldn't even exist. The thing is that most of the time, snackbars are displayed when state changes and not really depend on the state itself.

Also, calling a method after dispatching the action is pretty convenient, especially when using something like redux-thunk:

deleteEmail (id) {
  this.props.dispatch(someReduxThunkAction())
  .then(() => {
    this.snackbar.showMessage(
      'E-mail deleted',
      'Undo', () => this.restoreEmail(id))
  })
  .catch((e) => {
    this.snackbar.showMessage(
      'E-mail could not be deleted',
      'Retry', () => this.deleteEmail(id))
  })
}

So this package makes snackbars a lot easier to use, which is all it's intended to do.

License

The files included in this repository are licensed under the MIT license.