refactor: consolidate provider form components

This commit completes Stage 2.5-2.6 of the refactoring plan by:

- Consolidating 8 provider form files (1941+ lines) into a single
  unified ProviderForm component (353 lines), reducing code by ~82%
- Implementing modern form management with react-hook-form and zod
- Adding preset provider categorization with grouped select UI
- Supporting dual-mode operation for both Claude and Codex configs
- Removing redundant subcomponents:
  - ApiKeyInput.tsx (72 lines)
  - ClaudeConfigEditor.tsx (205 lines)
  - CodexConfigEditor.tsx (667 lines)
  - EndpointSpeedTest.tsx (636 lines)
  - KimiModelSelector.tsx (195 lines)
  - PresetSelector.tsx (119 lines)

Key improvements:
- Type-safe form values with ProviderFormValues extension
- Automatic template value application for presets
- Better internationalization coverage
- Cleaner separation of concerns
- Enhanced UX with categorized preset groups

Updates AddProviderDialog and EditProviderDialog to pass appType prop
and handle preset category metadata.
This commit is contained in:
Jason
2025-10-16 13:02:38 +08:00
parent f3e7412a14
commit bb48f4f6af
12 changed files with 222 additions and 3851 deletions

View File

@@ -12,12 +12,14 @@ import {
ProviderForm,
type ProviderFormValues,
} from "@/components/providers/forms/ProviderForm";
import type { AppType } from "@/lib/api";
interface EditProviderDialogProps {
open: boolean;
provider: Provider | null;
onOpenChange: (open: boolean) => void;
onSubmit: (provider: Provider) => Promise<void> | void;
appType: AppType;
}
export function EditProviderDialog({
@@ -25,6 +27,7 @@ export function EditProviderDialog({
provider,
onOpenChange,
onSubmit,
appType,
}: EditProviderDialogProps) {
const { t } = useTranslation();
@@ -42,6 +45,9 @@ export function EditProviderDialog({
name: values.name.trim(),
websiteUrl: values.websiteUrl?.trim() || undefined,
settingsConfig: parsedConfig,
...(values.presetCategory
? { category: values.presetCategory }
: {}),
};
await onSubmit(updatedProvider);
@@ -69,6 +75,7 @@ export function EditProviderDialog({
</DialogHeader>
<ProviderForm
appType={appType}
submitLabel={t("common.save", { defaultValue: "保存" })}
onSubmit={handleSubmit}
onCancel={() => onOpenChange(false)}