Files
2026-11-02 08:08:05 +02:00

115 lines
5.2 KiB
TypeScript

import { Head, Link, router } from '@inertiajs/react';
import { PageTitle, Panel } from '@/components/procurement';
import { Button } from '@/components/ui/button';
import type { WorkContextState } from '@/types/work-context';
export default function WorkContext({
context,
}: {
context: WorkContextState;
}) {
const selected = context.active ? context.options[context.active] : null;
return (
<>
<Head title="Painel Inicial" />
<div className="mx-auto flex w-full max-w-7xl flex-col gap-6 p-5 lg:p-8">
<PageTitle
eyebrow="SGC"
title="Painel Inicial"
description="Escolha a área e a opção empresarial para trabalhar. A escolha mantém as suas permissões."
/>
{context.available.length === 0 && (
<Panel title="Sem contexto autorizado">
<p>
Contacte os administradores da empresa. A conta e a
parametrização continuam disponíveis quando
autorizadas.
</p>
</Panel>
)}
{['procurement', 'people'].map((area) => {
const entries = context.available.filter(
(key) => context.options[key].area === area,
);
if (!entries.length) return null;
return (
<Panel
key={area}
title={
area === 'procurement'
? 'Compras'
: 'Pessoas e contratações'
}
>
<div className="flex flex-wrap gap-3">
{entries.length === 1 ? (
<Button
onClick={() =>
router.post('/contexto', { area })
}
>
Escolher área ·{' '}
{context.options[entries[0]].label}
</Button>
) : (
entries.map((key) => (
<Button
key={key}
variant={
context.active === key
? 'default'
: 'outline'
}
onClick={() =>
router.post('/contexto', {
area,
option: key,
})
}
>
{context.options[key].label}
</Button>
))
)}
</div>
</Panel>
);
})}
{selected && (
<Panel title={`${selected.areaLabel} · ${selected.label}`}>
{selected.operational ? (
<div className="flex flex-wrap gap-3">
<Button asChild>
<Link
href={
selected.area === 'people'
? '/pessoas'
: '/requisicoes'
}
>
Entrar na área
</Link>
</Button>
{selected.area === 'people' && (
<Button asChild variant="outline">
<Link href="/pessoas/relatorios">
Relatórios de pessoas e contratações
</Link>
</Button>
)}
</div>
) : (
<p>
Contexto seleccionado. O percurso operacional
desta opção ainda está em implementação; não
estão disponíveis operações ou dados de outras
opções.
</p>
)}
</Panel>
)}
</div>
</>
);
}