Skip to content

Commit fcb99b4

Browse files
authored
Merge pull request #1161 from data-for-change/add_killed_and_injured_count_per_age_group_stacked
Add killed and injured count per age group stacked
2 parents 4959db7 + 88c6a35 commit fcb99b4

File tree

7 files changed

+40
-3
lines changed

7 files changed

+40
-3
lines changed

src/components/molecules/GenericBarChart.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ interface ISingleBarChartProps extends IBarChartBaseProps {}
3535

3636
interface IMultiBarChartProps extends IBarChartBaseProps {
3737
isStacked: boolean;
38+
customYLabels?: string[];
3839
editorBarOptions?: Record<number, boolean>;
3940
}
4041

@@ -106,13 +107,15 @@ const MultiBarChart: FC<IMultiBarChartProps> = ({
106107
isStacked,
107108
textLabel,
108109
subtitle,
110+
customYLabels,
109111
editorBarOptions,
110112
}) => {
111113
const theme = useTheme();
112114
const colors = (theme.palette.primary as ColorScheme).barChartColors;
113115

114-
const yLabels = data ? Object.keys(data[0]) : [];
115-
yLabels.splice(0, 1);
116+
const defaultYLabels = data ? Object.keys(data[0]) : [];
117+
const yLabels= customYLabels || defaultYLabels.slice(1);
118+
116119
const maxBarsNum = yLabels.length;
117120
const filteredColors: Record<string, any> =
118121
editorBarOptions && Object.keys(editorBarOptions).length !== 0
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React, { FC } from 'react';
2+
import { IWidgetMultiBarData } from 'models/WidgetData';
3+
import { createBarWidget } from 'utils/barChart.utils';
4+
import { MultiBarChart } from '../GenericBarChart';
5+
6+
7+
interface IProps {
8+
data: IWidgetMultiBarData;
9+
editorBarOptions: Record<number, boolean>;
10+
}
11+
12+
const KilledAndInjuredCountPerAgeGroupStackedWidget: FC<IProps> = ({ data, editorBarOptions }) => {
13+
const { text } = data;
14+
const multiBarSeries = createBarWidget(data, editorBarOptions);
15+
return <MultiBarChart isStacked={true} isPercentage={false} data={multiBarSeries}
16+
textLabel={text.title}
17+
customYLabels={Object.values(text.labels_map)}
18+
subtitle={text.subtitle}
19+
editorBarOptions={editorBarOptions} />;
20+
};
21+
export default KilledAndInjuredCountPerAgeGroupStackedWidget;

src/components/molecules/widgets/WidgetWrapper.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import { IPoint } from 'models/Point';
4242
import { WidgetName } from 'models/WidgetName';
4343
import KilledAndInjuredCountPerAgeGroupWidget from './KilledAndInjuredCountPerAgeGroupWidget';
4444
import { getInjuredBySeverityVerbLabel } from 'utils/text.utils';
45+
import KilledAndInjuredCountPerAgeGroupStackedWidget from './KilledAndInjuredCountPerAgeGroupStackedWidget';
4546

4647
interface IProps {
4748
widget: IWidgetBase;
@@ -149,6 +150,10 @@ const WidgetWrapper: FC<IProps> = ({ widget, locationText, sizeOptions, editorBa
149150
widgetComponent = <CountInjuredByYearBarWidget data={data as IWidgetMultiBarData} editorBarOptions={editorBarOptions} />;
150151
break;
151152
}
153+
case WidgetName.killed_and_injured_count_per_age_group_stacked: {
154+
widgetComponent = <KilledAndInjuredCountPerAgeGroupStackedWidget data={data as IWidgetMultiBarData} editorBarOptions={editorBarOptions} />;
155+
break;
156+
}
152157
case WidgetName.accident_count_by_day_night: {
153158
widgetComponent = <CountAccidentsByDayNightPieWidget data={data as IWidgetAccidentsByDayNightData} />;
154159
break;

src/const/cards.const.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ export const operationalCards: WidgetName[] = [
1717
WidgetName.injured_count_by_accident_year,
1818
// WidgetName.accident_count_by_driver_type,
1919
WidgetName.killed_and_injured_count_per_age_group,
20-
WidgetName.accident_count_by_day_night
20+
WidgetName.accident_count_by_day_night,
21+
WidgetName.killed_and_injured_count_per_age_group_stacked,
2122
];
2223

2324
export type OrgLogoData = {key : string, path:string} ;

src/models/WidgetName.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ export enum WidgetName {
2222
injured_accidents_with_pedestrians = 'injured_accidents_with_pedestrians',
2323
injured_count_by_severity = 'injured_count_by_severity',
2424
killed_and_injured_count_per_age_group = 'killed_and_injured_count_per_age_group',
25+
killed_and_injured_count_per_age_group_stacked = 'killed_and_injured_count_per_age_group_stacked',
2526
}

src/services/data.verification/data.verification.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ export const verifiedWidgetData = (widget: any) => {
106106
isValid = items.every((item: any) => validNumber(item.label_key) && validDataSeries(item.series));
107107
break;
108108
}
109+
case 'killed_and_injured_count_per_age_group_stacked': {
110+
isValid = items.every((item: any) => validString(item.label_key) && validDataSeries(item.series));
111+
break;
112+
}
109113
case 'accident_count_by_day_night': {
110114
isValid = items.every((item: any) => validString(item.day_night) && validNumber(item.count));
111115
break;

src/services/widgets.style.service.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ const widgetVariants: { [index: string]: CardVariant } = {
6565
footer: FooterVariant.LogoWithRange,
6666
},
6767
[WidgetName.accidents_heat_map]: { header: HeaderVariant.Centered, footer: FooterVariant.LogoWithRange },
68+
[WidgetName.killed_and_injured_count_per_age_group_stacked]: { header: HeaderVariant.Centered, footer: FooterVariant.LogoWithRange },
69+
6870
};
6971

7072
export function getWidgetVariant(widgetName: string) {

0 commit comments

Comments
 (0)