gitkraft_gui/features/stash/
update.rs1use iced::Task;
4
5use crate::message::Message;
6use crate::state::GitKraft;
7
8use super::commands;
9
10pub fn update(state: &mut GitKraft, message: Message) -> Task<Message> {
13 match message {
14 Message::StashMessageChanged(msg) => {
15 state.active_tab_mut().stash_message = msg;
16 Task::none()
17 }
18
19 Message::StashSave => {
20 let msg = {
22 let tab = state.active_tab();
23 if tab.stash_message.trim().is_empty() {
24 None
25 } else {
26 Some(tab.stash_message.trim().to_string())
27 }
28 };
29 with_repo!(state, loading, "Saving stash…".into(), |repo_path| {
30 state.active_tab_mut().stash_message.clear();
31 commands::stash_save(repo_path, msg)
32 })
33 }
34
35 Message::StashPop(index) => with_repo!(
36 state,
37 loading,
38 format!("Popping stash@{{{index}}}…"),
39 |repo_path| commands::stash_pop(repo_path, index)
40 ),
41
42 Message::StashDrop(index) => with_repo!(
43 state,
44 loading,
45 format!("Dropping stash@{{{index}}}…"),
46 |repo_path| commands::stash_drop(repo_path, index)
47 ),
48
49 Message::StashUpdated(result) => {
50 state.active_tab_mut().is_loading = false;
51 match result {
52 Ok(stashes) => {
53 {
54 let tab = state.active_tab_mut();
55 tab.stashes = stashes;
56 tab.status_message = Some("Stash updated.".into());
57 }
58 state.refresh_active_tab()
59 }
60 Err(e) => {
61 let tab = state.active_tab_mut();
62 tab.error_message = Some(format!("Stash operation failed: {e}"));
63 tab.status_message = None;
64 Task::none()
65 }
66 }
67 }
68
69 _ => Task::none(),
70 }
71}