Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@magicbell/magicbell-react

Package Overview
Dependencies
Maintainers
2
Versions
243
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@magicbell/magicbell-react

React components for MagicBell

  • 2.0.2
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
4.3K
increased by73.88%
Maintainers
2
Weekly downloads
 
Created
Source

codecov TypeScript code style: prettier minified minified + gzip npm version

MagicBell-React

MagicBell-React is a set of React components to build a notification widget for your site powered by magicbell.io.

Quick Start

npm i @magicbell/magicbell-react
# or
yarn add @magicbell/magicbell-react
import React from 'react';
import MagicBell, { NotificationCenter } from '@magicbell/magicbell-react';

render(
  <MagicBell apiKey={MAGICBELL_API_KEY} userEmail="john@example.com">
    {() => <NotificationCenter height={300} />}
  </MagicBell>,
  document.body,
);

Table of Contents

Introduction

This package is built using MobX. The notification store and its items are MobX observables. To use this package you don't need to know anything about MobX. However, if you build a component, make it observe changes to the observable objects we expose. This is as simple as this:

// Before
export default function MyComponent() {}

// After
import { observer } from 'mobx-react-lite';

function MyComponent() {}
export default observer(MyComponent);

The overhead of observer itself is negligible. You can read more about how to observe MobX objects at the official docs of mobx-react.

Once you make your custom component observe changes, it will be updated automatically.

MagicBell

The MagicBell component is the default export of this package and is the root component for building a widget. It initializes a connection to magicbell.io, renders a bell icon with the number of unseen notifications and keeps the widget updated in real time.

These are all the properties accepted by this component.

PropertyTypeDescription
apiKeystringThe API key of your magicbell.io project
userEmailstringThe email of the user you want to show notifications for
userKeystringThe HMAC for the user. It is recommended to enable HMAC authentication but not required
children({ notifications, toggleNotificationCenter }) => JSX.ElementThe children function to render all notifications for the user
themeIMagicBellThemeAn optional object containing custom color values for the widget, see Custom Themes
BellIconJSX.ElementAn optional react element to be displayed instead of the default bell icon

Children function

This component expects a children function. This is how you render whatever you want to based on the state of the MagicBell.

You can use the notification center from this package (see NotificationCenter):

import React from 'react';
import MagicBell, { NotificationCenter } from '@magicbell/magicbell-react';

render(
  <MagicBell apiKey={MAGICBELL_API_KEY} userEmail="john@example.com">
    {() => <NotificationCenter height={300} />}
  </MagicBell>,
  document.body,
);

or use one of your own:

import React from 'react';
import MagicBell from '@magicbell/magicbell-react';

render(
  <MagicBell apiKey={MAGICBELL_API_KEY} userEmail="john@example.com">
    {({ notifications, toggleNotificationCenter }) => (
      <MyOwnNotificationCenter notifications={notifications} />
    )}
  </MagicBell>,
  document.body,
);

The MagicBell component does not render the component returned by the children function by default, only the bell is rendered. When the bell is clicked, the child component is toggled. As shown above, the children function gets the notifications store and a function to manually toggle the notification center. You can access the notifications store through MagicBellContext, too.

NotificationCenter

The NotificationCenter component renders a header, a footer and an infinite scroll list of notifications.

These are all the properties accepted by this component.

PropertyTypeDescription
heightnumberHeight in pixels of the infinite scroll list
onAllRead() => voidAn optional callback function called when the "Mark All Read" button is clicked
onNotificationClick(notification) => voidAn optional callback function called when a notification is clicked

NotificationList

The NotificationList component renders an infinite scroll list of notifications. When the user scrolls to the bottom the next page of notifications are fetched and appended to the current array of notifications. By default it renders a ClickableNotification component for each item in the notifications store.

These are all the properties accepted by this component.

PropertyTypeDescription
heightnumberHeight in pixels of the infinite scroll list
onItemClick(notification) => voidAn optional callback function called when a notification is clicked
ListItem({ notification, onItemClick }) => JSX.ElementAn optional custom component to use for each item in the list

If the height property is not provided, then the window scroll will be used.

Example: notification center with a custom list item.

ClickableNotification

This component renders the title and content of a notification.

IMPORTANT: When a notification is clicked, the notification is marked as read. If you implement your own component, you might also want to mark the notification as read manually. E.g.:

import React from 'react';
import { observer } from 'mobx-react';

function CustomNotification({ notification, onClick }) {
  const handleClick = () => {
    notification.markAsRead();
    onClick(notification);
  };

  return <div onClick={handleClick}>{notification.title}</div>;
}

export default observer(CustomNotification);

Custom Themes

Is is possible to change the default colors of some elements by providing to the MagicBell component a theme property.

This is the definition of the default theme:

{
  icon: {
    borderColor: '#335EEA',
  },
  header: {
    backgroundColor: '#335EEA',
    textColor: 'white',
  },
  footer: {
    backgroundColor: '#335EEA',
    textColor: 'white',
  },
  unseenBadge: {
    backgroundColor: '#DF4759',
    textColor: 'white',
  },
  notification: {
    default: {
      backgroundColor: 'white',
      textColor: '#2F323C',
      title: {
        textColor: '#161B2D',
      },
    },
    unread: {
      backgroundColor: '#D9E2EF',
      textColor: '#2F323C',
      title: {
        textColor: '#161B2D',
      },
    },
  },
}

You can override any attribute of this theme. Colors can be expressed in HEX or RGB(A).

import React from 'react';
import MagicBell, { NotificationCenter } from '@magicbell/magicbell-react';

const customTheme = {
  icon: {
    borderColor: 'rgba(160, 30, 120, 0.5)',
  },
  header: {
    textColor: 'black',
  },
};

render(
  <MagicBell apiKey={MAGICBELL_API_KEY} userEmail="john@example.com" theme={customTheme}>
    {() => <NotificationCenter height="300" />}
  </MagicBell>,
  document.body,
);

Keywords

FAQs

Package last updated on 09 Sep 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc