shared/screens/settings_previous_connections_actions/
mod.rsmod confirm_exit_to_settings_screen;
mod delete_a_previous_connection;
mod exit_to_settings_screen;
mod rename_previous_connection;
mod save_previous_connections;
mod save_previous_connections_result;
use crate::capabilities::persistent_storage::PersistentStorageOutput;
use crate::model::{Model, Screens};
use crate::screens::settings_previous_connections_actions::confirm_exit_to_settings_screen::confirm_exit_to_settings_screen;
use crate::screens::settings_previous_connections_actions::delete_a_previous_connection::delete_a_previous_connection;
use crate::screens::settings_previous_connections_actions::exit_to_settings_screen::exit_to_settings_screen;
use crate::screens::settings_previous_connections_actions::rename_previous_connection::rename_previous_connection;
use crate::screens::settings_previous_connections_actions::save_previous_connections::save_previous_connections;
use crate::screens::settings_previous_connections_actions::save_previous_connections_result::save_previous_connections_result;
use crate::screens_common::model::previous_connection::PreviousConnection;
use crate::{Effect, Event};
use crux_core::Command;
use log::{error, trace, Level};
use serde::{Deserialize, Serialize};
#[derive(Default, Clone, Debug)]
pub struct SettingsPreviousConnectionsActionsScreenData {
pub previous_connections: Vec<PreviousConnection>,
pub unsaved_data: bool,
pub display_save_dialog: bool,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum ScEvSettingPreviousConnections {
RenamePreviousConnection(Index, Name),
DeletePreviousConnection(Index),
SavePreviousConnections(AndExit),
#[serde(skip)]
SavePreviousConnectionsResult(PersistentStorageOutput, AndExit),
ExitToSettingsScreen,
ConfirmExitToSettingsScreen,
}
type Index = String;
type Name = String;
type AndExit = bool;
pub fn setting_previous_connections_events(
event: ScEvSettingPreviousConnections,
model: &mut Model,
) -> Command<Effect, Event> {
trace!("select setting_previous_connections_events screen event: Validating model");
let Screens::SettingPreviousConnectionsScreen(ref mut screen_data) = model.screen else {
error!("Screen was in an unexpected state {:?}", model.screen);
model
.user_messages
.add_message("Unrecoverable internal error state", Level::Error);
return crux_core::render::render();
};
trace!("Running select SettingPreviousConnectionsEvents");
match event {
ScEvSettingPreviousConnections::RenamePreviousConnection(index, name) => {
rename_previous_connection(screen_data, &mut model.user_messages, index, name)
}
ScEvSettingPreviousConnections::DeletePreviousConnection(index) => {
delete_a_previous_connection(screen_data, &mut model.user_messages, index)
}
ScEvSettingPreviousConnections::SavePreviousConnections(and_exit) => {
save_previous_connections(screen_data, and_exit)
}
ScEvSettingPreviousConnections::SavePreviousConnectionsResult(result, and_edit) => {
save_previous_connections_result(
&mut model.screen,
&mut model.user_messages,
result,
and_edit,
)
}
ScEvSettingPreviousConnections::ExitToSettingsScreen => {
exit_to_settings_screen(&mut model.screen, &mut model.user_messages)
}
ScEvSettingPreviousConnections::ConfirmExitToSettingsScreen => {
confirm_exit_to_settings_screen(&mut model.screen, &mut model.user_messages)
}
}
}