Files
leocrm/frontend/src/components/plugins/PluginRegistry.tsx
T

36 lines
1.0 KiB
TypeScript
Raw Normal View History

2026-07-23 19:01:18 +02:00
import { useEffect } from 'react';
import { useActivePluginManifests } from '@/api/pluginManifests';
import { usePluginStore } from '@/store/pluginStore';
/**
* PluginRegistry — invisible provider component that fetches active plugin
* UI manifests on mount and populates the plugin store.
*
* Must be placed inside AppShell or at the root of the protected route tree.
*/
export function PluginRegistry() {
const { data, isLoading, error } = useActivePluginManifests();
const setManifests = usePluginStore((s) => s.setManifests);
const setLoading = usePluginStore((s) => s.setLoading);
const setError = usePluginStore((s) => s.setError);
useEffect(() => {
setLoading(isLoading);
}, [isLoading, setLoading]);
useEffect(() => {
if (data?.plugins) {
setManifests(data.plugins);
}
}, [data, setManifests]);
useEffect(() => {
if (error) {
setError(error instanceof Error ? error.message : 'Failed to load plugin manifests');
}
}, [error, setError]);
// This component renders nothing visible
return null;
}