Implement company provisioning codes and session tweaks
This commit is contained in:
parent
0fb9bf59b2
commit
2cba553efa
28 changed files with 1407 additions and 534 deletions
|
|
@ -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"}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue