From 5c93d5f87e16869e60a698f5fcda48ed2acf8a7f Mon Sep 17 00:00:00 2001 From: phanphan Date: Thu, 23 May 2024 18:48:21 +0700 Subject: [PATCH] =?UTF-8?q?r=C3=A8actor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cope2n-fe/src/pages/reviews2/FileCard.tsx | 38 +-- cope2n-fe/src/pages/reviews2/const.ts | 31 +- cope2n-fe/src/pages/reviews2/index.tsx | 386 +++++++++++++--------- 3 files changed, 273 insertions(+), 182 deletions(-) diff --git a/cope2n-fe/src/pages/reviews2/FileCard.tsx b/cope2n-fe/src/pages/reviews2/FileCard.tsx index 241989a..2fd0130 100644 --- a/cope2n-fe/src/pages/reviews2/FileCard.tsx +++ b/cope2n-fe/src/pages/reviews2/FileCard.tsx @@ -10,8 +10,9 @@ const FileCard = ({ file, isSelected, onClick, setIsReasonModalOpen }) => { border: '1px solid #ccc', backgroundColor: isSelected ? '#d4ecff' : '#fff', padding: '4px 8px', - margin: '0 0 4px', + margin: '0 8px 4px', cursor: 'pointer', + display: 'flex', }} onClick={onClick} > @@ -41,35 +42,18 @@ const FileCard = ({ file, isSelected, onClick, setIsReasonModalOpen }) => { {fileName ? fileName.substring(0, 25).replace('temp_', '') : fileName} -
{ + const downloadUrl = file['File URL']; + window.open(downloadUrl, '_blank'); }} > - - -
+ + + ); }; diff --git a/cope2n-fe/src/pages/reviews2/const.ts b/cope2n-fe/src/pages/reviews2/const.ts index e4b1f1d..0122ac5 100644 --- a/cope2n-fe/src/pages/reviews2/const.ts +++ b/cope2n-fe/src/pages/reviews2/const.ts @@ -1,4 +1,4 @@ -import { t } from "@lingui/macro"; +import { t } from '@lingui/macro'; export const counter_measure_map = { invalid_image: 'Remove this image from the evaluation report', @@ -23,9 +23,9 @@ export const REASON_BAD_QUALITY = [ { value: 'wrong_feedback', label: t`Wrong Feedback` }, { value: 'ocr_cannot_extract', label: t`Ocr cannot extract` }, { value: 'other', label: t`Other` }, -] +]; -export const SOLUTION_BAD_QUALITY =[ +export const SOLUTION_BAD_QUALITY = [ { value: 'Remove this image from the evaluation report', label: t`Remove this image from the evaluation report`, @@ -36,7 +36,7 @@ export const SOLUTION_BAD_QUALITY =[ label: t`Update revised result and re-calculate accuracy`, }, { value: 'other', label: t`Other` }, -] +]; export const SUBSIDIARIES = [ { value: 'SEAO', label: 'SEAO' }, @@ -46,4 +46,25 @@ export const SUBSIDIARIES = [ { value: 'SEPCO', label: 'SEPCO' }, { value: 'TSE', label: 'TSE' }, { value: 'SEIN', label: 'SEIN' }, -] \ No newline at end of file +]; + +export const SOURCE_KEYS = [ + 'retailername', + 'sold_to_party', + 'invoice_no', + 'purchase_date', + 'imei_number', +]; + +export const FEEDBACK_RESULT = 'Feedback Result'; +export const FEEDBACK_ACCURACY = 'Feedback Accuracy'; +export const PREDICTED_RESULT = 'Predicted Result'; +export const REVIEWED_ACCURACY = 'Reviewed Accuracy'; +export const REVIEWED_RESULT = 'Reviewed Result'; +export const SOURCE_OBJECT_NAMES = [ + FEEDBACK_RESULT, + FEEDBACK_ACCURACY, + PREDICTED_RESULT, + REVIEWED_ACCURACY, + REVIEWED_RESULT +]; diff --git a/cope2n-fe/src/pages/reviews2/index.tsx b/cope2n-fe/src/pages/reviews2/index.tsx index 46a11bf..2310db6 100644 --- a/cope2n-fe/src/pages/reviews2/index.tsx +++ b/cope2n-fe/src/pages/reviews2/index.tsx @@ -35,8 +35,14 @@ import { normalizeData } from 'utils/field-value-process'; import { fetchAllRequests, fetchRequest } from './api'; import { counter_measure_map, + FEEDBACK_ACCURACY, + FEEDBACK_RESULT, + PREDICTED_RESULT, REASON_BAD_QUALITY, + REVIEWED_RESULT, SOLUTION_BAD_QUALITY, + SOURCE_KEYS, + SOURCE_OBJECT_NAMES, SUBSIDIARIES, } from './const'; import FileCard from './FileCard'; @@ -48,6 +54,7 @@ const ReviewPage = () => { const [isReasonModalOpen, setIsReasonModalOpen] = useState(false); const [selectedFileId, setSelectedFileId] = useState(0); const [selectedFileData, setSelectedFileData] = useState(null); + const [selectedFileDataSource, setSelectedFileDataSource] = useState({}); const [selectedFileName, setSelectedFileName] = useState(null); // Default date range: 1 month ago to today @@ -78,6 +85,18 @@ const ReviewPage = () => { } }, [reason]); + const updateSelectedFileDataSource = (fileContent) => { + let tempData = {}; + SOURCE_KEYS.forEach((k) => { + tempData[k] = {}; + SOURCE_OBJECT_NAMES.forEach((name) => { + tempData[k][name] = fileContent[name][k]; + }); + }); + + setSelectedFileDataSource(tempData); + }; + const setAndLoadSelectedFile = async (requestData, index) => { setSelectedFileId(index); if (!requestData['Files'][index]) { @@ -87,6 +106,8 @@ const ReviewPage = () => { } const fileName = requestData['Files'][index]['File Name']; const fileURL = requestData['Files'][index]['File URL']; + updateSelectedFileDataSource(requestData['Files'][index]); + const response = await fetch(fileURL); if (response.status === 200) { setSelectedFileName(fileName); @@ -99,7 +120,6 @@ const ReviewPage = () => { } }; - console.log(dataSource); const loadCurrentRequest = (requestIndex) => { setLoading(true); setImageLoading(true); @@ -122,7 +142,6 @@ const ReviewPage = () => { ); requestData .then(async (data) => { - console.log('🚀 ~ .then ~ data:', data); if (data) setCurrentRequest(data); const predicted = data && data['Predicted Result'] ? data['Predicted Result'] : {}; @@ -308,6 +327,26 @@ const ReviewPage = () => { const [lightBox, setLightBox] = useState(false); + const updateRevised = (fieldName) => { + console.log('🚀 ~ updateRevised ~ fieldName:', fieldName); + // const tempData = Object.assign({}, selectedFileDataSource); + // tempData[fieldName][REVIEWED_RESULT] = tempData[fieldName][FEEDBACK_RESULT]; + // console.log('🚀 ~ updateRevised ~ tempData:', tempData); + // updateSelectedFileDataSource(tempData); + + setSelectedFileDataSource((prevData) => { + prevData[fieldName][REVIEWED_RESULT] = + prevData[fieldName][FEEDBACK_RESULT]; + return { + ...prevData, + }; + }); + }; + + // useEffect(() => { + + // }, [selectedFileDataSource]); + console.log('update data:', selectedFileDataSource); return (
{ margin: '0 0 4px 0', }} > -
- + {totalRequests ? ( +
- {fullscreen ? : } - {fullscreen ? 'Exit Fullscreen' : 'Enter Fullscreen'} - - {totalRequests ? ( - <> -    Request ID: {currentRequest?.RequestID} - - ) : ( - '' - )} -
-
+
+   Request ID:   + {currentRequest?.RequestID} +
{' '} +
+   Redemption ID:   + {currentRequest?.RedemptionID} +
{' '} +
+   Created at:   + {currentRequest?.created_at} +
{' '} +
+   Request time:   + {currentRequest?.['Client Request Time (ms)']} +
{' '} +
+   Processing time:   + {currentRequest?.['Server Processing Time (ms)']} +
{' '} +
+   Raw accuracy:   + {currentRequest?.raw_accuracy} +
{' '} +
+ ) : ( + '' + )} + {/*
{ > Filters -
+
*/}
{ display: 'flex', }} > -
- {totalRequests > 0 && ( -
-
-

- Files ({currentRequest?.Files?.length}) -

- {currentRequest?.Files.map((file, index) => ( - { - setAndLoadSelectedFile(currentRequest, index); - setImageLoading(true); - }} - setIsReasonModalOpen={setIsReasonModalOpen} - /> - ))} -
- {totalRequests > 0 && ( -
- Request ID - - Redemption - - Created date - - Request time - - Processing time - - Raw accuracy - -
- )} -
- )} -
{ display: 'flex', flexDirection: 'column', position: 'relative', - padding: '0 16px', + padding: '8px 16px', // overflow: 'auto' }} > + {totalRequests > 0 && ( +
+

+ Files ({currentRequest?.Files?.length}) +

+ {currentRequest?.Files.map((file, index) => ( + { + setAndLoadSelectedFile(currentRequest, index); + setImageLoading(true); + }} + setIsReasonModalOpen={setIsReasonModalOpen} + /> + ))} +
+ )}
@@ -685,11 +666,18 @@ const ReviewPage = () => { />
+
{ flexDirection: 'column', }} > +
+ + +
- {dataSource?.map((data) => { + {SOURCE_KEYS?.map((data) => { + let shouldRevised = false; + try { + if ( + selectedFileDataSource[data]?.[FEEDBACK_ACCURACY].length > 0 + ) { + shouldRevised = + selectedFileDataSource[data][FEEDBACK_ACCURACY][0] < 1; + } + } catch (error) {} return (
{ margin: '0 0 4px', }} > -

{data.key}

+

{data}

); })} + + {/*
+ +
*/} + {t`Bad image reason:`} +
+ { + setOtherReason(e.target.value); + }} + /> + )} +
+ {t`Solution:`} +
+ { + setOtherSolution(e.target.value); + }} + /> + )} +
-