correção
This commit is contained in:
@@ -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) => {
|
||||
|
||||
@@ -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' }}>
|
||||
|
||||
Reference in New Issue
Block a user