Files
managarr/src/ui/readarr_ui/library/delete_author_ui.rs
T

86 lines
2.6 KiB
Rust

use ratatui::Frame;
use ratatui::layout::Rect;
use crate::app::App;
use crate::models::Route;
use crate::models::servarr_data::readarr::readarr_data::{
ActiveReadarrBlock, DELETE_AUTHOR_BLOCKS,
};
use crate::ui::DrawUi;
use crate::ui::widgets::checkbox::Checkbox;
use crate::ui::widgets::confirmation_prompt::ConfirmationPrompt;
use crate::ui::widgets::popup::{Popup, Size};
#[cfg(test)]
#[path = "delete_author_ui_tests.rs"]
mod delete_author_ui_tests;
pub(super) struct DeleteAuthorUi;
impl DrawUi for DeleteAuthorUi {
fn accepts(route: Route) -> bool {
let Route::Readarr(active_readarr_block, _) = route else {
return false;
};
DELETE_AUTHOR_BLOCKS.contains(&active_readarr_block)
}
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, _area: Rect) {
if matches!(
app.get_current_route(),
Route::Readarr(ActiveReadarrBlock::DeleteAuthorPrompt, _)
) {
let selected_block = app.data.readarr_data.selected_block.get_active_block();
let highlights = delete_author_prompt_highlights(selected_block);
let prompt = format!(
"Do you really want to delete the author: \n{}?",
app
.data
.readarr_data
.authors
.current_selection()
.author_name
.text
);
let checkboxes = vec![
Checkbox::new("Delete Author Files")
.checked(app.data.readarr_data.delete_files)
.highlighted(highlights.delete_files),
Checkbox::new("Add List Exclusion")
.checked(app.data.readarr_data.add_import_list_exclusion)
.highlighted(highlights.add_import_list_exclusion),
];
let confirmation_prompt = ConfirmationPrompt::new()
.title("Delete Author")
.prompt(&prompt)
.checkboxes(checkboxes)
.yes_no_highlighted(highlights.confirm)
.yes_no_value(app.data.readarr_data.prompt_confirm);
f.render_widget(
Popup::new(confirmation_prompt).size(Size::MediumPrompt),
f.area(),
);
}
}
}
#[derive(PartialEq, Eq)]
#[cfg_attr(test, derive(Debug))]
struct DeleteAuthorPromptHighlights {
delete_files: bool,
add_import_list_exclusion: bool,
confirm: bool,
}
fn delete_author_prompt_highlights(
selected_block: ActiveReadarrBlock,
) -> DeleteAuthorPromptHighlights {
DeleteAuthorPromptHighlights {
delete_files: selected_block == ActiveReadarrBlock::DeleteAuthorToggleDeleteFile,
add_import_list_exclusion: selected_block
== ActiveReadarrBlock::DeleteAuthorToggleAddListExclusion,
confirm: selected_block == ActiveReadarrBlock::DeleteAuthorConfirmPrompt,
}
}