From b0ab9e84a497aba551e4e8d5fbe3ca6c24561ab7 Mon Sep 17 00:00:00 2001 From: Adam Melnick Date: Tue, 20 Oct 2020 20:18:00 +0300 Subject: [PATCH] Added weather widget --- src/components/molecules/TableView.tsx | 8 +-- .../widgets/RainAccidentsBySeverity.tsx | 61 +++++++++++++++++++ .../molecules/widgets/WidgetWrapper.tsx | 6 ++ src/models/WidgetData.ts | 14 ++++- src/models/WidgetName.ts | 1 + 5 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 src/components/molecules/widgets/RainAccidentsBySeverity.tsx diff --git a/src/components/molecules/TableView.tsx b/src/components/molecules/TableView.tsx index 25f05d17..b7847a54 100644 --- a/src/components/molecules/TableView.tsx +++ b/src/components/molecules/TableView.tsx @@ -8,7 +8,7 @@ import { tableHeadColor, tableBackgroundColorMain, tableBackgroundColorOdd } fro interface IProps { data: IWidgetMostSevereAccidentsTableData; } -const useStyles = makeStyles((theme: Theme) => ({ +export const UseTableStyles = makeStyles((theme: Theme) => ({ root: { display: 'flex', flexDirection: 'column', @@ -20,7 +20,7 @@ const useStyles = makeStyles((theme: Theme) => ({ }, table: {}, })); -const StyledTableCell = withStyles((theme: Theme) => +export const StyledTableCell = withStyles((theme: Theme) => createStyles({ root: { textAlign: 'center', @@ -39,7 +39,7 @@ const StyledTableCell = withStyles((theme: Theme) => }, }), )(TableCell); -const StyledTableRow = withStyles(() => +export const StyledTableRow = withStyles(() => createStyles({ root: { backgroundColor: tableBackgroundColorMain, @@ -51,7 +51,7 @@ const StyledTableRow = withStyles(() => )(TableRow); const TableView: FC = ({ data }) => { - const classes = useStyles(); + const classes = UseTableStyles(); const { items, text } = data; return (
diff --git a/src/components/molecules/widgets/RainAccidentsBySeverity.tsx b/src/components/molecules/widgets/RainAccidentsBySeverity.tsx new file mode 100644 index 00000000..e14e363b --- /dev/null +++ b/src/components/molecules/widgets/RainAccidentsBySeverity.tsx @@ -0,0 +1,61 @@ +import React, { FC } from 'react'; +import { Table, TableBody, TableHead } from '@material-ui/core'; + +import { Text, TextType } from '../../atoms'; +import { UseTableStyles, StyledTableRow, StyledTableCell } from '../TableView'; + +import { IWidgetRainAccidentsBySeverity } from '../../../models/WidgetData'; + +const SEVERITY = 'severity'; +const SEVERITY_HEBREW = 'severity_hebrew'; +const AMOUNT = 'amount_of_accidents_caused_by_rain'; +const PERCENT = 'accidents_caused_by_rain_percentage'; + +interface IProps { + data: IWidgetRainAccidentsBySeverity; +} + +const RainAccidentsBySeverity: FC = ({ data }) => { + const classes = UseTableStyles(); + const { items, text } = data; + return ( +
+
+ {text.title} +
+ + + + + חומרת התאונה + + + כמות התאונות שנגרמו על ידי גשם + + + אחוז התאונות שנגרמו על ידי גשם + + + + + {items + .sort((previousItem, currentItem) => previousItem[SEVERITY] - currentItem[SEVERITY]) + .map((item, index) => ( + + + {item[SEVERITY_HEBREW]} + + + {item[AMOUNT]} + + + {item[PERCENT]}% + + + ))} + +
+
+ ); +}; +export default RainAccidentsBySeverity; diff --git a/src/components/molecules/widgets/WidgetWrapper.tsx b/src/components/molecules/widgets/WidgetWrapper.tsx index 05bb9a8c..3216d4ef 100644 --- a/src/components/molecules/widgets/WidgetWrapper.tsx +++ b/src/components/molecules/widgets/WidgetWrapper.tsx @@ -16,6 +16,7 @@ import { IWidgetTopRoadSegmentsAccidentsPerKm, IWidgetAccidentCountByDriverType, IWidgetAccidentCountByCarType, + IWidgetRainAccidentsBySeverity, } from '../../../models/WidgetData'; import AccidentsCountByHourBarWidget from './AccidentsCountByHourBarWidget'; import InjuredCountPerAgeGroupPieWidget from './InjuredCountPerAgeGroupPieWidget'; @@ -33,6 +34,7 @@ import TopRoadSegmentsAccidentsPerKm from './TopRoadSegmentsAccidentsPerKm'; import AccidentCountByRoadLight from './AccidentCountByRoadLight'; import AccidentCountByDriverType from './AccidentCountByDriverType'; import AccidentCountByCarTypeWidget from './AccidentCountByCarTypeWidget'; +import RainAccidentsBySeverity from './RainAccidentsBySeverity'; import { IPoint } from '../../../models/Point'; import { WidgetName } from '../../../models/WidgetName'; @@ -139,6 +141,10 @@ const WidgetWrapper: FC = ({ widget, segmentText, options = {} }) => { ); break; } + case WidgetName.rain_accidents_by_severity: { + widgetComponent = ; + break; + } default: { widgetComponent = null; // do not create element for unrecognized widget console.warn(`widget name (${name}) was not recognize `, widget); diff --git a/src/models/WidgetData.ts b/src/models/WidgetData.ts index 3b2dc6a2..744fcec5 100644 --- a/src/models/WidgetData.ts +++ b/src/models/WidgetData.ts @@ -44,7 +44,8 @@ export type IWidgetDataType = | IWidgetTopRoadSegmentsAccidentsPerKm | IWidgetAccidentCountByRoadLight | IWidgetAccidentCountByDriverType - | IWidgetAccidentCountByCarType; + | IWidgetAccidentCountByCarType + | IWidgetRainAccidentsBySeverity; export interface ILocationMeta { location_info: { @@ -63,6 +64,17 @@ export interface IWidgetAccidentsByHourBarData { title: string; }; } +export interface IWidgetRainAccidentsBySeverity { + items: { + severity: number; + severity_hebrew: string; + amount_of_accidents_caused_by_rain: number; + accidents_caused_by_rain_percentage: number; + }[]; + text: { + title: string; + }; +} export interface IWidgetInjuredCountPerAgeGroupPieData { items: { age_group: string; diff --git a/src/models/WidgetName.ts b/src/models/WidgetName.ts index cf437849..1caea92e 100644 --- a/src/models/WidgetName.ts +++ b/src/models/WidgetName.ts @@ -17,4 +17,5 @@ export enum WidgetName { accident_count_by_road_light = 'accident_count_by_road_light', accident_count_by_driver_type = 'accident_count_by_driver_type', accident_count_by_car_type = 'accident_count_by_car_type', + rain_accidents_by_severity = 'rain_accidents_by_severity', }