EventHandlerProvider.tsx raw

   1  import { useEffect } from 'react'
   2  import {
   3    registerSocialEventHandlers,
   4    unregisterSocialEventHandlers,
   5    clearSocialHandlerCallbacks
   6  } from '@/application/handlers/SocialEventHandlers'
   7  import {
   8    registerContentEventHandlers,
   9    unregisterContentEventHandlers,
  10    clearContentHandlerCallbacks
  11  } from '@/application/handlers/ContentEventHandlers'
  12  import {
  13    registerFeedEventHandlers,
  14    unregisterFeedEventHandlers
  15  } from '@/application/handlers/FeedEventHandlers'
  16  import {
  17    registerRelayEventHandlers,
  18    unregisterRelayEventHandlers
  19  } from '@/application/handlers/RelayEventHandlers'
  20  
  21  /**
  22   * EventHandlerProvider
  23   *
  24   * Initializes domain event handlers when the app starts.
  25   * This provider should be placed near the root of the component tree.
  26   *
  27   * Handlers are organized by domain context:
  28   * - Social: User follow/mute events
  29   * - Content: Bookmarks, pins, reactions, reposts
  30   * - Feed: Timeline, notes, content filtering
  31   * - Relay: Relay sets, favorites, mailbox configuration
  32   */
  33  export function EventHandlerProvider({ children }: { children: React.ReactNode }) {
  34    useEffect(() => {
  35      // Register all event handlers on mount
  36      registerSocialEventHandlers()
  37      registerContentEventHandlers()
  38      registerFeedEventHandlers()
  39      registerRelayEventHandlers()
  40  
  41      console.debug('[EventHandlerProvider] Domain event handlers registered')
  42  
  43      // Cleanup on unmount
  44      return () => {
  45        unregisterSocialEventHandlers()
  46        unregisterContentEventHandlers()
  47        unregisterFeedEventHandlers()
  48        unregisterRelayEventHandlers()
  49  
  50        // Clear callback registrations
  51        clearSocialHandlerCallbacks()
  52        clearContentHandlerCallbacks()
  53  
  54        console.debug('[EventHandlerProvider] Domain event handlers unregistered')
  55      }
  56    }, [])
  57  
  58    return <>{children}</>
  59  }
  60