Pular para o conteúdo principal

Atualizações

Última atualização: 16 de julho de 2026

Visão Geral

Diferente da maioria das outras sub-telas da tab Loja, "Atualizações" é uma funcionalidade real e completa. Ela é o painel manual de sincronização por entidade: além do sync automático já executado pelo app (documentado em Sincronização Offline), esta tela permite ao vendedor forçar a atualização de qualquer entidade individualmente, ou de tudo de uma vez, escolhendo entre uma sincronização completa ou só das modificações recentes.

Arquivos-chave

ArquivoResponsabilidade
features/store/subscreens/updates/store-updates.controller.tsOrquestração da tela
services/sync/sync.services.tsSyncService, já documentado no fluxo de sincronização
services/sync-changes/sync-changes.service.instance.tsCaptura de snapshot antes/depois pra detectar mudanças
services/sync-entity-monitor/sync-entity-monitor.service.instance.tsRegistro de atividade de sync em andamento
services/product/product-image-cache.service.tsCache de imagens de produto

Uma seção por entidade, cada uma com seu handler real

A tela lista cerca de 27 seções (Organização, Usuário, Clientes, Transportadoras, Produtos, Estoque, Tabelas de preço, Rascunhos de venda, entre outras), e cada uma é mapeada para um método real de SyncService:

// store-updates.controller.ts
const SECTION_SYNC_HANDLERS: Record<string, SectionSyncHandler | undefined> = {
clients: (service, mode, onProgress) =>
service.syncClients(2500, onProgress, { recentOnly: mode === "recent" }),
products: (service, mode, onProgress) =>
service.syncProducts(2500, onProgress, { recentOnly: mode === "recent" }),
stocks: (service, mode, onProgress) =>
service.syncStocks(2500, onProgress, { recentOnly: mode === "recent" }),
saleDrafts: (service, mode, onProgress) =>
service.syncSaleDrafts(500, onProgress, { recentOnly: mode === "recent" }),
// ... as demais entidades seguem o mesmo padrão
};

Algumas seções, marcadas em RECENT_SYNC_SECTION_IDS (clientes, produtos, estoques, preços, rascunhos de venda, entre outras), perguntam ao vendedor se ele quer uma sincronização completa ou só as modificações recentes antes de rodar. As demais seções (transportadoras, cidades, grupos de produto, formas de pagamento, empresas etc.) sempre rodam completas, sem essa escolha.

"Atualizar Tudo" reaproveita o motor de sync genérico

O botão principal não tem lógica própria de sincronização, ele só reseta o estado e chama o mesmo startSyncAll do useSync() usado no fluxo automático:

// store-updates.controller.ts
const runSyncAll = async (recentOnly?: boolean) => {
const organizationId = organizationService?.getSelectedOrganization?.()?.organizationId;
reset();
await wait(180);
void startSyncAll(organizationId, { recentOnly });
};

"Última atualização" por entidade e reset de cache de imagens

Cada seção mostra a data da última sincronização daquela entidade específica, lida de syncServiceRef.current.getAllLastSyncedAt(), atualizada automaticamente sempre que um sync (manual ou automático) termina. Há também uma ação independente, "Resetar cache das imagens", que de fato limpa o cache local de imagens de produto via productImageCacheService.clearCache(), forçando o app a rebaixá-las na próxima vez que forem exibidas.

Armadilhas conhecidas

Ao depurar por que uma entidade específica não atualizou, vale checar primeiro se a seção tem um handler mapeado em SECTION_SYNC_HANDLERS; seções sem handler mostram um toast informando que a sincronização daquela seção "ainda não está disponível" em vez de falhar silenciosamente. Como esta tela só orquestra chamadas para o mesmo SyncService do motor de sync automático, qualquer comportamento inesperado de uma entidade específica (ex.: incremental vs completo, lastUpdatedAt) deve ser investigado na documentação de Sincronização Offline, não aqui.