Skip to content

Commit 825e792

Browse files
Thales-Chagasclaude
andcommitted
Importar backup logado = envia pra nuvem com dedupe
Quando ha sessao na nuvem, "Importar dados" passa a SOMAR o backup a conta (via migrarLocalParaNuvem, casando categorias por nome) em vez de substituir o aparelho. Sem login, mantem o comportamento antigo (local). Tambem serve pra trazer os dados de um aparelho publicado pra conta. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent b613e80 commit 825e792

1 file changed

Lines changed: 23 additions & 7 deletions

File tree

src/App.jsx

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3001,17 +3001,33 @@ export default function App() {
30013001
function importData(file) {
30023002
if (!file) return;
30033003
const reader = new FileReader();
3004-
reader.onload = () => {
3004+
reader.onload = async () => {
30053005
try {
30063006
const parsed = JSON.parse(reader.result);
30073007
const dados = normalizarDados(parsed);
30083008
if (!dados) throw new Error("estrutura inválida");
3009-
if (!window.confirm("Importar este backup? Os dados atuais deste aparelho serão substituídos pelos do arquivo.")) return;
3010-
dirtyRef.current = true;
3011-
setData(dados);
3012-
showToast("Backup importado ✓");
3013-
} catch {
3014-
showToast("Arquivo inválido. Use um backup exportado pelo próprio app.", true);
3009+
3010+
if (modoNuvemRef.current && userId) {
3011+
// Logado na nuvem: SOMA o backup à conta com dedupe (categorias
3012+
// iguais por nome não duplicam), em vez de substituir o aparelho.
3013+
if (!window.confirm("Enviar este backup para a sua conta na nuvem?\n\nEle será somado ao que já existe — categorias com o mesmo nome não duplicam, e nada é apagado.")) return;
3014+
setStatus("saving");
3015+
const res = await migrarLocalParaNuvem(userId, dados, data);
3016+
const merge = await carregarTudo();
3017+
dirtyRef.current = false; // o setData abaixo não deve disparar nova gravação
3018+
setData(merge);
3019+
ultimoSyncRef.current = merge;
3020+
setStatus("saved");
3021+
showToast(`${res.transacoes} lançamentos enviados para a nuvem ✓`);
3022+
} else {
3023+
if (!window.confirm("Importar este backup? Os dados atuais deste aparelho serão substituídos pelos do arquivo.")) return;
3024+
dirtyRef.current = true;
3025+
setData(dados);
3026+
showToast("Backup importado ✓");
3027+
}
3028+
} catch (e) {
3029+
console.error("falha ao importar backup:", e);
3030+
showToast("Não consegui importar. Use um backup exportado pelo próprio app.", true);
30153031
}
30163032
};
30173033
reader.onerror = () => showToast("Não foi possível ler o arquivo.", true);

0 commit comments

Comments
 (0)