use crate::app::{actions::Action, state::AppState};
pub fn handle(state: &mut AppState, action: &Action) -> bool {
match action {
Action::SetOpStatus(text) => {
state.op_status = text.clone();
}
Action::AppendOpLog(line) => {
const MAX_LOG: usize = 20;
state.op_log.push_back(line.clone());
while state.op_log.len() > MAX_LOG {
state.op_log.pop_front();
}
}
Action::ToggleOpLog => {
state.show_op_log = !state.show_op_log;
}
Action::ShowOpLog => {
state.show_op_log = true;
}
Action::ToggleMergeNotifier => {
state.merge_notifier_enabled = !state.merge_notifier_enabled;
}
Action::SetMergeBaseBranch(name) => {
state.merge_base_branch = name.clone();
}
Action::SetMergeAhead(ahead) => {
state.merge_notifier_ahead = *ahead;
}
Action::SetMergeInterval(secs) => {
state.merge_notifier_interval_secs = *secs;
}
Action::AppendMergeLog(line) => {
const MAX_LOG: usize = 20;
state.merge_notifier_log.push_back(line.clone());
while state.merge_notifier_log.len() > MAX_LOG {
state.merge_notifier_log.pop_front();
}
}
Action::ToggleMergeLog => {
state.show_merge_log = !state.show_merge_log;
}
Action::ShowMergeBasePicker => {
state.merge_base_picker = true;
state.merge_base_selected = 0;
}
Action::HideMergeBasePicker => {
state.merge_base_picker = false;
}
Action::SetMergeBaseCandidates(list) => {
state.merge_base_candidates = list.clone();
state.merge_base_selected = 0;
}
Action::MergeBaseUp => {
if state.merge_base_selected > 0 {
state.merge_base_selected -= 1;
}
}
Action::MergeBaseDown => {
let max_idx = state.merge_base_candidates.len().saturating_sub(1);
if state.merge_base_selected < max_idx {
state.merge_base_selected += 1;
}
}
Action::ApplyMergeBase(name) => {
state.merge_base_branch = name.clone();
state.merge_base_picker = false;
}
_ => return false,
}
true
}