diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index 4737cf3bc..c46d01d5e 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -8,6 +8,7 @@ import "./index.css"; import { DestructionListCreatePage, LoginPage, + destructionListCreateAction, destructionListCreateLoader, landingLoader, loginAction, @@ -26,6 +27,7 @@ const router = createBrowserRouter([ { path: "/destruction-lists/create", element: , + action: destructionListCreateAction, loader: destructionListCreateLoader, }, { diff --git a/frontend/src/lib/api/destructionLists.ts b/frontend/src/lib/api/destructionLists.ts index 4af053b98..ca47316f8 100644 --- a/frontend/src/lib/api/destructionLists.ts +++ b/frontend/src/lib/api/destructionLists.ts @@ -1,7 +1,21 @@ +import { isPrimitive } from "@maykin-ui/admin-ui"; + +import { Zaak } from "../../types"; import { request } from "./request"; +import { User } from "./reviewers"; export type DestructionList = { - // TODO + name: string; + assignees: DestructionListAssignee[]; + items: DestructionListItem[]; +}; + +export type DestructionListAssignee = { + user: User["pk"]; +}; + +export type DestructionListItem = { + zaak: Zaak["url"]; }; /** @@ -12,3 +26,35 @@ export async function listDestructionLists() { const promise: Promise = response.json(); return promise; } + +/** + * Create a new destruction list. + * @param name + * @param zaken + * @param assignees + */ +export async function createDestructionList( + name: string, + zaken: string[] | Zaak[], + assignees: string[] | number[] | User[], +) { + const urls = zaken.map((zaak) => (isPrimitive(zaak) ? zaak : zaak.url)); + const assigneeIds = assignees.map((assignee) => + isPrimitive(assignee) ? assignee.toString() : assignee.pk.toString(), + ); + + const destructionList = { + name, + assignees: assigneeIds.map((id) => ({ user: id })), + items: urls.map((url) => ({ zaak: url })), + }; + + const response = await request( + "POST", + "/destruction-lists/", + {}, + destructionList, + ); + const promise: Promise = response.json(); + return promise; +} diff --git a/frontend/src/lib/zaakSelection/zaakSelection.ts b/frontend/src/lib/zaakSelection/zaakSelection.ts index 01a67a0b3..5cb8eb262 100644 --- a/frontend/src/lib/zaakSelection/zaakSelection.ts +++ b/frontend/src/lib/zaakSelection/zaakSelection.ts @@ -67,6 +67,18 @@ export async function setZaakSelection( sessionStorage.setItem(computedKey, json); } +/** + * Clears zaak selection cache. + * Note: only the `url` of selected `zaken` are stored. + * Note: This function is async to accommodate possible future refactors. + * @param key A key identifying the selection + */ +export async function clearZaakSelection(key: string) { + const computedKey = _getComputedKey(key); + const json = "{}"; + sessionStorage.setItem(computedKey, json); +} + /** * Returns whether zaak is selected. * @param key A key identifying the selection diff --git a/frontend/src/pages/destructionlist/DestructionListCreate.stories.tsx b/frontend/src/pages/destructionlist/DestructionListCreate.stories.tsx index 79d1b3ed8..a2967d5c9 100644 --- a/frontend/src/pages/destructionlist/DestructionListCreate.stories.tsx +++ b/frontend/src/pages/destructionlist/DestructionListCreate.stories.tsx @@ -13,546 +13,557 @@ export default meta; type Story = StoryObj; const FIXTURE = { - count: 10, - next: null, - previous: null, - results: [ - { - uuid: "87691e74-1b0b-491a-aa63-0a396bbb1e3e", - url: "http://localhost:8000/zaken/api/v1/zaken/87691e74-1b0b-491a-aa63-0a396bbb1e3e", - rollen: [], - status: - "http://localhost:8000/zaken/api/v1/statussen/0ca07132-62fe-4ba9-9735-71268e7dff7a", - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/64c98539-076e-4fbf-8fec-fa86c560fb24", - deelzaken: [], - einddatum: "2024-03-24", - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2021-01-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, + zaken: { + count: 10, + next: null, + previous: null, + results: [ + { + uuid: "87691e74-1b0b-491a-aa63-0a396bbb1e3e", + url: "http://localhost:8000/zaken/api/v1/zaken/87691e74-1b0b-491a-aa63-0a396bbb1e3e", + rollen: [], + status: + "http://localhost:8000/zaken/api/v1/statussen/0ca07132-62fe-4ba9-9735-71268e7dff7a", + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/64c98539-076e-4fbf-8fec-fa86c560fb24", + deelzaken: [], + einddatum: "2024-03-24", + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2021-01-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak SHNB25", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2021-0000000008", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "376924512", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2021-01-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [ + "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/8582e4bf-2b81-4425-b403-149d12d90c54", + ], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "geheim", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - toelichting: "", - omschrijving: "Test zaak SHNB25", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2021-0000000008", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", + { + uuid: "3038cc8e-003b-411c-b6ef-7dc5ddc5a3ee", + url: "http://localhost:8000/zaken/api/v1/zaken/3038cc8e-003b-411c-b6ef-7dc5ddc5a3ee", + rollen: [], + status: null, + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/64c98539-076e-4fbf-8fec-fa86c560fb24", + deelzaken: [], + einddatum: null, + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2019-01-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak CKERQQ", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2019-0000000002", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "517439943", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2021-01-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [ + "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/9feb00c0-1c79-40e3-aa59-96d8999de624", + ], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "openbaar", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - zaakgeometrie: null, - bronorganisatie: "376924512", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2021-01-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [ - "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/8582e4bf-2b81-4425-b403-149d12d90c54", - ], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "geheim", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", - }, - { - uuid: "3038cc8e-003b-411c-b6ef-7dc5ddc5a3ee", - url: "http://localhost:8000/zaken/api/v1/zaken/3038cc8e-003b-411c-b6ef-7dc5ddc5a3ee", - rollen: [], - status: null, - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/64c98539-076e-4fbf-8fec-fa86c560fb24", - deelzaken: [], - einddatum: null, - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2019-01-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, + { + uuid: "78b6dd10-261b-4a40-99e2-1eea3e38bc99", + url: "http://localhost:8000/zaken/api/v1/zaken/78b6dd10-261b-4a40-99e2-1eea3e38bc99", + rollen: [], + status: null, + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/927eb71c-d99b-4c5d-b3e2-94a07ce85923", + deelzaken: [], + einddatum: null, + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2021-02-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak CI0GFH", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2021-0000000007", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "517439943", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2021-01-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [ + "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/d2217461-6b9d-414c-b7ce-ba306f38fc2d", + ], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "geheim", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - toelichting: "", - omschrijving: "Test zaak CKERQQ", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2019-0000000002", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", + { + uuid: "64bec25d-5752-48a9-b2f9-6c27085a469f", + url: "http://localhost:8000/zaken/api/v1/zaken/64bec25d-5752-48a9-b2f9-6c27085a469f", + rollen: [], + status: null, + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/927eb71c-d99b-4c5d-b3e2-94a07ce85923", + deelzaken: [], + einddatum: null, + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2021-05-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak 5EQDCS", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2021-0000000006", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "095847261", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2024-02-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [ + "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/7c263c14-e3ae-4f2b-bc5f-a5a5052ee016", + ], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "openbaar", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - zaakgeometrie: null, - bronorganisatie: "517439943", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2021-01-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [ - "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/9feb00c0-1c79-40e3-aa59-96d8999de624", - ], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "openbaar", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", - }, - { - uuid: "78b6dd10-261b-4a40-99e2-1eea3e38bc99", - url: "http://localhost:8000/zaken/api/v1/zaken/78b6dd10-261b-4a40-99e2-1eea3e38bc99", - rollen: [], - status: null, - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/927eb71c-d99b-4c5d-b3e2-94a07ce85923", - deelzaken: [], - einddatum: null, - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2021-02-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, + { + uuid: "409a291a-9cf0-4c40-9f31-25e9452a8e79", + url: "http://localhost:8000/zaken/api/v1/zaken/409a291a-9cf0-4c40-9f31-25e9452a8e79", + rollen: [], + status: null, + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/684b9c68-a36f-4c72-b044-fa9cdcb17ec9", + deelzaken: [], + einddatum: null, + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2019-01-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak JQG084", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2019-0000000001", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "517439943", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2021-01-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "openbaar", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - toelichting: "", - omschrijving: "Test zaak CI0GFH", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2021-0000000007", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", + { + uuid: "1188687c-392b-439e-9d5f-4d17bac822bf", + url: "http://localhost:8000/zaken/api/v1/zaken/1188687c-392b-439e-9d5f-4d17bac822bf", + rollen: [], + status: null, + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/e4f2a6b0-9377-400a-b0ce-ed66c0a315da", + deelzaken: [], + einddatum: null, + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2021-02-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak P7VDXB", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2021-0000000005", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "517439943", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2021-01-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [ + "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/a9158b2a-304f-4a6e-bc3d-9f73c83e26b1", + ], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "geheim", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - zaakgeometrie: null, - bronorganisatie: "517439943", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2021-01-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [ - "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/d2217461-6b9d-414c-b7ce-ba306f38fc2d", - ], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "geheim", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", - }, - { - uuid: "64bec25d-5752-48a9-b2f9-6c27085a469f", - url: "http://localhost:8000/zaken/api/v1/zaken/64bec25d-5752-48a9-b2f9-6c27085a469f", - rollen: [], - status: null, - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/927eb71c-d99b-4c5d-b3e2-94a07ce85923", - deelzaken: [], - einddatum: null, - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2021-05-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, + { + uuid: "5d816422-7f1c-42b4-9a4c-715d2e07aca3", + url: "http://localhost:8000/zaken/api/v1/zaken/5d816422-7f1c-42b4-9a4c-715d2e07aca3", + rollen: [], + status: null, + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/e4f2a6b0-9377-400a-b0ce-ed66c0a315da", + deelzaken: [], + einddatum: null, + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2021-05-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak KVD4YL", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2021-0000000004", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "095847261", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2021-02-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [ + "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/9e3ff7a9-90db-45e2-ab0a-1129ec026243", + ], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "openbaar", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - toelichting: "", - omschrijving: "Test zaak 5EQDCS", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2021-0000000006", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", + { + uuid: "2e803c71-49c4-4dc0-bfd1-42f2a3da99f9", + url: "http://localhost:8000/zaken/api/v1/zaken/2e803c71-49c4-4dc0-bfd1-42f2a3da99f9", + rollen: [], + status: null, + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/3206d651-d0f2-4690-933d-cc690444184f", + deelzaken: [], + einddatum: null, + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2021-02-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak D8JVVN", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2021-0000000003", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "517439943", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2021-01-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [ + "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/26a87623-aa50-48fd-861d-61d8f3456d36", + ], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "geheim", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - zaakgeometrie: null, - bronorganisatie: "095847261", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2024-02-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [ - "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/7c263c14-e3ae-4f2b-bc5f-a5a5052ee016", - ], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "openbaar", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", - }, - { - uuid: "409a291a-9cf0-4c40-9f31-25e9452a8e79", - url: "http://localhost:8000/zaken/api/v1/zaken/409a291a-9cf0-4c40-9f31-25e9452a8e79", - rollen: [], - status: null, - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/684b9c68-a36f-4c72-b044-fa9cdcb17ec9", - deelzaken: [], - einddatum: null, - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2019-01-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, - }, - toelichting: "", - omschrijving: "Test zaak JQG084", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2019-0000000001", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", + { + uuid: "bd6cdd85-d578-47fa-9ddb-846354088a47", + url: "http://localhost:8000/zaken/api/v1/zaken/bd6cdd85-d578-47fa-9ddb-846354088a47", + rollen: [], + status: null, + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/3206d651-d0f2-4690-933d-cc690444184f", + deelzaken: [], + einddatum: null, + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2021-05-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak MJ3N0F", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2021-0000000002", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "095847261", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2021-02-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [ + "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/99fa414b-7fc5-4eef-bf8f-3920333df7b4", + ], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "openbaar", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - zaakgeometrie: null, - bronorganisatie: "517439943", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2021-01-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "openbaar", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", - }, - { - uuid: "1188687c-392b-439e-9d5f-4d17bac822bf", - url: "http://localhost:8000/zaken/api/v1/zaken/1188687c-392b-439e-9d5f-4d17bac822bf", - rollen: [], - status: null, - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/e4f2a6b0-9377-400a-b0ce-ed66c0a315da", - deelzaken: [], - einddatum: null, - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2021-02-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, + { + uuid: "2ca5f28c-397b-4cc6-ac76-4ef6cab19f59", + url: "http://localhost:8000/zaken/api/v1/zaken/2ca5f28c-397b-4cc6-ac76-4ef6cab19f59", + rollen: [], + status: null, + zaaktype: + "http://localhost:8000/catalogi/api/v1/zaaktypen/773b6b77-486a-4b6c-be3e-cf13f4387cf3", + deelzaken: [], + einddatum: null, + hoofdzaak: null, + kenmerken: [], + resultaat: null, + startdatum: "2021-05-01", + verlenging: null, + opschorting: { + reden: "", + indicatie: false, + }, + toelichting: "", + omschrijving: "Test zaak S75OKU", + zaakobjecten: [], + archiefstatus: "nog_te_archiveren", + eigenschappen: [], + identificatie: "ZAAK-2021-0000000001", + processobject: { + objecttype: "", + registratie: "", + datumkenmerk: "", + identificatie: "", + }, + zaakgeometrie: null, + bronorganisatie: "095847261", + publicatiedatum: null, + archiefnominatie: "vernietigen", + einddatumGepland: null, + registratiedatum: "2024-03-25", + archiefactiedatum: "2021-02-01", + processobjectaard: "", + betalingsindicatie: "", + communicatiekanaal: "", + laatsteBetaaldatum: null, + productenOfDiensten: [], + selectielijstklasse: "", + relevanteAndereZaken: [], + zaakinformatieobjecten: [], + startdatumBewaartermijn: null, + betalingsindicatieWeergave: "", + opdrachtgevendeOrganisatie: "", + vertrouwelijkheidaanduiding: "openbaar", + uiterlijkeEinddatumAfdoening: null, + verantwoordelijkeOrganisatie: "104567387", }, - toelichting: "", - omschrijving: "Test zaak P7VDXB", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2021-0000000005", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", - }, - zaakgeometrie: null, - bronorganisatie: "517439943", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2021-01-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [ - "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/a9158b2a-304f-4a6e-bc3d-9f73c83e26b1", - ], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "geheim", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", - }, - { - uuid: "5d816422-7f1c-42b4-9a4c-715d2e07aca3", - url: "http://localhost:8000/zaken/api/v1/zaken/5d816422-7f1c-42b4-9a4c-715d2e07aca3", - rollen: [], - status: null, - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/e4f2a6b0-9377-400a-b0ce-ed66c0a315da", - deelzaken: [], - einddatum: null, - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2021-05-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, - }, - toelichting: "", - omschrijving: "Test zaak KVD4YL", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2021-0000000004", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", - }, - zaakgeometrie: null, - bronorganisatie: "095847261", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2021-02-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [ - "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/9e3ff7a9-90db-45e2-ab0a-1129ec026243", - ], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "openbaar", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", - }, - { - uuid: "2e803c71-49c4-4dc0-bfd1-42f2a3da99f9", - url: "http://localhost:8000/zaken/api/v1/zaken/2e803c71-49c4-4dc0-bfd1-42f2a3da99f9", - rollen: [], - status: null, - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/3206d651-d0f2-4690-933d-cc690444184f", - deelzaken: [], - einddatum: null, - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2021-02-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, - }, - toelichting: "", - omschrijving: "Test zaak D8JVVN", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2021-0000000003", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", - }, - zaakgeometrie: null, - bronorganisatie: "517439943", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2021-01-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [ - "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/26a87623-aa50-48fd-861d-61d8f3456d36", - ], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "geheim", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", - }, - { - uuid: "bd6cdd85-d578-47fa-9ddb-846354088a47", - url: "http://localhost:8000/zaken/api/v1/zaken/bd6cdd85-d578-47fa-9ddb-846354088a47", - rollen: [], - status: null, - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/3206d651-d0f2-4690-933d-cc690444184f", - deelzaken: [], - einddatum: null, - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2021-05-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, - }, - toelichting: "", - omschrijving: "Test zaak MJ3N0F", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2021-0000000002", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", - }, - zaakgeometrie: null, - bronorganisatie: "095847261", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2021-02-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [ - "http://localhost:8000/zaken/api/v1/zaakinformatieobjecten/99fa414b-7fc5-4eef-bf8f-3920333df7b4", - ], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "openbaar", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", - }, + ], + }, + selectedZaken: [], + zaaktypeChoices: [ { - uuid: "2ca5f28c-397b-4cc6-ac76-4ef6cab19f59", - url: "http://localhost:8000/zaken/api/v1/zaken/2ca5f28c-397b-4cc6-ac76-4ef6cab19f59", - rollen: [], - status: null, - zaaktype: - "http://localhost:8000/catalogi/api/v1/zaaktypen/773b6b77-486a-4b6c-be3e-cf13f4387cf3", - deelzaken: [], - einddatum: null, - hoofdzaak: null, - kenmerken: [], - resultaat: null, - startdatum: "2021-05-01", - verlenging: null, - opschorting: { - reden: "", - indicatie: false, - }, - toelichting: "", - omschrijving: "Test zaak S75OKU", - zaakobjecten: [], - archiefstatus: "nog_te_archiveren", - eigenschappen: [], - identificatie: "ZAAK-2021-0000000001", - processobject: { - objecttype: "", - registratie: "", - datumkenmerk: "", - identificatie: "", - }, - zaakgeometrie: null, - bronorganisatie: "095847261", - publicatiedatum: null, - archiefnominatie: "vernietigen", - einddatumGepland: null, - registratiedatum: "2024-03-25", - archiefactiedatum: "2021-02-01", - processobjectaard: "", - betalingsindicatie: "", - communicatiekanaal: "", - laatsteBetaaldatum: null, - productenOfDiensten: [], - selectielijstklasse: "", - relevanteAndereZaken: [], - zaakinformatieobjecten: [], - startdatumBewaartermijn: null, - betalingsindicatieWeergave: "", - opdrachtgevendeOrganisatie: "", - vertrouwelijkheidaanduiding: "openbaar", - uiterlijkeEinddatumAfdoening: null, - verantwoordelijkeOrganisatie: "104567387", + label: "Melding klein kansspel", + value: + "https://test.openzaak.nl/catalogi/api/v1/zaaktypen/e95d9bdf-588d-4965-a469-378d9e0ca91e", + extra: "MKK", }, ], }; diff --git a/frontend/src/pages/destructionlist/DestructionListCreate.tsx b/frontend/src/pages/destructionlist/DestructionListCreate.tsx index 3e71cb675..da3258afa 100644 --- a/frontend/src/pages/destructionlist/DestructionListCreate.tsx +++ b/frontend/src/pages/destructionlist/DestructionListCreate.tsx @@ -1,21 +1,30 @@ import { AttributeData, + Button, DataGridProps, + H2, + Input, ListTemplate, TypedField, } from "@maykin-ui/admin-ui"; -import React from "react"; +import { ActionFunctionArgs } from "@remix-run/router/utils"; +import React, { useState } from "react"; import { + useActionData, useLoaderData, useNavigation, useSearchParams, + useSubmit, } from "react-router-dom"; +import { createDestructionList } from "../../lib/api/destructionLists"; import { loginRequired } from "../../lib/api/loginRequired"; import { ZaaktypeChoice, listZaaktypeChoices } from "../../lib/api/private"; import { PaginatedZaken, listZaken } from "../../lib/api/zaken"; import { addToZaakSelection, + clearZaakSelection, + getZaakSelection, isZaakSelected, removeFromZaakSelection, } from "../../lib/zaakSelection/zaakSelection"; @@ -57,6 +66,27 @@ export const destructionListCreateLoader = loginRequired( }, ); +/** + * React Router action. + * @param request + */ +export async function destructionListCreateAction({ + request, +}: ActionFunctionArgs) { + const formData = await request.formData(); + const name = formData.get("name") as string; + const zaakUrls = formData.getAll("zaakUrls") as string[]; + const assigneeIds = formData.getAll("assigneeIds") as string[]; + + try { + await createDestructionList(name, zaakUrls, assigneeIds); + } catch (e: unknown) { + return await (e as Response).json(); + } + await clearZaakSelection(DESTRUCTION_LIST_CREATE_KEY); + return true; +} + export type DestructionListCreateProps = Omit< React.ComponentProps<"main">, "onChange" | "onSelect" @@ -68,12 +98,19 @@ export type DestructionListCreateProps = Omit< export function DestructionListCreatePage({ ...props }: DestructionListCreateProps) { + // Loader/Action I/O. const { zaken, selectedZaken, zaaktypeChoices } = useLoaderData() as DestructionListCreateContext; + const errors = useActionData() || {}; + const submit = useSubmit(); + const [searchParams, setSearchParams] = useSearchParams(); const objectList = zaken.results as unknown as AttributeData[]; const { state } = useNavigation(); + const [isEditingNameState, setIsEditingNameState] = useState(true); + const [nameState, setNameState] = useState("Naam van de vernietigingslijst"); + const fields: TypedField[] = [ { name: "identificatie", @@ -193,8 +230,27 @@ export function DestructionListCreatePage({ ); }; + /** + * Get called when the selection is submitted. + */ + const onCreate = async () => { + const zaakSelection = await getZaakSelection(DESTRUCTION_LIST_CREATE_KEY); + const zaakUrls = Object.entries(zaakSelection) + .filter(([, selected]) => selected) + .map(([url]) => url); + const assigneeIds = [1]; // TODO: Add a modal with actual assignees + + const data = new FormData(); + data.append("name", nameState); + zaakUrls.forEach((url) => data.append("zaakUrls", url)); + assigneeIds.forEach((id) => data.append("assigneeIds", String(id))); + + submit(data, { method: "POST" }); + }; + return ( setNameState(e.target.value)} + onFocus={(e) => e.target.select()} + onBlur={() => setIsEditingNameState(false)} + onKeyUp={(e) => + e.code === "Enter" && setIsEditingNameState(false) + } + /> + ) : ( + + ), boolProps: { explicit: true, },