feat: adiciona nova ação de confirmação para iniciar nova análise e implementa breadcrumb na interface

This commit is contained in:
FelipeCN
2026-03-03 08:48:19 -03:00
parent b0e216a6ff
commit b2b91cda55
3 changed files with 99 additions and 11 deletions
+46 -1
View File
@@ -1,5 +1,5 @@
use crate::application::usecases::importar_arquivo::{importar_csv, importar_xlsx};
use crate::domain::entities::layout::TipoArquivo;
use crate::domain::entities::layout::{Layout, TipoArquivo};
use crate::ui::app::{App, EstadoApp};
use egui::{Context, Ui};
@@ -12,6 +12,51 @@ pub fn renderizar(ui: &mut Ui, ctx: &Context, app: &mut App) {
ui.label(format!("Arquivo: {}", caminho.display()));
}
ui.add_space(8.0);
// Seletor de layout
let tipo_atual = app.tipo_arquivo_atual.clone();
let opcoes_layout: Vec<(i64, String)> = app
.layouts_salvos
.iter()
.filter(|l| l.tipo() == tipo_atual)
.filter_map(|l| l.id().map(|id| (id, l.nome().to_string())))
.collect();
let nome_layout_atual = app.nome_layout_atual.clone();
ui.horizontal(|ui| {
ui.label("Layout:");
egui::ComboBox::from_id_salt("combo_layouts_config")
.selected_text(if nome_layout_atual.is_empty() {
"— Selecionar layout —"
} else {
&nome_layout_atual
})
.show_ui(ui, |ui| {
for (id, nome) in &opcoes_layout {
if ui
.selectable_label(nome_layout_atual == *nome, nome.as_str())
.clicked()
{
app.nome_layout_atual = nome.clone();
if let Some(layout) =
app.layouts_salvos.iter().find(|l| l.id() == Some(*id))
{
let layout = layout.clone();
match &layout {
Layout::Csv { config, .. } => {
app.layout_csv_atual = config.clone();
}
Layout::Xlsx { config, .. } => {
app.layout_xlsx_atual = config.clone();
}
}
}
}
}
});
});
ui.add_space(12.0);
match app.tipo_arquivo_atual.clone() {
+12 -10
View File
@@ -4,7 +4,7 @@ use crate::domain::{
services::parser_monetario::formatar_valor_br,
};
use crate::infrastructure::pdf_generator::GenpdfGenerator;
use crate::ui::app::{App, EstadoApp};
use crate::ui::app::{AcaoModal, App, EstadoApp};
use egui::{Context, Ui};
const OPCOES_PAGINA: &[usize] = &[50, 100, 200, 1000];
@@ -22,9 +22,11 @@ pub fn renderizar(ui: &mut Ui, ctx: &Context, app: &mut App) {
ui.horizontal(|ui| {
if ui.button("< Nova Análise").clicked() {
app.estado = EstadoApp::Importando;
app.notas_importadas.clear();
return;
app.exibir_confirmacao(
"Nova Análise",
"Deseja iniciar uma nova análise? O resultado atual será descartado.",
AcaoModal::ConfirmarNovaAnalise,
);
}
if ui.button("⚙ Reconfigurar Colunas").clicked() {
@@ -58,12 +60,6 @@ pub fn renderizar(ui: &mut Ui, ctx: &Context, app: &mut App) {
ui.separator();
egui::ScrollArea::vertical().show(ui, |ui| {
// Totais
renderizar_totais(ui, &resultado);
ui.add_space(12.0);
ui.separator();
// Faltantes
renderizar_faltantes(ui, app, &resultado);
@@ -72,6 +68,12 @@ pub fn renderizar(ui: &mut Ui, ctx: &Context, app: &mut App) {
// Duplicatas
renderizar_duplicatas(ui, app, &resultado);
ui.add_space(12.0);
ui.separator();
// Totais
renderizar_totais(ui, &resultado);
});
}