From 12b8501ffb4d1e5f8eebda7e801392ee3dbecd20 Mon Sep 17 00:00:00 2001 From: FelipeCN <57776624+felipecaninnovaes@users.noreply.github.com> Date: Wed, 4 Mar 2026 09:19:47 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20adiciona=20novas=20depend=C3=AAncias,?= =?UTF-8?q?=20implementa=20reimporta=C3=A7=C3=A3o=20de=20arquivos=20e=20me?= =?UTF-8?q?lhorias=20na=20interface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 20 ++++ Cargo.toml | 4 + FEATURES_BACKLOG.md | 2 +- SUGESTOES_UI.md | 113 ------------------ build.rs | 7 ++ icon.ico | Bin 0 -> 161420 bytes src/application/usecases/executar_analise.rs | 10 +- src/domain/entities/mod.rs | 2 +- src/domain/services/detector_duplicidade.rs | 23 +++- src/infrastructure/csv_reader.rs | 16 +-- src/infrastructure/pdf_generator.rs | 47 ++++---- .../sqlite/layout_repository.rs | 12 +- src/infrastructure/sqlite/migrations.rs | 18 +-- src/infrastructure/xlsx_reader.rs | 21 ++-- src/main.rs | 29 ++++- src/ui/screens/configuracao_colunas.rs | 5 +- src/ui/screens/layouts.rs | 5 +- src/ui/screens/mod.rs | 11 +- 18 files changed, 148 insertions(+), 197 deletions(-) delete mode 100644 SUGESTOES_UI.md create mode 100644 build.rs create mode 100644 icon.ico diff --git a/Cargo.lock b/Cargo.lock index 7896b33..488d503 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -857,6 +857,7 @@ dependencies = [ "egui", "encoding_rs", "genpdf", + "image", "regex", "rfd", "rusqlite", @@ -865,6 +866,7 @@ dependencies = [ "serde", "serde_json", "thiserror 2.0.18", + "winres", ] [[package]] @@ -3922,6 +3924,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + [[package]] name = "toml_datetime" version = "0.7.5+spec-1.1.0" @@ -5007,6 +5018,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winres" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +dependencies = [ + "toml", +] + [[package]] name = "wit-bindgen" version = "0.51.0" diff --git a/Cargo.toml b/Cargo.toml index be86072..73cf4d1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,3 +20,7 @@ dirs = "5" thiserror = "2" regex = "1" rfd = "0.15" +image = { version = "0.25", default-features = false, features = ["ico"] } + +[build-dependencies] +winres = "0.1" diff --git a/FEATURES_BACKLOG.md b/FEATURES_BACKLOG.md index 108c9e9..b35d4ab 100644 --- a/FEATURES_BACKLOG.md +++ b/FEATURES_BACKLOG.md @@ -84,7 +84,7 @@ Verificar se já existe no codigo, pois na tela de configuração do Layout ele --- -### F-05 — Recarregar Arquivo Sem Reconfigurar (Sim bem necessario) +### F-05 — Recarregar Arquivo Sem Reconfigurar (Implementado) **Problema:** Quando o usuário corrige o arquivo fonte e quer re-verificar, precisa navegar todo o fluxo novamente (selecionar arquivo → configurar colunas → analisar). diff --git a/SUGESTOES_UI.md b/SUGESTOES_UI.md deleted file mode 100644 index ddf7232..0000000 --- a/SUGESTOES_UI.md +++ /dev/null @@ -1,113 +0,0 @@ -# Sugestões de Melhoria — Fluxo da Interface - -**Data:** 02/03/2026 - ---- - -## 1. Indicador de progresso das etapas - -O fluxo possui 3–4 passos bem definidos (`Importando → ConfigurandoColunas → ExibindoResultado`), mas não há nenhum indicador visual de onde o usuário está. - -**Sugestão:** Adicionar um breadcrumb simples no topo de todas as telas: - -``` -① Arquivo ② Colunas ③ Resultado -``` - -O passo atual ficaria destacado. Isso orienta o usuário sobre o que falta sem exigir nenhuma regra de negócio adicional. - ---- - -## 2. Unificar importação e configuração de colunas em um único painel - -Atualmente o caminho é: -1. Selecionar arquivo → clicar **"▶ Configurar Colunas"** -2. Configurar colunas → clicar **"▶ Importar e Analisar"** - -São 3 ações separadas para chegar à análise. - -**Sugestão:** Mover as configurações CSV/XLSX para a mesma tela de importação como uma seção expansível ("Configurações avançadas"), deixando o botão principal como **"▶ Importar e Analisar"** direto. - ---- - -## 3. Pré-visualização das primeiras linhas do arquivo - -Após selecionar o arquivo, o usuário precisa alternar entre a aplicação e a planilha para descobrir quais índices correspondem a cada campo. - -**Sugestão:** Exibir as primeiras 3–5 linhas do arquivo em uma tabela simples logo após a seleção, para que o usuário identifique visualmente o índice de cada coluna sem sair do app. - ---- - -## 4. Confirmação ao clicar em "Nova Análise" - -O botão **"< Nova Análise"** em `resultado.rs` executa `app.notas_importadas.clear()` imediatamente, sem nenhum modal de confirmação. Um clique acidental descarta o resultado atual sem aviso. - -**Sugestão:** Exibir modal de confirmação com a mensagem: -> "Deseja iniciar uma nova análise? O resultado atual será descartado." - -Botões: **Confirmar** | **Cancelar** - ---- - -## 5. Reorganizar seções do resultado - -A ordem atual das seções em `resultado.rs` é: - -``` -Totais → Faltantes → Duplicatas -``` - -O objetivo principal do software é detectar faltantes e duplicatas; os totais são informação complementar. - -**Sugestão:** Inverter para: - -``` -Faltantes → Duplicatas → Totais -``` - -Isso coloca a informação mais relevante no topo da tela. - ---- - -## 6. Seletor de layout também na tela de configuração de colunas - -O dropdown de layouts está disponível apenas em `import.rs`. O usuário frequentemente percebe que precisa de um layout diferente **depois** de visitar a tela de configuração e ver os campos. - -**Sugestão:** Duplicar o seletor de layout no topo de `configuracao_colunas.rs`, evitando que o usuário volte à tela anterior só para trocar o layout. - ---- - -## 7. Botão "Salvar como layout..." na tela de configuração - -Para salvar um layout atualmente o usuário precisa navegar para `GerenciandoLayouts`. Esse desvio quebra o fluxo principal. - -**Sugestão:** Adicionar um botão **"💾 Salvar como layout..."** diretamente em `configuracao_colunas.rs` que abre um modal simples pedindo apenas o nome do layout. Internamente, chama o mesmo use case `salvar_layout`. - ---- - -## 8. Feedback visual durante a análise - -A transição `ConfigurandoColunas → ExibindoResultado` pode demorar com arquivos grandes (até 100k registros, conforme RNF03). Atualmente o app não exibe nenhum sinal enquanto processa, parecendo travado. - -**Sugestão:** Adicionar o estado `Analisando` no `EstadoApp` (já previsto no IMPLEMENTACAO.md mas não implementado) e exibir uma mensagem simples tipo: - -``` -⏳ Analisando... aguarde. -``` - -Mesmo sem progresso percentual, já elimina a percepção de travamento. - ---- - -## Resumo de Impacto - -| # | Sugestão | Impacto UX | Esforço estimado | -|---|----------|------------|-----------------| -| 1 | Breadcrumb de etapas | Médio | Baixo | -| 2 | Unificar importação + configuração | Alto | Médio | -| 3 | Pré-visualização do arquivo | Alto | Médio | -| 4 | Confirmação em "Nova Análise" | Baixo | Baixo | -| 5 | Reordenar seções do resultado | Médio | Baixo | -| 6 | Seletor de layout em configuração | Médio | Baixo | -| 7 | Salvar layout na tela de configuração | Médio | Baixo | -| 8 | Feedback durante análise | Alto | Baixo | diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..09015d5 --- /dev/null +++ b/build.rs @@ -0,0 +1,7 @@ +fn main() { + if std::env::var("CARGO_CFG_TARGET_OS").unwrap() == "windows" { + let mut res = winres::WindowsResource::new(); + res.set_icon("icon.ico"); + res.compile().unwrap(); + } +} diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b17af15ab59d0681bc4220c77d9b2c1007b3b4ff GIT binary patch literal 161420 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 Nota { - Nota::new(numero, serie.to_string(), Some(tipo.to_string()), None, None) + Nota::new( + numero, + serie.to_string(), + Some(tipo.to_string()), + None, + None, + ) } #[test] diff --git a/src/domain/entities/mod.rs b/src/domain/entities/mod.rs index 5f5e86e..52ca926 100644 --- a/src/domain/entities/mod.rs +++ b/src/domain/entities/mod.rs @@ -1,5 +1,5 @@ +pub mod chave_serie; pub mod layout; pub mod nota; pub mod resultado_analise; pub mod serie; -pub mod chave_serie; diff --git a/src/domain/services/detector_duplicidade.rs b/src/domain/services/detector_duplicidade.rs index f82035e..078740d 100644 --- a/src/domain/services/detector_duplicidade.rs +++ b/src/domain/services/detector_duplicidade.rs @@ -50,7 +50,13 @@ mod tests { } fn nota_com_tipo(numero: u64, serie: &str, tipo: &str) -> Nota { - Nota::new(numero, serie.to_string(), Some(tipo.to_string()), None, None) + Nota::new( + numero, + serie.to_string(), + Some(tipo.to_string()), + None, + None, + ) } #[test] @@ -84,16 +90,25 @@ mod tests { #[test] fn mesmo_numero_serie_tipos_diferentes_nao_e_duplicata() { - let notas = vec![nota_com_tipo(1, "001", "NFE"), nota_com_tipo(1, "001", "NFCE")]; + let notas = vec![ + nota_com_tipo(1, "001", "NFE"), + nota_com_tipo(1, "001", "NFCE"), + ]; let dup = detectar_duplicidades(¬as); assert!(dup.is_empty()); } #[test] fn mesmo_numero_serie_tipo_igual_e_duplicata() { - let notas = vec![nota_com_tipo(1, "001", "NFE"), nota_com_tipo(1, "001", "NFE")]; + let notas = vec![ + nota_com_tipo(1, "001", "NFE"), + nota_com_tipo(1, "001", "NFE"), + ]; let dup = detectar_duplicidades(¬as); - assert_eq!(dup.get(&(1, "001".to_string(), Some("NFE".to_string()))), Some(&2)); + assert_eq!( + dup.get(&(1, "001".to_string(), Some("NFE".to_string()))), + Some(&2) + ); } #[test] diff --git a/src/infrastructure/csv_reader.rs b/src/infrastructure/csv_reader.rs index 25fb5a6..901934b 100644 --- a/src/infrastructure/csv_reader.rs +++ b/src/infrastructure/csv_reader.rs @@ -26,15 +26,14 @@ pub fn ler_csv( linha_cabecalho: usize, ) -> Result { // Verificar tamanho - let metadata = std::fs::metadata(caminho) - .map_err(|e| ErroArquivo::ErroLeitura(e.to_string()))?; + let metadata = + std::fs::metadata(caminho).map_err(|e| ErroArquivo::ErroLeitura(e.to_string()))?; if metadata.len() > LIMITE_BYTES { return Err(ErroArquivo::TamanhoExcedido(metadata.len())); } // Ler conteúdo bruto - let bytes = std::fs::read(caminho) - .map_err(|e| ErroArquivo::ErroLeitura(e.to_string()))?; + let bytes = std::fs::read(caminho).map_err(|e| ErroArquivo::ErroLeitura(e.to_string()))?; // Decodificar encoding let conteudo = match encoding.to_lowercase().as_str() { @@ -42,10 +41,8 @@ pub fn ler_csv( let (decoded, _, _) = WINDOWS_1252.decode(&bytes); decoded.into_owned() } - _ => { - String::from_utf8(bytes) - .map_err(|e| ErroArquivo::ErroLeitura(format!("Encoding inválido: {}", e)))? - } + _ => String::from_utf8(bytes) + .map_err(|e| ErroArquivo::ErroLeitura(format!("Encoding inválido: {}", e)))?, }; let mut avisos = ResumoAvisos::default(); @@ -97,8 +94,7 @@ pub fn preview_csv( encoding: &str, n: usize, ) -> Result>, ErroArquivo> { - let bytes = std::fs::read(caminho) - .map_err(|e| ErroArquivo::ErroLeitura(e.to_string()))?; + let bytes = std::fs::read(caminho).map_err(|e| ErroArquivo::ErroLeitura(e.to_string()))?; let conteudo = match encoding.to_lowercase().as_str() { "windows-1252" | "latin-1" | "iso-8859-1" => { diff --git a/src/infrastructure/pdf_generator.rs b/src/infrastructure/pdf_generator.rs index fa8de1b..070127a 100644 --- a/src/infrastructure/pdf_generator.rs +++ b/src/infrastructure/pdf_generator.rs @@ -11,10 +11,8 @@ use std::path::Path; // Fontes embutidas no binário em tempo de compilação. // Liberation Sans (~402 KB cada) substitui Arial do sistema (~993 KB cada), // eliminando dependência de fonte externa e reduzindo o tamanho dos PDFs gerados. -const FONT_REGULAR: &[u8] = - include_bytes!("../../assets/fonts/LiberationSans-Regular.ttf"); -const FONT_BOLD: &[u8] = - include_bytes!("../../assets/fonts/LiberationSans-Bold.ttf"); +const FONT_REGULAR: &[u8] = include_bytes!("../../assets/fonts/LiberationSans-Regular.ttf"); +const FONT_BOLD: &[u8] = include_bytes!("../../assets/fonts/LiberationSans-Bold.ttf"); /// Metadados do relatório. pub struct MetadadosRelatorio { @@ -56,12 +54,10 @@ impl PdfGenerator for GenpdfGenerator { doc.set_page_decorator(decorator); // Título - doc.push( - Paragraph::new("").styled_string( - "Relatório de Análise de Notas Fiscais", - style::Style::new().bold().with_font_size(16), - ), - ); + doc.push(Paragraph::new("").styled_string( + "Relatório de Análise de Notas Fiscais", + style::Style::new().bold().with_font_size(16), + )); doc.push(Break::new(1)); // Metadados @@ -81,7 +77,8 @@ impl PdfGenerator for GenpdfGenerator { // Totais doc.push( - Paragraph::new("").styled_string("Totais", style::Style::new().bold().with_font_size(14)), + Paragraph::new("") + .styled_string("Totais", style::Style::new().bold().with_font_size(14)), ); doc.push(Paragraph::new(format!( "Total Geral: R$ {}", @@ -102,9 +99,10 @@ impl PdfGenerator for GenpdfGenerator { doc.push(Break::new(1)); // Notas Faltantes - doc.push( - Paragraph::new("").styled_string("Notas Faltantes por Série", style::Style::new().bold().with_font_size(14)), - ); + doc.push(Paragraph::new("").styled_string( + "Notas Faltantes por Série", + style::Style::new().bold().with_font_size(14), + )); // Use faltantes keys for this section (may differ from soma keys if no values) let mut chaves_faltantes: Vec<&ChaveSerie> = resultado.faltantes_por_serie.keys().collect(); @@ -114,7 +112,10 @@ impl PdfGenerator for GenpdfGenerator { let faltantes = match resultado.faltantes_por_serie.get(*chave) { Some(f) if !f.is_empty() => f, _ => { - doc.push(Paragraph::new(format!(" Série {}: nenhuma faltante", chave.label()))); + doc.push(Paragraph::new(format!( + " Série {}: nenhuma faltante", + chave.label() + ))); continue; } }; @@ -131,9 +132,10 @@ impl PdfGenerator for GenpdfGenerator { doc.push(Break::new(1)); // Duplicatas - doc.push( - Paragraph::new("").styled_string("Duplicatas por Série", style::Style::new().bold().with_font_size(14)), - ); + doc.push(Paragraph::new("").styled_string( + "Duplicatas por Série", + style::Style::new().bold().with_font_size(14), + )); let mut chaves_dup: Vec<&ChaveSerie> = resultado.duplicadas_por_serie.keys().collect(); chaves_dup.sort(); @@ -142,7 +144,10 @@ impl PdfGenerator for GenpdfGenerator { let duplicatas = match resultado.duplicadas_por_serie.get(*chave) { Some(d) if !d.is_empty() => d, _ => { - doc.push(Paragraph::new(format!(" Série {}: nenhuma duplicata", chave.label()))); + doc.push(Paragraph::new(format!( + " Série {}: nenhuma duplicata", + chave.label() + ))); continue; } }; @@ -155,7 +160,9 @@ impl PdfGenerator for GenpdfGenerator { for (numero, count) in duplicatas { doc.push(Paragraph::new(format!( " NF {} / Série {} — {} ocorrências", - numero, chave.label(), count + numero, + chave.label(), + count ))); } } diff --git a/src/infrastructure/sqlite/layout_repository.rs b/src/infrastructure/sqlite/layout_repository.rs index ae1d7d1..00c6569 100644 --- a/src/infrastructure/sqlite/layout_repository.rs +++ b/src/infrastructure/sqlite/layout_repository.rs @@ -125,15 +125,9 @@ pub fn listar(conn: &Connection) -> Result> { linha_cabecalho: row.get::<_, i64>(5)? as usize, indice_numero: row.get::<_, i64>(6)? as usize, indice_serie: row.get::<_, i64>(7)? as usize, - indice_valor: row - .get::<_, Option>(8)? - .map(|v| v as usize), - indice_data: row - .get::<_, Option>(9)? - .map(|v| v as usize), - indice_documento_tipo: row - .get::<_, Option>(15)? - .map(|v| v as usize), + indice_valor: row.get::<_, Option>(8)?.map(|v| v as usize), + indice_data: row.get::<_, Option>(9)?.map(|v| v as usize), + indice_documento_tipo: row.get::<_, Option>(15)?.map(|v| v as usize), }, }) } else { diff --git a/src/infrastructure/sqlite/migrations.rs b/src/infrastructure/sqlite/migrations.rs index 4510dd9..bf7353a 100644 --- a/src/infrastructure/sqlite/migrations.rs +++ b/src/infrastructure/sqlite/migrations.rs @@ -14,11 +14,9 @@ pub fn aplicar_migrations(conn: &Connection) -> Result<()> { )?; let versao_atual: i64 = conn - .query_row( - "SELECT versao FROM schema_version LIMIT 1;", - [], - |row| row.get(0), - ) + .query_row("SELECT versao FROM schema_version LIMIT 1;", [], |row| { + row.get(0) + }) .unwrap_or(0); if versao_atual < 1 { @@ -32,9 +30,15 @@ pub fn aplicar_migrations(conn: &Connection) -> Result<()> { } if versao_atual == 0 { - conn.execute("INSERT INTO schema_version (versao) VALUES (?1);", [VERSAO_SCHEMA_ATUAL])?; + conn.execute( + "INSERT INTO schema_version (versao) VALUES (?1);", + [VERSAO_SCHEMA_ATUAL], + )?; } else if versao_atual < VERSAO_SCHEMA_ATUAL { - conn.execute("UPDATE schema_version SET versao = ?1;", [VERSAO_SCHEMA_ATUAL])?; + conn.execute( + "UPDATE schema_version SET versao = ?1;", + [VERSAO_SCHEMA_ATUAL], + )?; } Ok(()) diff --git a/src/infrastructure/xlsx_reader.rs b/src/infrastructure/xlsx_reader.rs index 61ab97c..869d631 100644 --- a/src/infrastructure/xlsx_reader.rs +++ b/src/infrastructure/xlsx_reader.rs @@ -24,8 +24,8 @@ pub struct ResultadoXlsx { pub fn listar_abas(caminho: &Path) -> Result, ErroArquivo> { verificar_tamanho(caminho)?; - let workbook = open_workbook_auto(caminho) - .map_err(|e| ErroArquivo::Corrompido(e.to_string()))?; + let workbook = + open_workbook_auto(caminho).map_err(|e| ErroArquivo::Corrompido(e.to_string()))?; Ok(workbook.sheet_names().to_vec()) } @@ -45,8 +45,8 @@ pub fn ler_xlsx( ) -> Result { verificar_tamanho(caminho)?; - let mut workbook = open_workbook_auto(caminho) - .map_err(|e| ErroArquivo::Corrompido(e.to_string()))?; + let mut workbook = + open_workbook_auto(caminho).map_err(|e| ErroArquivo::Corrompido(e.to_string()))?; let range: calamine::Range = workbook .worksheet_range(nome_aba) @@ -99,14 +99,11 @@ pub fn ler_xlsx( /// Retorna as primeiras 5 linhas de uma aba XLSX, a partir da linha 1. /// Usado exclusivamente para pré-visualização na UI. -pub fn preview_xlsx( - caminho: &Path, - nome_aba: &str, -) -> Result>, ErroArquivo> { +pub fn preview_xlsx(caminho: &Path, nome_aba: &str) -> Result>, ErroArquivo> { verificar_tamanho(caminho)?; - let mut workbook = open_workbook_auto(caminho) - .map_err(|e| ErroArquivo::Corrompido(e.to_string()))?; + let mut workbook = + open_workbook_auto(caminho).map_err(|e| ErroArquivo::Corrompido(e.to_string()))?; let range: calamine::Range = workbook .worksheet_range(nome_aba) @@ -182,8 +179,8 @@ pub fn parsear_letra_linha(s: &str) -> Option { } fn verificar_tamanho(caminho: &Path) -> Result<(), ErroArquivo> { - let metadata = std::fs::metadata(caminho) - .map_err(|e| ErroArquivo::ErroLeitura(e.to_string()))?; + let metadata = + std::fs::metadata(caminho).map_err(|e| ErroArquivo::ErroLeitura(e.to_string()))?; if metadata.len() > LIMITE_BYTES { return Err(ErroArquivo::TamanhoExcedido(metadata.len())); } diff --git a/src/main.rs b/src/main.rs index d7aa8b5..96d2ed8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + mod application; mod domain; mod infrastructure; @@ -5,15 +7,32 @@ mod ui; use ui::app::App; +fn load_icon() -> Option { + let bytes = include_bytes!("../icon.ico"); + let img = image::load_from_memory(bytes).ok()?.into_rgba8(); + let (width, height) = img.dimensions(); + Some(egui::viewport::IconData { + rgba: img.into_raw(), + width, + height, + }) +} + fn main() -> eframe::Result { + let mut viewport = egui::ViewportBuilder::default() + .with_title("Comparador de Notas") + .with_inner_size([1024.0, 768.0]) + .with_min_inner_size([800.0, 600.0]); + + if let Some(icon) = load_icon() { + viewport = viewport.with_icon(std::sync::Arc::new(icon)); + } + let native_options = eframe::NativeOptions { - viewport: egui::ViewportBuilder::default() - .with_title("Comparador de Notas") - .with_inner_size([1024.0, 768.0]) - .with_min_inner_size([800.0, 600.0]), + viewport, ..Default::default() }; - + eframe::run_native( "Comparador de Notas", native_options, diff --git a/src/ui/screens/configuracao_colunas.rs b/src/ui/screens/configuracao_colunas.rs index a69fee5..c563715 100644 --- a/src/ui/screens/configuracao_colunas.rs +++ b/src/ui/screens/configuracao_colunas.rs @@ -1,7 +1,7 @@ -use crate::application::usecases::importar_arquivo::{importar_csv, importar_xlsx}; use crate::application::usecases::executar_analise::{ expandir_analise, pre_analisar, series_com_intervalo_excessivo, }; +use crate::application::usecases::importar_arquivo::{importar_csv, importar_xlsx}; use crate::domain::entities::layout::{Layout, TipoArquivo}; use crate::ui::app::{App, EstadoApp, ResultadoPendente}; use egui::{Context, Ui}; @@ -169,7 +169,8 @@ fn renderizar_csv(ui: &mut Ui, app: &mut App) { app.layout_csv_atual.delimitador as u8, &app.layout_csv_atual.encoding.clone(), 5, - ).ok(); + ) + .ok(); } } }); diff --git a/src/ui/screens/layouts.rs b/src/ui/screens/layouts.rs index a8cbc88..69413a5 100644 --- a/src/ui/screens/layouts.rs +++ b/src/ui/screens/layouts.rs @@ -239,10 +239,7 @@ fn importar_json(app: &mut App, conteudo: &str) { ); } _ => { - app.exibir_erro(format!( - "Conflito de nome: layout '{}' já existe.", - nome - )); + app.exibir_erro(format!("Conflito de nome: layout '{}' já existe.", nome)); } } } diff --git a/src/ui/screens/mod.rs b/src/ui/screens/mod.rs index b292dc8..6647f5b 100644 --- a/src/ui/screens/mod.rs +++ b/src/ui/screens/mod.rs @@ -26,12 +26,9 @@ pub fn renderizar_tabela_preview(ui: &mut egui::Ui, linhas: &[Vec]) { } ui.label( - egui::RichText::new(format!( - "Pré-visualização ({} linha(s))", - linhas.len() - )) - .small() - .weak(), + egui::RichText::new(format!("Pré-visualização ({} linha(s))", linhas.len())) + .small() + .weak(), ); ui.add_space(2.0); @@ -69,4 +66,4 @@ pub fn renderizar_tabela_preview(ui: &mut egui::Ui, linhas: &[Vec]) { } }); }); -} \ No newline at end of file +}