Skip to content

Commit f38291a

Browse files
authored
Merge pull request #3497 from Vizzuality/feature/map-menu
Feature/map menu
2 parents e340578 + 6ec302e commit f38291a

29 files changed

+707
-10
lines changed
Loading
+5
Loading
Loading

app/javascript/assets/icons/trees.svg

+5
Loading

app/javascript/assets/icons/truck.svg

+7
Loading

app/javascript/assets/icons/world.svg

+6
Loading

app/javascript/assets/logos/gfw.png

3.17 KB
Loading

app/javascript/components/ui/button/button-component.jsx

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Tip from 'components/ui/tip';
99
import './button-styles.scss';
1010
import './themes/button-light.scss'; // eslint-disable-line
1111
import './themes/button-small.scss'; // eslint-disable-line
12+
import './themes/button-tiny.scss'; // eslint-disable-line
1213
import './themes/button-grey.scss'; // eslint-disable-line
1314
import './themes/button-clear.scss'; // eslint-disable-line
1415
import './themes/button-map-control.scss'; // eslint-disable-line
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
@import '~styles/settings';
2+
3+
.theme-button-tiny {
4+
height: rem(14px);
5+
border-radius: rem(10px);
6+
padding: 0 rem(10px);
7+
font-size: rem(12px);
8+
line-height: 0.8em;
9+
white-space: nowrap;
10+
11+
&.square {
12+
width: rem(14px);
13+
min-width: rem(14px);
14+
padding: 0;
15+
}
16+
17+
svg {
18+
width: rem(8px);
19+
height: rem(8px);
20+
}
21+
}

app/javascript/components/ui/switch/switch-component.jsx

+16-8
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,31 @@ import Toggle from 'react-toggle';
55
import './react-toggle.scss';
66
import './switch-styles.scss';
77
import './themes/switch-light.scss';
8+
import './themes/switch-toggle.scss';
89

