@knocklabs/react-notification-feed
TypeScript icon, indicating that this package has built-in type declarations

0.8.15 • Public • Published

React notification feed

A set of components for integrating Knock in-app notifications into a React application.

See a live demo

In-app feed component example

Note: these components are currently designed to be used in conjunction with the Knock in-app feed channel, and via React for web only.

Full documentation

Installation

Via NPM:

npm install @knocklabs/react-notification-feed

Via Yarn:

yarn add @knocklabs/react-notification-feed

Configuration

To configure the feed you will need:

  1. A public API key (found in the Knock dashboard)
  2. A feed channel ID (found in the Knock dashboard)
  3. A user ID, and optionally an auth token for production environments

Usage

You can integrate the feed into your app as follows:

import {
  KnockFeedProvider,
  NotificationIconButton,
  NotificationFeedPopover,
} from "@knocklabs/react-notification-feed";

// Required CSS import, unless you're overriding the styling
import "@knocklabs/react-notification-feed/dist/index.css";

const YourAppLayout = () => {
  const [isVisible, setIsVisible] = useState(false);
  const notifButtonRef = useRef(null);

  return (
    <KnockFeedProvider
      apiKey={process.env.KNOCK_PUBLIC_API_KEY}
      feedId={process.env.KNOCK_FEED_ID}
      userId={currentUser.id}
    >
      <>
        <NotificationIconButton
          ref={notifButtonRef}
          onClick={(e) => setIsVisible(!isVisible)}
        />
        <NotificationFeedPopover
          buttonRef={notifButtonRef}
          isVisible={isVisible}
          onClose={() => setIsVisible(false)}
        />
      </>
    </KnockFeedProvider>
  );
};

Headless usage

Alternatively, if you don't want to use our components you can render the feed in a headless mode using our hooks:

import {
  useAuthenticatedKnockClient,
  useNotifications,
} from "@knocklabs/react-notification-feed";
import create from "zustand";

const YourAppLayout = () => {
  const knockClient = useAuthenticatedKnockClient(
    process.env.KNOCK_PUBLIC_API_KEY,
    currentUser.id
  );

  const notificationFeed = useNotifications(
    knockClient,
    process.env.KNOCK_FEED_ID
  );

  const useNotificationStore = create(notificationFeed.store);
  const { metadata } = useNotificationStore();

  useEffect(() => {
    notificationFeed.fetch();
  }, [notificationFeed]);

  return <span>Total unread: {metadata.unread_count}</span>;
};

Related links

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
0.8.153,678latest

Version History

VersionDownloads (Last 7 Days)Published
0.8.153,678
0.8.14170
0.8.135
0.8.121,008
0.8.111,200
0.8.1041
0.8.90
0.8.847
0.8.71,425
0.8.61,321
0.8.54
0.8.4101
0.8.36
0.8.20
0.8.113
0.7.2187
0.7.10
0.7.00
0.6.113
0.6.1-rc.10
0.6.00
0.5.100
0.5.90
0.5.8150
0.5.70
0.5.60
0.5.50
0.5.40
0.5.30
0.5.20
0.5.11,108
0.5.1-rc.00
0.5.00
0.5.0-rc.10
0.5.0-rc.00
0.4.2-rc.00
0.4.10
0.4.1-rc.10
0.4.00
0.4.0-rc.70
0.4.0-rc.60
0.4.0-rc.50
0.4.0-rc.40
0.4.0-rc.30
0.4.0-rc.20
0.4.0-rc.10
0.3.20
0.3.10
0.3.00
0.2.60
0.2.50
0.2.40
0.2.30
0.2.20
0.2.10
0.2.00
0.1.70
0.1.60
0.1.50
0.1.40
0.1.30
0.1.20
0.1.10
0.1.00

Package Sidebar

Install

npm i @knocklabs/react-notification-feed

Weekly Downloads

10,477

Version

0.8.15

License

ISC

Unpacked Size

345 kB

Total Files

330

Last publish

Collaborators

  • cjbell