Files
Investidor-V2/resources/js/components/profile-navigation.tsx
T

96 lines
3.4 KiB
TypeScript

import { Link, usePage } from '@inertiajs/react';
import type { ProfileAccess } from '@/types/profile-access';
export function profileLinks(access: ProfileAccess | null | undefined) {
if (!access) return [];
return [
...(access.mine
? [{ title: 'Minhas oportunidades', href: access.mine }]
: []),
...(access.create
? [{ title: 'Nova oportunidade', href: access.create }]
: []),
{
title: access.mine
? 'Autorizações de Promotor'
: 'Solicitar perfil de Promotor',
href: access.request,
},
...(!access.mine && access.review
? [{ title: 'Revisão de oportunidades', href: access.review }]
: []),
...(access.audit
? [{ title: 'Auditoria de acessos', href: access.audit }]
: []),
...(access.technicalSupport
? [
{
title:
typeof access.technicalSupportUnread === 'number' &&
Number.isSafeInteger(access.technicalSupportUnread) &&
access.technicalSupportUnread > 0
? `Suporte técnico · ${access.technicalSupportUnread} por consultar`
: 'Suporte técnico',
href: access.technicalSupport,
},
]
: []),
...(access.administration
? [{ title: 'Gestão de perfis', href: access.administration }]
: []),
...(access.administration
? [
{
title: 'Configuração dos perfis',
href: '/management/profile-install',
},
]
: []),
];
}
export default function ProfileNavigation() {
const { profileAccess } = usePage<{
profileAccess?: ProfileAccess | null;
}>().props;
if (!profileAccess) return null;
const links = profileLinks(profileAccess);
const workHrefs = [
profileAccess.mine,
profileAccess.create,
profileAccess.review,
].filter(Boolean);
const work = links.filter((link) => workHrefs.includes(link.href));
const access = links.filter((link) => !workHrefs.includes(link.href));
return (
<nav
aria-label="Perfil e oportunidades"
className="flex flex-wrap gap-4 rounded border p-4"
>
{work.map((link) => (
<Link key={link.href} href={link.href} className="underline">
{link.title}
</Link>
))}
{access.length > 0 && (
<details className="basis-full">
<summary className="cursor-pointer font-medium">
O meu acesso e administração
</summary>
<div className="mt-3 flex flex-wrap gap-4">
{access.map((link) => (
<Link
key={link.href}
href={link.href}
className="underline"
>
{link.title}
</Link>
))}
</div>
</details>
)}
</nav>
);
}