jan/web-app/src/providers/GlobalEventHandler.tsx
Dinh Long Nguyen a30eb7f968
feat: Jan Web (reusing Jan Desktop UI) (#6298)
* add platform guards

* add service management

* fix types

* move to zustand for servicehub

* update App Updater

* update tauri missing move

* update app updater

* refactor: move PlatformFeatures to separate const file

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* change tauri fetch name

* update implementation

* update extension fetch

* make web version run properly

* disabled unused web settings

* fix all tests

* fix lint

* fix tests

* add mock for extension

* fix build

* update make and mise

* fix tsconfig for web-extensions

* fix loader type

* cleanup

* fix test

* update error handling + mcp should be working

* Update mcp init

* use separate is_web_app build property

* Remove fixed model catalog url

* fix additional tests

* fix download issue (event emitter not implemented correctly)

* Update Title html

* fix app logs

* update root tsx render timing

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-05 01:47:46 +07:00

56 lines
1.8 KiB
TypeScript

import { useEffect } from 'react'
import { events } from '@janhq/core'
import { useModelProvider } from '@/hooks/useModelProvider'
import { useServiceHub } from '@/hooks/useServiceHub'
/**
* GlobalEventHandler handles global events that should be processed across all screens
* This provider should be mounted at the root level to ensure all screens can benefit from global event handling
*/
export function GlobalEventHandler() {
const { setProviders } = useModelProvider()
const serviceHub = useServiceHub()
// Handle settingsChanged event globally
useEffect(() => {
const handleSettingsChanged = async (event: {
key: string
value: string
}) => {
console.log('Global settingsChanged event:', event)
// Handle version_backend changes specifically
if (event.key === 'version_backend') {
try {
// Refresh providers to get updated settings from the extension
const updatedProviders = await serviceHub.providers().getProviders()
setProviders(updatedProviders)
console.log('Providers refreshed after version_backend change')
} catch (error) {
console.error(
'Failed to refresh providers after settingsChanged:',
error
)
}
}
// Add more global event handlers here as needed
// For example:
// if (event.key === 'some_other_setting') {
// // Handle other setting changes
// }
}
// Subscribe to the settingsChanged event
events.on('settingsChanged', handleSettingsChanged)
// Cleanup subscription on unmount
return () => {
events.off('settingsChanged', handleSettingsChanged)
}
}, [setProviders, serviceHub])
// This component doesn't render anything
return null
}