Skip to content

Commit 9727cc8

Browse files
committed
mobile layout preparation
1 parent 22dc1c3 commit 9727cc8

File tree

5 files changed

+74
-61
lines changed

5 files changed

+74
-61
lines changed

package-lock.json

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"lodash": "4.17.15",
2222
"react": "^16.13.1",
2323
"react-cookies": "^0.1.1",
24+
"react-device-detect": "^1.13.1",
2425
"react-dom": "^16.13.1",
2526
"react-ga": "^3.0.0",
2627
"universal-cookie": "^4.0.3"

src/components/Dashboard.js

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ import config from '../config';
1212
import bluGreen from '../styles/theme';
1313
import { encode } from '../utils/utils';
1414

15-
16-
export default function Dashboard({ countries, colorMap, dataset, events, lastUpdate}) {
15+
export default function Dashboard({ countries, colorMap, dataset, events, lastUpdate, mobile }) {
1716
const [suggestEventModalOpen, setSuggestEventModalOpen] = useState(false);
1817
const [popoverOpen, setPopoverOpen] = useState(false);
1918

@@ -39,40 +38,33 @@ export default function Dashboard({ countries, colorMap, dataset, events, lastUp
3938
'suggest-event-date': date,
4039
'suggest-event-description': description,
4140
'suggest-event-reference': reference,
42-
})
41+
}),
4342
});
4443

4544
setPopoverOpen(true);
4645
};
4746

48-
4947
useEffect(() => {
50-
const popoverTimeout = setTimeout(() => { setPopoverOpen(false); }, config.popoverTimeout);
48+
const popoverTimeout = setTimeout(() => {
49+
setPopoverOpen(false);
50+
}, config.popoverTimeout);
51+
5152
return () => clearTimeout(popoverTimeout);
5253
}, [popoverOpen]);
5354

54-
5555
const theme = createMuiTheme(bluGreen);
5656

