import { useTranslation } from "react-i18next"; import { useAIConfigOptions } from "#/hooks/query/use-ai-config-options"; import { Settings } from "#/services/settings"; import { I18nKey } from "#/i18n/declaration"; import { LoadingSpinner } from "../../loading-spinner"; import { ModalBackdrop } from "../modal-backdrop"; import { SettingsForm } from "./settings-form"; interface SettingsModalProps { settings: Settings; onClose: () => void; } export function SettingsModal({ onClose, settings }: SettingsModalProps) { const aiConfigOptions = useAIConfigOptions(); const { t } = useTranslation(); return ( <ModalBackdrop onClose={onClose}> <div data-testid="ai-config-modal" className="bg-root-primary min-w-[384px] max-w-[700px] p-6 rounded-xl flex flex-col gap-2" > {aiConfigOptions.error && ( <p className="text-danger text-xs">{aiConfigOptions.error.message}</p> )} <span className="text-xl leading-6 font-semibold -tracking-[0.01em"> {t(I18nKey.AI_SETTINGS$TITLE)} </span> <p className="text-xs text-[#A3A3A3]"> {t(I18nKey.SETTINGS$DESCRIPTION)} </p> <p className="text-xs text-danger">{t(I18nKey.SETTINGS$WARNING)}</p> {aiConfigOptions.isLoading && ( <div className="flex justify-center"> <LoadingSpinner size="small" /> </div> )} {aiConfigOptions.data && ( <SettingsForm settings={settings} models={aiConfigOptions.data?.models} agents={aiConfigOptions.data?.agents} securityAnalyzers={aiConfigOptions.data?.securityAnalyzers} onClose={onClose} /> )} </div> </ModalBackdrop> ); }