Skip to content

Commit 1846f45

Browse files
authored
Merge pull request #3691 from Vizzuality/feature/recent-imagery-interactions-update
Feature/recent imagery interactions update
2 parents feebeac + ab58eed commit 1846f45

27 files changed

+188
-312
lines changed

app/javascript/components/maps/components/menu/components/menu-panel/component.jsx

+11-4
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,11 @@ class MenuPanel extends PureComponent {
5050
category,
5151
large,
5252
onClose,
53+
onOpen,
5354
children,
5455
loading,
55-
setMenuSettings
56+
setMenuSettings,
57+
collapsed
5658
} = this.props;
5759
const Panel = isDesktop ? PanelDesktop : PanelMobile;
5860

@@ -85,9 +87,12 @@ class MenuPanel extends PureComponent {
8587
<Button
8688
className="panel-close"
8789
theme="theme-button-clear"
88-
onClick={onClose}
90+
onClick={collapsed ? onOpen : onClose}
8991
>
90-
<Icon icon={arrowIcon} className="icon-close-panel" />
92+
<Icon
93+
icon={arrowIcon}
94+
className={cx('icon-close-panel', { collapsed })}
95+
/>
9196
</Button>
9297
</div>
9398
) : (
@@ -114,7 +119,9 @@ MenuPanel.propTypes = {
114119
label: PropTypes.string,
115120
category: PropTypes.string,
116121
active: PropTypes.bool,
117-
loading: PropTypes.bool
122+
loading: PropTypes.bool,
123+
collapsed: PropTypes.bool,
124+
onOpen: PropTypes.func
118125
};
119126

120127
export default MenuPanel;

app/javascript/components/maps/components/menu/components/menu-panel/styles.scss

+4
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ $map-menu-panel-width-big: rem(560px);
8181
.button-wrapper {
8282
justify-content: flex-end;
8383
}
84+
85+
.collapsed {
86+
transform: rotate(180deg);
87+
}
8488
}
8589
}
8690

app/javascript/components/maps/components/menu/menu-component.jsx

