CI / changes (pull_request) Successful in 15s
CI / lint (pull_request) Successful in 57s
CI / frontend (pull_request) Successful in 2m36s
CI / storybook-a11y (pull_request) Failing after 3m14s
CI / backend (pull_request) Successful in 2m1s
CI / semgrep (pull_request) Successful in 1m10s
CI / e2e (pull_request) Successful in 3m3s
CI / api-client-drift (pull_request) Successful in 2m1s
New GET /werkvoorraad endpoint lists aanvragen still open (Ingediend/InBehandeling), gated by the medewerker capability (CanBeoordelen) rather than the admin role — reuses the existing ApplicationSummaryDto, no new DTO. GET /me now surfaces aanvraag:beoordelen for a behandelaar so the FE can gate with the same AccessStore/capabilityGuard idiom every other page uses. FE: a behandeling domain type deliberately narrower than ssp's full AanvraagStatus union (only the two open tags — illegal states unrepresentable), composed into a werkvoorraad-list organism from existing shared/ui molecules. Replaces WP-61's scaffold placeholder as the app's real landing page. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
45 lines
1.7 KiB
TypeScript
45 lines
1.7 KiB
TypeScript
import { formatDatumNl } from '@shared/kernel/datum';
|
|
import { WerkvoorraadItem, WerkvoorraadStatus, AanvraagType } from './werkvoorraad-item';
|
|
|
|
/** View-model mapping for a queue row: type/status → the fields for a CIBG
|
|
"aanvragen" row. Pure, no Angular — the UI renders these, it does not derive them. */
|
|
|
|
export const TYPE_LABELS: Record<AanvraagType, string> = {
|
|
registratie: $localize`:@@werkvoorraad.type.registratie:Inschrijving`,
|
|
herregistratie: $localize`:@@werkvoorraad.type.herregistratie:Herregistratie`,
|
|
intake: $localize`:@@werkvoorraad.type.intake:Herregistratie-intake`,
|
|
};
|
|
|
|
export function statusLabel(status: WerkvoorraadStatus): string {
|
|
switch (status.tag) {
|
|
case 'Ingediend':
|
|
return $localize`:@@werkvoorraad.status.ingediend:Ingediend`;
|
|
case 'InBehandeling':
|
|
return status.manual
|
|
? $localize`:@@werkvoorraad.status.inBehandelingHandmatig:In behandeling (handmatig)`
|
|
: $localize`:@@werkvoorraad.status.inBehandeling:In behandeling`;
|
|
}
|
|
}
|
|
|
|
export interface WerkvoorraadRow {
|
|
heading: string;
|
|
subtitle: string;
|
|
status: string;
|
|
}
|
|
|
|
/** Fields for one queue row: type as heading, owner (BSN) as subtitle, status +
|
|
reference + submit date as the status line. */
|
|
export function werkvoorraadRow(item: WerkvoorraadItem): WerkvoorraadRow {
|
|
const parts = [statusLabel(item.status), item.status.referentie];
|
|
if (item.submittedAt) {
|
|
parts.push(
|
|
$localize`:@@werkvoorraad.row.ingediend:ingediend op ${formatDatumNl(item.submittedAt)}:datum:`,
|
|
);
|
|
}
|
|
return {
|
|
heading: TYPE_LABELS[item.type],
|
|
subtitle: $localize`:@@werkvoorraad.row.bsn:BSN ${item.owner}:bsn:`,
|
|
status: parts.join(' · '),
|
|
};
|
|
}
|