'use client'; import { createUserAuthMethod, deleteUserAuthMethod, updateUserAuthMethod, } from '@/services/admin/user'; import { Badge } from '@workspace/ui/components/badge'; import { Button } from '@workspace/ui/components/button'; import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card'; import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input'; import { useTranslations } from 'next-intl'; import { useState } from 'react'; import { toast } from 'sonner'; export function AuthMethodsForm({ user, refetch }: { user: API.User; refetch: () => void }) { const t = useTranslations('user'); const [emailChanges, setEmailChanges] = useState>({}); const handleRemoveAuth = async (authType: string) => { await deleteUserAuthMethod({ user_id: user.id, auth_type: authType, }); toast.success(t('deleteSuccess')); }; const handleUpdateEmail = async (email: string) => { await updateUserAuthMethod({ user_id: user.id, auth_type: 'email', auth_identifier: email, }); toast.success(t('updateSuccess')); refetch(); }; const handleCreateEmail = async (email: string) => { await createUserAuthMethod({ user_id: user.id, auth_type: 'email', auth_identifier: email, }); toast.success(t('createSuccess')); refetch(); }; const handleEmailChange = (authType: string, value: string) => { setEmailChanges((prev) => ({ ...prev, [authType]: value, })); }; const emailMethod = user.auth_methods.find((method) => method.auth_type === 'email'); const otherMethods = user.auth_methods.filter((method) => method.auth_type !== 'email'); const defaultEmailMethod = { auth_type: 'email', auth_identifier: '', verified: false, ...emailMethod, }; const isEmailExists = !!emailMethod; const handleEmailAction = () => { const email = emailChanges['email']; if (isEmailExists) { handleUpdateEmail(email as string); } else { handleCreateEmail(email as string); } }; return ( {t('authMethodsTitle')}
email
{defaultEmailMethod.verified ? t('verified') : t('unverified')}
handleEmailChange('email', value as string)} />
{otherMethods.map((method) => (
{method.auth_type}
{method.verified ? t('verified') : t('unverified')}
{method.auth_identifier}
))}
); }