+63-66
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import React, { PureComponent } from 'react';
22
import PropTypes from 'prop-types';
3-
import MediaQuery from 'react-responsive';
4-
import { SCREEN_M } from 'utils/constants';
53
import cx from 'classnames';
64
import isEqual from 'lodash/isEqual';
75
import remove from 'lodash/remove';
@@ -47,10 +45,9 @@ class MapMenu extends PureComponent {
4745
const {
4846
showAnalysis,
4947
setMenuSettings,
50-
setRecentImagerySettings,
5148
location,
52-
recentVisible,
5349
menuSection,
50+
recentActive,
5451
isDesktop
5552
} = this.props;
5653
if (
@@ -63,19 +60,14 @@ class MapMenu extends PureComponent {
6360
showAnalysis();
6461
}
6562

66-
if (!isDesktop && recentVisible) {
67-
setMenuSettings({ menuSection: 'recent-imagery' });
63+
if (!isDesktop && !menuSection && recentActive) {
64+
setMenuSettings({ menuSection: 'recent-imagery-collapsed' });
6865
}
6966

7067
if (
71-
!isDesktop &&
72-
!menuSection &&
73-
!isEqual(menuSection, prevProps.menuSection)
68+
!isEqual(isDesktop, prevProps.isDesktop) ||
69+
(!recentActive && !isEqual(recentActive, prevProps.recentActive))
7470
) {
75-
setRecentImagerySettings({ visible: false });
76-
}
77-
78-
if (!isEqual(isDesktop, prevProps.isDesktop)) {
7971
setMenuSettings({ menuSection: '' });
8072
}
8173
}
@@ -92,63 +84,69 @@ class MapMenu extends PureComponent {
9284
loading,
9385
analysisLoading,
9486
embed,
87+
isDesktop,
9588
...props
9689
} = this.props;
97-
const { Component, label, category, large, icon, ...rest } =
90+
const {
91+
Component,
92+
label,
93+
category,
94+
large,
95+
icon,
96+
collapsed,
97+
openSection,
98+
...rest
99+
} =
98100
activeSection || {};
99101

100102
return (
101-
<MediaQuery minWidth={SCREEN_M}>
102-
{isDesktop => (
103-
<div className={cx('c-map-menu', className)}>
104-
<div
105-
className={cx('menu-tiles', 'map-tour-data-layers', { embed })}
106-
>
107-
{isDesktop &&
108-
!embed && (
109-
<MenuDesktop
110-
className="menu-desktop"
111-
datasetSections={datasetSections}
112-
searchSections={searchSections}
113-
setMenuSettings={setMenuSettings}
114-
/>
115-
)}
116-
{!isDesktop && (
117-
<MenuMobile
118-
sections={mobileSections}
119-
setMenuSettings={setMenuSettings}
120-
/>
121-
)}
122-
</div>
123-
<MenuPanel
124-
className="menu-panel"
125-
label={label}
126-
category={category}
127-
active={!!menuSection}
128-
large={large}
103+
<div className={cx('c-map-menu', className)}>
104+
<div className={cx('menu-tiles', 'map-tour-data-layers', { embed })}>
105+
{isDesktop &&
106+
!embed && (
107+
<MenuDesktop
108+
className="menu-desktop"
109+
datasetSections={datasetSections}
110+
searchSections={searchSections}
111+
setMenuSettings={setMenuSettings}
112+
/>
113+
)}
114+
{!isDesktop && (
115+
<MenuMobile
116+
sections={mobileSections}
117+
setMenuSettings={setMenuSettings}
118+
/>
119+
)}
120+
</div>
121+
<MenuPanel
122+
className="menu-panel"
123+
label={label}
124+
category={category}
125+
active={!!menuSection}
126+
large={large}
127+
isDesktop={isDesktop}
128+
setMenuSettings={setMenuSettings}
129+
loading={loading}
130+
collapsed={collapsed}
131+
onClose={() =>
132+
setMenuSettings({ menuSection: '', datasetCategory: '' })
133+
}
134+
onOpen={() => setMenuSettings({ menuSection: openSection })}
135+
>
136+
{Component && (
137+
<Component
138+
menuSection={menuSection}
129139
isDesktop={isDesktop}
130140
setMenuSettings={setMenuSettings}
131-
loading={loading}
132-
onClose={() =>
133-
setMenuSettings({ menuSection: '', datasetCategory: '' })
134-
}
135-
>
136-
{Component && (
137-
<Component
138-
menuSection={menuSection}
139-
isDesktop={isDesktop}
140-
setMenuSettings={setMenuSettings}
141-
onToggleLayer={this.onToggleLayer}
142-
{...props}
143-
{...menuSection === 'datasets' && {
144-
...rest
145-
}}
146-
/>
147-
)}
148-
</MenuPanel>
149-
</div>
150-
)}
151-
</MediaQuery>
141+
onToggleLayer={this.onToggleLayer}
142+
{...props}
143+
{...menuSection === 'datasets' && {
144+
...rest
145+
}}
146+
/>
147+
)}
148+
</MenuPanel>
149+
</div>
152150
);
153151
}
154152
}
@@ -177,10 +175,9 @@ MapMenu.propTypes = {
177175
datasetCategory: PropTypes.string,
178176
showAnalysis: PropTypes.func,
179177
location: PropTypes.object,
180-
setRecentImagerySettings: PropTypes.func,
181-
recentVisible: PropTypes.bool,
182178
isDesktop: PropTypes.bool,
183-
embed: PropTypes.bool
179+
embed: PropTypes.bool,
180+
recentActive: PropTypes.bool
184181
};
185182

186183
export default MapMenu;

app/javascript/components/maps/components/menu/menu-sections.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,17 @@ export const mobileSections = [
5151
Component: Search
5252
},
5353
{
54-
label: 'Recent Imagery',
54+
label: 'Recent Satellite Imagery',
5555
slug: 'recent-imagery',
56-
icon: searchIcon,
5756
Component: RecentImagerySettings,
5857
hidden: true
58+
},
59+
{
60+
label: 'Recent Satellite Imagery',
61+
slug: 'recent-imagery-collapsed',
62+
openSection: 'recent-imagery',
63+
collapsed: true,
64+
hidden: true
5965
}
6066
];
6167

app/javascript/components/maps/components/menu/menu-selectors.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import flatten from 'lodash/flatten';
55

66
import { getActiveDatasetsFromState } from 'components/maps/map/selectors';
77
import { getEmbed } from 'components/maps/main-map/selectors';
8+
import { getActive } from 'components/maps/main-map/components/recent-imagery/recent-imagery-selectors';
89

9-
import { getVisibility } from 'components/maps/main-map/components/recent-imagery/recent-imagery-selectors';
1010
import { initialState } from './menu-reducers';
1111
import {
1212
datasetsSections,
@@ -270,5 +270,5 @@ export const getMenuProps = createStructuredSelector({
270270
location: getLocation,
271271
loading: getLoading,
272272
analysisLoading: getAnalysisLoading,
273-
recentVisible: getVisibility
273+
recentActive: getActive
274274
});

app/javascript/components/maps/components/menu/menu.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { connect } from 'react-redux';
22
import reducerRegistry from 'app/registry';
33

4-
import { setRecentImagerySettings } from 'components/maps/main-map/components/recent-imagery/recent-imagery-actions';
54
import { setMapSettings } from 'components/maps/map/actions';
65
import * as actions from './menu-actions';
76
import reducers, { initialState } from './menu-reducers';
@@ -16,6 +15,5 @@ reducerRegistry.registerModule('mapMenu', {
1615

1716
export default connect(getMenuProps, {
1817
...actions,
19-
setRecentImagerySettings,
2018
setMapSettings
2119
})(MenuComponent);

app/javascript/components/maps/main-map/component.jsx

+2-67
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@ import React, { PureComponent, Fragment } from 'react';
22
import PropTypes from 'prop-types';
33
import { SCREEN_M } from 'utils/constants';
44
import cx from 'classnames';
5-
import startCase from 'lodash/startCase';
6-
import upperFirst from 'lodash/upperFirst';
75
import MediaQuery from 'react-responsive';
8-
import { track } from 'app/analytics';
96
import { Tooltip } from 'react-tippy';
107

118
import Tip from 'components/ui/tip';
@@ -20,18 +17,6 @@ import MapControlButtons from './components/map-controls';
2017
import './styles.scss';
2118

2219
class MainMapComponent extends PureComponent {
23-
renderDataTooltip = data => (
24-
<div>
25-
{Object.keys(data).map(key => (
26-
<p key={key}>
27-
<strong>{upperFirst(startCase(key).toLowerCase())}</strong>:{' '}
28-
{data[key]}
29-
</p>
30-
))}
31-
<p className="view-more">Click to view more.</p>
32-
</div>
33-
);
34-
3520
renderInfoTooltip = string => (
3621
<div>
3722
<p className="tooltip-info">{string}</p>
@@ -40,16 +25,12 @@ class MainMapComponent extends PureComponent {
4025

4126
render() {
4227
const {
43-
draw,
4428
embed,
4529
hidePanels,
4630
oneClickAnalysis,
47-
tileGeoJSON,
4831
showTooltip,
4932
tooltipData,
50-
setRecentImagerySettings,
5133
handleClickMap,
52-
handleRecentImageryTooltip,
5334
handleShowTooltip
5435
} = this.props;
5536

@@ -74,11 +55,7 @@ class MainMapComponent extends PureComponent {
7455
html={
7556
<Tip
7657
className="map-hover-tooltip"
77-
text={
78-
typeof tooltipData === 'string'
79-
? this.renderInfoTooltip(tooltipData)
80-
: this.renderDataTooltip(tooltipData)
81-
}
58+
text={this.renderInfoTooltip(tooltipData)}
8259
/>
8360
}
8461
position="top"
@@ -88,45 +65,7 @@ class MainMapComponent extends PureComponent {
8865
open={showTooltip}
8966
disabled={!isDesktop}
9067
>
91-
<Map
92-
className="main-map"
93-
customLayers={
94-
tileGeoJSON
95-
? [
96-
{
97-
id: 'recentImagery',
98-
name: 'Geojson',
99-
provider: 'leaflet',
100-
layerConfig: {
101-
type: 'geoJSON',
102-
body: tileGeoJSON,
103-
options: {
104-
style: {
105-
stroke: false,
106-
fillOpacity: 0
107-
}
108-
}
109-
},
110-
interactivity: true,
111-
events: {
112-
click: () => {
113-
if (!draw) {
114-
setRecentImagerySettings({ visible: true });
115-
track('recentImageryOpen');
116-
}
117-
},
118-
mouseover: e => {
119-
if (!draw) handleRecentImageryTooltip(e);
120-
},
121-
mouseout: () => {
122-
if (!draw) handleShowTooltip(false, {});
123-
}
124-
}
125-
}
126-
]
127-
: null
128-
}
129-
/>
68+
<Map className="main-map" />
13069
</Tooltip>
13170
</div>
13271
{isDesktop &&
@@ -164,10 +103,6 @@ MainMapComponent.propTypes = {
164103
oneClickAnalysis: PropTypes.bool,
165104
embed: PropTypes.bool,
166105
hidePanels: PropTypes.bool,
167-
setRecentImagerySettings: PropTypes.func,
168-
handleRecentImageryTooltip: PropTypes.func,
169-
tileGeoJSON: PropTypes.object,
170-
draw: PropTypes.bool,
171106
tooltipData: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
172107
showTooltip: PropTypes.bool
173108
};

0 commit comments

Comments
 (0)