"use client"; import { useState } from 'react'; import { useAuth } from '@/contexts/AuthContext'; import { useApi } from '@/hooks/use-api'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Copy, KeyRound, Server, User, Check } from 'lucide-react'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog" import { Skeleton } from '@/components/ui/skeleton'; function CredentialRow({ icon, label, value, onCopy, isCopied }) { return (
{icon}
{label}
{value}
); } export function SipCredentialsCard({ details, loading, refetchDetails }) { const { token } = useAuth(); const apiFetch = useApi(); const [newSecret, setNewSecret] = useState(null); const [isResetting, setIsResetting] = useState(false); const [copiedState, setCopiedState] = useState({}); const handleResetSecret = async () => { if (!token) return; setIsResetting(true); try { const res = await apiFetch(`${process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001'}/extensions/me/resetsecret`, { method: 'POST', }); const data = await res.json(); setNewSecret(data.newSecret); if (refetchDetails) { refetchDetails(); } } catch (error) { if (error.message !== 'Unauthorized') { console.error("Failed to reset secret", error); alert('Failed to reset secret.'); } } finally { setIsResetting(false); } }; const copyToClipboard = (text, id) => { if (!text) return; navigator.clipboard.writeText(text).then(() => { setCopiedState(prev => ({ ...prev, [id]: true })); setTimeout(() => { setCopiedState(prev => ({ ...prev, [id]: false })); }, 2000); }); }; if (loading) { return ( ); } return ( SIP Credentials Use these details to connect your SIP client. } label="SIP Server" value="pbx.litenet.tel" onCopy={() => copyToClipboard('pbx.litenet.tel', 'server')} isCopied={copiedState['server']} /> } label="SIP Username" value={details?.extensionId} onCopy={() => copyToClipboard(details?.extensionId, 'username')} isCopied={copiedState['username']} /> } label="SIP Secret" value="••••••••••••" onCopy={() => copyToClipboard(details?.user?.extPassword, 'secret')} isCopied={copiedState['secret']} /> { if (!open) { setNewSecret(null); setCopiedState(prev => ({ ...prev, newSecret: false })); } }}> Are you absolutely sure? Resetting your SIP secret will require you to update it on all devices registered to this extension. This action cannot be undone. Cancel Continue Secret Reset Successfully Your new SIP secret is shown below. Copy it now, as you will not be able to see it again.
{newSecret}
); }