Skip to content
Snippets Groups Projects
Commit 5baca287 authored by Bjarke Madsen's avatar Bjarke Madsen
Browse files

Filter data correctly for TrafficRatio and Staffgraph

parent 4a87d05d
No related branches found
No related tags found
1 merge request!134Refactor
This commit is part of merge request !134. Comments created here will be created in the context of that merge request.
...@@ -104,25 +104,10 @@ function TrafficRatioPage() { ...@@ -104,25 +104,10 @@ function TrafficRatioPage() {
const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext); const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
const { data: trafficRatioData, years, nrens } = useData<TrafficRatio>('/api/network/traffic-ratio', setFilterSelection); const { data: trafficRatioData, years, nrens } = useData<TrafficRatio>('/api/network/traffic-ratio', setFilterSelection);
const trafficRatioDataset = createTrafficRatioDataset(trafficRatioData, filterSelection.selectedYears[0]);
trafficRatioDataset.datasets.forEach(dataset => {
dataset.hidden = !filterSelection.selectedYears.includes(parseInt(dataset.stack));
});
const selectedData = trafficRatioData.filter(data => const selectedData = trafficRatioData.filter(data =>
filterSelection.selectedYears.includes(data.year) && filterSelection.selectedNrens.includes(data.nren) filterSelection.selectedYears.includes(data.year) && filterSelection.selectedNrens.includes(data.nren)
); );
const trafficRatioDataset = createTrafficRatioDataset(selectedData, filterSelection.selectedYears[0]);
// remove the datapoints and labels for the nrens that aren't selected
// unfortunately we cannot just hide them because graph.js doesn't want
// to create a stack from a single dataset
trafficRatioDataset.datasets.forEach(dataset => {
dataset.data = dataset.data.filter((e, i) => {
return filterSelection.selectedNrens.includes(trafficRatioDataset.labels[i]);
});
});
trafficRatioDataset.labels = trafficRatioDataset.labels.filter((e) => filterSelection.selectedNrens.includes(e));
const filterNode = <Filter const filterNode = <Filter
max1year max1year
...@@ -131,7 +116,8 @@ function TrafficRatioPage() { ...@@ -131,7 +116,8 @@ function TrafficRatioPage() {
setFilterSelection={setFilterSelection} setFilterSelection={setFilterSelection}
/> />
const numNrens = filterSelection.selectedNrens.length; const selectedNrens = Array.from(new Set(selectedData.map(data => data.nren))).map(nren => nrens.get(nren)).filter(nren => !!nren);
const numNrens = selectedNrens.length;
const heightPerBar = 1.5; // every added bar should give this much additional height const heightPerBar = 1.5; // every added bar should give this much additional height
// set a minimum height of 20rem // set a minimum height of 20rem
......
...@@ -106,36 +106,30 @@ interface inputProps { ...@@ -106,36 +106,30 @@ interface inputProps {
function StaffGraphPage({ roles = false }: inputProps) { function StaffGraphPage({ roles = false }: inputProps) {
const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext); const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
const { data: staffData, years, nrens } = useData<NrenStaff>('/api/staff/', setFilterSelection); const { data, years, nrens } = useData<NrenStaff>('/api/staff/', setFilterSelection);
const nrenStaffDataset = createNRENStaffDataset(staffData, roles, filterSelection.selectedYears[0]); const rolesValid = (staffdata: NrenStaff) => {
return (roles && staffdata.technical_fte > 0 && staffdata.non_technical_fte > 0) ||
nrenStaffDataset.datasets.forEach(dataset => { (!roles && staffdata.permanent_fte > 0 && staffdata.subcontracted_fte > 0);
dataset.hidden = !filterSelection.selectedYears.includes(parseInt(dataset.stack)); }
}); const staffData = data.filter(rolesValid);
const validYears = Array.from(new Set(staffData.map(data => data.year)));
const selectedData = staffData.filter(data => const selectedData = staffData.filter(data =>
filterSelection.selectedYears.includes(data.year) && filterSelection.selectedNrens.includes(data.nren) filterSelection.selectedYears.includes(data.year) && filterSelection.selectedNrens.includes(data.nren)
); );
// remove the datapoints and labels for the nrens that aren't selected const nrenStaffDataset = createNRENStaffDataset(selectedData, roles, filterSelection.selectedYears[0]);
// unfortunately we cannot just hide them because graph.js doesn't want const selectedNrens = Array.from(new Set(selectedData.map(data => data.nren))).map(nren => nrens.get(nren)).filter(nren => !!nren);
// to create a stack from a single dataset
nrenStaffDataset.datasets.forEach(dataset => {
dataset.data = dataset.data.filter((e, i) => {
return filterSelection.selectedNrens.includes(nrenStaffDataset.labels[i]);
});
});
nrenStaffDataset.labels = nrenStaffDataset.labels.filter((e) => filterSelection.selectedNrens.includes(e));
const filterNode = <Filter const filterNode = <Filter
max1year max1year
filterOptions={{ availableYears: [...years], availableNrens: [...nrens.values()] }} filterOptions={{ availableYears: [...validYears], availableNrens: [...selectedNrens.values()] }}
filterSelection={filterSelection} filterSelection={filterSelection}
setFilterSelection={setFilterSelection} setFilterSelection={setFilterSelection}
/> />
const numNrens = filterSelection.selectedNrens.length; const numNrens = selectedNrens.length;
const heightPerBar = 1.5; // every added bar should give this much additional height const heightPerBar = 1.5; // every added bar should give this much additional height
// set a minimum height of 20rem // set a minimum height of 20rem
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment