Repositório
Última atualização: 16 de julho de 2026
Visão Geral
Apesar do nome, "Repositório" aqui não é uma biblioteca de arquivos ou documentos, é uma listagem de pedidos/vendas "salvos no dispositivo", agrupados por cliente. É inteiramente mockado e vive só em memória: nada é persistido em MMKV ou SQLite, então qualquer alteração feita na tela se perde ao sair e voltar.
Arquivos-chave
| Arquivo | Responsabilidade |
|---|---|
features/store/subscreens/repository/store-repository.controller.ts | Estado e ações |
features/store/subscreens/repository/store-repository.mock.ts | Fonte inicial dos grupos e itens exibidos |
features/store/subscreens/repository/store-repository.tsx | View |
Estrutura dos dados
Os itens são organizados em grupos por cliente (RepositoryGroup), cada grupo contendo entradas de venda (RepositoryEntry) com código, data e valor. O estado inicial vem de INITIAL_REPOSITORY_GROUPS, um mock estático, guardado inteiramente em useState:
// store-repository.controller.ts
const [repositoryGroups, setRepositoryGroups] = useState<RepositoryGroup[]>(
INITIAL_REPOSITORY_GROUPS,
);
A tela permite buscar por código/nome do cliente e alternar a ordenação por data, ambos operando só sobre esse array em memória.
Três ações, apenas uma com efeito real (e só em memória)
Cada item tem um menu de opções com "Excluir", "Exportar" e "Restaurar". Excluir de fato remove o item do array em memória:
// store-repository.controller.ts
const handleDeleteRepository = useCallback(() => {
if (!selectedEntry) return;
setRepositoryGroups((currentGroups) =>
currentGroups
.map((group) =>
group.id !== selectedEntry.groupId
? group
: { ...group, items: group.items.filter((item) => item.id !== selectedEntry.itemId) },
)
.filter((group) => group.items.length > 0),
);
toast.show("Venda removida do repositório.", "success", 3500, "top");
}, [closeOptionsSheet, selectedEntry, toast]);
Mas como isso vive só em useState, o item "excluído" volta a aparecer se a tela for desmontada e remontada, nada foi persistido. "Exportar" e "Restaurar" não têm nem esse efeito local, cada um só dispara um toast fixo e não faz mais nada:
// store-repository.controller.ts
const handleExportRepository = useCallback(() => {
closeOptionsSheet();
setSelectedEntry(null);
toast.show("Exportação iniciada com sucesso.", "success", 3500, "top");
}, [closeOptionsSheet, toast]);
Armadilhas conhecidas
O texto de estado vazio já avisa sobre a natureza mockada dos dados: "Ajuste a busca para localizar os pedidos mockados salvos no dispositivo." Se este repositório vier a ser implementado de fato, provavelmente deveria consultar o mesmo SQLite de rascunhos/pedidos já usado no fluxo de nova venda, em vez de manter uma cópia própria e desconectada dos dados de venda.