(&mut self, key: KeyEvent)
| 2008 | } |
| 2009 | |
| 2010 | fn handle_create_form_key(&mut self, key: KeyEvent) { |
| 2011 | let Some(form) = self.create_form.as_mut() else { |
| 2012 | return; |
| 2013 | }; |
| 2014 | |
| 2015 | match form.phase { |
| 2016 | CreatePhase::Creating => {} // no input during creation |
| 2017 | |
| 2018 | CreatePhase::Form => match key.code { |
| 2019 | KeyCode::Esc => { |
| 2020 | self.create_form = None; |
| 2021 | } |
| 2022 | KeyCode::Tab => { |
| 2023 | form.status = None; |
| 2024 | form.focused_field = form.focused_field.next(); |
| 2025 | } |
| 2026 | KeyCode::BackTab => { |
| 2027 | form.status = None; |
| 2028 | form.focused_field = form.focused_field.prev(); |
| 2029 | } |
| 2030 | _ => match form.focused_field { |
| 2031 | CreateFormField::Name => Self::handle_text_input(&mut form.name, key), |
| 2032 | CreateFormField::Image => Self::handle_text_input(&mut form.image, key), |
| 2033 | CreateFormField::Command => Self::handle_text_input(&mut form.command, key), |
| 2034 | CreateFormField::Providers => match key.code { |
| 2035 | KeyCode::Char('j') | KeyCode::Down if !form.providers.is_empty() => { |
| 2036 | form.provider_cursor = |
| 2037 | (form.provider_cursor + 1).min(form.providers.len() - 1); |
| 2038 | } |
| 2039 | KeyCode::Char('k') | KeyCode::Up => { |
| 2040 | form.provider_cursor = form.provider_cursor.saturating_sub(1); |
| 2041 | } |
| 2042 | KeyCode::Char(' ') | KeyCode::Enter => { |
| 2043 | if let Some(p) = form.providers.get_mut(form.provider_cursor) { |
| 2044 | p.selected = !p.selected; |
| 2045 | } |
| 2046 | } |
| 2047 | _ => {} |
| 2048 | }, |
| 2049 | CreateFormField::Ports => { |
| 2050 | // Use the same text input handler as Name/Image/Command, |
| 2051 | // then strip anything that isn't a digit or comma. |
| 2052 | Self::handle_text_input(&mut form.ports, key); |
| 2053 | form.ports.retain(|c| c.is_ascii_digit() || c == ','); |
| 2054 | } |
| 2055 | CreateFormField::Submit => { |
| 2056 | if key.code == KeyCode::Enter { |
| 2057 | form.anim_start = Some(Instant::now()); |
| 2058 | form.status = None; |
| 2059 | form.phase = CreatePhase::Creating; |
| 2060 | self.pending_create_sandbox = true; |
| 2061 | } |
| 2062 | } |
| 2063 | }, |
| 2064 | }, |
| 2065 | } |
| 2066 | } |
| 2067 |
no test coverage detected