910
class Switch extends PureComponent {
1011
render() {
1112
const { theme, label, value, options, onChange } = this.props;
13+
const icons = options
14+
? {
15+
checked: options[0].label,
16+
unchecked: options[1].label
17+
}
18+
: false;
19+
const defaultChecked = options ? options[1].value === value : false;
20+
1221
return (
1322
<div className={`c-switch ${theme || ''}`}>
1423
{label && <div className="label">{label}</div>}
1524
<Toggle
16-
icons={{
17-
checked: options[0].label,
18-
unchecked: options[1].label
19-
}}
20-
defaultChecked={options[1].value === value}
25+
icons={icons}
26+
defaultChecked={defaultChecked}
2127
onChange={e => {
22-
const result = e.target.checked
23-
? options[1].value
24-
: options[0].value;
28+
let result = e.target.checked;
29+
if (options) {
30+
result = result ? options[1].value : options[0].value;
31+
}
32+
2533
onChange(result);
2634
}}
2735
/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
@import '~styles/settings.scss';
2+
3+
.theme-switch-toggle {
4+
.react-toggle {
5+
width: rem(22px);
6+
height: rem(14px);
7+
8+
.react-toggle-track {
9+
width: 100%;
10+
height: 100%;
11+
background-color: $light-grey;
12+
}
13+
14+
.react-toggle-thumb {
15+
top: rem(2px);
16+
left: rem(2px);
17+
width: rem(10px);
18+
height: rem(10px);
19+
border: 0;
20+
box-shadow: none !important;
21+
}
22+
23+
&:hover {
24+
.react-toggle-track {
25+
background-color: $light-grey;
26+
}
27+
}
28+
29+
&--checked {
30+
.react-toggle-thumb {
31+
left: calc(50% - #{rem(1px)});
32+
}
33+
34+
.react-toggle-track,
35+
&:hover .react-toggle-track {
36+
background-color: $green-gfw;
37+
}
38+
}
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import React, { PureComponent } from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
import LayersBlock from 'pages/map/menu/components/layers-block';
5+
6+
class ForestChange extends PureComponent {
7+
render() {
8+
const { data } = this.props;
9+
return (
10+
<div className="c-forest-change">
11+
{data &&
12+
data.map(block => {
13+
const { name, description, layers } = block;
14+
return (
15+
<LayersBlock
16+
key={`layers-block-${name}`}
17+
name={name}
18+
description={description}
19+
layers={layers}
20+
/>
21+
);
22+
})}
23+
</div>
24+
);
25+
}
26+
}
27+
28+
ForestChange.propTypes = {
29+
data: PropTypes.array
30+
};
31+
32+
export default ForestChange;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { createElement, PureComponent } from 'react';
2+
import { connect } from 'react-redux';
3+
4+
import ForestChangeComponent from './forest-change-component';
5+
6+
const mapStateToProps = () => ({});
7+
8+
class ForestChangeContainer extends PureComponent {
9+
render() {
10+
return createElement(ForestChangeComponent, {
11+
...this.props
12+
});
13+
}
14+
}
15+
16+
export default connect(mapStateToProps, null)(ForestChangeContainer);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import React, { PureComponent } from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
import Switch from 'components/ui/switch';
5+
import Button from 'components/ui/button';
6+
import Icon from 'components/ui/icon';
7+
8+
import infoIcon from 'assets/icons/info.svg';
9+
10+
import './layer-toggle-styles.scss';
11+
12+
class LayerToggle extends PureComponent {
13+
render() {
14+
const { data: { name, description } } = this.props;
15+
16+
return (
17+
<div className="c-layer-toggle">
18+
<Switch theme="theme-switch-toggle" onChange={() => {}} />
19+
<div className="c-layer-toggle__content">
20+
<div className="c-layer-toggle__header">
21+
<div className="c-layer-toggle__name">{name}</div>
22+
<Button
23+
className="theme-button-tiny square info-button"
24+
onClick={() => {}}
25+
>
26+
<Icon icon={infoIcon} className="info-icon" />
27+
</Button>
28+
</div>
29+
<div className="c-layer-toggle__description">{description}</div>
30+
</div>
31+
</div>
32+
);
33+
}
34+
}
35+
36+
LayerToggle.propTypes = {
37+
data: PropTypes.object
38+
};
39+
40+
export default LayerToggle;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
@import '~styles/settings';
2+
3+
.c-layer-toggle {
4+
display: flex;
5+
margin-bottom: rem(21px);
6+
7+
&:last-child {
8+
margin-bottom: 0;
9+
}
10+
11+
&__content {
12+
flex: 1;
13+
padding-left: rem(6px);
14+
}
15+
16+
&__header {
17+
display: flex;
18+
justify-content: space-between;
19+
}
20+
21+
&__name {
22+
font-size: 14px;
23+
line-height: 1.21;
24+
letter-spacing: -0.3px;
25+
color: $slate;
26+
}
27+
28+
&__description {
29+
font-size: 12px;
30+
line-height: normal;
31+
letter-spacing: -0.3px;
32+
color: $hot-grey;
33+
margin-top: rem(3px);
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Component from './layer-toggle-component';
2+
3+
export default Component;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import React, { PureComponent } from 'react';
2+
import PropTypes from 'prop-types';
3+
4+
import LayerToggle from 'pages/map/menu/components/layer-toggle';
5+
6+
import './layers-block-styles.scss';
7+
8+
class LayersBlock extends PureComponent {
9+
render() {
10+
const { name, description, layers } = this.props;
11+
return (
12+
<div className="c-layers-block">
13+
{(name || description) && (
14+
<div className="c-layers-block__header">
15+
{name && <div className="c-layers-block__title">{name}</div>}
16+
{description && (
17+
<div className="c-layers-block__description">{description}</div>
18+
)}
19+
</div>
20+
)}
21+
{layers &&
22+
layers.map(layer => (
23+
<LayerToggle key={`toogle-${layer.name}`} data={layer} />
24+
))}
25+
</div>
26+
);
27+
}
28+
}
29+
30+
LayersBlock.propTypes = {
31+
name: PropTypes.string,
32+
description: PropTypes.string,
33+
layers: PropTypes.array
34+
};
35+
36+
export default LayersBlock;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
@import '~styles/settings';
2+
3+
.c-layers-block {
4+
position: relative;
5+
padding: rem(20px) 0;
6+
7+
&__header {
8+
margin-bottom: rem(20px);
9+
}
10+
11+
&__title {
12+
font-size: 14px;
13+
font-weight: 500;
14+
line-height: 1.1;
15+
color: $greyish-brown;
16+
}
17+
18+
&__description {
19+
font-size: 12px;
20+
letter-spacing: -0.3px;
21+
color: $hot-grey;
22+
}
23+
24+
&:not(:last-child)::before {
25+
content: '';
26+
position: absolute;
27+
bottom: 0;
28+
right: rem(-20px);
29+
width: calc(100% + #{rem(20px)});
30+
height: rem(1px);
31+
background-color: rgba($hot-grey, 0.3);
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Component from './layers-block-component';
2+
3+
export default Component;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { createAction } from 'redux-actions';
2+
3+
const setSelectedSection = createAction('setSelectedSection');
4+
5+
export default {
6+
setSelectedSection
7+
};

0 commit comments

Comments
 (0)