Skip to content

Commit f8e5122

Browse files
committed
chore: use display title in review-changes activity + delete unused object renderer
1 parent 4671f65 commit f8e5122

12 files changed

Lines changed: 80 additions & 75 deletions

File tree

bc_obps/reporting/api/report_review_changes.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.http import HttpRequest
22

3+
from reporting.models.reporting_field import ReportingField
34
from service.error_service.custom_codes_4xx import custom_codes_4xx
45
from reporting.constants import EMISSIONS_REPORT_TAGS
56
from reporting.schema.generic import Message
@@ -43,4 +44,7 @@ def get_report_version_diff_data(request: HttpRequest, version_id: int) -> tuple
4344

4445
changed = ReportReviewChangesService.get_report_version_diff_changes(previous_data, current_data)
4546

46-
return 200, {"changed": changed}
47+
fields = ReportingField.objects.exclude(field_display_title__isnull=True)
48+
reporting_fields_display_titles = {field.slug: field.field_display_title for field in fields}
49+
50+
return 200, {"changed": changed, "reporting_fields_display_titles": reporting_fields_display_titles}

bciers/apps/reporting/src/app/components/changeReview/ChangeReviewForm.tsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,20 @@ export default function ChangeReviewForm({
3636
const [isSaving, setIsSaving] = useState<boolean>(false);
3737

3838
const [changesData, setChangesData] = useState<
39-
{ changed: ChangeItem[] } | undefined
39+
| {
40+
changed: ChangeItem[];
41+
reporting_fields_display_titles: Record<string, string>;
42+
}
43+
| undefined
4044
>();
4145
useEffect(() => {
4246
if (!displayChanges) return;
4347

4448
const fetchChanges = async () => {
45-
const fetchedDiffData: { changed: ChangeItem[] } =
46-
await getChangeReviewData(versionId);
49+
const fetchedDiffData: {
50+
changed: ChangeItem[];
51+
reporting_fields_display_titles: Record<string, string>;
52+
} = await getChangeReviewData(versionId);
4753

4854
setChangesData(fetchedDiffData);
4955
};
@@ -96,6 +102,9 @@ export default function ChangeReviewForm({
96102
<ReviewChanges
97103
changes={changesData.changed}
98104
registrationPurpose={registrationPurpose}
105+
reportingFieldDisplayTitleBySlug={
106+
changesData.reporting_fields_display_titles
107+
}
99108
/>
100109
)}
101110
{displayChanges && !changesData && <Loading />}

bciers/apps/reporting/src/app/components/changeReview/components/ActivityDiffView.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,19 @@ import { SourceTypeDiffView } from "./SourceTypeDiffView";
88
interface WholeActivityDiffViewProps {
99
activityName: string;
1010
changeItem: ChangeItem;
11+
reportingFieldDisplayTitleBySlug: Record<string, string>;
1112
}
1213

1314
interface ActivityDiffViewProps {
1415
activityName: string;
1516
activityGroup: ActivityGroup;
17+
reportingFieldDisplayTitleBySlug: Record<string, string>;
1618
}
1719

1820
export const WholeActivityDiffView: React.FC<WholeActivityDiffViewProps> = ({
1921
activityName,
2022
changeItem,
23+
reportingFieldDisplayTitleBySlug,
2124
}) => {
2225
const value = getChangeValue(changeItem);
2326
return (
@@ -30,6 +33,7 @@ export const WholeActivityDiffView: React.FC<WholeActivityDiffViewProps> = ({
3033
},
3134
]}
3235
changeType={changeItem.change_type}
36+
reportingFieldDisplayTitleBySlug={reportingFieldDisplayTitleBySlug}
3337
/>
3438
</Box>
3539
);
@@ -38,6 +42,7 @@ export const WholeActivityDiffView: React.FC<WholeActivityDiffViewProps> = ({
3842
export const PartialActivityDiffView: React.FC<ActivityDiffViewProps> = ({
3943
activityName,
4044
activityGroup,
45+
reportingFieldDisplayTitleBySlug,
4146
}) => {
4247
// Only some source types (or their fields) changed
4348
return (
@@ -59,6 +64,7 @@ export const PartialActivityDiffView: React.FC<ActivityDiffViewProps> = ({
5964
key={sourceTypeName}
6065
sourceTypeGroup={stGroup}
6166
sourceTypeName={sourceTypeName}
67+
reportingFieldDisplayTitleBySlug={reportingFieldDisplayTitleBySlug}
6268
/>
6369
),
6470
)}
@@ -69,19 +75,22 @@ export const PartialActivityDiffView: React.FC<ActivityDiffViewProps> = ({
6975
export const ActivityDiffView: React.FC<ActivityDiffViewProps> = ({
7076
activityName,
7177
activityGroup,
78+
reportingFieldDisplayTitleBySlug,
7279
}) => {
7380
if (activityGroup.whole)
7481
return (
7582
<WholeActivityDiffView
7683
activityName={activityName}
7784
changeItem={activityGroup.whole}
85+
reportingFieldDisplayTitleBySlug={reportingFieldDisplayTitleBySlug}
7886
/>
7987
);
8088

8189
return (
8290
<PartialActivityDiffView
8391
activityName={activityName}
8492
activityGroup={activityGroup}
93+
reportingFieldDisplayTitleBySlug={reportingFieldDisplayTitleBySlug}
8594
/>
8695
);
8796
};

bciers/apps/reporting/src/app/components/changeReview/components/ObjectRenderer.tsx

Lines changed: 0 additions & 58 deletions
This file was deleted.

bciers/apps/reporting/src/app/components/changeReview/components/SimpleActivityDiff.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ export interface SimpleActivityDiffProps {
99
changes: ChangeItem[];
1010
/** When true, facility name headers are omitted (useful when the facility is already shown in a parent). */
1111
hideFacilityHeaders?: boolean;
12+
/** Mapping of reporting field slugs to their display titles */
13+
reportingFieldDisplayTitleBySlug: Record<string, string>;
1214
}
1315

1416
/**
@@ -22,6 +24,7 @@ export interface SimpleActivityDiffProps {
2224
export const SimpleActivityDiff: React.FC<SimpleActivityDiffProps> = ({
2325
changes,
2426
hideFacilityHeaders = false,
27+
reportingFieldDisplayTitleBySlug,
2528
}) => {
2629
const grouped = groupActivityChanges(changes);
2730

@@ -40,6 +43,9 @@ export const SimpleActivityDiff: React.FC<SimpleActivityDiffProps> = ({
4043
key={activityName}
4144
activityName={activityName}
4245
activityGroup={activityGroup}
46+
reportingFieldDisplayTitleBySlug={
47+
reportingFieldDisplayTitleBySlug
48+
}
4349
/>
4450
))}
4551
</Box>

bciers/apps/reporting/src/app/components/changeReview/components/SourceTypeDiffView.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ interface SharedSourceTypeDiffViewProps {
1515
classNames: string;
1616
label: string;
1717
readonly: boolean;
18+
reportingFieldDisplayTitleBySlug: Record<string, string>;
1819
}
1920

2021
interface WholeSourceTypeDiffViewProps {
@@ -25,6 +26,7 @@ interface WholeSourceTypeDiffViewProps {
2526
interface SourceTypeDiffViewProps {
2627
sourceTypeGroup: SourceTypeGroup;
2728
sourceTypeName: string;
29+
reportingFieldDisplayTitleBySlug: Record<string, string>;
2830
}
2931

3032
export const WholeSourceTypeDiffView: React.FC<
@@ -41,7 +43,12 @@ export const WholeSourceTypeDiffView: React.FC<
4143
isDeleted={change.change_type === "removed"}
4244
description={
4345
<div style={dataCardStyle}>
44-
{renderObject(value, "", change.change_type === "removed")}
46+
{renderObject(
47+
value,
48+
"",
49+
change.change_type === "removed",
50+
props.reportingFieldDisplayTitleBySlug,
51+
)}
4552
</div>
4653
}
4754
/>
@@ -62,7 +69,14 @@ export const PartialSourceTypeDiffView: React.FC<
6269
return (
6370
<SourceTypeBoxTemplate
6471
{...props}
65-
description={<Box ml={1}>{renderDiffTree(segmentedChanges)}</Box>}
72+
description={
73+
<Box ml={1}>
74+
{renderDiffTree(
75+
segmentedChanges,
76+
props.reportingFieldDisplayTitleBySlug,
77+
)}
78+
</Box>
79+
}
6680
/>
6781
);
6882
};
@@ -75,6 +89,7 @@ export const SourceTypeDiffView: React.FC<SourceTypeDiffViewProps> = (
7589
classNames: "source-type-box",
7690
label: sourceTypeName,
7791
readonly: false,
92+
reportingFieldDisplayTitleBySlug: props.reportingFieldDisplayTitleBySlug,
7893
};
7994

8095
if (sourceTypeGroup.whole)

bciers/apps/reporting/src/app/components/changeReview/constants/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export interface ChangeItem {
2424
export interface ReviewChangesProps {
2525
changes: ChangeItem[];
2626
registrationPurpose: string;
27+
reportingFieldDisplayTitleBySlug: Record<string, string>;
2728
}
2829

2930
export interface DisplayChangeItem extends ChangeItem {

bciers/apps/reporting/src/app/components/changeReview/templates/ReviewChanges.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ function groupByFacility(changes: any[]): Record<string, any[]> {
4747
export const ReviewChanges: React.FC<ReviewChangesProps> = ({
4848
changes,
4949
registrationPurpose,
50+
reportingFieldDisplayTitleBySlug,
5051
}) => {
5152
const normalizedChanges = normalizeChangeKeys(filterExcludedFields(changes));
5253

@@ -213,6 +214,9 @@ export const ReviewChanges: React.FC<ReviewChangesProps> = ({
213214
<SimpleActivityDiff
214215
changes={activityChanges}
215216
hideFacilityHeaders
217+
reportingFieldDisplayTitleBySlug={
218+
reportingFieldDisplayTitleBySlug
219+
}
216220
/>
217221
</Box>
218222
)}

bciers/apps/reporting/src/app/components/changeReview/utils/activityViewHelpers.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,8 @@ export const ObjectLeafNode: React.FC<{
218218
label: string;
219219
changeType: string;
220220
value: object;
221-
}> = ({ label, changeType, value }) => (
221+
reportingFieldDisplayTitleBySlug: Record<string, string>;
222+
}> = ({ label, changeType, value, reportingFieldDisplayTitleBySlug }) => (
222223
<Box mb={1}>
223224
<Typography
224225
sx={{
@@ -235,7 +236,12 @@ export const ObjectLeafNode: React.FC<{
235236
{changeType === "removed" && <StatusLabel type="removed" />}
236237
</Typography>
237238
<Box ml={2} style={dataCardStyle}>
238-
{renderActivityObject(value, "", changeType === "removed")}
239+
{renderActivityObject(
240+
value,
241+
"",
242+
changeType === "removed",
243+
reportingFieldDisplayTitleBySlug,
244+
)}
239245
</Box>
240246
</Box>
241247
);
@@ -296,7 +302,10 @@ const buildGroupInfo = (
296302
* - Numeric second segments are treated as array indices and produce
297303
* human-readable labels like "Emission Category 1".
298304
*/
299-
export const renderDiffTree = (items: SegmentedChange[]): React.ReactNode => {
305+
export const renderDiffTree = (
306+
items: SegmentedChange[],
307+
reportingFieldDisplayTitleBySlug: Record<string, string>,
308+
): React.ReactNode => {
300309
if (!items.length) return null;
301310

302311
// Group items by their leading path segment so siblings are rendered together
@@ -358,22 +367,28 @@ export const renderDiffTree = (items: SegmentedChange[]): React.ReactNode => {
358367
label={label}
359368
changeType={change.change_type}
360369
value={value}
370+
reportingFieldDisplayTitleBySlug={
371+
reportingFieldDisplayTitleBySlug
372+
}
361373
/>
362374
);
363375

364376
// Scalar value → standard change row
365377
return (
366378
<ChangeItemDisplay
367379
key={key}
368-
item={{ ...change, displayLabel: label }}
380+
item={{
381+
...change,
382+
displayLabel: reportingFieldDisplayTitleBySlug?.[key] ?? label,
383+
}}
369384
/>
370385
);
371386
}
372387

373388
// Multiple children or deeper path → recurse into a branch
374389
return (
375390
<BranchNode key={key} label={label}>
376-
{renderDiffTree(children)}
391+
{renderDiffTree(children, reportingFieldDisplayTitleBySlug)}
377392
</BranchNode>
378393
);
379394
})}

bciers/apps/reporting/src/app/components/finalReview/reportTypes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ export interface ReportData {
216216

217217
export interface ActivitiesViewProps {
218218
activity_data: ActivityItem[] | Record<string, any>;
219-
reporting_fields_display_titles?: Record<string, string>;
219+
reportingFieldDisplayTitleBySlug?: Record<string, string>;
220220
isAdded?: boolean;
221221
isDeleted?: boolean;
222222
changeType?: ChangeType;

0 commit comments

Comments
 (0)