(&mut self, key: KeyEvent)
| 2124 | } |
| 2125 | |
| 2126 | fn handle_create_provider_key(&mut self, key: KeyEvent) { |
| 2127 | let Some(form) = self.create_provider_form.as_mut() else { |
| 2128 | return; |
| 2129 | }; |
| 2130 | |
| 2131 | match form.phase { |
| 2132 | CreateProviderPhase::SelectType => match key.code { |
| 2133 | KeyCode::Esc => { |
| 2134 | self.create_provider_form = None; |
| 2135 | } |
| 2136 | KeyCode::Char('j') | KeyCode::Down if !form.types.is_empty() => { |
| 2137 | form.type_cursor = (form.type_cursor + 1).min(form.types.len() - 1); |
| 2138 | } |
| 2139 | KeyCode::Char('k') | KeyCode::Up => { |
| 2140 | form.type_cursor = form.type_cursor.saturating_sub(1); |
| 2141 | } |
| 2142 | KeyCode::Enter => { |
| 2143 | let selected = form.types[form.type_cursor].clone(); |
| 2144 | let registry = openshell_providers::ProviderRegistry::new(); |
| 2145 | let env_vars = registry.credential_env_vars(&selected); |
| 2146 | form.is_generic = env_vars.is_empty(); |
| 2147 | |
| 2148 | // Populate credential rows from all known env vars. |
| 2149 | form.credentials = env_vars |
| 2150 | .iter() |
| 2151 | .map(|s| (s.to_string(), String::new())) |
| 2152 | .collect(); |
| 2153 | form.cred_cursor = 0; |
| 2154 | |
| 2155 | // Auto-generate a unique name. |
| 2156 | form.name = unique_provider_name(&selected, &self.provider_names); |
| 2157 | |
| 2158 | if form.is_generic { |
| 2159 | // No known env vars — skip straight to manual entry. |
| 2160 | form.phase = CreateProviderPhase::EnterKey; |
| 2161 | form.key_field = ProviderKeyField::Name; |
| 2162 | form.status = None; |
| 2163 | form.warning = None; |
| 2164 | } else { |
| 2165 | form.phase = CreateProviderPhase::ChooseMethod; |
| 2166 | form.method_cursor = 0; |
| 2167 | } |
| 2168 | } |
| 2169 | _ => {} |
| 2170 | }, |
| 2171 | |
| 2172 | CreateProviderPhase::ChooseMethod => match key.code { |
| 2173 | KeyCode::Esc => { |
| 2174 | form.phase = CreateProviderPhase::SelectType; |
| 2175 | form.status = None; |
| 2176 | form.warning = None; |
| 2177 | } |
| 2178 | KeyCode::Char('j' | 'k') | KeyCode::Down | KeyCode::Up => { |
| 2179 | form.method_cursor = 1 - form.method_cursor; |
| 2180 | } |
| 2181 | KeyCode::Enter => { |
| 2182 | let ptype = form.types[form.type_cursor].clone(); |
| 2183 | if form.method_cursor == 0 { |
no test coverage detected