[codex] Put typed base URL first in combobox
Unified · Split
| @@ -979,7 +979,6 @@ export default function AddOpenApiSource(props: { · 978 unmodified lines | ||
| 979 | 979 | onValueChange={setBaseUrl} |
| 980 | 980 | options={baseUrlOptions} |
| 981 | 981 | placeholder="https://api.example.com" |
| 982 | − emptyLabel="Use the custom URL you typed." | |
| 983 | 982 | className="w-full" |
| 984 | 983 | inputClassName="font-mono text-sm" |
| 985 | 984 | /> |
| @@ -278,13 +278,16 @@ function FreeformCombobox(props: { · 277 unmodified lines | ||
| 278 | 278 | readonly inputClassName?: string; |
| 279 | 279 | readonly disabled?: boolean; |
| 280 | 280 | }) { |
| 281 | − const selectedValue = props.options.some((option) => option.value === props.value) | |
| 282 | − ? props.value | |
| 283 | − : null; | |
| 281 | + const valueOption = props.value.trim(); | |
| 282 | + const options = | |
| 283 | + valueOption.length > 0 && !props.options.some((option) => option.value === valueOption) | |
| 284 | + ? [{ value: valueOption, label: valueOption }, ...props.options] | |
| 285 | + : props.options; | |
| 286 | + const selectedValue = options.some((option) => option.value === props.value) ? props.value : null; | |
| 284 | 287 | |
| 285 | 288 | return ( |
| 286 | 289 | <Combobox |
| 287 | − items={props.options.map((option) => option.value)} | |
| 290 | + items={options.map((option) => option.value)} | |
| 288 | 291 | inputValue={props.value} |
| 289 | 292 | value={selectedValue} |
| 290 | 293 | onInputValueChange={props.onValueChange} |
| @@ -302,7 +305,7 @@ function FreeformCombobox(props: { · 11 unmodified lines | ||
| 302 | 305 | <ComboboxContent> |
| 303 | 306 | <ComboboxEmpty>{props.emptyLabel ?? "No options"}</ComboboxEmpty> |
| 304 | 307 | <ComboboxList> |
| 305 | − {props.options.map((option) => ( | |
| 308 | + {options.map((option) => ( | |
| 306 | 309 | <ComboboxItem key={option.value} value={option.value}> |
| 307 | 310 | <div className="min-w-0 flex-1"> |
| 308 | 311 | <div className="truncate">{option.label ?? option.value}</div> |