import { Fragment, useCallback, useEffect, useState } from 'react' import Image from 'next/image' import { Button, Input, Modal } from '@janhq/joi' import { useAtom, useSetAtom } from 'jotai' import { ArrowUpRight } from 'lucide-react' import useEngineMutation from '@/hooks/useEngineMutation' import useEngineQuery from '@/hooks/useEngineQuery' import { getTitleByCategory } from '@/utils/model-engine' import { isAnyRemoteModelConfiguredAtom } from '@/helpers/atoms/SetupRemoteModel.atom' import { setUpRemoteModelStageAtom } from '@/helpers/atoms/SetupRemoteModel.atom' const SetUpApiKeyModal: React.FC = () => { const updateEngineConfig = useEngineMutation() const isAnyRemoteModelConfigured = useSetAtom(isAnyRemoteModelConfiguredAtom) const { data: engineData } = useEngineQuery() const [{ stage, remoteEngine, metadata }, setUpRemoteModelStage] = useAtom( setUpRemoteModelStageAtom ) const [apiKey, setApiKey] = useState('') useEffect(() => { if (!remoteEngine || !engineData) return const isEngineReady = engineData.find((e) => e.name === remoteEngine)?.status === 'ready' const fakeApiKey = '******************************************' setApiKey(isEngineReady ? fakeApiKey : '') }, [remoteEngine, engineData]) const onSaveClicked = useCallback(async () => { if (!remoteEngine) { alert('Does not have engine') return } const normalizedApiKey = apiKey.trim().replaceAll('*', '') if (normalizedApiKey.length === 0) return updateEngineConfig.mutate({ engine: remoteEngine, config: { config: 'apiKey', value: apiKey, }, }) isAnyRemoteModelConfigured(true) }, [remoteEngine, updateEngineConfig, apiKey, isAnyRemoteModelConfigured]) const onDismiss = useCallback(() => { setUpRemoteModelStage('NONE', undefined) }, [setUpRemoteModelStage]) if (remoteEngine == null) return null const owner: string = getTitleByCategory(remoteEngine) const logoUrl: string = (metadata?.logo ?? '') as string const apiKeyUrl: string | undefined = (metadata?.api_key_url ?? '') as | string | undefined return (
{logoUrl && ( Model owner )}

{owner}

API Key
setApiKey(e.target.value)} /> {apiKeyUrl && ( Get your API key from {owner} )}
} /> ) } export default SetUpApiKeyModal