Skip to content

Commit 51ce5a6

Browse files
authored
Implement bulk delete to make sure non-deleted contents are still selected (#527)
1 parent 8e1ef76 commit 51ce5a6

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

admin_app/src/app/content/page.tsx

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -163,25 +163,52 @@ const CardsPage = () => {
163163
};
164164

165165
const handleDelete = async (selectedContents: number[]) => {
166-
const promises = selectedContents.map((content_id) =>
167-
archiveContent(content_id, token!),
168-
);
166+
const BATCH_SIZE = 20;
167+
let successCount = 0;
168+
let failedContentIds: number[] = [];
169+
169170
try {
170-
await Promise.all(promises);
171-
setSnackMessage({
172-
message: `Deleted ${selectedContents.length} content${
173-
selectedContents.length > 1 ? "s" : ""
174-
}`,
175-
color: "success",
176-
});
171+
for (let i = 0; i < selectedContents.length; i += BATCH_SIZE) {
172+
const batch = selectedContents.slice(i, i + BATCH_SIZE);
173+
174+
const results = await Promise.all(
175+
batch.map(async (content_id) => {
176+
try {
177+
await archiveContent(content_id, token!);
178+
successCount++;
179+
return { success: true, content_id };
180+
} catch (error) {
181+
console.error(`Failed to delete content ID ${content_id}:`, error);
182+
failedContentIds.push(content_id);
183+
return { success: false, content_id };
184+
}
185+
}),
186+
);
187+
}
188+
189+
if (failedContentIds.length === 0) {
190+
setSnackMessage({
191+
message: `Successfully deleted ${successCount} content${
192+
successCount > 1 ? "s" : ""
193+
}`,
194+
color: "success",
195+
});
196+
} else {
197+
setSnackMessage({
198+
message: `Deleted ${successCount} content${
199+
successCount > 1 ? "s" : ""
200+
}, failed to delete ${failedContentIds.length}`,
201+
color: "warning",
202+
});
203+
}
177204
} catch (error) {
178-
console.error("Failed to delete content:", error);
205+
console.error("Unexpected error during batch deletion:", error);
179206
setSnackMessage({
180-
message: `Failed to delete content`,
207+
message: "An unexpected error occurred during deletion",
181208
color: "error",
182209
});
183210
} finally {
184-
setSelectedContents([]);
211+
setSelectedContents(failedContentIds);
185212
setOpenBulkDeleteModal(false);
186213
setRefreshKey((prevKey) => prevKey + 1);
187214
}

0 commit comments

Comments
 (0)