gitkraft_gui/features/diff/
update.rs1use iced::Task;
4
5use crate::message::Message;
6use crate::state::GitKraft;
7
8pub fn update(state: &mut GitKraft, message: Message) -> Task<Message> {
11 match message {
12 Message::SelectDiffByIndex(index) => {
13 let tab = state.active_tab();
15 let file_entry = tab.commit_files.get(index);
16 let repo_path = tab.repo_path.clone();
17 let oid = tab.selected_commit_oid.clone();
18
19 if let (Some(entry), Some(path), Some(oid)) = (file_entry, repo_path, oid) {
20 let file_path = entry.display_path().to_string();
21 let tab = state.active_tab_mut();
22 tab.selected_file_index = Some(index);
23 tab.is_loading_file_diff = true;
26 tab.diff_scroll_offset = 0.0;
27 crate::features::commits::commands::load_single_file_diff(path, oid, file_path)
28 } else {
29 Task::none()
30 }
31 }
32
33 Message::SelectDiff(diff_info) => {
34 state.active_tab_mut().context_menu = None;
35 let tab = state.active_tab_mut();
36 tab.selected_diff = Some(diff_info);
37 tab.diff_scroll_offset = 0.0;
38 Task::none()
39 }
40
41 _ => Task::none(),
42 }
43}