.
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user