use crate::tui::app::LinkTarget;
#[derive(Debug, Default, PartialEq, Eq, Clone, Copy)]
pub enum LinkPromptStage {
#[default]
ChooseTarget,
InputNumber,
}
#[derive(Debug)]
pub struct LinkPrompt {
pub stage: LinkPromptStage,
pub target: Option<LinkTarget>,
pub selected: LinkTarget,
pub number: String,
}
impl Default for LinkPrompt {
fn default() -> Self {
Self {
stage: LinkPromptStage::default(),
target: None,
selected: LinkTarget::Issue,
number: String::new(),
}
}
}
impl LinkPrompt {
pub fn new() -> Self {
Self::default()
}
pub fn reset(&mut self) {
self.stage = LinkPromptStage::ChooseTarget;
self.target = None;
self.selected = LinkTarget::Issue;
self.number.clear();
}
pub fn toggle_selection(&mut self) {
if self.stage != LinkPromptStage::ChooseTarget {
return;
}
self.selected = match self.selected {
LinkTarget::Issue => LinkTarget::Pr,
LinkTarget::Pr => LinkTarget::Issue,
};
}
pub fn commit_target(&mut self, target: LinkTarget) {
self.target = Some(target);
self.stage = LinkPromptStage::InputNumber;
self.number.clear();
}
pub fn push_char(&mut self, c: char) {
if self.stage == LinkPromptStage::InputNumber && c.is_ascii_digit() {
self.number.push(c);
}
}
pub fn pop_char(&mut self) {
if self.stage == LinkPromptStage::InputNumber {
self.number.pop();
}
}
}