@@ -16,7 +16,7 @@ import { useTranslation } from 'react-i18next'
1616const 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' ) } :
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' ) } :
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- :
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- :
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