Implement company provisioning codes and session tweaks

This commit is contained in:
Esdras Renan 2025-10-15 20:45:25 -03:00
parent 0fb9bf59b2
commit 2cba553efa
28 changed files with 1407 additions and 534 deletions

View file

@ -23,6 +23,7 @@ type Company = {
tenantId: string
name: string
slug: string
provisioningCode: string
isAvulso: boolean
contractedHoursPerMonth?: number | null
cnpj: string | null
@ -58,6 +59,19 @@ export function AdminCompaniesManager({ initialCompanies }: { initialCompanies:
})
}
const handleCopyProvisioningCode = useCallback(async (code: string) => {
try {
if (navigator?.clipboard?.writeText) {
await navigator.clipboard.writeText(code)
toast.success("Código copiado para a área de transferência")
} else {
throw new Error("Clipboard indisponível")
}
} catch {
toast.error("Não foi possível copiar o código. Copie manualmente.")
}
}, [])
const loadLastAlerts = useCallback(async (list: Company[] = companies) => {
if (!list || list.length === 0) return
const params = new URLSearchParams({ slugs: list.map((c) => c.slug).join(",") })
@ -254,6 +268,7 @@ export function AdminCompaniesManager({ initialCompanies }: { initialCompanies:
<TableRow>
<TableHead>Nome</TableHead>
<TableHead>Slug</TableHead>
<TableHead>Código</TableHead>
<TableHead>Avulso</TableHead>
<TableHead>Domínio</TableHead>
<TableHead>Telefone</TableHead>
@ -267,6 +282,23 @@ export function AdminCompaniesManager({ initialCompanies }: { initialCompanies:
<TableRow key={c.id}>
<TableCell className="font-medium">{c.name}</TableCell>
<TableCell>{c.slug}</TableCell>
<TableCell>
<div className="flex items-center gap-2">
<code
className="rounded bg-slate-100 px-2 py-1 text-[11px] font-mono text-neutral-700"
title={c.provisioningCode}
>
{c.provisioningCode.slice(0, 10)}
</code>
<Button
size="sm"
variant="outline"
onClick={() => handleCopyProvisioningCode(c.provisioningCode)}
>
Copiar
</Button>
</div>
</TableCell>
<TableCell>
<Button size="sm" variant="outline" onClick={() => void toggleAvulso(c)}>
{c.isAvulso ? "Sim" : "Não"}