fix: add array guards to all frontend components consuming API responses
Prevents "M.forEach is not a function" crashes when API returns error objects or unexpected shapes instead of arrays. Guards all useQuery consumers with Array.isArray checks and safe defaults for object props. Files fixed: DeadlineList, AppointmentList, TenantSwitcher, DeadlineTrafficLights, UpcomingTimeline, CaseOverviewGrid, AISummaryCard, TeamSettings, and all page-level components (dashboard, cases, fristen, termine, ai/extract).
This commit is contained in:
@@ -76,12 +76,12 @@ export function DeadlineList() {
|
||||
|
||||
const caseMap = useMemo(() => {
|
||||
const map = new Map<string, Case>();
|
||||
cases?.forEach((c) => map.set(c.id, c));
|
||||
(Array.isArray(cases) ? cases : []).forEach((c) => map.set(c.id, c));
|
||||
return map;
|
||||
}, [cases]);
|
||||
|
||||
const filtered = useMemo(() => {
|
||||
if (!deadlines) return [];
|
||||
if (!Array.isArray(deadlines)) return [];
|
||||
return deadlines.filter((d) => {
|
||||
if (statusFilter === "pending" && d.status !== "pending") return false;
|
||||
if (statusFilter === "completed" && d.status !== "completed")
|
||||
@@ -96,7 +96,7 @@ export function DeadlineList() {
|
||||
}, [deadlines, statusFilter, caseFilter]);
|
||||
|
||||
const counts = useMemo(() => {
|
||||
if (!deadlines) return { overdue: 0, thisWeek: 0, ok: 0 };
|
||||
if (!Array.isArray(deadlines)) return { overdue: 0, thisWeek: 0, ok: 0 };
|
||||
let overdue = 0,
|
||||
thisWeek = 0,
|
||||
ok = 0;
|
||||
@@ -188,7 +188,7 @@ export function DeadlineList() {
|
||||
<option value="completed">Erledigt</option>
|
||||
<option value="overdue">Überfällig</option>
|
||||
</select>
|
||||
{cases && cases.length > 0 && (
|
||||
{Array.isArray(cases) && cases.length > 0 && (
|
||||
<select
|
||||
value={caseFilter}
|
||||
onChange={(e) => setCaseFilter(e.target.value)}
|
||||
|
||||
Reference in New Issue
Block a user