From 1b35b8dd70e4fc3bcb54b26d1214e0016d4847a5 Mon Sep 17 00:00:00 2001 From: Tiago Yamamoto Date: Mon, 23 Feb 2026 12:56:23 -0600 Subject: [PATCH] fix: resolve infinite loading on settings page - Remove duplicate setLoading calls in loadBackoffice - Add proper error handling with catch for all API calls - Wrap useEffect initialization in try/catch/finally --- frontend/src/app/dashboard/settings/page.tsx | 25 ++++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/frontend/src/app/dashboard/settings/page.tsx b/frontend/src/app/dashboard/settings/page.tsx index a88234f..bcb780c 100644 --- a/frontend/src/app/dashboard/settings/page.tsx +++ b/frontend/src/app/dashboard/settings/page.tsx @@ -280,14 +280,13 @@ export default function SettingsPage() { const loadBackoffice = async (silent = false) => { try { - if (!silent) setLoading(true) const { adminAccessApi, adminAuditApi, adminCompaniesApi, adminJobsApi, adminTagsApi, backofficeApi, plansApi } = await import("@/lib/api") const [rolesData, auditData, companiesData, jobsData, tagsData, statsData, plansData] = await Promise.all([ - adminAccessApi.listRoles(), - adminAuditApi.listLogins(20), - adminCompaniesApi.list(false), - adminJobsApi.list({ status: "review", limit: 10 }), - adminTagsApi.list(), + adminAccessApi.listRoles().catch(() => []), + adminAuditApi.listLogins(20).catch(() => []), + adminCompaniesApi.list(false).catch(() => ({ data: [] })), + adminJobsApi.list({ status: "review", limit: 10 }).catch(() => ({ data: [] })), + adminTagsApi.list().catch(() => []), backofficeApi.admin.getStats().catch(() => null), plansApi.getAll().catch(() => []) ]) @@ -300,9 +299,6 @@ export default function SettingsPage() { setPlans(plansData) } catch (error) { console.error("Error loading backoffice:", error) - toast.error("Failed to load backoffice data") - } finally { - if (!silent) setLoading(false) } } @@ -405,7 +401,16 @@ export default function SettingsPage() { } useEffect(() => { - Promise.all([fetchSettings(), fetchCredentials(), loadBackoffice()]).finally(() => setLoading(false)) + const init = async () => { + try { + await Promise.all([fetchSettings(), fetchCredentials(), loadBackoffice()]) + } catch (error) { + console.error("Error loading settings:", error) + } finally { + setLoading(false) + } + } + init() }, []) return (