Skip to content

Commit 6a79fab

Browse files
fix: show assessment statements in history for gov and non-gov users based on report status
1 parent 21501b2 commit 6a79fab

File tree

2 files changed

+140
-137
lines changed

2 files changed

+140
-137
lines changed

frontend/src/views/ComplianceReports/components/HistoryCard.jsx

Lines changed: 93 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { useTranslation } from 'react-i18next'
1616
const Accordion = styled((props) => (
1717
<MuiAccordion disableGutters elevation={0} square {...props} />
1818
))(() => ({
19-
border: `none`,
19+
border: 'none',
2020
'&::before': {
2121
display: 'none'
2222
}
@@ -49,15 +49,53 @@ export const HistoryCard = ({ report, defaultExpanded = false }) => {
4949
const { data: currentUser } = useCurrentUser()
5050
const isGovernmentUser = currentUser?.isGovernmentUser
5151
const { t } = useTranslation(['report'])
52-
const filteredHistory = useMemo(() => {
53-
if (!report.history || report.history.length === 0) {
54-
return []
55-
}
56-
// Sort the history array by date in descending order
52+
53+
const isCurrentAssessed =
54+
report.currentStatus?.status === COMPLIANCE_REPORT_STATUSES.ASSESSED
55+
56+
/**
57+
* Helper: build the two assessment list items.
58+
* We use it twice – once top‑level for gov users (pre‑assessment)
59+
* and once nested under the Assessed history entry for all users.
60+
*/
61+
const AssessmentLines = () => (
62+
<>
63+
<StyledListItem disablePadding>
64+
<ListItemText primaryTypographyProps={{ variant: 'body4' }}>
65+
<strong>
66+
{t('report:complianceReportHistory.renewableTarget')}:&nbsp;
67+
</strong>
68+
{t('report:assessmentLn1', {
69+
name: report.organization.name,
70+
hasMet:
71+
report.summary.line11FossilDerivedBaseFuelTotal <= 0
72+
? 'has met'
73+
: 'has not met'
74+
})}
75+
</ListItemText>
76+
</StyledListItem>
77+
<StyledListItem disablePadding>
78+
<ListItemText primaryTypographyProps={{ variant: 'body4' }}>
79+
<strong>
80+
{t('report:complianceReportHistory.lowCarbonTarget')}:&nbsp;
81+
</strong>
82+
{t('report:assessmentLn2', {
83+
name: report.organization.name,
84+
hasMet:
85+
report.summary.line21NonCompliancePenaltyPayable <= 0
86+
? 'has met'
87+
: 'has not met'
88+
})}
89+
</ListItemText>
90+
</StyledListItem>
91+
</>
92+
)
93+
94+
const sortedHistory = useMemo(() => {
95+
if (!Array.isArray(report.history) || report.history.length === 0) return []
96+
5797
return [...report.history]
58-
.sort((a, b) => {
59-
return new Date(b.createDate) - new Date(a.createDate)
60-
})
98+
.sort((a, b) => new Date(b.createDate) - new Date(a.createDate))
6199
.map((item) => {
62100
if (
63101
item.status.status === COMPLIANCE_REPORT_STATUSES.ASSESSED &&
@@ -82,12 +120,12 @@ export const HistoryCard = ({ report, defaultExpanded = false }) => {
82120
: {report.currentStatus.status}
83121
</BCTypography>
84122
</AccordionSummary>
85-
{filteredHistory.length > 0 && (
123+
124+
{sortedHistory.length > 0 && (
86125
<AccordionDetails>
87126
<List>
88127
{report.assessmentStatement &&
89-
((!isGovernmentUser &&
90-
report.currentStatus.status === 'Assessed') ||
128+
((!isGovernmentUser && isCurrentAssessed) ||
91129
isGovernmentUser) && (
92130
<StyledListItem disablePadding>
93131
<ListItemText
@@ -101,71 +139,49 @@ export const HistoryCard = ({ report, defaultExpanded = false }) => {
101139
</ListItemText>
102140
</StyledListItem>
103141
)}
104-
{filteredHistory.map((item, index) => (
105-
<StyledListItem key={index} disablePadding>
106-
<ListItemText
107-
data-test="list-item"
108-
primaryTypographyProps={{ variant: 'body4' }}
109-
>
110-
<span
111-
dangerouslySetInnerHTML={{
112-
__html: t(
113-
`report:complianceReportHistory.${item.status.status}`,
114-
{
115-
createDate: timezoneFormatter({
116-
value: item?.createDate
117-
}),
118-
displayName:
119-
item.displayName ||
120-
`${item.userProfile.firstName} ${item.userProfile.lastName}`
121-
}
122-
)
123-
}}
124-
/>
125-
</ListItemText>
126-
{[COMPLIANCE_REPORT_STATUSES.ASSESSED, 'AssessedBy'].includes(
127-
item.status.status
128-
) && (
129-
<List sx={{ p: 0, m: 0 }}>
130-
<StyledListItem disablePadding>
131-
<ListItemText
132-
primaryTypographyProps={{ variant: 'body4' }}
133-
>
134-
<strong>
135-
{t('report:complianceReportHistory.renewableTarget')}
136-
:&nbsp;
137-
</strong>
138-
{t('report:assessmentLn1', {
139-
name: report.organization.name,
140-
hasMet:
141-
report.summary.line11FossilDerivedBaseFuelTotal <= 0
142-
? 'has met'
143-
: 'has not met'
144-
})}
145-
</ListItemText>
146-
</StyledListItem>
147-
<StyledListItem disablePadding>
148-
<ListItemText
149-
primaryTypographyProps={{ variant: 'body4' }}
150-
>
151-
<strong>
152-
{t('report:complianceReportHistory.lowCarbonTarget')}
153-
:&nbsp;
154-
</strong>
155-
{t('report:assessmentLn2', {
156-
name: report.organization.name,
157-
hasMet:
158-
report.summary.line21NonCompliancePenaltyPayable <=
159-
0
160-
? 'has met'
161-
: 'has not met'
162-
})}
163-
</ListItemText>
164-
</StyledListItem>
165-
</List>
166-
)}
167-
</StyledListItem>
168-
))}
142+
143+
{/* GOV users – show assessment lines immediately (top‑level) until Assessed */}
144+
{isGovernmentUser && !isCurrentAssessed && <AssessmentLines />}
145+
146+
{/* History timeline */}
147+
{sortedHistory.map((item, index) => {
148+
const showNestedAssessment = [
149+
COMPLIANCE_REPORT_STATUSES.ASSESSED,
150+
'AssessedBy'
151+
].includes(item.status.status)
152+
153+
return (
154+
<StyledListItem key={index} disablePadding>
155+
<ListItemText
156+
data-test="list-item"
157+
primaryTypographyProps={{ variant: 'body4' }}
158+
>
159+
<span
160+
dangerouslySetInnerHTML={{
161+
__html: t(
162+
`report:complianceReportHistory.${item.status.status}`,
163+
{
164+
createDate: timezoneFormatter({
165+
value: item.createDate
166+
}),
167+
displayName:
168+
item.displayName ||
169+
`${item.userProfile.firstName} ${item.userProfile.lastName}`
170+
}
171+
)
172+
}}
173+
/>
174+
</ListItemText>
175+
176+
{/* Nested assessment – appears once the status is Assessed */}
177+
{showNestedAssessment && (
178+
<List sx={{ p: 0, m: 0 }}>
179+
<AssessmentLines />
180+
</List>
181+
)}
182+
</StyledListItem>
183+
)
184+
})}
169185
</List>
170186
</AccordionDetails>
171187
)}

0 commit comments

Comments
 (0)