Improved grouping for master statistical

This commit is contained in:
Joao Ramos
2024-09-07 12:38:28 +01:00
parent 9993c7a8a7
commit 42471170ce
2 changed files with 26 additions and 18 deletions

View File

@@ -361,7 +361,7 @@ export default function MasterCorporateDashboard({user}: Props) {
</div>
);
const groupedByNameCorporates = groupBy(corporates, (x: CorporateUser) => x.corporateInformation?.companyInformation?.name);
const groupedByNameCorporates = groupBy(corporates, (x: CorporateUser) => x.corporateInformation?.companyInformation?.name || 'N/A');
const groupedByNameCorporatesKeys = Object.keys(groupedByNameCorporates);
const groupedByNameCorporateIds = groupedByNameCorporatesKeys.reduce((accm, x) => {
const corporateUserIds = (groupedByNameCorporates[x] as CorporateUser[]).map((y) => y.id);

View File

@@ -132,21 +132,23 @@ const MasterStatistical = (props: Props) => {
};
};
const getCorporatesScoresHash = (data: string[]) => data.reduce(
(accm, id) => ({
...accm,
[id]: getCorporateScores(id),
}),
{}
) as Record<string, UserCount>;
const getCorporatesScoresHash = (data: string[]) =>
data.reduce(
(accm, id) => ({
...accm,
[id]: getCorporateScores(id),
}),
{}
) as Record<string, UserCount>;
const getConsolidateScore = (data: Record<string, UserCount>) => Object.values(data).reduce(
(acc: UserCount, { userCount, maxUserCount }: UserCount) => ({
userCount: acc.userCount + userCount,
maxUserCount: acc.maxUserCount + maxUserCount,
}),
{ userCount: 0, maxUserCount: 0 }
)
const getConsolidateScore = (data: Record<string, UserCount>) =>
Object.values(data).reduce(
(acc: UserCount, { userCount, maxUserCount }: UserCount) => ({
userCount: acc.userCount + userCount,
maxUserCount: acc.maxUserCount + maxUserCount,
}),
{ userCount: 0, maxUserCount: 0 }
);
const corporateScores = getCorporatesScoresHash(corporates);
const consolidateScore = getConsolidateScore(corporateScores);
@@ -297,7 +299,9 @@ const MasterStatistical = (props: Props) => {
/>
{Object.keys(corporateUsers).map((corporateName) => {
const group = corporateUsers[corporateName];
const isSelected = group.every((id) => selectedCorporates.includes(id));
const isSelected = group.every((id) =>
selectedCorporates.includes(id)
);
const valueHash = getCorporatesScoresHash(group);
const value = getConsolidateScoreStr(getConsolidateScore(valueHash));
@@ -310,10 +314,14 @@ const MasterStatistical = (props: Props) => {
color="purple"
onClick={() => {
if (isSelected) {
setSelectedCorporates(((prev) => prev.filter((x) => !group.includes(x))));
setSelectedCorporates((prev) =>
prev.filter((x) => !group.includes(x))
);
return;
}
setSelectedCorporates((prev) => [...new Set([...prev, ...group])]);
setSelectedCorporates((prev) => [
...new Set([...prev, ...group]),
]);
}}
isSelected={isSelected}
/>