import { Button } from '@/components/ui/Button'; import { Card } from '@/components/ui/Card'; import iconAmp from '@/assets/icons/amp.svg'; import type { AmpcodeConfig } from '@/types'; import { maskApiKey } from '@/utils/format'; import styles from '@/pages/AiProvidersPage.module.scss'; import { useTranslation } from 'react-i18next'; import { AmpcodeModal } from './AmpcodeModal'; interface AmpcodeSectionProps { config: AmpcodeConfig | null | undefined; loading: boolean; disableControls: boolean; isSaving: boolean; isSwitching: boolean; isBusy: boolean; isModalOpen: boolean; onOpen: () => void; onCloseModal: () => void; onBusyChange: (busy: boolean) => void; } export function AmpcodeSection({ config, loading, disableControls, isSaving, isSwitching, isBusy, isModalOpen, onOpen, onCloseModal, onBusyChange, }: AmpcodeSectionProps) { const { t } = useTranslation(); return ( <> {t('ai_providers.ampcode_title')} } extra={ } > {loading ? (
{t('common.loading')}
) : ( <>
{t('ai_providers.ampcode_upstream_url_label')}: {config?.upstreamUrl || t('common.not_set')}
{t('ai_providers.ampcode_upstream_api_key_label')}: {config?.upstreamApiKey ? maskApiKey(config.upstreamApiKey) : t('common.not_set')}
{t('ai_providers.ampcode_force_model_mappings_label')}: {(config?.forceModelMappings ?? false) ? t('common.yes') : t('common.no')}
{t('ai_providers.ampcode_model_mappings_count')}: {config?.modelMappings?.length || 0}
{config?.modelMappings?.length ? (
{config.modelMappings.slice(0, 5).map((mapping) => ( {mapping.from} {mapping.to} ))} {config.modelMappings.length > 5 && ( +{config.modelMappings.length - 5} )}
) : null} )}
); }