From 1ec16808e81bbfd027a0bfe13fae88fe3623048f Mon Sep 17 00:00:00 2001 From: 230417 <230417@epvc.pt> Date: Tue, 3 Mar 2026 17:08:34 +0000 Subject: [PATCH] =?UTF-8?q?corre=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/context/AppContext.tsx | 20 +++++++++++--------- web/src/pages/Dashboard.tsx | 5 ++--- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/web/src/context/AppContext.tsx b/web/src/context/AppContext.tsx index aa0e2ae..3a64292 100644 --- a/web/src/context/AppContext.tsx +++ b/web/src/context/AppContext.tsx @@ -115,18 +115,22 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => { })); setState((s) => { - // Substituir completamente com dados do Supabase. - // Para a loja do utilizador atual (se for barbearia), preservar dados locais mais recentes - // para não sobrepor com dados antigos da BD durante a mesma sessão. + // Lojas vindas da BD const mergedShops = fetchedShops.map((fetchedShop) => { const localVersion = s.shops.find(ls => ls.id === fetchedShop.id); - // Se o utilizador atual é o dono desta loja, preferir a versão local (mais atualizada) + // Se o utilizador atual é o dono desta loja, preferir a versão local (mais atualizada na sessão) if (localVersion && s.user?.shopId === fetchedShop.id) { return { ...fetchedShop, ...localVersion }; } return fetchedShop; }); - return { ...s, shops: mergedShops, shopsReady: true }; + + // Adicionar lojas que estão só localmente (novo registo ainda não foi à BD) + const onlyLocalShops = s.shops.filter( + localShop => !fetchedShops.some(fs => fs.id === localShop.id) + ); + + return { ...s, shops: [...mergedShops, ...onlyLocalShops], shopsReady: true }; }); } catch (err) { console.error('refreshShops error:', err); @@ -256,10 +260,8 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => { }; const logout = () => { - setState((s) => ({ ...s, user: undefined, shops: [], shopsReady: false })); - supabase.auth.signOut() - .then(() => refreshShops()) - .catch(console.error); + setState((s) => ({ ...s, user: undefined })); + supabase.auth.signOut().catch(console.error); }; const toggleFavorite = (shopId: string) => { diff --git a/web/src/pages/Dashboard.tsx b/web/src/pages/Dashboard.tsx index e0d6f48..e2cfec2 100644 --- a/web/src/pages/Dashboard.tsx +++ b/web/src/pages/Dashboard.tsx @@ -77,9 +77,8 @@ export default function Dashboard() { if (!user || user.role !== 'barbearia') return
Área exclusiva para barbearias.
; - // Aguarda o refreshShops terminar antes de declarar que a loja não existe - // ou se shops continua vazio mas shopsReady está a true, dá uma tolerância - if (!shop && (!shopsReady || shops.length === 0)) { + // Enquanto as lojas não foram carregadas do Supabase, mostra o spinner + if (!shopsReady) { return (