MCPcopy Create free account
hub / github.com/NVIDIA/OpenShell / handle_create_form_key

Method handle_create_form_key

crates/openshell-tui/src/app.rs:2010–2066  ·  view source on GitHub ↗
(&mut self, key: KeyEvent)

Source from the content-addressed store, hash-verified

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

Callers 1

handle_keyMethod · 0.80

Calls 4

prevMethod · 0.80
lenMethod · 0.80
nextMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected