fix(web): Absicht/Ballast der letzten sechs useExhaustiveDependencies-Befunde entschieden
Befunde 16-21 (quick-260921-gof), Regel-Gesamtstand jetzt 0/446 (vorher 21/467), pnpm lint 5/5, pnpm type-check 4/4: - InvoiceHistoryTable.tsx (16) und sidebar.tsx (17): refreshKey / sidebarRefreshKey bleiben als begruendete Auffrisch-Ausloeser stehen (biome-ignore mit deutschem Grund) - ohne sie zeigt die DKV-Historie nach "Jetzt pruefen" bzw. die Seitenleiste nach einer Modul- Aktivierung den alten Stand. - ActivateModuleDialog.tsx (18): moduleId aus der Abhaengigkeitsliste entfernt - reiner Ballast, der Effekt holt ohnehin nur die vom Modul unabhaengige Gruppenliste und die Elternseite haengt den Dialog je Modul frisch ein. - GroupMembersModal.tsx (19/20): fetchMembers/fetchAllUsers in die Liste aufgenommen (echter Defekt) - ohne sie zeigt der Dialog bei einem Gruppenwechsel ohne Neuaufbau die Mitglieder der vorigen Gruppe. Neue Testdatei nach dem grants-matrix.test.tsx-Muster belegt genau diesen Fall. - grants/page.tsx (21): die Suchabgleich-Hilfsfunktion `matches` in den Merkungs-Rumpf verschoben statt im Bauteil-Rumpf zu bleiben - reiner Ballast, die bestehenden Suchfaelle bleiben unveraendert gruen. - sidebar.test.tsx um eine Zaehlprobe erweitert: Bump loest genau einen weiteren Abruf aus, erneutes Zeichnen ohne Bump keinen. - Alle drei begruendeten biome-ignore-Zeilen sind jetzt gesetzt (erste Verwendung dieses Mechanismus im Projekt), alle wirkungslosen eslint-disable-Zeilen fuer diese Regel sind aus apps/web/src verschwunden. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
This commit is contained in:
@@ -185,6 +185,29 @@ describe('Sidebar', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('quick-260921-gof (Befund 17): ein Bump von sidebarRefreshKey loest genau einen weiteren Abruf aus, erneutes Zeichnen ohne Bump keinen', async () => {
|
||||
const Sidebar = await importSidebar();
|
||||
const { rerender } = render(<Sidebar />);
|
||||
|
||||
await waitFor(() => {
|
||||
expect((globalThis.fetch as ReturnType<typeof vi.fn>).mock.calls.length).toBe(1);
|
||||
});
|
||||
|
||||
// Erneutes Zeichnen ohne Bump des Auffrisch-Zaehlers loest KEINEN
|
||||
// weiteren Abruf aus.
|
||||
rerender(<Sidebar />);
|
||||
await waitFor(() => {
|
||||
expect((globalThis.fetch as ReturnType<typeof vi.fn>).mock.calls.length).toBe(1);
|
||||
});
|
||||
|
||||
// Ein Bump loest genau einen weiteren Abruf aus.
|
||||
mockRefreshKey = 1;
|
||||
rerender(<Sidebar />);
|
||||
await waitFor(() => {
|
||||
expect((globalThis.fetch as ReturnType<typeof vi.fn>).mock.calls.length).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
it('renders the version badge below the navigation', async () => {
|
||||
const Sidebar = await importSidebar();
|
||||
render(<Sidebar />);
|
||||
|
||||
@@ -54,6 +54,11 @@ export function Sidebar() {
|
||||
}
|
||||
}, []);
|
||||
|
||||
// Befund 17 (quick-260921-gof): sidebarRefreshKey ist der Auffrisch-
|
||||
// Ausloeser aus dem Marketplace-Speicher — ohne ihn erscheint ein frisch
|
||||
// aktiviertes Modul in der Seitenleiste erst nach einem Neuladen der
|
||||
// Seite, die Navigation liefe also dem Berechtigungsstand hinterher.
|
||||
// biome-ignore lint/correctness/useExhaustiveDependencies: sidebarRefreshKey ist der Auffrisch-Ausloeser aus dem Marketplace-Speicher - ohne ihn liefe die Navigation dem Berechtigungsstand hinterher.
|
||||
useEffect(() => {
|
||||
fetchActiveModules();
|
||||
}, [fetchActiveModules, sidebarRefreshKey]);
|
||||
|
||||
Reference in New Issue
Block a user