'use client'; import { useState, useEffect } from 'react'; import { GatewayProvider, GatewayCredentials } from '@/lib/types/settings'; import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle } from '@/components/ui/sheet'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Switch } from '@/components/ui/switch'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { verifyGatewayCredentials, saveGatewayConfig } from '@/lib/actions/payment-settings'; import { toast } from 'sonner'; import { Lock, CheckBase, Loader2, Copy } from 'lucide-react'; import { decrypt } from '@/lib/payment-encryption'; interface GatewayConfigSheetProps { open: boolean; onOpenChange: (open: boolean) => void; provider: GatewayProvider; initialConfig: GatewayCredentials; onSave: () => void; } export function GatewayConfigSheet({ open, onOpenChange, provider, initialConfig, onSave }: GatewayConfigSheetProps) { const [config, setConfig] = useState(initialConfig); const [loading, setLoading] = useState(false); const [verifying, setVerifying] = useState(false); // Reset config when provider changes useEffect(() => { // Decrypt sensitive fields for editing const decrypted = { ...initialConfig }; if (decrypted.salt) decrypted.salt = decrypt(decrypted.salt); setConfig(decrypted); }, [provider, initialConfig, open]); const handleVerify = async () => { setVerifying(true); try { const res = await verifyGatewayCredentials(provider, config); if (res.success) { toast.success('Credentials Verified', { description: res.message }); } else { toast.error('Verification Failed', { description: res.message }); } } catch (error) { toast.error('Verification Error'); } finally { setVerifying(false); } }; const handleSave = async () => { setLoading(true); try { const res = await saveGatewayConfig(provider, config); if (res.success) { toast.success(`Saved ${provider} configuration`); onSave(); onOpenChange(false); } else { toast.error(res.message); } } catch (error) { toast.error('Failed to save configuration'); } finally { setLoading(false); } }; return ( {provider} Configuration Configure API keys and secrets for {provider}.
{/* Environment Toggle */}
{config.mode === 'live' ? 'Production / Live Traffic' : 'Sandbox / Test Mode'}
setConfig({ ...config, mode: c ? 'live' : 'test' })} />
Credentials Features Webhooks {/* Dynamic inputs based on provider */} {(provider === 'razorpay' || provider === 'easebuzz') && (
setConfig({ ...config, keyId: e.target.value, merchantId: e.target.value })} placeholder="rzp_test_..." />
)} {(provider === 'stripe') && (
setConfig({ ...config, publicKey: e.target.value })} placeholder="pk_test_..." />
)} {(provider === 'payu' || provider === 'easebuzz') && (
setConfig({ ...config, salt: e.target.value })} placeholder="Enter secret salt" className="pr-10" />
)}
setConfig({ ...config, features: { ...config.features, netbanking: c } })} />
setConfig({ ...config, features: { ...config.features, upi: c } })} />
setConfig({ ...config, features: { ...config.features, cards: c } })} />
setConfig({ ...config, features: { ...config.features, emi: c } })} />

Add this URL to your provider dashboard.

setConfig({ ...config, webhookSecret: e.target.value })} placeholder="whsec_..." />
); }