Skip to content

Commit 49a1676

Browse files
committed
Aanhef & Profiel Service Changes
1 parent e3aa3c8 commit 49a1676

File tree

8 files changed

+485
-41
lines changed

8 files changed

+485
-41
lines changed

dependencies/profiel-service/openapi.yaml

Lines changed: 67 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
openapi: 3.1.0
33
components:
44
schemas:
5-
AfdelingRequest:
5+
DienstRequest:
66
type: object
77
required:
88
- beschrijving
9-
description: Request object voor het toevoegen van een afdeling aan een dienstverlener
9+
description: Request object voor het toevoegen van een dienst aan een dienstverlener
1010
properties:
1111
beschrijving:
1212
type: string
13-
AfdelingResponse:
13+
DienstResponse:
1414
type: object
1515
properties:
1616
id:
@@ -24,6 +24,34 @@ components:
2424
- Email
2525
- Telefoonnummer
2626
- Adres
27+
Taal:
28+
type: string
29+
enum:
30+
- Nederlands
31+
- Engels
32+
- Fries
33+
- Papiaments
34+
- Nedersaksisch
35+
- Limburgs
36+
ScopeRequest:
37+
type: object
38+
description: Scope waarop een contactgegeven of voorkeur betrekking heeft
39+
properties:
40+
scopeIdentificatieType:
41+
$ref: "#/components/schemas/IdentificatieType"
42+
scopeIdentificatieNummer:
43+
type: string
44+
dienstId:
45+
type: integer
46+
format: int64
47+
ScopeResponse:
48+
type: object
49+
description: Scope waarop een contactgegeven of voorkeur betrekking heeft
50+
properties:
51+
partij:
52+
$ref: "#/components/schemas/IdentificatieResponse"
53+
dienst:
54+
$ref: "#/components/schemas/DienstResponse"
2755
ContactgegevenRequest:
2856
type: object
2957
required:
@@ -33,13 +61,16 @@ components:
3361
Request object voor het toevoegen van een contactgegeven aan een
3462
partij
3563
properties:
36-
afdelingId:
37-
type: integer
38-
format: int64
3964
type:
4065
$ref: "#/components/schemas/ContactType"
4166
waarde:
4267
type: string
68+
taal:
69+
$ref: "#/components/schemas/Taal"
70+
terAttentieVan:
71+
type: string
72+
scope:
73+
$ref: "#/components/schemas/ScopeRequest"
4374
ContactgegevenResponse:
4475
type: object
4576
properties:
@@ -50,23 +81,30 @@ components:
5081
$ref: "#/components/schemas/ContactType"
5182
waarde:
5283
type: string
84+
taal:
85+
$ref: "#/components/schemas/Taal"
86+
terAttentieVan:
87+
type: string
5388
isGeverifieerd:
5489
type: boolean
55-
afdeling:
56-
$ref: "#/components/schemas/AfdelingResponse"
90+
scope:
91+
$ref: "#/components/schemas/ScopeResponse"
5792
ContactgegevenUpdateRequest:
5893
type: object
5994
required:
6095
- type
6196
- waarde
6297
properties:
63-
afdelingId:
64-
type: integer
65-
format: int64
6698
type:
6799
$ref: "#/components/schemas/ContactType"
68100
waarde:
69101
type: string
102+
taal:
103+
$ref: "#/components/schemas/Taal"
104+
terAttentieVan:
105+
type: string
106+
scope:
107+
$ref: "#/components/schemas/ScopeRequest"
70108
id:
71109
type: integer
72110
format: int64
@@ -119,7 +157,7 @@ components:
119157
type: string
120158
dienstverlenerOin:
121159
type: string
122-
afdelingBeschrijving:
160+
dienstBeschrijving:
123161
type: string
124162
PartijResponse:
125163
type: object
@@ -149,6 +187,8 @@ components:
149187
$ref: "#/components/schemas/VoorkeurType"
150188
waarde:
151189
type: string
190+
scope:
191+
$ref: "#/components/schemas/ScopeRequest"
152192
VoorkeurResponse:
153193
type: object
154194
properties:
@@ -159,6 +199,8 @@ components:
159199
$ref: "#/components/schemas/VoorkeurType"
160200
waarde:
161201
type: string
202+
scope:
203+
$ref: "#/components/schemas/ScopeResponse"
162204
VoorkeurType:
163205
type: string
164206
enum:
@@ -167,6 +209,7 @@ components:
167209
- WebsiteThema
168210
- PostcodeInUwBuurt
169211
- ActueleOnderwerpVoorkeur
212+
- Aanhef
170213
VoorkeurUpdateRequest:
171214
type: object
172215
required:
@@ -177,12 +220,14 @@ components:
177220
$ref: "#/components/schemas/VoorkeurType"
178221
waarde:
179222
type: string
223+
scope:
224+
$ref: "#/components/schemas/ScopeRequest"
180225
id:
181226
type: integer
182227
format: int64
183228
tags:
184229
- name: Dienstverlener
185-
description: Endpoints voor het beheren van dienstverleners en afdelingen
230+
description: Endpoints voor het beheren van dienstverleners en diensten
186231
- name: EmailVerificatie
187232
description: Endpoints voor het verifiëren van emails
188233
- name: Profiel
@@ -192,7 +237,7 @@ paths:
192237
put:
193238
summary: Update contactgegeven van een partij
194239
description:
195-
"Werk type, waarde en afdeling van een contactgegeven bij. Identificatie\
240+
"Werk type, waarde en scope van een contactgegeven bij. Identificatie\
196241
\ kan niet aangepast worden."
197242
tags:
198243
- Profiel
@@ -299,10 +344,10 @@ paths:
299344
"400":
300345
description: Bad Request
301346
summary: Add Dienstverlener
302-
/api/profielservice/v1/dienstverlener/{DienstverlenerNaam}/afdelingen:
347+
/api/profielservice/v1/dienstverlener/{DienstverlenerNaam}/diensten:
303348
post:
304-
summary: Voegt een afdeling toe aan een dienstverlener
305-
description: Voegt een nieuwe afdeling toe met beschrijving
349+
summary: Voegt een dienst toe aan een dienstverlener
350+
description: Voegt een nieuwe dienst toe met beschrijving
306351
tags:
307352
- Dienstverlener
308353
parameters:
@@ -315,11 +360,11 @@ paths:
315360
content:
316361
application/json:
317362
schema:
318-
$ref: "#/components/schemas/AfdelingRequest"
363+
$ref: "#/components/schemas/DienstRequest"
319364
required: true
320365
responses:
321366
"201":
322-
description: Afdeling succesvol toegevoegd
367+
description: Dienst succesvol toegevoegd
323368
"404":
324369
description: Dienstverlener niet gevonden
325370
"400":
@@ -340,7 +385,7 @@ paths:
340385
content:
341386
application/json:
342387
schema: {}
343-
summary: Get Afdelingen Dienstverlener
388+
summary: Get Diensten Dienstverlener
344389
/api/profielservice/v1/emailverificatie:
345390
post:
346391
tags:
@@ -364,7 +409,7 @@ paths:
364409
put:
365410
summary: Update voorkeur van een partij
366411
description:
367-
"Werk type, waarde en afdeling van een voorkeur bij. Identificatie\
412+
"Werk type, waarde en scope van een voorkeur bij. Identificatie\
368413
\ kan niet aangepast worden."
369414
tags:
370415
- Profiel
@@ -469,7 +514,7 @@ paths:
469514
required: true
470515
schema:
471516
$ref: "#/components/schemas/IdentificatieType"
472-
- name: afdelingBeschrijving
517+
- name: dienstBeschrijving
473518
in: query
474519
schema:
475520
type: string
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
"use client";
2+
3+
import { useRef, useState } from "react";
4+
import { components } from "@/network/profiel/generated";
5+
import { useUpdateVoorkeur } from "@/network/profiel/hooks/updateAanhefVoorkeur/useUpdateAanhefVoorkeur";
6+
import { EditIcon } from "@/components/icons/editIcon";
7+
import { useQueryClient } from "@tanstack/react-query";
8+
9+
export const AanhefEditBox = ({
10+
idenType,
11+
idenValue,
12+
voorkeur,
13+
}: {
14+
idenType: "KVK" | "BSN";
15+
idenValue: string;
16+
voorkeur?: components["schemas"]["VoorkeurResponse"];
17+
}) => {
18+
const [fieldState, setFieldState] = useState<"view" | "edit">("view");
19+
const [errorMessage, setErrorMessage] = useState<string | undefined>();
20+
const inputRef = useRef<HTMLInputElement>(null);
21+
const { mutate } = useUpdateVoorkeur();
22+
const queryClient = useQueryClient();
23+
24+
const [newValue, setNewValue] = useState(voorkeur?.waarde || "");
25+
26+
return (
27+
<form
28+
className="flex flex-col gap-3"
29+
noValidate
30+
onSubmit={(e) => {
31+
e.preventDefault();
32+
33+
if (fieldState !== "edit") return;
34+
35+
setErrorMessage(undefined);
36+
mutate(
37+
{
38+
identificatieNummer: idenValue,
39+
identificatieType: idenType,
40+
voorkeurType: "Aanhef",
41+
waarde: newValue,
42+
id: voorkeur?.id,
43+
},
44+
{
45+
onSuccess: () => {
46+
setFieldState("view");
47+
queryClient.invalidateQueries({
48+
queryKey: ["profiel", idenType, idenValue],
49+
});
50+
},
51+
onError: () => {
52+
setErrorMessage(
53+
"Er is een fout opgetreden bij het opslaan. Probeer het opnieuw.",
54+
);
55+
},
56+
},
57+
);
58+
}}
59+
>
60+
<div className="grid grid-cols-[2fr_3fr_100px] items-start gap-4">
61+
<label htmlFor="field-aanhef" className="font-bold">
62+
Aanhef
63+
</label>
64+
<div>
65+
{fieldState === "edit" ? (
66+
<div className="flex flex-col gap-2">
67+
<input
68+
ref={inputRef}
69+
className="w-full border border-gray-300 bg-white p-1"
70+
id="field-aanhef"
71+
type="text"
72+
placeholder="bv: Dhr. Jansen"
73+
value={newValue}
74+
onChange={(e) => setNewValue(e.target.value)}
75+
/>
76+
{errorMessage && (
77+
<span className="text-sm text-red-500">{errorMessage}</span>
78+
)}
79+
</div>
80+
) : newValue ? (
81+
<span>{newValue}</span>
82+
) : (
83+
<span className="text-neutral-500 italic">Niet opgegeven</span>
84+
)}
85+
</div>
86+
<div>
87+
{fieldState !== "edit" ? (
88+
<button
89+
type="button"
90+
onClick={() => {
91+
setFieldState("edit");
92+
requestAnimationFrame(() => inputRef.current?.focus());
93+
}}
94+
className="text-primary ml-auto flex cursor-pointer items-center gap-2 hover:underline"
95+
>
96+
<EditIcon />
97+
Aanpassen
98+
</button>
99+
) : (
100+
<div className="flex flex-col gap-0">
101+
<button
102+
type="submit"
103+
className="text-primary ml-auto flex cursor-pointer items-center gap-2 hover:underline"
104+
>
105+
Opslaan
106+
</button>
107+
<button
108+
type="button"
109+
onClick={() => {
110+
setFieldState("view");
111+
setErrorMessage(undefined);
112+
setNewValue(voorkeur?.waarde || "");
113+
}}
114+
className="text-primary ml-auto flex cursor-pointer items-center gap-2 hover:underline"
115+
>
116+
Annuleren
117+
</button>
118+
</div>
119+
)}
120+
</div>
121+
</div>
122+
</form>
123+
);
124+
};

0 commit comments

Comments
 (0)