All checks were successful
## What & why Final sub-slice of **S-11 · Withdrawal (Flow 3)** — the user-facing "trek aanvraag in" action, which **closes #12**. - **self-service portal**: the submit confirmation gains a **"Trek aanvraag in"** button. It withdraws the just-submitted registration via `postSelfServiceRegistrationsIdWithdraw(reference)`; success shows an *ingetrokken* confirmation, a failure is surfaced (`role="alert"`) and the action stays available — same confirm-and-surface pattern as submit. - **acceptance**: `Een registratie intrekken` — owner withdraws → INGETROKKEN + workflow cancelled; a different bsn is reported not-found. - **e2e**: `withdrawal.spec.ts` — DigiD submit → trek aanvraag in → the portal confirms ingetrokken. - **docs**: demo-script + frontend-decisions. Together with S-11a (#88), S-11b (#89), S-11c-1 (#90), this completes the flow: citizen withdraws → domain INGETROKKEN → BPMN message event cancels the process → the case leaves the behandelaar's werkbak. Closes #12 ## Definition of Done - [x] Linked Gitea issue (#12). - [x] Failing tests committed before the implementation. - [x] Implementation makes the tests pass. - [x] Conventional Commits referencing the issue (`refs #12`). - [ ] CI green — all Gitea Actions jobs. - [x] `docker compose up` unaffected. - [x] Docs updated (demo-script + frontend-decisions). - [x] ADR — ADR-0014 (from S-11b) covers the cancellation decision; nothing new here. ## Notes for reviewers - Full local gate run before pushing: `dotnet format --verify-no-changes` clean; `make unit` green (Acceptance **11** incl. the 2 new withdrawal scenarios, Big 95, BFF 30, Acl 27, EventSubscriber 19); self-service lint/test/build green (9 tests, incl. the 2 new withdraw tests). - `withdrawal.spec.ts` waits on the *ingetrokken* confirmation (which only renders after the withdraw POST returns), so it can't cancel the request early (the 499 lesson from #87). Live-validated by verify-stack. Reviewed-on: #93
67 lines
2.3 KiB
TypeScript
67 lines
2.3 KiB
TypeScript
import { Component, inject, signal } from '@angular/core';
|
|
import { BffApiV1Service, type SubmitAccepted } from 'api-client';
|
|
import { AuthService } from 'auth';
|
|
import { UtrechtComponentsModule } from 'ui';
|
|
|
|
/**
|
|
* The self-service submit page: a signed-in zorgprofessional confirms and submits their BIG
|
|
* registration. The bsn comes from the DigiD token (not a form field), so this is a confirm-and-
|
|
* submit flow that posts to the BFF and shows the returned reference (ADR-0010; S-08c). After
|
|
* submitting they can withdraw it — "trek aanvraag in" — keyed by that reference (S-11c).
|
|
*/
|
|
@Component({
|
|
selector: 'app-registration-page',
|
|
imports: [UtrechtComponentsModule],
|
|
templateUrl: './registration-page.html',
|
|
})
|
|
export class RegistrationPage {
|
|
private readonly auth = inject(AuthService);
|
|
private readonly bff = inject(BffApiV1Service);
|
|
|
|
protected readonly bsn = this.auth.bsn;
|
|
protected readonly submitting = signal(false);
|
|
protected readonly reference = signal<string | undefined>(undefined);
|
|
protected readonly submitted = signal(false);
|
|
protected readonly failed = signal(false);
|
|
protected readonly withdrawing = signal(false);
|
|
protected readonly withdrawn = signal(false);
|
|
protected readonly withdrawFailed = signal(false);
|
|
|
|
submit(): void {
|
|
this.submitting.set(true);
|
|
this.failed.set(false);
|
|
this.bff.postSelfServiceRegistrations().subscribe({
|
|
next: (accepted: SubmitAccepted) => {
|
|
this.reference.set(accepted.registrationId);
|
|
this.submitted.set(true);
|
|
this.submitting.set(false);
|
|
},
|
|
// Surface the failure instead of swallowing it: re-enable the button so the user can retry.
|
|
error: () => {
|
|
this.failed.set(true);
|
|
this.submitting.set(false);
|
|
},
|
|
});
|
|
}
|
|
|
|
withdraw(): void {
|
|
const reference = this.reference();
|
|
if (!reference) {
|
|
return;
|
|
}
|
|
this.withdrawing.set(true);
|
|
this.withdrawFailed.set(false);
|
|
this.bff.postSelfServiceRegistrationsIdWithdraw(reference).subscribe({
|
|
next: () => {
|
|
this.withdrawn.set(true);
|
|
this.withdrawing.set(false);
|
|
},
|
|
// Surface the failure instead of swallowing it: keep the action so the user can retry.
|
|
error: () => {
|
|
this.withdrawFailed.set(true);
|
|
this.withdrawing.set(false);
|
|
},
|
|
});
|
|
}
|
|
}
|