Neuen Sidebar-Tab hinzufügen
Du fügst einen neuen Tab in die Sidebar der Speicher Analyse Tauri-App ein, inklusive React-View und App-Integration.
Argumente
$ARGUMENTS[0] = Tab-Name (kebab-case, z.B. disk-health)
$ARGUMENTS[1] = Sidebar-Gruppe: start, analyse, bereinigung, system, sicherheit, extras
$ARGUMENTS[2] = Kurzbeschreibung (optional)
Voranalyse
Pflicht — lies diese Dateien zuerst:
src/components/Sidebar.tsx - Bestehende Sidebar-Struktur und Gruppen
src/components/TabRouter.tsx - Wie Views lazy-loaded werden
src/style.css - Bestehende View-Styles als Referenz
- Eine bestehende View als Referenz (z.B.
src/views/PrivacyView.tsx)
3 Dateien ändern/erstellen
1. src/views/<TabName>View.tsx — React-View
import { useState, useCallback, useEffect } from 'react';
import * as api from '../api/tauri-api';
import { useAppContext } from '../context/AppContext';
export default function TabNameView() {
const { showToast } = useAppContext();
const [data, setData] = useState<any>(null);
const [loading, setLoading] = useState(false);
const [loaded, setLoaded] = useState(false);
const loadData = useCallback(async () => {
if (loading) return;
setLoading(true);
try {
const result = await api.tabNameAction();
setData(result);
setLoaded(true);
} catch (err: any) {
showToast('Fehler: ' + err.message, 'error');
} finally {
setLoading(false);
}
}, [loading, showToast]);
useEffect(() => {
if (!loaded) loadData();
}, []); // eslint-disable-line react-hooks/exhaustive-deps
return (
<div className="tab-name-page">
<div className="tab-name-header"><h2>Anzeigename</h2></div>
{loading && <div className="loading-state">Lade Daten...</div>}
{!loading && loaded && data && (
<div className="tab-name-content">{/* Inhalt */}</div>
)}
{!loading && !loaded && (
<div className="tool-placeholder">Noch keine Daten geladen.</div>
)}
</div>
);
}
Konventionen:
export default Funktionale Komponente
useEffect mit Cleanup-Return für Timer/Listener/Observer
- API über
import * as api from '../api/tauri-api'
- JSX escaped automatisch — KEIN
dangerouslySetInnerHTML
- Alle UI-Texte auf Deutsch mit korrekten Umlauten
2. src/components/TabRouter.tsx — Lazy-Import + Route
const TabNameView = lazy(() => import('../views/TabNameView'));
// Im switch/map:
case 'tab-name':
return <Suspense fallback={<div className="loading-state">Laden...</div>}><TabNameView /></Suspense>;
3. src/components/Sidebar.tsx — Button hinzufügen
Button in die passende Gruppe einfügen.
Sidebar-Gruppen Referenz
| Gruppe |
Inhalt |
start |
Dashboard, Explorer |
analyse |
Dateitypen, Verzeichnisbaum, Treemap, Top 100, Duplikate, Alte Dateien |
bereinigung |
Bereinigung, Autostart, Dienste |
system |
Optimierung, Updates, S.M.A.R.T., System-Profil, PC-Diagnose |
sicherheit |
Privacy, Netzwerk, Software-Audit, Sicherheits-Check |
extras |
PDF-Editor, Terminal, Einstellungen |
Security-Checkliste (PFLICHT vor Commit)
Ausgabe
- Welche Dateien erstellt/geändert wurden
- Sidebar-Gruppe und Position
- Ob Backend-Commands noch benötigt werden (→
/add-tauri-command)
1---2name: add-sidebar-tab3description: Fügt einen neuen Sidebar-Tab mit React-View hinzu. Erstellt View-Komponente in src/views/, TabRouter-Eintrag und Sidebar-Button. Backend-Commands werden über /add-tauri-command hinzugefügt. Aufruf mit /add-sidebar-tab [tab-name] [sidebar-gruppe] [beschreibung].4---5
6# Neuen Sidebar-Tab hinzufügen
7
8Du fügst einen neuen Tab in die Sidebar der Speicher Analyse Tauri-App ein, inklusive React-View und App-Integration.
9
10## Argumente
11
12- `$ARGUMENTS[0]` = Tab-Name (kebab-case, z.B. `disk-health`)
13- `$ARGUMENTS[1]` = Sidebar-Gruppe: `start`, `analyse`, `bereinigung`, `system`, `sicherheit`, `extras`
14- `$ARGUMENTS[2]` = Kurzbeschreibung (optional)
15
16## Voranalyse
17
18**Pflicht — lies diese Dateien zuerst:**
19
201. `src/components/Sidebar.tsx` - Bestehende Sidebar-Struktur und Gruppen
212. `src/components/TabRouter.tsx` - Wie Views lazy-loaded werden
223. `src/style.css` - Bestehende View-Styles als Referenz
234. Eine bestehende View als Referenz (z.B. `src/views/PrivacyView.tsx`)
24
25## 3 Dateien ändern/erstellen
26
27### 1. `src/views/<TabName>View.tsx` — React-View
28
29```tsx
30import { useState, useCallback, useEffect } from 'react';
31import * as api from '../api/tauri-api';
32import { useAppContext } from '../context/AppContext';
33
34export default function TabNameView() {
35 const { showToast } = useAppContext();
36 const [data, setData] = useState<any>(null);
37 const [loading, setLoading] = useState(false);
38 const [loaded, setLoaded] = useState(false);
39
40 const loadData = useCallback(async () => {
41 if (loading) return;
42 setLoading(true);
43 try {
44 const result = await api.tabNameAction();
45 setData(result);
46 setLoaded(true);
47 } catch (err: any) {
48 showToast('Fehler: ' + err.message, 'error');
49 } finally {
50 setLoading(false);
51 }
52 }, [loading, showToast]);
53
54 useEffect(() => {
55 if (!loaded) loadData();
56 }, []); // eslint-disable-line react-hooks/exhaustive-deps
57
58 return (
59 <div className="tab-name-page">
60 <div className="tab-name-header"><h2>Anzeigename</h2></div>
61 {loading && <div className="loading-state">Lade Daten...</div>}
62 {!loading && loaded && data && (
63 <div className="tab-name-content">{/* Inhalt */}</div>
64 )}
65 {!loading && !loaded && (
66 <div className="tool-placeholder">Noch keine Daten geladen.</div>
67 )}
68 </div>
69 );
70}
71```
72
73**Konventionen:**
74- `export default` Funktionale Komponente
75- `useEffect` mit Cleanup-Return für Timer/Listener/Observer
76- API über `import * as api from '../api/tauri-api'`
77- JSX escaped automatisch — KEIN `dangerouslySetInnerHTML`
78- Alle UI-Texte auf Deutsch mit korrekten Umlauten
79
80### 2. `src/components/TabRouter.tsx` — Lazy-Import + Route
81
82```tsx
83const TabNameView = lazy(() => import('../views/TabNameView'));
84
85// Im switch/map:
86case 'tab-name':
87 return <Suspense fallback={<div className="loading-state">Laden...</div>}><TabNameView /></Suspense>;
88```
89
90### 3. `src/components/Sidebar.tsx` — Button hinzufügen
91
92Button in die passende Gruppe einfügen.
93
94## Sidebar-Gruppen Referenz
95
96| Gruppe | Inhalt |
97|--------|--------|
98| `start` | Dashboard, Explorer |
99| `analyse` | Dateitypen, Verzeichnisbaum, Treemap, Top 100, Duplikate, Alte Dateien |
100| `bereinigung` | Bereinigung, Autostart, Dienste |
101| `system` | Optimierung, Updates, S.M.A.R.T., System-Profil, PC-Diagnose |
102| `sicherheit` | Privacy, Netzwerk, Software-Audit, Sicherheits-Check |
103| `extras` | PDF-Editor, Terminal, Einstellungen |
104
105## Security-Checkliste (PFLICHT vor Commit)
106
107- [ ] Kein `dangerouslySetInnerHTML`?
108- [ ] `useEffect` Cleanup für Timer/Listener/Observer?
109- [ ] Loading/Error States korrekt gehandelt?
110
111## Ausgabe
112
113- Welche Dateien erstellt/geändert wurden
114- Sidebar-Gruppe und Position
115- Ob Backend-Commands noch benötigt werden (→ `/add-tauri-command`)