Fix: Correction bug de formulaire - champs reinitialises a chaque frame
901512c parent: 6f287ca modified
src/config/app_state.rs +47 -0 | @@ -17,8 +17,22 @@ pub struct AppState { | ||
| 17 | 17 | pub current_feed: Option<usize>, |
| 18 | 18 | /// Whether the add feed dialog is visible |
| 19 | 19 | pub show_add_feed_dialog: bool, |
| 20 | + /// Temporary storage for new feed name during add | |
| 21 | + pub new_feed_name: String, | |
| 22 | + /// Temporary storage for new feed URL during add | |
| 23 | + pub new_feed_url: String, | |
| 24 | + /// Temporary storage for new feed download path during add | |
| 25 | + pub new_feed_download_path: String, | |
| 20 | 26 | /// Whether the edit feed dialog is visible |
| 21 | 27 | pub show_edit_feed_dialog: bool, |
| 28 | + /// Temporary storage for edit feed name | |
| 29 | + pub edit_feed_name: String, | |
| 30 | + /// Temporary storage for edit feed URL | |
| 31 | + pub edit_feed_url: String, | |
| 32 | + /// Temporary storage for edit feed download path | |
| 33 | + pub edit_feed_download_path: String, | |
| 34 | + /// Temporary storage for edit feed enabled state | |
| 35 | + pub edit_feed_enabled: bool, | |
| 22 | 36 | /// Index of the feed being edited (if any) |
| 23 | 37 | pub editing_feed_index: Option<usize>, |
| 24 | 38 | /// Whether a synchronization is currently in progress |
| @@ -42,7 +56,14 @@ impl AppState { | ||
| 42 | 56 | feeds: Vec::new(), |
| 43 | 57 | current_feed: None, |
| 44 | 58 | show_add_feed_dialog: false, |
| 59 | + new_feed_name: String::new(), | |
| 60 | + new_feed_url: String::new(), | |
| 61 | + new_feed_download_path: String::new(), | |
| 45 | 62 | show_edit_feed_dialog: false, |
| 63 | + edit_feed_name: String::new(), | |
| 64 | + edit_feed_url: String::new(), | |
| 65 | + edit_feed_download_path: String::new(), | |
| 66 | + edit_feed_enabled: true, | |
| 46 | 67 | editing_feed_index: None, |
| 47 | 68 | sync_in_progress: false, |
| 48 | 69 | download_progress: HashMap::new(), |
| @@ -191,6 +212,32 @@ impl AppState { | ||
| 191 | 212 | pub fn get_download_progress(&self, feed_id: &str) -> f32 { |
| 192 | 213 | *self.download_progress.get(feed_id).unwrap_or(&0.0) |
| 193 | 214 | } |
| 215 | + | |
| 216 | + /// Clears the new feed form fields | |
| 217 | + pub fn clear_new_feed_form(&mut self) { | |
| 218 | + self.new_feed_name.clear(); | |
| 219 | + self.new_feed_url.clear(); | |
| 220 | + self.new_feed_download_path.clear(); | |
| 221 | + } | |
| 222 | + | |
| 223 | + /// Loads feed data into edit form fields | |
| 224 | + pub fn load_edit_feed_form(&mut self, index: usize) { | |
| 225 | + if let Some(feed) = self.feeds.get(index) { | |
| 226 | + self.edit_feed_name = feed.name.clone(); | |
| 227 | + self.edit_feed_url = feed.url.clone(); | |
| 228 | + self.edit_feed_download_path = feed.download_path.to_string_lossy().to_string(); | |
| 229 | + self.edit_feed_enabled = feed.enabled; | |
| 230 | + } | |
| 231 | + } | |
| 232 | + | |
| 233 | + /// Clears the edit feed form fields | |
| 234 | + pub fn clear_edit_feed_form(&mut self) { | |
| 235 | + self.edit_feed_name.clear(); | |
| 236 | + self.edit_feed_url.clear(); | |
| 237 | + self.edit_feed_download_path.clear(); | |
| 238 | + self.edit_feed_enabled = true; | |
| 239 | + self.editing_feed_index = None; | |
| 240 | + } | |
| 194 | 241 | } |
| 195 | 242 | |
| 196 | 243 | #[cfg(test)] |
| @@ -17,8 +17,22 @@ pub struct AppState { | |||
| 17 | pub current_feed: Option<usize>, | 17 | pub current_feed: Option<usize>, |
| 18 | /// Whether the add feed dialog is visible | 18 | /// Whether the add feed dialog is visible |
| 19 | pub show_add_feed_dialog: bool, | 19 | pub show_add_feed_dialog: bool, |
| 20 | + /// Temporary storage for new feed name during add | ||
| 21 | + pub new_feed_name: String, | ||
| 22 | + /// Temporary storage for new feed URL during add | ||
| 23 | + pub new_feed_url: String, | ||
| 24 | + /// Temporary storage for new feed download path during add | ||
| 25 | + pub new_feed_download_path: String, | ||
| 20 | /// Whether the edit feed dialog is visible | 26 | /// Whether the edit feed dialog is visible |
| 21 | pub show_edit_feed_dialog: bool, | 27 | pub show_edit_feed_dialog: bool, |
| 28 | + /// Temporary storage for edit feed name | ||
| 29 | + pub edit_feed_name: String, | ||
| 30 | + /// Temporary storage for edit feed URL | ||
| 31 | + pub edit_feed_url: String, | ||
| 32 | + /// Temporary storage for edit feed download path | ||
| 33 | + pub edit_feed_download_path: String, | ||
| 34 | + /// Temporary storage for edit feed enabled state | ||
| 35 | + pub edit_feed_enabled: bool, | ||
| 22 | /// Index of the feed being edited (if any) | 36 | /// Index of the feed being edited (if any) |
| 23 | pub editing_feed_index: Option<usize>, | 37 | pub editing_feed_index: Option<usize>, |
| 24 | /// Whether a synchronization is currently in progress | 38 | /// Whether a synchronization is currently in progress |
| @@ -42,7 +56,14 @@ impl AppState { | |||
| 42 | feeds: Vec::new(), | 56 | feeds: Vec::new(), |
| 43 | current_feed: None, | 57 | current_feed: None, |
| 44 | show_add_feed_dialog: false, | 58 | show_add_feed_dialog: false, |
| 59 | + new_feed_name: String::new(), | ||
| 60 | + new_feed_url: String::new(), | ||
| 61 | + new_feed_download_path: String::new(), | ||
| 45 | show_edit_feed_dialog: false, | 62 | show_edit_feed_dialog: false, |
| 63 | + edit_feed_name: String::new(), | ||
| 64 | + edit_feed_url: String::new(), | ||
| 65 | + edit_feed_download_path: String::new(), | ||
| 66 | + edit_feed_enabled: true, | ||
| 46 | editing_feed_index: None, | 67 | editing_feed_index: None, |
| 47 | sync_in_progress: false, | 68 | sync_in_progress: false, |
| 48 | download_progress: HashMap::new(), | 69 | download_progress: HashMap::new(), |
| @@ -191,6 +212,32 @@ impl AppState { | |||
| 191 | pub fn get_download_progress(&self, feed_id: &str) -> f32 { | 212 | pub fn get_download_progress(&self, feed_id: &str) -> f32 { |
| 192 | *self.download_progress.get(feed_id).unwrap_or(&0.0) | 213 | *self.download_progress.get(feed_id).unwrap_or(&0.0) |
| 193 | } | 214 | } |
| 215 | + | ||
| 216 | + /// Clears the new feed form fields | ||
| 217 | + pub fn clear_new_feed_form(&mut self) { | ||
| 218 | + self.new_feed_name.clear(); | ||
| 219 | + self.new_feed_url.clear(); | ||
| 220 | + self.new_feed_download_path.clear(); | ||
| 221 | + } | ||
| 222 | + | ||
| 223 | + /// Loads feed data into edit form fields | ||
| 224 | + pub fn load_edit_feed_form(&mut self, index: usize) { | ||
| 225 | + if let Some(feed) = self.feeds.get(index) { | ||
| 226 | + self.edit_feed_name = feed.name.clone(); | ||
| 227 | + self.edit_feed_url = feed.url.clone(); | ||
| 228 | + self.edit_feed_download_path = feed.download_path.to_string_lossy().to_string(); | ||
| 229 | + self.edit_feed_enabled = feed.enabled; | ||
| 230 | + } | ||
| 231 | + } | ||
| 232 | + | ||
| 233 | + /// Clears the edit feed form fields | ||
| 234 | + pub fn clear_edit_feed_form(&mut self) { | ||
| 235 | + self.edit_feed_name.clear(); | ||
| 236 | + self.edit_feed_url.clear(); | ||
| 237 | + self.edit_feed_download_path.clear(); | ||
| 238 | + self.edit_feed_enabled = true; | ||
| 239 | + self.editing_feed_index = None; | ||
| 240 | + } | ||
| 194 | } | 241 | } |
| 195 | 242 | ||
| 196 | #[cfg(test)] | 243 | #[cfg(test)] |
modified
src/ui/add_feed_dialog.rs +11 -8 | @@ -14,9 +14,6 @@ pub fn draw_add_feed_dialog(state: &mut AppState, ui: &mut Ui) { | ||
| 14 | 14 | } |
| 15 | 15 | |
| 16 | 16 | let show_dialog = RefCell::new(state.show_add_feed_dialog); |
| 17 | - let mut name = String::new(); | |
| 18 | - let mut url = String::new(); | |
| 19 | - let mut download_path = String::new(); | |
| 20 | 17 | |
| 21 | 18 | egui::Window::new("Ajouter un flux RSS") |
| 22 | 19 | .open(&mut *show_dialog.borrow_mut()) |
| @@ -27,30 +24,36 @@ pub fn draw_add_feed_dialog(state: &mut AppState, ui: &mut Ui) { | ||
| 27 | 24 | ui.separator(); |
| 28 | 25 | |
| 29 | 26 | ui.label("Nom du podcast"); |
| 30 | - ui.text_edit_singleline(&mut name); | |
| 27 | + ui.text_edit_singleline(&mut state.new_feed_name); | |
| 31 | 28 | |
| 32 | 29 | ui.label("URL du flux RSS"); |
| 33 | - ui.text_edit_singleline(&mut url); | |
| 30 | + ui.text_edit_singleline(&mut state.new_feed_url); | |
| 34 | 31 | |
| 35 | 32 | ui.label("Dossier de téléchargement"); |
| 36 | - ui.text_edit_singleline(&mut download_path); | |
| 33 | + ui.text_edit_singleline(&mut state.new_feed_download_path); | |
| 37 | 34 | |
| 38 | 35 | ui.separator(); |
| 39 | 36 | |
| 40 | 37 | // Validation |
| 41 | - let valid = !url.is_empty() && !download_path.is_empty(); | |
| 38 | + let valid = !state.new_feed_url.is_empty() && !state.new_feed_download_path.is_empty(); | |
| 42 | 39 | |
| 43 | 40 | ui.horizontal(|ui| { |
| 44 | 41 | if valid && ui.button("Ajouter").clicked() { |
| 45 | - let feed = Feed::new(url.clone(), name.clone(), PathBuf::from(download_path.clone())); | |
| 42 | + let feed = Feed::new( | |
| 43 | + state.new_feed_url.clone(), | |
| 44 | + state.new_feed_name.clone(), | |
| 45 | + PathBuf::from(state.new_feed_download_path.clone()) | |
| 46 | + ); | |
| 46 | 47 | state.add_feed(feed); |
| 47 | 48 | super::super::config::storage::save_feeds_default(&state.feeds).ok(); |
| 49 | + state.clear_new_feed_form(); | |
| 48 | 50 | *show_dialog.borrow_mut() = false; |
| 49 | 51 | } else { |
| 50 | 52 | ui.label("Veuillez remplir tous les champs"); |
| 51 | 53 | } |
| 52 | 54 | |
| 53 | 55 | if ui.button("Annuler").clicked() { |
| 56 | + state.clear_new_feed_form(); | |
| 54 | 57 | *show_dialog.borrow_mut() = false; |
| 55 | 58 | } |
| 56 | 59 | }); |
| @@ -14,9 +14,6 @@ pub fn draw_add_feed_dialog(state: &mut AppState, ui: &mut Ui) { | |||
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | let show_dialog = RefCell::new(state.show_add_feed_dialog); | 16 | let show_dialog = RefCell::new(state.show_add_feed_dialog); |
| 17 | - let mut name = String::new(); | ||
| 18 | - let mut url = String::new(); | ||
| 19 | - let mut download_path = String::new(); | ||
| 20 | 17 | ||
| 21 | egui::Window::new("Ajouter un flux RSS") | 18 | egui::Window::new("Ajouter un flux RSS") |
| 22 | .open(&mut *show_dialog.borrow_mut()) | 19 | .open(&mut *show_dialog.borrow_mut()) |
| @@ -27,30 +24,36 @@ pub fn draw_add_feed_dialog(state: &mut AppState, ui: &mut Ui) { | |||
| 27 | ui.separator(); | 24 | ui.separator(); |
| 28 | 25 | ||
| 29 | ui.label("Nom du podcast"); | 26 | ui.label("Nom du podcast"); |
| 30 | - ui.text_edit_singleline(&mut name); | 27 | + ui.text_edit_singleline(&mut state.new_feed_name); |
| 31 | 28 | ||
| 32 | ui.label("URL du flux RSS"); | 29 | ui.label("URL du flux RSS"); |
| 33 | - ui.text_edit_singleline(&mut url); | 30 | + ui.text_edit_singleline(&mut state.new_feed_url); |
| 34 | 31 | ||
| 35 | ui.label("Dossier de téléchargement"); | 32 | ui.label("Dossier de téléchargement"); |
| 36 | - ui.text_edit_singleline(&mut download_path); | 33 | + ui.text_edit_singleline(&mut state.new_feed_download_path); |
| 37 | 34 | ||
| 38 | ui.separator(); | 35 | ui.separator(); |
| 39 | 36 | ||
| 40 | // Validation | 37 | // Validation |
| 41 | - let valid = !url.is_empty() && !download_path.is_empty(); | 38 | + let valid = !state.new_feed_url.is_empty() && !state.new_feed_download_path.is_empty(); |
| 42 | 39 | ||
| 43 | ui.horizontal(|ui| { | 40 | ui.horizontal(|ui| { |
| 44 | if valid && ui.button("Ajouter").clicked() { | 41 | if valid && ui.button("Ajouter").clicked() { |
| 45 | - let feed = Feed::new(url.clone(), name.clone(), PathBuf::from(download_path.clone())); | 42 | + let feed = Feed::new( |
| 43 | + state.new_feed_url.clone(), | ||
| 44 | + state.new_feed_name.clone(), | ||
| 45 | + PathBuf::from(state.new_feed_download_path.clone()) | ||
| 46 | + ); | ||
| 46 | state.add_feed(feed); | 47 | state.add_feed(feed); |
| 47 | super::super::config::storage::save_feeds_default(&state.feeds).ok(); | 48 | super::super::config::storage::save_feeds_default(&state.feeds).ok(); |
| 49 | + state.clear_new_feed_form(); | ||
| 48 | *show_dialog.borrow_mut() = false; | 50 | *show_dialog.borrow_mut() = false; |
| 49 | } else { | 51 | } else { |
| 50 | ui.label("Veuillez remplir tous les champs"); | 52 | ui.label("Veuillez remplir tous les champs"); |
| 51 | } | 53 | } |
| 52 | 54 | ||
| 53 | if ui.button("Annuler").clicked() { | 55 | if ui.button("Annuler").clicked() { |
| 56 | + state.clear_new_feed_form(); | ||
| 54 | *show_dialog.borrow_mut() = false; | 57 | *show_dialog.borrow_mut() = false; |
| 55 | } | 58 | } |
| 56 | }); | 59 | }); |
modified
src/ui/feed_edit_dialog.rs +17 -22 | @@ -15,59 +15,54 @@ pub fn draw_edit_feed_dialog(state: &mut AppState, ui: &mut Ui) { | ||
| 15 | 15 | }; |
| 16 | 16 | |
| 17 | 17 | if editing_index >= state.feeds.len() { |
| 18 | - state.editing_feed_index = None; | |
| 19 | - state.show_edit_feed_dialog = false; | |
| 18 | + state.clear_edit_feed_form(); | |
| 20 | 19 | return; |
| 21 | 20 | } |
| 22 | 21 | |
| 22 | + // Load form data on first open | |
| 23 | + if state.edit_feed_name.is_empty() && state.editing_feed_index == Some(editing_index) { | |
| 24 | + state.load_edit_feed_form(editing_index); | |
| 25 | + } | |
| 26 | + | |
| 23 | 27 | let show_dialog = RefCell::new(state.show_edit_feed_dialog); |
| 24 | - let name = state.feeds[editing_index].name.clone(); | |
| 25 | - let url = state.feeds[editing_index].url.clone(); | |
| 26 | - let download_path = state.feeds[editing_index].download_path.to_string_lossy().to_string(); | |
| 27 | - let enabled = state.feeds[editing_index].enabled; | |
| 28 | - | |
| 29 | - let mut name = name; | |
| 30 | - let mut url = url; | |
| 31 | - let mut download_path = download_path; | |
| 32 | - let mut enabled = enabled; | |
| 33 | 28 | |
| 34 | 29 | egui::Window::new("Éditer le flux") |
| 35 | 30 | .open(&mut *show_dialog.borrow_mut()) |
| 36 | 31 | .resizable(false) |
| 37 | 32 | .show(ui.ctx(), |ui| { |
| 38 | 33 | ui.vertical(|ui| { |
| 39 | - ui.label(format!("Éditer: {}", name)); | |
| 34 | + ui.label(format!("Éditer: {}", state.edit_feed_name)); | |
| 40 | 35 | ui.separator(); |
| 41 | 36 | |
| 42 | 37 | ui.label("Nom du podcast"); |
| 43 | - ui.text_edit_singleline(&mut name); | |
| 38 | + ui.text_edit_singleline(&mut state.edit_feed_name); | |
| 44 | 39 | |
| 45 | 40 | ui.label("URL du flux RSS"); |
| 46 | - ui.text_edit_singleline(&mut url); | |
| 41 | + ui.text_edit_singleline(&mut state.edit_feed_url); | |
| 47 | 42 | |
| 48 | 43 | ui.label("Dossier de téléchargement"); |
| 49 | - ui.text_edit_singleline(&mut download_path); | |
| 44 | + ui.text_edit_singleline(&mut state.edit_feed_download_path); | |
| 50 | 45 | |
| 51 | - ui.checkbox(&mut enabled, "Activé"); | |
| 46 | + ui.checkbox(&mut state.edit_feed_enabled, "Activé"); | |
| 52 | 47 | |
| 53 | 48 | ui.separator(); |
| 54 | 49 | |
| 55 | 50 | ui.horizontal(|ui| { |
| 56 | 51 | if ui.button("Sauvegarder").clicked() { |
| 57 | - state.feeds[editing_index].name = name.clone(); | |
| 58 | - state.feeds[editing_index].url = url.clone(); | |
| 59 | - state.feeds[editing_index].download_path = PathBuf::from(download_path.clone()); | |
| 60 | - state.feeds[editing_index].enabled = enabled; | |
| 52 | + state.feeds[editing_index].name = state.edit_feed_name.clone(); | |
| 53 | + state.feeds[editing_index].url = state.edit_feed_url.clone(); | |
| 54 | + state.feeds[editing_index].download_path = PathBuf::from(state.edit_feed_download_path.clone()); | |
| 55 | + state.feeds[editing_index].enabled = state.edit_feed_enabled; | |
| 61 | 56 | |
| 62 | 57 | super::super::config::storage::save_feeds_default(&state.feeds).ok(); |
| 63 | 58 | state.set_info("Flux modifié".to_string()); |
| 59 | + state.clear_edit_feed_form(); | |
| 64 | 60 | *show_dialog.borrow_mut() = false; |
| 65 | - state.editing_feed_index = None; | |
| 66 | 61 | } |
| 67 | 62 | |
| 68 | 63 | if ui.button("Annuler").clicked() { |
| 64 | + state.clear_edit_feed_form(); | |
| 69 | 65 | *show_dialog.borrow_mut() = false; |
| 70 | - state.editing_feed_index = None; | |
| 71 | 66 | } |
| 72 | 67 | }); |
| 73 | 68 | }); |
| @@ -15,59 +15,54 @@ pub fn draw_edit_feed_dialog(state: &mut AppState, ui: &mut Ui) { | |||
| 15 | }; | 15 | }; |
| 16 | 16 | ||
| 17 | if editing_index >= state.feeds.len() { | 17 | if editing_index >= state.feeds.len() { |
| 18 | - state.editing_feed_index = None; | 18 | + state.clear_edit_feed_form(); |
| 19 | - state.show_edit_feed_dialog = false; | ||
| 20 | return; | 19 | return; |
| 21 | } | 20 | } |
| 22 | 21 | ||
| 22 | + // Load form data on first open | ||
| 23 | + if state.edit_feed_name.is_empty() && state.editing_feed_index == Some(editing_index) { | ||
| 24 | + state.load_edit_feed_form(editing_index); | ||
| 25 | + } | ||
| 26 | + | ||
| 23 | let show_dialog = RefCell::new(state.show_edit_feed_dialog); | 27 | let show_dialog = RefCell::new(state.show_edit_feed_dialog); |
| 24 | - let name = state.feeds[editing_index].name.clone(); | ||
| 25 | - let url = state.feeds[editing_index].url.clone(); | ||
| 26 | - let download_path = state.feeds[editing_index].download_path.to_string_lossy().to_string(); | ||
| 27 | - let enabled = state.feeds[editing_index].enabled; | ||
| 28 | - | ||
| 29 | - let mut name = name; | ||
| 30 | - let mut url = url; | ||
| 31 | - let mut download_path = download_path; | ||
| 32 | - let mut enabled = enabled; | ||
| 33 | 28 | ||
| 34 | egui::Window::new("Éditer le flux") | 29 | egui::Window::new("Éditer le flux") |
| 35 | .open(&mut *show_dialog.borrow_mut()) | 30 | .open(&mut *show_dialog.borrow_mut()) |
| 36 | .resizable(false) | 31 | .resizable(false) |
| 37 | .show(ui.ctx(), |ui| { | 32 | .show(ui.ctx(), |ui| { |
| 38 | ui.vertical(|ui| { | 33 | ui.vertical(|ui| { |
| 39 | - ui.label(format!("Éditer: {}", name)); | 34 | + ui.label(format!("Éditer: {}", state.edit_feed_name)); |
| 40 | ui.separator(); | 35 | ui.separator(); |
| 41 | 36 | ||
| 42 | ui.label("Nom du podcast"); | 37 | ui.label("Nom du podcast"); |
| 43 | - ui.text_edit_singleline(&mut name); | 38 | + ui.text_edit_singleline(&mut state.edit_feed_name); |
| 44 | 39 | ||
| 45 | ui.label("URL du flux RSS"); | 40 | ui.label("URL du flux RSS"); |
| 46 | - ui.text_edit_singleline(&mut url); | 41 | + ui.text_edit_singleline(&mut state.edit_feed_url); |
| 47 | 42 | ||
| 48 | ui.label("Dossier de téléchargement"); | 43 | ui.label("Dossier de téléchargement"); |
| 49 | - ui.text_edit_singleline(&mut download_path); | 44 | + ui.text_edit_singleline(&mut state.edit_feed_download_path); |
| 50 | 45 | ||
| 51 | - ui.checkbox(&mut enabled, "Activé"); | 46 | + ui.checkbox(&mut state.edit_feed_enabled, "Activé"); |
| 52 | 47 | ||
| 53 | ui.separator(); | 48 | ui.separator(); |
| 54 | 49 | ||
| 55 | ui.horizontal(|ui| { | 50 | ui.horizontal(|ui| { |
| 56 | if ui.button("Sauvegarder").clicked() { | 51 | if ui.button("Sauvegarder").clicked() { |
| 57 | - state.feeds[editing_index].name = name.clone(); | 52 | + state.feeds[editing_index].name = state.edit_feed_name.clone(); |
| 58 | - state.feeds[editing_index].url = url.clone(); | 53 | + state.feeds[editing_index].url = state.edit_feed_url.clone(); |
| 59 | - state.feeds[editing_index].download_path = PathBuf::from(download_path.clone()); | 54 | + state.feeds[editing_index].download_path = PathBuf::from(state.edit_feed_download_path.clone()); |
| 60 | - state.feeds[editing_index].enabled = enabled; | 55 | + state.feeds[editing_index].enabled = state.edit_feed_enabled; |
| 61 | 56 | ||
| 62 | super::super::config::storage::save_feeds_default(&state.feeds).ok(); | 57 | super::super::config::storage::save_feeds_default(&state.feeds).ok(); |
| 63 | state.set_info("Flux modifié".to_string()); | 58 | state.set_info("Flux modifié".to_string()); |
| 59 | + state.clear_edit_feed_form(); | ||
| 64 | *show_dialog.borrow_mut() = false; | 60 | *show_dialog.borrow_mut() = false; |
| 65 | - state.editing_feed_index = None; | ||
| 66 | } | 61 | } |
| 67 | 62 | ||
| 68 | if ui.button("Annuler").clicked() { | 63 | if ui.button("Annuler").clicked() { |
| 64 | + state.clear_edit_feed_form(); | ||
| 69 | *show_dialog.borrow_mut() = false; | 65 | *show_dialog.borrow_mut() = false; |
| 70 | - state.editing_feed_index = None; | ||
| 71 | } | 66 | } |
| 72 | }); | 67 | }); |
| 73 | }); | 68 | }); |
modified
src/ui/feed_list.rs +1 -0 | @@ -62,6 +62,7 @@ fn draw_feed_item(state: &mut AppState, ui: &mut Ui, index: usize) { | ||
| 62 | 62 | // Edit button |
| 63 | 63 | if ui.button("✏️").on_hover_text("Éditer").clicked() { |
| 64 | 64 | state.editing_feed_index = Some(index); |
| 65 | + state.load_edit_feed_form(index); | |
| 65 | 66 | state.show_edit_feed_dialog = true; |
| 66 | 67 | } |
| 67 | 68 | |
| @@ -62,6 +62,7 @@ fn draw_feed_item(state: &mut AppState, ui: &mut Ui, index: usize) { | |||
| 62 | // Edit button | 62 | // Edit button |
| 63 | if ui.button("✏️").on_hover_text("Éditer").clicked() { | 63 | if ui.button("✏️").on_hover_text("Éditer").clicked() { |
| 64 | state.editing_feed_index = Some(index); | 64 | state.editing_feed_index = Some(index); |
| 65 | + state.load_edit_feed_form(index); | ||
| 65 | state.show_edit_feed_dialog = true; | 66 | state.show_edit_feed_dialog = true; |
| 66 | } | 67 | } |
| 67 | 68 | ||
modified
src/ui/home.rs +1 -0 | @@ -37,6 +37,7 @@ pub fn draw_home(state: &mut AppState, ui: &mut Ui) { | ||
| 37 | 37 | fn draw_action_buttons(state: &mut AppState, ui: &mut Ui) { |
| 38 | 38 | ui.horizontal(|ui| { |
| 39 | 39 | if ui.button("📥 Ajouter un flux").clicked() { |
| 40 | + state.clear_new_feed_form(); | |
| 40 | 41 | state.show_add_feed_dialog = true; |
| 41 | 42 | } |
| 42 | 43 | |
| @@ -37,6 +37,7 @@ pub fn draw_home(state: &mut AppState, ui: &mut Ui) { | |||
| 37 | fn draw_action_buttons(state: &mut AppState, ui: &mut Ui) { | 37 | fn draw_action_buttons(state: &mut AppState, ui: &mut Ui) { |
| 38 | ui.horizontal(|ui| { | 38 | ui.horizontal(|ui| { |
| 39 | if ui.button("📥 Ajouter un flux").clicked() { | 39 | if ui.button("📥 Ajouter un flux").clicked() { |
| 40 | + state.clear_new_feed_form(); | ||
| 40 | state.show_add_feed_dialog = true; | 41 | state.show_add_feed_dialog = true; |
| 41 | } | 42 | } |
| 42 | 43 | ||