Skip to content

Commit 93e8eca

Browse files
Merge pull request #665 from bcgsc/bugfix/DEVSU-2689-report-history-fix
DEVSU-2689 Rework Report History
2 parents de58b56 + 1f8ae48 commit 93e8eca

File tree

5 files changed

+122
-151
lines changed

5 files changed

+122
-151
lines changed

app/views/ReportView/components/Settings/components/Analysis/index.tsx

Lines changed: 0 additions & 148 deletions
This file was deleted.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import React, {
2+
useCallback, useContext, useEffect, useState,
3+
} from 'react';
4+
import {
5+
Typography,
6+
} from '@mui/material';
7+
8+
import api from '@/services/api';
9+
import ReportContext from '@/context/ReportContext';
10+
import { formatDate } from '@/utils/date';
11+
12+
import './index.scss';
13+
import { useQuery } from 'react-query';
14+
15+
const ReportHistory = (): JSX.Element => {
16+
const { report } = useContext(ReportContext);
17+
const [orderedHistory, setOrderedHistory] = useState([]);
18+
19+
const { data: signatureHistoryData } = useQuery(
20+
`/reports/${report.ident}/signatures/history`,
21+
async ({ queryKey: [route] }) => api.get(route).request(),
22+
{
23+
staleTime: Infinity,
24+
select: (response) => response,
25+
},
26+
);
27+
28+
const { data: stateHistoryData } = useQuery(
29+
`/reports/${report.ident}/state-history`,
30+
async ({ queryKey: [route] }) => api.get(route).request(),
31+
{
32+
staleTime: Infinity,
33+
select: (response) => response,
34+
},
35+
);
36+
37+
const handleOrderReportHistory = useCallback((orderedHist) => {
38+
const historyArray = [];
39+
let authorSigned = null;
40+
let creatorSigned = null;
41+
let reviewerSigned = null;
42+
43+
for (const element of orderedHist) {
44+
if (Object.hasOwn(element, 'authorSignature')) {
45+
if (element.authorSignedAt !== authorSigned) {
46+
if (element.authorSignature) {
47+
historyArray.push(`${element.authorSignature.firstName} ${element.authorSignature.lastName} signed as Author: ${formatDate(element.authorSignedAt, true)}`);
48+
} else {
49+
historyArray.push(`Author signature removed: ${formatDate(element?.updatedAt, true)}`);
50+
}
51+
authorSigned = element.authorSignedAt;
52+
}
53+
if (element.creatorSignedAt !== creatorSigned) {
54+
if (element.creatorSignature) {
55+
historyArray.push(`${element.creatorSignature.firstName} ${element.creatorSignature.lastName} signed as Creator: ${formatDate(element.creatorSignedAt, true)}`);
56+
} else {
57+
historyArray.push(`Creator signature removed: ${formatDate(element?.updatedAt, true)}`);
58+
}
59+
creatorSigned = element.creatorSignedAt;
60+
}
61+
if (element.reviewerSignedAt !== reviewerSigned) {
62+
if (element.reviewerSignature) {
63+
historyArray.push(`${element.reviewerSignature.firstName} ${element.reviewerSignature.lastName} signed as Reviewer: ${formatDate(element.reviewerSignedAt, true)}`);
64+
} else {
65+
historyArray.push(`Reviewer signature removed: ${formatDate(element?.updatedAt, true)}`);
66+
}
67+
reviewerSigned = element.reviewerSignedAt;
68+
}
69+
}
70+
71+
if (Object.hasOwn(element, 'state')) {
72+
historyArray.push(`Report updated to ${element.state} at: ${formatDate(element?.updatedAt, true)}`);
73+
}
74+
75+
if (Object.hasOwn(element, 'user')) {
76+
historyArray.push(`${element.user.firstName} ${element.user.lastName} assigned at: ${formatDate(element?.updatedAt, true)}`);
77+
}
78+
}
79+
80+
return historyArray;
81+
}, []);
82+
83+
useEffect(() => {
84+
if (signatureHistoryData && stateHistoryData && report.users) {
85+
const historyArr = signatureHistoryData.concat(stateHistoryData).concat(report.users).filter((item) => item !== null);
86+
historyArr.sort((a, b) => new Date(a?.updatedAt).valueOf() - new Date(b?.updatedAt).valueOf());
87+
const orderedHistoryArr = historyArr.length > 0 ? handleOrderReportHistory(historyArr) : [];
88+
setOrderedHistory(orderedHistoryArr);
89+
}
90+
}, [handleOrderReportHistory, signatureHistoryData, stateHistoryData, report.users]);
91+
92+
return (
93+
<div className="analysis">
94+
<Typography variant="h3">Report History</Typography>
95+
<div className="analysis__content">
96+
<Typography>
97+
{`Report created at: ${formatDate(report?.createdAt, true)}`}
98+
<br />
99+
{report?.analysisStartedAt ? (
100+
<>
101+
Analysis started on:
102+
{` ${formatDate(report?.analysisStartedAt, true)}`}
103+
<br />
104+
</>
105+
) : null}
106+
{orderedHistory ? orderedHistory.map((result, idx) => (
107+
/* eslint-disable-next-line react/no-array-index-key */
108+
<div key={`${result.toString()}-${idx}`}>
109+
{result}
110+
<br />
111+
</div>
112+
)) : null}
113+
</Typography>
114+
</div>
115+
</div>
116+
);
117+
};
118+
119+
export default ReportHistory;

app/views/ReportView/components/Settings/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import useReport from '@/hooks/useReport';
1919
import DemoDescription from '@/components/DemoDescription';
2020
import snackbar from '@/services/SnackbarUtils';
2121
import withLoading, { WithLoadingInjectedProps } from '@/hoc/WithLoading';
22-
import Analysis from './components/Analysis';
22+
import ReportHistory from './components/ReportHistory';
2323
import AssociationCard from './components/AssociationCard';
2424
import AddUserCard from './components/AddUserCard';
2525
import AddUserDialog from './components/AddUserDialog';
@@ -280,7 +280,7 @@ const Settings = ({
280280
</div>
281281
</div>
282282
<Divider />
283-
<Analysis />
283+
<ReportHistory />
284284
{
285285
<>
286286
<Divider />

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"paths": {
1010
"@/*": ["app/*"]
1111
},
12-
"lib": ["ES2020.Promise", "DOM"]
12+
"lib": ["ES2022", "DOM"]
1313
},
1414
"include": [
1515
"app/**/*.ts",

0 commit comments

Comments
 (0)