diff --git a/src/pages/repetition_settings.rs b/src/pages/repetition_settings.rs index b35f810..2fb0730 100644 --- a/src/pages/repetition_settings.rs +++ b/src/pages/repetition_settings.rs @@ -9,6 +9,7 @@ use crate::pages::repetition_settings::RepetitionSettingsMessage::*; use crate::styling::*; use crate::{push_error, push_error_task}; use iced::widget::button::danger; +use iced::widget::space::horizontal; use iced::widget::text_input::Catalog; use iced::widget::{button, column, row, scrollable, space, text, text_input}; use iced::{Element, Task}; @@ -22,6 +23,7 @@ pub struct RepetitionSettingsState { settings_data: DeckSettings, state: AppState, real_delete: bool, + real_delete_states: bool, correct_filter: bool, filter_changed: bool, filtered_words: Option, @@ -38,6 +40,7 @@ impl RepetitionSettingsState { settings_handle: settings, state, real_delete: false, + real_delete_states: false, correct_filter: true, filter_changed: false, filtered_words: None, @@ -105,7 +108,26 @@ impl NavigatedPage for RepetitionSettingsState { return Task::done(RootMessage::RepetitionSettings(Back)); } - RevertDeleteSet => self.real_delete = false, + RevertDeleteSet => { + self.real_delete = false; + self.real_delete_states = true; + } + DeleteStates => { + if !self.real_delete_states { + self.real_delete_states = true; + return Task::future(async { + tokio::time::sleep(Duration::from_millis(3000)).await; + RootMessage::RepetitionSettings(RevertDeleteSet) + }); + } + let mut states = self.state.card_states.write(); + let deck_id = self.settings_handle.id; + let mut query = states.query(Arc::new(move |state| {state.deck_id == deck_id})).handles().collect::>(); + if let Err(e) = states.delete_many(query.as_mut_slice()) { + return push_error_task!(e); + } + self.real_delete_states = false; + } } Task::none() } @@ -159,6 +181,14 @@ impl NavigatedPage for RepetitionSettingsState { .height(Fill), row![ button("Сохранить").style(jl_button).on_press(Save), + horizontal(), + button(if self.real_delete_states { + "Вы уверены?" + } else { + "Удалить прогресс?" + }) + .style(danger) + .on_press(DeleteStates), button(if self.real_delete { "Вы уверены?" } else { @@ -166,7 +196,6 @@ impl NavigatedPage for RepetitionSettingsState { }) .style(danger) .on_press(DeleteSet), - space().width(Fill), ] .spacing(DEFAULT_SPACING), ] @@ -222,5 +251,6 @@ pub enum RepetitionSettingsMessage { SetFilter(String), TryFilter, DeleteSet, + DeleteStates, RevertDeleteSet, }