Skip to content

Commit 6ed7dfe

Browse files
committed
feat: added support for api data mutability
1 parent ff83f35 commit 6ed7dfe

File tree

1 file changed

+35
-40
lines changed

1 file changed

+35
-40
lines changed

src/components/ProjectCompartor.tsx

Lines changed: 35 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,18 @@ import Collapsible from "./Collapsable";
99
import Loading from "./Loading";
1010
import { ComparatorDiff } from "./ComparatorDiff";
1111
import { ScoreElement, ConsolidatedScoreElement } from "../types";
12+
import { getRefinedChecks } from "../utils/comparator/getRefinedChecks";
13+
import { areEqualElements } from "../utils/comparator/areEqualElements";
1214

1315
import "../styles/ProjectDetails.css";
1416

1517
function ProjectComparator() {
1618
const params = useParams();
1719
const { platform, org, repo, prevCommitHash, currentCommitHash } = params;
1820

19-
const [state, setState] = useState([]);
21+
const [consolidatedData, setConsolidatedData] = useState<
22+
ConsolidatedScoreElement[]
23+
>([]);
2024

2125
const prevCommitQuery = useQuery({
2226
queryKey: ["prevCommit"],
@@ -54,40 +58,33 @@ function ProjectComparator() {
5458
if (!previousData?.checks || !previousData?.score) {
5559
return;
5660
}
57-
consolidatedData = currentData?.checks?.map(
58-
(e1: ScoreElement, index: number) => {
59-
if (
60-
JSON.stringify(e1.details) !==
61-
JSON.stringify(previousData?.checks[index].details) ||
62-
JSON.stringify(e1.reason) !==
63-
JSON.stringify(previousData?.checks[index].reason)
64-
) {
65-
return {
66-
areEqual: false,
67-
name: previousData.checks[index].name,
68-
details: e1.details,
69-
reason: e1.reason,
70-
score: e1.score,
71-
short: e1.documentation.short,
72-
url: e1.documentation.url,
73-
prevDetails: previousData.checks[index].details,
74-
prevReason: previousData.checks[index].reason,
75-
prevScore: previousData.checks[index].score,
76-
};
77-
} else {
78-
return {
79-
areEqual: true,
80-
name: e1.name,
81-
details: e1.details,
82-
reason: e1.reason,
83-
score: e1.score,
84-
short: e1.documentation.short,
85-
url: e1.documentation.url,
86-
};
87-
}
88-
},
61+
62+
const { common } = getRefinedChecks(
63+
previousData?.checks,
64+
currentData?.checks,
8965
);
90-
setState(consolidatedData);
66+
67+
consolidatedData = common.map((name: string) => {
68+
const previousElement = previousData?.checks?.filter(
69+
(el: ScoreElement) => el.name === name,
70+
)[0];
71+
const currentElement = currentData?.checks?.filter(
72+
(el: ScoreElement) => el.name === name,
73+
)[0];
74+
return {
75+
areEqual: areEqualElements(currentElement, previousElement),
76+
name: previousElement.name,
77+
details: currentElement.details,
78+
reason: currentElement.reason,
79+
score: currentElement.score,
80+
short: currentElement.documentation.short,
81+
url: currentElement.documentation.url,
82+
prevDetails: previousElement.details,
83+
prevReason: previousElement.reason,
84+
prevScore: previousElement.score,
85+
};
86+
});
87+
setConsolidatedData(consolidatedData);
9188
};
9289
areEqualDetails();
9390
}, [currentData, previousData]);
@@ -140,8 +137,8 @@ function ProjectComparator() {
140137
</a>
141138
</p>
142139
<hr />
143-
{Array.isArray(state) &&
144-
state.map((element:ConsolidatedScoreElement) => (
140+
{Array.isArray(consolidatedData) &&
141+
consolidatedData.map((element: ConsolidatedScoreElement) => (
145142
<>
146143
<div key={element.name} className="card__wrapper">
147144
<div data-testid={element.name} className="heading__wrapper">
@@ -157,10 +154,8 @@ function ProjectComparator() {
157154
See documentation
158155
</a>
159156
</p>
160-
{(element.prevDetails || element.prevReason) && (
161-
<h4>Additional details / variations</h4>
162-
)}
163-
{element.prevReason && element.reason ? (
157+
{!element.areEqual && <h4>Additional details / variations</h4>}
158+
{!element.areEqual ? (
164159
<p>
165160
Reasoning:{" "}
166161
<ComparatorDiff

0 commit comments

Comments
 (0)