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

renotify

v0.0.2

Published

A Redux friendly notification system for React

Downloads

5

Readme

Renotify

A Redux friendly notification system for React

Examples

~~You can check some working examples here~~ I'm still creating the Examples page :)

Install

npm install renotify -S

Usage

Renotify uses Redux under the hood, and also has some cool features to use with it, but let stick with the basics:

First of all, it's a good idea to import the default styles, to make it look pretty. Don't worry, there are some ways you can customize those.

If you use webpack with a CSS loader:

import 'renotify/style.css';

Or the old school way:

<link rel="stylesheet" href="node_modules/renotify/style.css">

The library interface was heavily inspired by react-redux, so in order to use Renotify, you need to wrap your application with the NotificationContainer component.

import {NotificationContainer} from 'renotify';

function App() {
  return (
    <NotificationContainer>
      <CustomButton />
    </NotificationContainer>
  );
}

After that, you should use the high order component renotify to wrap the component you want to dispatch notifications:

import {renotify} from 'renotify';

function CustomButton({notify}) {
  return (
    <button onClick={() => {
      notify({
        title: 'Some Title',
        message: 'Some message'
      });
    }}>send notification</button>
  );
}

export default renotify()(CustomButton)

And that's it! this is the simples way to use Renotify. Now, let's do some cooler stuff.

Middlewares

Remember the cool features I mentioned that Renotify has with Redux? Here you'll learn how to use the Renotify Middlewares.

The idea of using middlewares with Renotify is to make it easier to show notifications when some particular action is dispatched inside Redux.

Renotify reducer

First of all, you should configure the renotify reducer with your application root reducer (Don't worry, Renotify won't mess up with your data).

import {reducer} from 'renotify';

const reducers = combineReducers({
  yourReducer,
  $$renotify: reducer // The property name MUST be $$renotify
});

Middleware

Now you can configure the Renotify middleware, to map all the actions you want to trigger a notification, and the notification configs.

import {createMiddleware} from 'renotify';

const renotifyMiddleware = createMiddleware({
  SOME_ACTION: {
    title: 'Middleware Notification',
    message: 'This notification is automagically comming from a middleware'
  }
});

After that you can configure the redux store, and pass it to the Provider.

const store = createStore(reducers, applyMiddleware(renotifyMiddleware));

function App() {
  render() {
    return (
      <Provider store={store}>
        <NotificationContainer>
          <CustomButton />
        </NotificationContainer>
      </Provider>
    );
  }
}

Now every time the SOME_ACTION actions is triggered, a notification will appear for the user, no need to manually trigger the notify method. Yay!

Configuring the reducer internally in your application is only useful when you want to use the middleware.

renotify high order component default configs

The renotify high order component accepts some default configuration for the notifications triggered by that component. Let's take the CustomButton as an example:

export default renotify({
  Title: 'Default Title'
})(CustomButton);

Now if you don't provide the title property for the notifications inside CustomButton, by default it'll have the text Default Title

NotificationContainer default configs

Similar to the previous topic, you can also provide some default configuration for all the notifications that will be triggered on your application:

<NotificationContainer notificationShape={{
  title: 'Default Title',
  message: 'Default Message'
}}>
  <CustomButton />
</NotificationContainer>

notify API

So, there are a couple of things you can do with the notify method:

Dismiss configuration

You can configure the timeout for the notification to disappear:

notify({
  title: '...',
  message: '...',
  dismissTimeout: 2000 // Notification will disappear in 2 seconds
});

Or you can configure it to never automatically be dismissed, only when the user clicks in the "dismiss" button:

notify({
  title: '...',
  message: '...',
  dismiss: false // Setting this to false will disable the automatic dismiss.
});

Hooks

You can attach 2 simple hooks to the notification, when it's created:

notify({
  title: '...',
  message: '...',
  onAdd: () => console.log('Notification entering'), // triggered when the notification enters
  onRemove: () => console.log('Notification leaving'), // triggered when the notification is about to leave
});

Custom Actions

You don't need to use the automatic dismiss button for everything... You can easily customize these using the actions property.

notify({
  title: '...',
  message: '...',
  actions: [{
    label: 'Alert', // `label` is the text that will appear in the button
    callback: () => { // `callback` will be triggered once the button is clicked
      // This callback simply alerts `Cheese!`, and won't dismiss the notification
      alert('Cheese!')
    }
  }, {
    label: 'Callback Close',
    // the `closeNotification` method is passed as parameter to the callback
    callback: (closeNotification) => {
      alert('Notification will be closed after this alert');
      closeNotification(); // Dismisses the notification
    }
  }, {
    // If no `callback` is provided, it will dimiss the notification once the button is clicked
    label: 'Close'
  }]
});

Custom templates

You don't need to use the default template if you don't want to... You can create a hole new template for the notifications:

// Template must be a valid React Component
// it'll receives `title`, `message` and `actions` as props
const NotificationTemplate = ({title, message, actions}) => (
  <div>
    {title}<br />
    {message}<br />
    {actions}
  </div>
);

notify({
  title: '...',
  message: '...',
  Template: NotificationTemplate
});

Types

As an easy to use solution, Renotify provides 3 different types of notifications out of the box.

notify({
  title: '...',
  message: '...',
  type: 'success' // You can also use `warning` or `danger`
});