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