115 lines
5.2 KiB
TypeScript
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>
|
|
</>
|
|
);
|
|
}
|