Git Product home page Git Product logo

material-ui-snackbar-provider's Introduction

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.

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

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.
SnackbarProps object Props to pass through to the snackbar.

* required property

Snackbar methods

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

  • message (string) – message to display
  • action (string, optional) – label for the action button
  • handler (function, optional) – click handler for the action button

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.

material-ui-snackbar-provider's People

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.