From e635f2cf06938021d88ea3aafec3853903d43558 Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Fri, 21 Aug 2026 00:07:17 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20I-MINI-RENDER=20=E2=80=94=20MiniAppBloc?= =?UTF-8?q?k=20from=20placeholder=20to=20real=20rendering=20(loads=20manif?= =?UTF-8?q?est=20from=20backend,=20renders=20schema=20fields=20+=20config)?= =?UTF-8?q?,=20tsc=20clean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/comm/blocks/MiniAppBlock.tsx | 96 +++++++++++++++---- 1 file changed, 77 insertions(+), 19 deletions(-) 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 ( -
-
-