Skip to content

Commit c9029c4

Browse files
committed
Bugfix: Deleting the last question in a page returns an empty list of questions
1 parent f5ae3b7 commit c9029c4

File tree

1 file changed

+44
-40
lines changed

1 file changed

+44
-40
lines changed

apps/question-service/src/app/page.tsx

Lines changed: 44 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -99,26 +99,21 @@ export default function Home() {
9999
});
100100
};
101101

102-
async function deleteQuestion(q: Question) {
103-
await DeleteQuestionByDocref(q.docRefId);
104-
loadQuestions();
105-
}
106-
107-
function loadQuestions() {
102+
async function loadQuestions() {
108103
if (!isLoading) {
109104
setIsLoading(true);
110105
}
111106

112-
GetQuestions(currentPage, limit).then((data) => {
113-
setQuestions(data.questions);
114-
setTotalCount(data.totalCount);
115-
setTotalPages(data.totalPages);
116-
setCurrentPage(data.currentPage);
117-
setLimit(data.limit);
118-
setIsLoading(false);
119-
});
107+
let data = await GetQuestions(currentPage, limit);
108+
setQuestions(data.questions);
109+
setTotalCount(data.totalCount);
110+
setTotalPages(data.totalPages);
111+
setCurrentPage(data.currentPage);
112+
setLimit(data.limit);
113+
setIsLoading(false);
120114
}
121-
useEffect(loadQuestions, [limit, currentPage]);
115+
116+
useEffect(() => {loadQuestions()}, [limit, currentPage]);
122117

123118
// Table column specification
124119
const columns: TableProps<Question>["columns"] = [
@@ -171,11 +166,11 @@ export default function Home() {
171166
danger
172167
icon={<DeleteOutlined />}
173168
onClick={() => {
174-
if (questions == undefined) {
169+
if (questions === undefined) {
175170
throw new Error("questions is undefined")
176171
}
177-
let toDelete = questions.findIndex(row => row.id == id)
178-
if (toDelete == -1) {
172+
let toDelete = questions.findIndex(row => row.id === id)
173+
if (toDelete === -1) {
179174
error("Could not find id");
180175
return;
181176
}
@@ -221,6 +216,36 @@ export default function Home() {
221216
setCurrentPage(pageNumber);
222217
};
223218

219+
const confirmDeleteHandler = async () => {
220+
if (!("index" in deletionStage) || deletionStage.deleteConfirmed) {
221+
error("Cannot delete: invalid deletionStage");
222+
return;
223+
}
224+
if (questions == undefined) {
225+
error("Cannot delete: questions does not exist");
226+
return;
227+
}
228+
if (currentPage == undefined) {
229+
error("Cannot delete: currentPage does not exist");
230+
return;
231+
}
232+
233+
setDeletionStage({ index: deletionStage.index, deleteConfirmed: true });
234+
await DeleteQuestionByDocref(questions[deletionStage.index].docRefId);
235+
if (questions.length == 1 && currentPage > 1) {
236+
setCurrentPage(currentPage - 1);
237+
} else {
238+
try {
239+
await loadQuestions();
240+
} catch (err) {
241+
if (typeof err == 'string') {
242+
error(err);
243+
}
244+
}
245+
}
246+
setDeletionStage({});
247+
248+
};
224249
return (
225250
<div>
226251
{contextHolder}
@@ -310,28 +335,7 @@ export default function Home() {
310335
</Content>
311336
</Layout>
312337
{("index" in deletionStage && questions != undefined) && <DeleteModal
313-
okHandler={() => {
314-
if (!("index" in deletionStage)) {
315-
error("Cannot delete: no index");
316-
return;
317-
}
318-
if (deletionStage.deleteConfirmed) {
319-
error("Cannot delete: still deleting");
320-
return;
321-
}
322-
setDeletionStage({index: deletionStage.index, deleteConfirmed: true})
323-
324-
deleteQuestion(questions[deletionStage.index])
325-
.then(() => {
326-
success("Question successfully deleted")
327-
})
328-
.catch(err => {
329-
error(err);
330-
})
331-
.finally(() => {
332-
setDeletionStage({})
333-
})
334-
}}
338+
okHandler={confirmDeleteHandler}
335339
cancelHandler={() => setDeletionStage({})}
336340
questionTitle={questions[deletionStage.index].title}
337341
isDeleting={deletionStage.deleteConfirmed}/>}

0 commit comments

Comments
 (0)