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 let tab = state.active_tab_mut();
35 tab.selected_diff = Some(diff_info);
36 tab.diff_scroll_offset = 0.0;
37 Task::none()
38 }
39
40 _ => Task::none(),
41 }
42}