update.
This commit is contained in:
+64
-10
@@ -1,7 +1,7 @@
|
||||
use crate::application::usecases::layouts::{
|
||||
exportar_layout_json, importar_layout_json, salvar_layout,
|
||||
};
|
||||
use crate::domain::entities::layout::{Layout, TipoArquivo};
|
||||
use crate::domain::entities::layout::{Layout, LayoutJson, TipoArquivo};
|
||||
use crate::domain::errors::ErroLayout;
|
||||
use crate::ui::app::{AcaoModal, App, EstadoApp};
|
||||
use egui::{Context, Ui};
|
||||
@@ -167,6 +167,35 @@ fn salvar_layout_atual(app: &mut App) {
|
||||
app.recarregar_layouts();
|
||||
app.exibir_aviso("Sucesso", "Layout salvo com sucesso.");
|
||||
}
|
||||
Err(ErroLayout::NomeConflitante(nome)) => {
|
||||
let id_existente = app
|
||||
.layouts_salvos
|
||||
.iter()
|
||||
.find(|l| l.nome() == nome)
|
||||
.and_then(|l| l.id());
|
||||
if let Some(id) = id_existente {
|
||||
let layout_com_id = match app.tipo_arquivo_atual.clone() {
|
||||
TipoArquivo::Csv => Layout::Csv {
|
||||
id: Some(id),
|
||||
nome: nome.clone(),
|
||||
config: app.layout_csv_atual.clone(),
|
||||
},
|
||||
TipoArquivo::Xlsx => Layout::Xlsx {
|
||||
id: Some(id),
|
||||
nome: nome.clone(),
|
||||
config: app.layout_xlsx_atual.clone(),
|
||||
},
|
||||
};
|
||||
app.exibir_confirmacao(
|
||||
"Conflito de nome",
|
||||
format!(
|
||||
"Já existe um layout com o nome '{}'. Deseja sobrescrever?",
|
||||
nome
|
||||
),
|
||||
AcaoModal::SobrescreverLayout(layout_com_id),
|
||||
);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
app.exibir_erro(format!("Erro ao salvar layout: {}", e));
|
||||
}
|
||||
@@ -182,15 +211,40 @@ fn importar_json(app: &mut App, conteudo: &str) {
|
||||
app.exibir_aviso("Sucesso", "Layout importado com sucesso.");
|
||||
}
|
||||
Err(ErroLayout::NomeConflitante(nome)) => {
|
||||
// Exibir opções: sobrescrever ou cancelar
|
||||
app.exibir_aviso(
|
||||
"Conflito de nome",
|
||||
format!(
|
||||
"Já existe um layout com o nome '{}'. Use 'Salvar com novo nome' ou cancele a importação.",
|
||||
nome
|
||||
),
|
||||
);
|
||||
// TODO: implementar fluxo completo de sobrescrever com entrada de novo nome
|
||||
// Recriar o layout parseado para passá-lo no modal de confirmação.
|
||||
// O JSON já foi validado pela chamada acima, então o parse aqui não falha.
|
||||
let parsed = serde_json::from_str::<LayoutJson>(conteudo)
|
||||
.ok()
|
||||
.and_then(|json_repr| Layout::try_from(json_repr).ok());
|
||||
|
||||
let id_existente = app
|
||||
.layouts_salvos
|
||||
.iter()
|
||||
.find(|l| l.nome() == nome)
|
||||
.and_then(|l| l.id());
|
||||
|
||||
match (parsed, id_existente) {
|
||||
(Some(mut layout), Some(id)) => {
|
||||
match &mut layout {
|
||||
Layout::Csv { id: i, .. } => *i = Some(id),
|
||||
Layout::Xlsx { id: i, .. } => *i = Some(id),
|
||||
}
|
||||
app.exibir_confirmacao(
|
||||
"Conflito de nome",
|
||||
format!(
|
||||
"Já existe um layout com o nome '{}'. Deseja sobrescrever?",
|
||||
nome
|
||||
),
|
||||
AcaoModal::SobrescreverLayout(layout),
|
||||
);
|
||||
}
|
||||
_ => {
|
||||
app.exibir_erro(format!(
|
||||
"Conflito de nome: layout '{}' já existe.",
|
||||
nome
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
app.exibir_erro(format!("Erro ao importar layout: {}", e));
|
||||
|
||||
Reference in New Issue
Block a user