correção

This commit is contained in:
2026-03-03 17:08:34 +00:00
parent b1f16c5756
commit 1ec16808e8
2 changed files with 13 additions and 12 deletions

View File

@@ -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) => {

View File

@@ -77,9 +77,8 @@ export default function Dashboard() {
if (!user || user.role !== 'barbearia') return <div>Área exclusiva para barbearias.</div>;
// 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 (
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '60vh' }}>
<div style={{ textAlign: 'center' }}>