/*
Copyright (C) 2023-2026 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
For commercial licensing, please contact support@quantumnous.com
*/
import { useState } from 'react'
import { Pencil, Trash2, Plus } from 'lucide-react'
import { useTranslation } from 'react-i18next'
import { Button } from '@/components/ui/button'
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from '@/components/ui/table'
import { ConfirmDialog } from '@/components/confirm-dialog'
import { StatusBadge } from '@/components/status-badge'
import { useDeleteProvider } from '../hooks/use-custom-oauth-mutations'
import type { CustomOAuthProvider } from '../types'
type ProviderTableProps = {
providers: CustomOAuthProvider[]
onEdit: (provider: CustomOAuthProvider) => void
onCreate: () => void
}
export function ProviderTable(props: ProviderTableProps) {
const { t } = useTranslation()
const deleteProvider = useDeleteProvider()
const [deleteTarget, setDeleteTarget] = useState(
null
)
const handleDelete = async () => {
if (!deleteTarget) return
await deleteProvider.mutateAsync(deleteTarget.id)
setDeleteTarget(null)
}
return (
<>
{t('Manage custom OAuth providers for user authentication')}
)}
!open && setDeleteTarget(null)}
title={t('Delete Provider')}
desc={t(
'Are you sure you want to delete "{{name}}"? Users who authenticated with this provider will no longer be able to log in.',
{ name: deleteTarget?.name || '' }
)}
confirmText={t('Delete')}
destructive
handleConfirm={handleDelete}
isLoading={deleteProvider.isPending}
/>
>
)
}