This commit is contained in:
2026-03-03 17:13:54 +00:00
parent 1ec16808e8
commit 0c1cebf051

View File

@@ -115,22 +115,36 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => {
}));
setState((s) => {
// Lojas vindas da BD
const mergedShops = fetchedShops.map((fetchedShop) => {
// A BD é a fonte de verdade.
// Para a loja do utilizador atual: se ficou na BD com dados antigos,
// aplicar por cima o que o utilizador alterou nesta sessão.
const mergedShops: BarberShop[] = 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 na sessão)
if (localVersion && s.user?.shopId === fetchedShop.id) {
// Dar prioridade ao que o utilizador alterou localmente nesta sessão
return { ...fetchedShop, ...localVersion };
}
return fetchedShop;
});
// 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)
);
// Se a loja do utilizador NÃO está na BD (novo registo ainda não guardado),
// adicionar apenas essa loja da memória local — SEM adicionar outras.
const userShopId = s.user?.shopId;
const userShopInDb = userShopId && fetchedShops.some(fs => fs.id === userShopId);
if (userShopId && !userShopInDb) {
const localUserShop = s.shops.find(ls => ls.id === userShopId);
if (localUserShop) mergedShops.push(localUserShop);
}
return { ...s, shops: [...mergedShops, ...onlyLocalShops], shopsReady: true };
// Deduplicar por ID para garantir que nunca há duas lojas iguais
const seen = new Set<string>();
const dedupedShops = mergedShops.filter(sh => {
if (seen.has(sh.id)) return false;
seen.add(sh.id);
return true;
});
return { ...s, shops: dedupedShops, shopsReady: true };
});
} catch (err) {
console.error('refreshShops error:', err);