import { useMemo } from 'react' import { Prisma } from '@prisma/client' import { trpc } from '~/utils/trpc' import { notify } from '~/components/NotificationCenter' import { useHasPermission } from '~/components/DashboardContext' import { dateFormatter } from '~/utils/formatters' import SimpleTable from '~/components/SimpleTable' import useTable, { IVTableRow } from '~/components/IVTable/useTable' export default function KeysList({ keys, onUpdate, }: { keys: Pick< Prisma.ApiKeyGetPayload<{ include: { hostInstances: { select: { createdAt: true } } organizationEnvironment: true } }>, | 'id' | 'label' | 'createdAt' | 'usageEnvironment' | 'organizationEnvironment' | 'hostInstances' | 'deletedAt' >[] onUpdate?: () => void }) { const { mutate: deleteKey } = trpc.useMutation('key.delete') const canDeleteKeys = useHasPermission('DELETE_ORG_USER_API_KEYS') const data = useMemo(() => { return keys.map((key, idx) => ({ key: String(idx), data: { label: key.label ?? (key.usageEnvironment === 'DEVELOPMENT' ? 'Personal development key' : '(Unnamed)'), environment: key.organizationEnvironment?.name ?? 'Production', createdAt: key.createdAt && dateFormatter.format(key.createdAt), lastUsed: key.hostInstances.length > 0 ? ( ) : ( never ), actions: key.deletedAt ? ( Deleted ) : canDeleteKeys ? (
) : null, }, })) }, [canDeleteKeys, deleteKey, keys, onUpdate]) const table = useTable({ data, columns: ['Label', 'Environment', 'Created', 'Last used', ''], // sorting tables w/ react components still needs some work; disable sorting until that works isSortable: false, shouldCacheRecords: false, }) return }