This commit is contained in:
2025-11-11 17:06:25 -03:00
parent c00a42ea39
commit 39aedac972
30 changed files with 802 additions and 220 deletions

View File

@@ -2,12 +2,23 @@
import { formatCPF } from '@brazilian-utils/brazilian-utils'
import { type ColumnDef } from '@tanstack/react-table'
import { ArrowRight } from 'lucide-react'
import {
ArrowRight,
EllipsisVerticalIcon,
PencilIcon,
UserRoundMinusIcon
} from 'lucide-react'
import { NavLink } from 'react-router'
import { Abbr } from '@/components/abbr'
import { Avatar, AvatarFallback } from '@repo/ui/components/ui/avatar'
import { Button } from '@repo/ui/components/ui/button'
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger
} from '@repo/ui/components/ui/dropdown-menu'
import { Spinner } from '@repo/ui/components/ui/spinner'
import { initials } from '@repo/ui/lib/utils'
@@ -65,13 +76,6 @@ export const columns: ColumnDef<User>[] = [
return <></>
}
},
{
header: 'Cadastrado em',
cell: ({ row }) => {
const created_at = new Date(row.original.createDate)
return formatted.format(created_at)
}
},
{
header: 'Último accesso',
cell: ({ row }) => {
@@ -85,30 +89,47 @@ export const columns: ColumnDef<User>[] = [
}
},
{
header: ' ',
header: 'Cadastrado em',
meta: {
className: 'w-1/12'
},
cell: ({ row }) => {
return (
<div className="flex justify-end">
<Button
variant="outline"
size="sm"
className="relative group"
asChild
>
<NavLink to={`${row.original?.id}`}>
{({ isPending }) => (
<>
{isPending && <Spinner className="absolute" />}
<span className="group-[.pending]:invisible">
Editar
</span>{' '}
<ArrowRight className="group-[.pending]:invisible" />
</>
)}
</NavLink>
</Button>
</div>
)
const created_at = new Date(row.original.createDate)
return formatted.format(created_at)
}
},
{
id: 'actions',
cell: ({ row }) => (
<div className="flex justify-end items-center">
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
variant="ghost"
className="data-[state=open]:bg-muted text-muted-foreground cursor-pointer"
size="icon-sm"
>
<EllipsisVerticalIcon />
<span className="sr-only">Abrir menu</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-36 *:cursor-pointer">
<DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>
<NavLink to={`${row.id}`}>
{({ isPending }) => (
<>
{isPending ? <Spinner /> : <PencilIcon />}
Editar
</>
)}
</NavLink>
</DropdownMenuItem>
<DropdownMenuItem variant="destructive">
<UserRoundMinusIcon /> Desvincular
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</div>
)
}
]

View File

@@ -61,6 +61,7 @@ export default function Route({ loaderData: { data } }) {
{({ hits, page, hitsPerPage, totalHits }) => {
return (
<DataTable
sort={[{ id: 'created_at', desc: true }]}
columns={columns}
data={hits as User[]}
pageIndex={page - 1}