diff --git a/web/src/context/AppContext.tsx b/web/src/context/AppContext.tsx index 3a64292..bb49442 100644 --- a/web/src/context/AppContext.tsx +++ b/web/src/context/AppContext.tsx @@ -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(); + 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);