import React, { useState, useEffect } from 'react' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { FiCheckCircle, FiAlertCircle } from 'react-icons/fi' import { useConfigStore } from '../../stores/configStore' import { hederaConfigSchema, type HederaConfigForm } from '../../schemas/configuration' import { Input } from '../../components/ui' import { Button } from '../../components/ui' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../components/ui/select' import Typography from '../../components/ui/Typography' interface HederaSettingsProps { } export const HederaSettings: React.FC = () => { const { config, setHederaAccountId, setHederaPrivateKey, setHederaNetwork, testHederaConnection, isHederaConfigValid } = useConfigStore() const [testResult, setTestResult] = useState<{ success: boolean; message: string } | null>(null) const [isTesting, setIsTesting] = useState(false) const [isMainnetEnabled, setIsMainnetEnabled] = useState(false) const { register, handleSubmit, formState: { errors }, watch, reset } = useForm({ resolver: zodResolver(hederaConfigSchema), defaultValues: { accountId: config?.hedera?.accountId || '', privateKey: config?.hedera?.privateKey || '', network: config?.hedera?.network || 'testnet' } }) React.useEffect(() => { if (config?.hedera) { reset({ accountId: config.hedera.accountId || '', privateKey: config.hedera.privateKey || '', network: config.hedera.network || 'testnet' }) } }, [config, reset]) const watchAccountId = watch('accountId') const watchPrivateKey = watch('privateKey') const watchNetwork = watch('network') useEffect(() => { window.electron.getEnvironmentConfig().then((envConfig: any) => { const mainnetEnabled = envConfig.enableMainnet || false setIsMainnetEnabled(mainnetEnabled) if (!mainnetEnabled && watchNetwork === 'mainnet') { reset({ ...watch(), network: 'testnet' }) setHederaNetwork('testnet') } }).catch(() => { setIsMainnetEnabled(false) if (watchNetwork === 'mainnet') { reset({ ...watch(), network: 'testnet' }) setHederaNetwork('testnet') } }) }, [watchNetwork, reset, watch, setHederaNetwork]) React.useEffect(() => { const next = watchAccountId || '' if (config?.hedera?.accountId !== next) { setHederaAccountId(next) } }, [watchAccountId, setHederaAccountId, config?.hedera?.accountId]) React.useEffect(() => { const next = watchPrivateKey || '' if (config?.hedera?.privateKey !== next) { setHederaPrivateKey(next) } }, [watchPrivateKey, setHederaPrivateKey, config?.hedera?.privateKey]) React.useEffect(() => { const next = watchNetwork || 'testnet' if (config?.hedera?.network !== next) { setHederaNetwork(next) } }, [watchNetwork, setHederaNetwork, config?.hedera?.network]) const handleTestConnection = async () => { setIsTesting(true) setTestResult(null) try { const result = await testHederaConnection() setTestResult({ success: result.success, message: result.success ? 'Connection successful!' : result.error || 'Connection failed' }) } catch (error) { setTestResult({ success: false, message: error instanceof Error ? error.message : 'Test failed' }) } finally { setIsTesting(false) } } return (
Hedera Configuration
Configure your Hedera account credentials and network settings.
Account ID {errors.accountId && (
{errors.accountId.message}
)}
Private Key {errors.privateKey && (
{errors.privateKey.message}
)}
Your private key is encrypted and stored securely using the system keychain.
Network {!isMainnetEnabled && (
Only testnet is available in this configuration.
)}
{testResult && (
{testResult.success ? ( ) : ( )} {testResult.message}
)}
) }