diff --git a/cope2n-fe/src/pages/reviews2/DocumentCompareInfo.tsx b/cope2n-fe/src/pages/reviews2/DocumentCompareInfo.tsx
new file mode 100644
index 0000000..b1963fe
--- /dev/null
+++ b/cope2n-fe/src/pages/reviews2/DocumentCompareInfo.tsx
@@ -0,0 +1,69 @@
+import React from 'react';
+import { Button, Descriptions, Input } from 'antd';
+import type { DescriptionsProps } from 'antd';
+import { CopyOutlined } from '@ant-design/icons';
+import { FEEDBACK_RESULT, PREDICTED_RESULT, REVIEWED_RESULT } from './const';
+
+const DocumentCompareInfo = ({ key, data, selectedFileDataSource, updateRevisedByFeedback, handleUpdateFileInField, shouldRevised, disabledInput }) => {
+ const items: DescriptionsProps['items'] = [
+ {
+ key: selectedFileDataSource[data]?.[FEEDBACK_RESULT] || '1',
+ label: 'Feedback',
+ children: selectedFileDataSource[data]?.[FEEDBACK_RESULT],
+ labelStyle: { color: '#333', padding: '4px 16px' },
+ contentStyle: { padding: '4px 16px' },
+ span: 3
+ },
+ {
+ key: selectedFileDataSource[data]?.[PREDICTED_RESULT] || '2',
+ label: 'Predicted',
+ children: selectedFileDataSource[data]?.[PREDICTED_RESULT],
+ labelStyle: { color: '#333', padding: '4px 16px' },
+ contentStyle: { padding: '4px 16px' },
+ span: 3
+ },
+ {
+ key: selectedFileDataSource[data]?.[REVIEWED_RESULT] || '3',
+ label: 'Revised',
+ children:
+ handleUpdateFileInField(data, e.target.value)
+ }
+ variant="borderless"
+ disabled={disabledInput === undefined || disabledInput === 0}
+ />,
+ labelStyle: { color: '#333', padding: '4px 16px' },
+ contentStyle: { padding: '4px 16px' },
+ span: 3
+ },
+ ];
+ return (
+
+
+
{data}
+
}
+ size='small'
+ onClick={() => updateRevisedByFeedback(data)}
+ disabled={disabledInput === undefined || disabledInput === 0}
+ />
+
+
+
+ )
+}
+
+export default DocumentCompareInfo;
\ No newline at end of file
diff --git a/cope2n-fe/src/pages/reviews2/DocumentHeadInfo.tsx b/cope2n-fe/src/pages/reviews2/DocumentHeadInfo.tsx
new file mode 100644
index 0000000..50b811b
--- /dev/null
+++ b/cope2n-fe/src/pages/reviews2/DocumentHeadInfo.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import { Descriptions } from 'antd';
+import type { DescriptionsProps } from 'antd';
+
+const DocumentHeadInfo = ({ currentRequest }) => {
+ const items: DescriptionsProps['items'] = [
+ {
+ key: '1',
+ label: 'Request ID',
+ children: currentRequest?.RequestID,
+ span: 2,
+ labelStyle: { color: '#333', width: '200px' }
+ },
+ {
+ key: '2',
+ label: 'Redemption ID',
+ children: currentRequest?.RedemptionID,
+ labelStyle: { color: '#333', width: '200px' }
+ },
+ {
+ key: '3',
+ label: 'Raw accuracy',
+ children: currentRequest?.raw_accuracy,
+ span: 2,
+ labelStyle: { color: '#333', width: '200px' }
+ },
+ {
+ key: '4',
+ label: 'Processing time',
+ children: currentRequest?.['Server Processing Time (ms)'],
+ labelStyle: { color: '#333', width: '200px' }
+ }
+ ];
+ return (
+
+ )
+}
+
+export default DocumentHeadInfo;
\ No newline at end of file
diff --git a/cope2n-fe/src/pages/reviews2/api.ts b/cope2n-fe/src/pages/reviews2/api.ts
index 229ac6c..4f32ff9 100644
--- a/cope2n-fe/src/pages/reviews2/api.ts
+++ b/cope2n-fe/src/pages/reviews2/api.ts
@@ -10,6 +10,8 @@ export const fetchAllRequests = async (
filterFeedbackResult: string,
filterPredictResult: string,
filterReviewedResult: string,
+ filterBadReason: string,
+ filterOtherReason: string,
page = 1,
page_size = 20,
max_accuracy = 100,
@@ -42,6 +44,11 @@ export const fetchAllRequests = async (
if (filterReviewedResult) {
filterStr += `reviewed_result=${filterReviewedResult}&`;
}
+ if (filterBadReason === 'other' && filterOtherReason.trim()) {
+ filterStr += `bad_reason=${filterOtherReason}&`;
+ } else if(filterBadReason !== 'other') {
+ filterStr += `bad_reason=${filterBadReason}&`;
+ }
//
if (startDate && endDate) {
filterStr += `start_date=${startDate}&end_date=${endDate}&`;
@@ -105,7 +112,7 @@ export const fetchRequest = async (id: string) => {
});
return await (
await response.json()
- ).subscription_requests?.[0] || null;
+ ).subscription_requests?.[0];
};
export const addRecentRequest = (
diff --git a/cope2n-fe/src/pages/reviews2/index.tsx b/cope2n-fe/src/pages/reviews2/index.tsx
index a6d73ab..cd00d33 100644
--- a/cope2n-fe/src/pages/reviews2/index.tsx
+++ b/cope2n-fe/src/pages/reviews2/index.tsx
@@ -3,7 +3,6 @@ import {
ArrowRightOutlined,
CheckCircleOutlined,
ClockCircleFilled,
- CopyOutlined,
FullscreenExitOutlined,
FullscreenOutlined,
} from '@ant-design/icons';
@@ -55,6 +54,8 @@ import {
import FileCard from './FileCard';
import RecentRequest from './RecentRequest';
import './style.css';
+import DocumentHeadInfo from './DocumentHeadInfo';
+import DocumentCompareInfo from './DocumentCompareInfo';
const ReviewPage = () => {
const [loading, setLoading] = useState(false);
@@ -76,6 +77,9 @@ const ReviewPage = () => {
const [filterFeedbackResult, setFilterFeedbackResult] = useState('');
const [filterPredictResult, setFilterPredictResult] = useState('');
const [filterReviewedResult, setFilterReviewedResult] = useState('');
+ const [filterBadReason, setFilterBadReason] = useState('other');
+ const [filterOtherReason, setFilterOtherReason] = useState('');
+
// const [requests, setRequests] = useState([]);
const [currentRequest, setCurrentRequest] = useState(null);
const [currentRequestIndex, setCurrentRequestIndex] = useState(1);
@@ -118,6 +122,8 @@ const ReviewPage = () => {
filterFeedbackResult,
filterPredictResult,
filterReviewedResult,
+ filterBadReason,
+ filterOtherReason,
1,
1,
filterAccuracy,
@@ -125,7 +131,7 @@ const ReviewPage = () => {
setTotalPages(data?.page?.total_requests);
setHasNextRequest(1 < data?.page?.total_requests);
const firstRequest = fetchRequest(
- data?.subscription_requests[0].RequestID,
+ data?.subscription_requests?.[0]?.RequestID,
);
firstRequest.then(async (data) => {
if (data) setCurrentRequest(data);
@@ -231,6 +237,8 @@ const ReviewPage = () => {
filterFeedbackResult,
filterPredictResult,
filterReviewedResult,
+ filterBadReason,
+ filterOtherReason,
requestIndex,
1,
filterAccuracy,
@@ -290,6 +298,8 @@ const ReviewPage = () => {
filterFeedbackResult,
filterPredictResult,
filterReviewedResult,
+ filterBadReason,
+ filterOtherReason,
1,
1,
filterAccuracy,
@@ -491,42 +501,10 @@ const ReviewPage = () => {
>
{fullscreen ? : }
- {totalRequests && (
-
-
- Request ID:
- {currentRequest?.RequestID}
-
{' '}
-
- Created at:
- {currentRequest?.created_at}
-
{' '}
-
- Request time:
- {currentRequest?.['Client Request Time (ms)']}
-
{' '}
-
- Redemption ID:
- {currentRequest?.RedemptionID}
-
{' '}
-
- Raw accuracy:
- {currentRequest?.raw_accuracy}
-
{' '}
-
- Processing time:
- {currentRequest?.['Server Processing Time (ms)']}
-
{' '}
-
- )}
+ {totalRequests && (
+
+ )}
{totalRequests > 0 && (
{
}
} catch (error) { }
return (
-
-
-
{data}
-
}
- size='small'
- onClick={() => updateRevisedByFeedback(data)}
- />
-
-
-
-
- handleUpdateFileInField(data, e.target.value)
- }
- />
-
+
);
})}
{t`Bad image reason:`}
@@ -919,31 +864,75 @@ const ReviewPage = () => {
style={{
marginTop: 30,
}}
+ layout="vertical"
>
-
- {
- setFilterDateRange(dateString);
- }}
- style={{ width: 200 }}
- />
-
-
+
+ {
+ setFilterDateRange(dateString);
+ }}
+ style={{ width: 300 }}
+ />
+
+
+
+
+
+ {filterBadReason === 'other' && (
+
+ {
+ setFilterOtherReason(e.target.value);
+ }}
+ />
+
+ )}
+
+
+
{
message: 'Please select a subsidiary',
},
]}
+ style={{
+ flex: 1,
+ }}
>