diff --git a/ui/src/common/interface.ts b/ui/src/common/interface.ts
index c080ce76..bdbff1b2 100644
--- a/ui/src/common/interface.ts
+++ b/ui/src/common/interface.ts
@@ -69,6 +69,7 @@ export interface AnswerParams {
html: string;
question_id: string;
id: string;
+ edit_summary?: string;
}
export interface LoginReqParams {
diff --git a/ui/src/pages/Questions/EditAnswer/index.tsx b/ui/src/pages/Questions/EditAnswer/index.tsx
index 8ef5287b..7591c74d 100644
--- a/ui/src/pages/Questions/EditAnswer/index.tsx
+++ b/ui/src/pages/Questions/EditAnswer/index.tsx
@@ -62,6 +62,13 @@ const Ask = () => {
...formData,
answer: { ...formData.answer, value },
});
+ const handleSummaryChange = (evt) => {
+ const v = evt.currentTarget.value;
+ setFormData({
+ ...formData,
+ description: { ...formData.description, value: v },
+ });
+ };
const checkValidated = (): boolean => {
let bol = true;
@@ -100,6 +107,7 @@ const Ask = () => {
html: editorRef.current.getHtml(),
question_id: qid,
id: aid,
+ edit_summary: formData.description.value,
};
modifyAnswer(params).then(() => {
navigate(`/questions/${qid}/${aid}`);
@@ -198,6 +206,7 @@ const Ask = () => {
{t('form.fields.edit_summary.label')}
{
const [isLoading, setIsLoading] = useState(false);
const [noTasks, setNoTasks] = useState(false);
const [page, setPage] = useState(1);
- const { data: reviewResp, mutate: mutateList } = useReviewList(page);
+ const [reviewResp, setReviewResp] = useState();
const ro = reviewResp?.list[0];
const { info, type, unreviewed_info } = ro || {
info: null,
type: '',
unreviewed_info: null,
};
- const reviewInfo = unreviewed_info?.content;
- const mutateNextPage = () => {
- const count = reviewResp?.count;
- if (count && page < count) {
- setPage(page + 1);
- } else {
+ const resolveNextOne = (resp, pageNumber) => {
+ const { count, list = [] } = resp;
+ // auto rollback
+ if (!list.length && count && page !== 1) {
+ pageNumber = 1;
+ setPage(pageNumber);
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ queryNextOne(pageNumber);
+ return;
+ }
+ if (pageNumber !== page) {
+ setPage(pageNumber);
+ }
+ setReviewResp(resp);
+ if (!list.length) {
setNoTasks(true);
}
+ setTimeout(() => {
+ window.scrollTo({ top: 0 });
+ }, 150);
};
+ const queryNextOne = (pageNumber) => {
+ getReviewList(pageNumber)
+ .then((resp) => {
+ resolveNextOne(resp, pageNumber);
+ })
+ .catch((ex) => {
+ console.log('ex: ', ex);
+ });
+ };
+ const reviewInfo = unreviewed_info?.content;
const handlingSkip = () => {
- mutateNextPage();
+ queryNextOne(page + 1);
};
const handlingApprove = () => {
if (!unreviewed_info) {
@@ -39,7 +61,7 @@ const Index: FC = () => {
setIsLoading(true);
revisionAudit(unreviewed_info.id, 'approve')
.then(() => {
- mutateList();
+ queryNextOne(page);
})
.catch((ex) => {
console.log('ex: ', ex);
@@ -55,7 +77,7 @@ const Index: FC = () => {
setIsLoading(true);
revisionAudit(unreviewed_info.id, 'reject')
.then(() => {
- mutateList();
+ queryNextOne(page);
})
.catch((ex) => {
console.log('ex: ', ex);
@@ -93,14 +115,8 @@ const Index: FC = () => {
editSummary ||= t('edit_tag');
}
useEffect(() => {
- if (!reviewResp) {
- return;
- }
- window.scrollTo({ top: 0 });
- if (!reviewResp.list || !reviewResp.list.length) {
- setNoTasks(true);
- }
- }, [reviewResp]);
+ queryNextOne(page);
+ }, []);
return (
diff --git a/ui/src/services/client/revision.ts b/ui/src/services/client/revision.ts
index 28110ae9..06b5ce49 100644
--- a/ui/src/services/client/revision.ts
+++ b/ui/src/services/client/revision.ts
@@ -1,5 +1,3 @@
-import useSWR from 'swr';
-
import request from '@/utils/request';
import * as Type from '@/common/interface';
@@ -16,16 +14,7 @@ export const revisionAudit = (id: string, operation: 'approve' | 'reject') => {
});
};
-export const useReviewList = (page: number) => {
+export const getReviewList = (page: number) => {
const apiUrl = `/answer/api/v1/revisions/unreviewed?page=${page}`;
- const { data, error, mutate } = useSWR(
- apiUrl,
- request.instance.get,
- );
- return {
- data,
- isLoading: !data && !error,
- error,
- mutate,
- };
+ return request.get(apiUrl);
};