57-
5857
return (
5958
<ThemeProvider theme={theme}>
6059
<TopBar
6160
handleClickSuggestEvent={handleClickSuggestEvent}
6261
lastUpdate={lastUpdate}
62+
mobile={mobile}
6363
/>
6464

65-
<Charts
66-
countries={countries}
67-
colorMap={colorMap}
68-
dataset={dataset}
69-
/>
65+
<Charts countries={countries} colorMap={colorMap} dataset={dataset} />
7066

71-
<Lists
72-
dataset={dataset}
73-
events={events}
74-
lastUpdate={lastUpdate}
75-
/>
67+
<Lists dataset={dataset} events={events} lastUpdate={lastUpdate} />
7668

7769
<SuggestEventModal
7870
countries={countries}
@@ -98,6 +90,6 @@ export default function Dashboard({ countries, colorMap, dataset, events, lastUp
9890

9991
<Footer />
10092
<CookieConsent />
101-
</ThemeProvider >
93+
</ThemeProvider>
10294
);
10395
}

src/components/TopBar.js

Lines changed: 44 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -13,41 +13,37 @@ import MailIcon from '@material-ui/icons/Mail';
1313
import DataSelector from './Charts/DataSelector';
1414
import useChartSettings from '../hooks/useChartSettings';
1515

16-
1716
const useStyles = makeStyles({
18-
caps: { textTransform: 'uppercase'},
17+
caps: { textTransform: 'uppercase' },
1918
button: { padding: 0 },
2019
reduceheight: { marginTop: '-36px' },
2120
reducewidth: { width: '56%' },
2221
toolbar: { justifyContent: 'space-between', padding: '0 8px !important' },
23-
title: { textTransform: 'uppercase', fontWeight: 'bold'},
22+
title: { textTransform: 'uppercase', fontWeight: 'bold' },
2423
subtitle: {
2524
fontSize: '0.8rem',
2625
textAlign: 'right',
2726
textTransform: 'uppercase',
28-
margin: '-9px 0 0 0'
27+
margin: '-9px 0 0 0',
2928
},
3029
});
3130

32-
33-
function TopBar({ handleClickSuggestEvent, lastUpdate }) {
31+
function TopBar({ handleClickSuggestEvent, lastUpdate, mobile }) {
3432
const classes = useStyles();
3533
const matchesDownMd = useMediaQuery(theme => theme.breakpoints.down('md'));
3634
const matchesUpMd = useMediaQuery(theme => theme.breakpoints.up('md'));
3735

3836
const { chartSettings, saveChartSettings } = useChartSettings();
3937
const { showData, showType } = chartSettings;
4038

41-
4239
const handleChangeShowData = e => {
43-
saveChartSettings({...chartSettings, showData: e.target.value});
40+
saveChartSettings({ ...chartSettings, showData: e.target.value });
4441
};
4542

4643
const handleChangeShowType = e => {
47-
saveChartSettings({...chartSettings, showType: e.target.checked ? 'total' : 'daily'});
44+
saveChartSettings({ ...chartSettings, showType: e.target.checked ? 'total' : 'daily' });
4845
};
4946

50-
5147
return (
5248
<AppBar position="sticky">
5349
<Toolbar className={classes.toolbar}>
@@ -58,38 +54,47 @@ function TopBar({ handleClickSuggestEvent, lastUpdate }) {
5854
<p className={classes.subtitle}>Last updated: {lastUpdate}</p>
5955
</div>
6056

61-
<Grid container className={matchesUpMd ? classes.reducewidth : null } spacing={3}>
62-
<Grid item xs={12} lg={8} xl={6}>
63-
<DataSelector
64-
name="showdata"
65-
title="Data"
66-
items={['confirmed', 'deaths', 'recovered']}
67-
handleChange={handleChangeShowData}
68-
selection={showData}
69-
/>
70-
</Grid>
71-
<Grid item className={matchesDownMd ? classes.reduceheight : ''} xs={12} lg={4} xl={6}>
72-
<DataSelector
73-
name="showtype"
74-
title="Aggregate"
75-
items={['daily', 'total']}
76-
handleChange={handleChangeShowType}
77-
selection={showType}
78-
/>
79-
</Grid>
80-
</Grid>
81-
<Button
82-
color="inherit"
83-
onClick={handleClickSuggestEvent}
84-
className={classes.button}
85-
startIcon={<MailIcon />}
86-
>
87-
Suggest an event
88-
</Button>
57+
{mobile ? null : (
58+
<>
59+
<Grid container className={matchesUpMd ? classes.reducewidth : null} spacing={3}>
60+
<Grid item xs={12} lg={8} xl={6}>
61+
<DataSelector
62+
name="showdata"
63+
title="Data"
64+
items={['confirmed', 'deaths', 'recovered']}
65+
handleChange={handleChangeShowData}
66+
selection={showData}
67+
/>
68+
</Grid>
69+
<Grid
70+
item
71+
className={matchesDownMd ? classes.reduceheight : ''}
72+
xs={12}
73+
lg={4}
74+
xl={6}
75+
>
76+
<DataSelector
77+
name="showtype"
78+
title="Aggregate"
79+
items={['daily', 'total']}
80+
handleChange={handleChangeShowType}
81+
selection={showType}
82+
/>
83+
</Grid>
84+
</Grid>
85+
<Button
86+
color="inherit"
87+
onClick={handleClickSuggestEvent}
88+
className={classes.button}
89+
startIcon={<MailIcon />}
90+
>
91+
Suggest an event
92+
</Button>
93+
</>
94+
)}
8995
</Toolbar>
9096
</AppBar>
9197
);
9298
}
9399

94-
95100
export default TopBar;

src/index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
33
import ReactGA from 'react-ga';
4+
import { isMobile } from 'react-device-detect';
45
import { schemeTableau10 as st } from 'd3';
56

67
import Dashboard from './components/Dashboard';
@@ -15,10 +16,9 @@ ReactGA.pageview(window.location.pathname + window.location.search);
1516

1617
const preparedDataset = prepareDataset(dataset);
1718
const countries = prepareCountries(preparedDataset);
18-
const colorMap = countries.reduce((acc, c, i) => ({...acc, [c]: st[i % st.length]}), {});
19+
const colorMap = countries.reduce((acc, c, i) => ({ ...acc, [c]: st[i % st.length] }), {});
1920
const lastUpdate = dataset[countries[0]][dataset[countries[0]].length - 1].date;
2021

21-
2222
// Render app.
2323
ReactDOM.render(
2424
<ChartSettingsProvider>
@@ -28,6 +28,8 @@ ReactDOM.render(
2828
dataset={preparedDataset}
2929
events={events}
3030
lastUpdate={lastUpdate}
31+
mobile={isMobile}
3132
/>
32-
</ChartSettingsProvider>
33-
, document.getElementById("app"));
33+
</ChartSettingsProvider>,
34+
document.getElementById('app'),
35+
);

0 commit comments

Comments
 (0)