Skip to content

Commit a1e7fb7

Browse files
committed
🐛 [#378] Handle review items with zaak null
Whenever a zaak has been removed by some other entity. This could be in the admin or directly in openzaak.
1 parent e7ea887 commit a1e7fb7

File tree

4 files changed

+40
-19
lines changed

4 files changed

+40
-19
lines changed

frontend/src/fixtures/reviewItem.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import { ReviewItem } from "../lib/api/review";
1+
import { ReviewItemWithZaak } from "../lib/api/review";
22
import { createArrayFactory, createObjectFactory } from "./factory";
33
import { zaakFactory, zakenFactory } from "./zaak";
44

5-
const FIXTURE_REVIEW_ITEM: ReviewItem = {
5+
const FIXTURE_REVIEW_ITEM: ReviewItemWithZaak = {
66
pk: 1,
77
zaak: zaakFactory(),
88
feedback: "Deze niet",
99
};
1010

11-
const FIXTURE_REVIEW_ITEMS: ReviewItem[] = [
11+
const FIXTURE_REVIEW_ITEMS: ReviewItemWithZaak[] = [
1212
FIXTURE_REVIEW_ITEM,
1313
{
1414
pk: 2,
@@ -22,7 +22,9 @@ const FIXTURE_REVIEW_ITEMS: ReviewItem[] = [
2222
},
2323
];
2424

25-
const reviewItemFactory = createObjectFactory<ReviewItem>(FIXTURE_REVIEW_ITEM);
26-
const reviewItemsFactory = createArrayFactory<ReviewItem>(FIXTURE_REVIEW_ITEMS);
25+
const reviewItemFactory =
26+
createObjectFactory<ReviewItemWithZaak>(FIXTURE_REVIEW_ITEM);
27+
const reviewItemsFactory =
28+
createArrayFactory<ReviewItemWithZaak>(FIXTURE_REVIEW_ITEMS);
2729

2830
export { reviewItemFactory, reviewItemsFactory };

frontend/src/lib/api/review.ts

+6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ export type ZaakReview = {
1919
};
2020

2121
export type ReviewItem = {
22+
pk: number;
23+
zaak: Zaak | null;
24+
feedback: string;
25+
};
26+
27+
export type ReviewItemWithZaak = {
2228
pk: number;
2329
zaak: Zaak;
2430
feedback: string;

frontend/src/pages/destructionlist/detail/DestructionListDetail.loader.ts

+15-9
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
import { listSelectielijstKlasseChoices } from "../../../lib/api/private";
1616
import {
1717
Review,
18-
ReviewItem,
18+
ReviewItemWithZaak,
1919
getLatestReview,
2020
listReviewItems,
2121
} from "../../../lib/api/review";
@@ -46,7 +46,7 @@ export interface DestructionListDetailContext {
4646
user: User;
4747

4848
review: Review | null;
49-
reviewItems: ReviewItem[] | null;
49+
reviewItems: ReviewItemWithZaak[] | null;
5050

5151
selectieLijstKlasseChoicesMap: Record<string, Option[]> | null;
5252
}
@@ -83,15 +83,21 @@ export const destructionListDetailLoader = loginRequired(
8383
})
8484
: null;
8585

86+
// #378 - If for some unfortunate reason a zaak has been deleted outside of the process,
87+
// item.zaak can be null
88+
const reviewItemsWithZaak = reviewItems
89+
? (reviewItems.filter((item) => !!item.zaak) as ReviewItemWithZaak[])
90+
: reviewItems;
91+
8692
/**
8793
* Fetch selectable zaken: empty array if review collected OR all zaken not in another destruction list.
8894
* FIXME: Accept no/implement real pagination?
8995
*/
9096
const getDestructionListItems =
9197
async (): Promise<PaginatedDestructionListItems> =>
92-
reviewItems
98+
reviewItemsWithZaak
9399
? {
94-
count: reviewItems.length,
100+
count: reviewItemsWithZaak.length,
95101
next: null,
96102
previous: null,
97103
results: [],
@@ -122,13 +128,13 @@ export const destructionListDetailLoader = loginRequired(
122128
* reviewItems ? await listSelectieLijstKlasseChoices({}) : null,
123129
*/
124130
const getReviewItems = () =>
125-
reviewItems
131+
reviewItemsWithZaak
126132
? cacheMemo(
127133
"selectieLijstKlasseChoicesMap",
128134
async () =>
129135
Object.fromEntries(
130136
await Promise.all(
131-
reviewItems.map(async (ri) => {
137+
reviewItemsWithZaak.map(async (ri) => {
132138
const choices = await listSelectielijstKlasseChoices({
133139
zaak: ri.zaak.url,
134140
});
@@ -137,12 +143,12 @@ export const destructionListDetailLoader = loginRequired(
137143
),
138144
),
139145
// @ts-expect-error - Params not used in function but in case key only.
140-
reviewItems.map((ri) => ri.pk),
146+
reviewItemsWithZaak.map((ri) => ri.pk),
141147
)
142148
: null;
143149

144150
const getSelectableZaken = () =>
145-
reviewItems || destructionList.status === "ready_to_delete"
151+
reviewItemsWithZaak || destructionList.status === "ready_to_delete"
146152
? ({
147153
count: 0,
148154
next: null,
@@ -196,7 +202,7 @@ export const destructionListDetailLoader = loginRequired(
196202
user,
197203

198204
review: review,
199-
reviewItems: reviewItems,
205+
reviewItems: reviewItemsWithZaak,
200206

201207
selectieLijstKlasseChoicesMap,
202208
};

frontend/src/pages/destructionlist/review/DestructionListReview.loader.ts

+12-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from "../../../lib/api/destructionLists";
99
import {
1010
Review,
11-
ReviewItem,
11+
ReviewItemWithZaak,
1212
getLatestReview,
1313
listReviewItems,
1414
} from "../../../lib/api/review";
@@ -37,7 +37,7 @@ export type DestructionListReviewContext = {
3737

3838
paginatedZaken: PaginatedZaken;
3939
review: Review;
40-
reviewItems?: ReviewItem[];
40+
reviewItems?: ReviewItemWithZaak[];
4141
reviewResponse?: ReviewResponse;
4242
reviewers: User[];
4343

@@ -94,8 +94,15 @@ export const destructionListReviewLoader = loginRequired(
9494
storageKey,
9595
);
9696

97-
const zakenOnPage = reviewItems?.length
98-
? reviewItems.map((ri) => ri.zaak.url as string)
97+
// #378 - If for some unfortunate reason a zaak has been deleted outside of the process,
98+
// item.zaak can be null
99+
// TODO refactor: This code is the same as for the DestructionListDetail loader.
100+
const reviewItemsWithZaak = reviewItems
101+
? (reviewItems.filter((item) => !!item.zaak) as ReviewItemWithZaak[])
102+
: reviewItems;
103+
104+
const zakenOnPage = reviewItemsWithZaak?.length
105+
? reviewItemsWithZaak.map((ri) => ri.zaak.url as string)
99106
: zaken.results.map((z) => z.url as string);
100107

101108
const approvedZaakUrlsOnPagePromise = await Promise.all(
@@ -123,7 +130,7 @@ export const destructionListReviewLoader = loginRequired(
123130

124131
paginatedZaken: zaken,
125132
review: latestReview,
126-
reviewItems,
133+
reviewItems: reviewItemsWithZaak,
127134
reviewResponse,
128135
reviewers,
129136

0 commit comments

Comments
 (0)