diff --git a/frontend/src/components/comm/blocks/MiniAppBlock.tsx b/frontend/src/components/comm/blocks/MiniAppBlock.tsx index 7e17ba3..e305a0e 100644 --- a/frontend/src/components/comm/blocks/MiniAppBlock.tsx +++ b/frontend/src/components/comm/blocks/MiniAppBlock.tsx @@ -1,37 +1,95 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import type { MessageBlock } from '@/store/commStore'; - -import { AppWindow } from 'lucide-react'; +import { AppWindow, Loader2 } from 'lucide-react'; +import { apiClient } from '@/api/client'; interface MiniAppBlockProps { block: MessageBlock; } +interface MiniAppDef { + app_id: string; + name: string; + icon: string; + description: string; + plugin_name: string; + render_schema: Record; +} + const MiniAppBlock: React.FC = ({ block }) => { const { app_id, config } = block.block_data; + const [appDef, setAppDef] = useState(null); + const [loading, setLoading] = useState(false); + + useEffect(() => { + if (!app_id) return; + setLoading(true); + apiClient.get('/comm/miniapps') + .then((res) => { + const apps: MiniAppDef[] = res.data || []; + const found = apps.find((a) => a.app_id === app_id); + setAppDef(found || null); + }) + .catch(() => setAppDef(null)) + .finally(() => setLoading(false)); + }, [app_id]); const appId: string = app_id || 'Unbekannt'; const hasConfig = config && typeof config === 'object' && Object.keys(config).length > 0; + const schema = appDef?.render_schema; + const hasSchema = schema && Object.keys(schema).length > 0; + + if (loading) { + return ( +
+ +
+ ); + } return ( -
-
-