From 9993c7a8a73ce74a1cb255047e1c3a6af814c42e Mon Sep 17 00:00:00 2001 From: Joao Ramos Date: Sat, 7 Sep 2024 11:04:00 +0100 Subject: [PATCH 1/2] ENCOA-183: Initial test changes for corporates grouped by name --- src/dashboards/MasterCorporate.tsx | 21 ++++++++++-- src/dashboards/MasterStatistical.tsx | 49 +++++++++++++++++----------- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/src/dashboards/MasterCorporate.tsx b/src/dashboards/MasterCorporate.tsx index e4a252a2..ecec3cdd 100644 --- a/src/dashboards/MasterCorporate.tsx +++ b/src/dashboards/MasterCorporate.tsx @@ -55,6 +55,7 @@ import MasterStatistical from "./MasterStatistical"; import {futureAssignmentFilter, pastAssignmentFilter, archivedAssignmentFilter, activeAssignmentFilter} from "@/utils/assignments"; import useUserBalance from "@/hooks/useUserBalance"; import AssignmentsPage from "./views/AssignmentsPage"; +import { group } from "console"; interface Props { user: MasterCorporateUser; @@ -360,8 +361,14 @@ export default function MasterCorporateDashboard({user}: Props) { ); - const corporateUserFilter = (x: User) => x.type === "corporate"; + const groupedByNameCorporates = groupBy(corporates, (x: CorporateUser) => x.corporateInformation?.companyInformation?.name); + const groupedByNameCorporatesKeys = Object.keys(groupedByNameCorporates); + const groupedByNameCorporateIds = groupedByNameCorporatesKeys.reduce((accm, x) => { + const corporateUserIds = (groupedByNameCorporates[x] as CorporateUser[]).map((y) => y.id); + return { ...accm, [x]: corporateUserIds }; + }, {}); + console.log("groupedByNameCorporates", groupedByNameCorporates, groupedByNameCorporateIds); const GroupsList = () => { return ( <> @@ -414,7 +421,7 @@ export default function MasterCorporateDashboard({user}: Props) {

Master Statistical

- + ); }; @@ -468,12 +475,20 @@ export default function MasterCorporateDashboard({user}: Props) { /> router.push("/#corporate")} /> + router.push("/#corporate")} + /> { const { users, corporateUsers } = props; - const corporateRelevantUsers = React.useMemo( - () => corporateUsers.filter((x) => x.type !== "student") as CorporateUser[], - [corporateUsers] - ); + // const corporateRelevantUsers = React.useMemo( + // () => corporateUsers.filter((x) => x.type !== "student") as CorporateUser[], + // [corporateUsers] + // ); const corporates = React.useMemo( - () => corporateRelevantUsers.map((x) => x.id), - [corporateRelevantUsers] + () => Object.values(corporateUsers).flat(), + [corporateUsers] ); const [selectedCorporates, setSelectedCorporates] = @@ -126,7 +132,7 @@ const MasterStatistical = (props: Props) => { }; }; - const corporateScores = corporates.reduce( + const getCorporatesScoresHash = (data: string[]) => data.reduce( (accm, id) => ({ ...accm, [id]: getCorporateScores(id), @@ -134,13 +140,16 @@ const MasterStatistical = (props: Props) => { {} ) as Record; - const consolidateScore = Object.values(corporateScores).reduce( + const getConsolidateScore = (data: Record) => 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); const getConsolidateScoreStr = (data: UserCount) => `${data.userCount}/${data.maxUserCount}`; @@ -286,23 +295,25 @@ const MasterStatistical = (props: Props) => { }} isSelected={areAllSelected} /> - {corporateRelevantUsers.map((group) => { - const isSelected = selectedCorporates.includes(group.id); + {Object.keys(corporateUsers).map((corporateName) => { + const group = corporateUsers[corporateName]; + const isSelected = group.every((id) => selectedCorporates.includes(id)); + + const valueHash = getCorporatesScoresHash(group); + const value = getConsolidateScoreStr(getConsolidateScore(valueHash)); return ( { if (isSelected) { - setSelectedCorporates( - selectedCorporates.filter((x) => x !== group.id) - ); + setSelectedCorporates(((prev) => prev.filter((x) => !group.includes(x)))); return; } - setSelectedCorporates([...selectedCorporates, group.id]); + setSelectedCorporates((prev) => [...new Set([...prev, ...group])]); }} isSelected={isSelected} /> From 42471170ce7cc874c3d33e0cd011b1fcfe6cbcbd Mon Sep 17 00:00:00 2001 From: Joao Ramos Date: Sat, 7 Sep 2024 12:38:28 +0100 Subject: [PATCH 2/2] Improved grouping for master statistical --- src/dashboards/MasterCorporate.tsx | 2 +- src/dashboards/MasterStatistical.tsx | 42 +++++++++++++++++----------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/dashboards/MasterCorporate.tsx b/src/dashboards/MasterCorporate.tsx index ecec3cdd..ee6dba4d 100644 --- a/src/dashboards/MasterCorporate.tsx +++ b/src/dashboards/MasterCorporate.tsx @@ -361,7 +361,7 @@ export default function MasterCorporateDashboard({user}: Props) { ); - 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); diff --git a/src/dashboards/MasterStatistical.tsx b/src/dashboards/MasterStatistical.tsx index f6f5fd66..1b6e2261 100644 --- a/src/dashboards/MasterStatistical.tsx +++ b/src/dashboards/MasterStatistical.tsx @@ -132,21 +132,23 @@ const MasterStatistical = (props: Props) => { }; }; - const getCorporatesScoresHash = (data: string[]) => data.reduce( - (accm, id) => ({ - ...accm, - [id]: getCorporateScores(id), - }), - {} - ) as Record; + const getCorporatesScoresHash = (data: string[]) => + data.reduce( + (accm, id) => ({ + ...accm, + [id]: getCorporateScores(id), + }), + {} + ) as Record; - const getConsolidateScore = (data: Record) => 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) => + 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} />