Skip to content

Commit 896b234

Browse files
authored
Merge pull request #3324 from Vizzuality/fix/country-widget-fixes
Fix/country widget fixes
2 parents c4a5ec3 + 373640b commit 896b234

15 files changed

+93
-56
lines changed

app/javascript/components/map/map-reducers.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export const initialState = {
22
loading: false,
33
error: false,
4+
options: {},
45
layerSpec: {},
56
settings: {}
67
};
@@ -18,11 +19,11 @@ const setLayerSpec = (state, { payload }) => ({
1819

1920
const setMapSettings = (state, { payload }) => ({
2021
...state,
21-
settings: payload
22+
options: payload
2223
});
2324

2425
const setMapZoom = (state, { payload }) => {
25-
let zoom = !payload.sum ? payload.value : state.settings.zoom + payload.value;
26+
let zoom = !payload.sum ? payload.value : state.options.zoom + payload.value;
2627
if (zoom > 20) {
2728
zoom = 20;
2829
} else if (zoom < 1) {
@@ -31,8 +32,8 @@ const setMapZoom = (state, { payload }) => {
3132

3233
return {
3334
...state,
34-
settings: {
35-
...state.settings,
35+
options: {
36+
...state.options,
3637
zoom
3738
}
3839
};

app/javascript/components/map/map.js

+20-12
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ const mapStateToProps = (
2828
error: map.error,
2929
bounds: countryData.geostore.bounds,
3030
layerSpec: map.layerSpec,
31-
settings: map.settings,
31+
settings: { ...map.settings, ...parentSettings },
32+
options: map.options,
3233
layers: getLayers({ layers: activeLayers, layerSpec: map.layerSpec }),
3334
layersKeys: activeLayers
3435
};
@@ -43,23 +44,29 @@ class MapContainer extends PureComponent {
4344
}
4445

4546
componentWillReceiveProps(nextProps) {
46-
const { isParentLoading, bounds, layersKeys, settings } = nextProps;
47+
const {
48+
isParentLoading,
49+
bounds,
50+
layersKeys,
51+
settings,
52+
options
53+
} = nextProps;
4754
if (isParentLoading !== this.props.isParentLoading && bounds) {
4855
this.boundMap(nextProps.bounds);
4956
this.setAreaHighlight();
50-
this.updateLayers(layersKeys);
57+
this.updateLayers(layersKeys, settings);
5158
this.setEvents();
5259
}
5360

54-
if (!isEqual(layersKeys, this.props.layersKeys)) {
55-
this.updateLayers(layersKeys);
56-
}
57-
5861
if (
59-
this.props.settings.zoom &&
60-
this.props.settings.zoom !== settings.zoom
62+
!isEqual(layersKeys, this.props.layersKeys) ||
63+
!isEqual(settings, this.props.settings)
6164
) {
62-
this.updateZoom(settings.zoom);
65+
this.updateLayers(layersKeys, settings);
66+
}
67+
68+
if (this.props.options.zoom && this.props.options.zoom !== options.zoom) {
69+
this.updateZoom(options.zoom);
6370
}
6471
}
6572

@@ -114,9 +121,9 @@ class MapContainer extends PureComponent {
114121
}
115122
}
116123

117-
updateLayers(layers, layerSpec) {
124+
updateLayers(layers, settings) {
118125
this.removeLayers();
119-
this.setLayers(layers, layerSpec);
126+
this.setLayers(layers, settings);
120127
}
121128

122129
updateZoom(zoom) {
@@ -153,6 +160,7 @@ MapContainer.propTypes = {
153160
layers: PropTypes.array,
154161
layersKeys: PropTypes.array,
155162
settings: PropTypes.object,
163+
options: PropTypes.object,
156164
mapOptions: PropTypes.object.isRequired,
157165
getLayerSpec: PropTypes.func.isRequired,
158166
setMapZoom: PropTypes.func.isRequired,

app/javascript/pages/country/data/indicators.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
{
2727
"label": "Primary Forests",
2828
"value": "primary_forest",
29-
"metaKey": "primary_forests",
29+
"metaKey": "primary_forest",
3030
"category": "general"
3131
},
3232
{

app/javascript/pages/country/widget/components/widget-composed-chart/widget-composed-chart-component.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,15 @@ class WidgetComposedChart extends PureComponent {
4141
gradients,
4242
tooltip,
4343
unit,
44-
unitFormat
44+
unitFormat,
45+
height
4546
} = this.props.config;
4647
const { className, data, config, handleMouseMove } = this.props;
4748
const { lines, bars, areas } = yKeys;
4849
const maxYValue = this.findMaxValue(data, config);
4950

5051
return (
51-
<div className={`c-composed-chart ${className}`}>
52+
<div className={`c-composed-chart ${className}`} style={{ height }}>
5253
<ResponsiveContainer>
5354
<ComposedChart
5455
data={data}

app/javascript/pages/country/widget/components/widget-dynamic-sentence/widget-dynamic-sentence-component.jsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,19 @@ import './widget-dynamic-sentence-styles.scss';
55

66
class WidgetDynamicSentence extends PureComponent {
77
render() {
8-
const { sentence } = this.props;
8+
const { sentence, className } = this.props;
99

1010
return (
1111
<p
12-
className="c-widget-dynamic-sentence"
12+
className={`c-widget-dynamic-sentence ${className || ''}`}
1313
dangerouslySetInnerHTML={{ __html: sentence }}
1414
/>
1515
);
1616
}
1717
}
1818

1919
WidgetDynamicSentence.propTypes = {
20+
className: PropTypes.string,
2021
sentence: PropTypes.string.isRequired
2122
};
2223

app/javascript/pages/country/widget/components/widget-header/widget-header-component.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Tooltip } from 'react-tippy';
44
import isEmpty from 'lodash/isEmpty';
55
import { COUNTRY } from 'pages/country/router';
66
import { isTouch } from 'utils/browser';
7+
import { SCREEN_L } from 'utils/constants';
78

89
import Button from 'components/button';
910
import Icon from 'components/icon';
@@ -29,6 +30,7 @@ class WidgetHeader extends PureComponent {
2930
title,
3031
settingsConfig,
3132
locationNames,
33+
modalClosing,
3234
widget,
3335
location,
3436
query,
@@ -43,7 +45,7 @@ class WidgetHeader extends PureComponent {
4345
} = this.props;
4446
const { tooltipOpen } = this.state;
4547
const widgetSize = settingsConfig.config.size;
46-
const isDeviceTouch = isTouch();
48+
const isDeviceTouch = isTouch() || window.innerWidth < SCREEN_L;
4749
const haveMapLayers =
4850
settingsConfig.settings &&
4951
settingsConfig.settings.layers &&
@@ -62,7 +64,7 @@ class WidgetHeader extends PureComponent {
6264
{!embed &&
6365
haveMapLayers && (
6466
<Button
65-
className="map-button"
67+
className={`map-button ${active ? '-active' : ''}`}
6668
theme={`theme-button-small ${
6769
widgetSize === 'small' || isDeviceTouch ? 'square' : ''
6870
}`}
@@ -115,7 +117,9 @@ class WidgetHeader extends PureComponent {
115117
trigger="click"
116118
interactive
117119
onRequestClose={() => {
118-
this.setState({ tooltipOpen: false });
120+
if (!modalClosing) {
121+
this.setState({ tooltipOpen: false });
122+
}
119123
}}
120124
onShow={() => this.setState({ tooltipOpen: true })}
121125
arrow

app/javascript/pages/country/widget/components/widget-header/widget-header-styles.scss

+8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@
2626
.map-button {
2727
position: relative;
2828

29+
&.-active {
30+
cursor: default;
31+
32+
&:hover {
33+
background-color: $green-gfw;
34+
}
35+
}
36+
2937
.map-icon {
3038
width: rem(20px);
3139
height: rem(20px);

app/javascript/pages/country/widget/components/widget-settings-statement/widget-settings-statement-component.jsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ class WidgetSettingsStatement extends PureComponent {
77
render() {
88
const { statement } = this.props;
99

10-
return <div className="c-widget-settings-statement">{statement}</div>;
10+
return statement ? (
11+
<div className="c-widget-settings-statement">{statement}</div>
12+
) : null;
1113
}
1214
}
1315

app/javascript/pages/country/widget/components/widget-settings/widget-settings-component.jsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ class WidgetSettings extends PureComponent {
5959
className="theme-button-small square info-button"
6060
onClick={() =>
6161
setModalMeta(
62-
option.metaKey === 'primary_forests'
62+
option.metaKey === 'primary_forest'
6363
? `${lowerCase(locationNames.country.value)}_${
6464
option.metaKey
65+
}${
66+
locationNames.country.value === 'DRC' ? 's' : ''
6567
}`
6668
: option.metaKey
6769
)

app/javascript/pages/country/widget/widgets/widget-fires/widget-fires-actions.js

+20-26
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,27 @@ const setFiresData = createAction('setFiresData');
88
const setFiresSettings = createAction('setFiresSettings');
99
const setFiresLoading = createAction('setFiresLoading');
1010

11-
const getFiresData = createThunkAction(
12-
'getFiresData',
13-
params => (dispatch, state) => {
14-
if (!state().widgetFires.loading) {
15-
dispatch(setFiresLoading({ loading: true, error: false }));
16-
17-
const dates = [
18-
moment().format('YYYY-MM-DD'),
19-
moment()
20-
.subtract(params.periodValue, params.period)
21-
.format('YYYY-MM-DD')
22-
];
23-
fetchViirsAlerts({ ...params, dates })
24-
.then(response => {
25-
dispatch(
26-
setFiresData({
27-
fires: response.data.data
28-
})
29-
);
11+
const getFiresData = createThunkAction('getFiresData', params => dispatch => {
12+
dispatch(setFiresLoading({ loading: true, error: false }));
13+
const dates = [
14+
moment().format('YYYY-MM-DD'),
15+
moment()
16+
.subtract(params.periodValue, params.period)
17+
.format('YYYY-MM-DD')
18+
];
19+
fetchViirsAlerts({ ...params, dates })
20+
.then(response => {
21+
dispatch(
22+
setFiresData({
23+
fires: response.data.data
3024
})
31-
.catch(error => {
32-
dispatch(setFiresLoading({ loading: false, error: true }));
33-
console.error(error);
34-
});
35-
}
36-
}
37-
);
25+
);
26+
})
27+
.catch(error => {
28+
dispatch(setFiresLoading({ loading: false, error: true }));
29+
console.error(error);
30+
});
31+
});
3832

3933
export default {
4034
setFiresData,

app/javascript/pages/country/widget/widgets/widget-fires/widget-fires-reducers.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import WIDGETS_CONFIG from 'pages/country/data/widgets-config.json';
22

33
export const initialState = {
4-
loading: false,
4+
loading: true,
55
error: false,
66
data: {},
77
...WIDGETS_CONFIG.fires

app/javascript/pages/country/widget/widgets/widget-fires/widget-fires-selectors.js

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export const chartConfig = createSelector(
6969
xAxis: {
7070
tickCount: 2,
7171
interval: data.length - 2,
72+
padding: { right: 8 },
7273
tickFormatter: t => moment(t).format('Do MMM')
7374
},
7475
tooltip: [

app/javascript/pages/country/widget/widgets/widget-glad-alerts/widget-glad-alerts-component.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ class WidgetGladAlerts extends PureComponent {
1212

1313
return (
1414
<div className="c-widget-glad-alerts">
15-
{sentence && <WidgetDynamicSentence sentence={sentence} />}
15+
{sentence && (
16+
<WidgetDynamicSentence className="sentence" sentence={sentence} />
17+
)}
1618
{data && (
1719
<WidgetComposedChart
1820
className="loss-chart"

app/javascript/pages/country/widget/widgets/widget-glad-alerts/widget-glad-alerts-selectors.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ export const chartConfig = createSelector(
234234
yAxis: {
235235
domain: [0, 'auto'],
236236
allowDataOverflow: true
237-
}
237+
},
238+
height: '280px'
238239
};
239240
}
240241
);

app/javascript/pages/country/widget/widgets/widget-glad-alerts/widget-glad-alerts-styles.scss

+13-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22

33
.c-widget-glad-alerts {
44
.loss-chart {
5-
padding-top: rem(40px);
5+
padding-top: rem(20px);
6+
}
7+
8+
.sentence {
9+
height: rem(180px);
10+
11+
@media screen and (min-width: $screen-m) {
12+
height: rem(140px);
13+
}
14+
15+
@media screen and (min-width: $screen-l) {
16+
height: rem(90px);
17+
}
618
}
719
}

0 commit comments

Comments
 (0)