TheMagoo73/flagsmith-react

View on GitHub
src/use-event-emitter.js

Summary

Maintainability
A
1 hr
Test Coverage
import { useRef, useEffect } from "react";

export function useEventEmitter() {
  const ref = useRef();
  if (!ref.current) {
    ref.current = {
      subscriptions: new Set(),
      emit: (val) => {
        for (const subscription of ref.current.subscriptions) {
          subscription(val);
        }
      },
      useSubscription: (callback) => {
        const callbackRef = useRef();
        callbackRef.current = callback;
        useEffect(() => {
          function subscription(val) {
            if (callbackRef.current) {
              callbackRef.current(val);
            }
          }
          ref.current.subscriptions.add(subscription);
          return () => {
            ref.current.subscriptions.delete(subscription);
          };
        }, []);
      },
    };
  }
  return ref.current;
}