Skip to content

Commit 854a1aa

Browse files
authored
Merge pull request #3375 from Vizzuality/feature/GEE-design-improvements
Feature/gee design improvements
2 parents e8c4201 + 5999327 commit 854a1aa

File tree

15 files changed

+455
-281
lines changed

15 files changed

+455
-281
lines changed

app/assets/javascripts/map/views/MapControlsView.js

+230-193
Large diffs are not rendered by default.

app/javascript/components/button/themes/button-map-control.scss

+7-5
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,17 @@
1212
line-height: 10px;
1313
color: $slate-light;
1414

15+
svg {
16+
fill: $slate;
17+
}
18+
1519
&:hover {
1620
background-color: $grey-light;
1721
}
1822

1923
&.--active {
20-
background-color: $border;
21-
}
22-
23-
svg {
24-
fill: $slate;
24+
svg {
25+
fill: $green-gfw;
26+
}
2527
}
2628
}

app/javascript/components/datepicker/datepicker-styles.scss

+25-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
@import '~styles/settings.scss';
22

3+
$reactDatesInputHeight: rem(50px);
4+
$reactDatesFangHeight: rem(10px);
5+
$datepickerInputHeight: rem(28px);
6+
$datepickerFangHeight: rem(6px);
7+
$datepickerPositionAdjust: rem(8px);
8+
39
.c-datepicker {
410
td {
511
vertical-align: middle;
@@ -8,7 +14,7 @@
814
.SingleDatePickerInput {
915
.DateInput_input {
1016
padding: 0;
11-
height: 28px;
17+
height: $datepickerInputHeight;
1218
border: 1px solid $green-gfw;
1319
border-radius: rem(25px);
1420
font-size: 13px;
@@ -18,6 +24,24 @@
1824
color: $slate;
1925
cursor: pointer;
2026
}
27+
28+
.DateInput_fang {
29+
height: $datepickerFangHeight;
30+
transform: translateY($datepickerInputHeight - $reactDatesInputHeight + ($reactDatesFangHeight - $datepickerFangHeight) - $datepickerPositionAdjust);
31+
}
32+
33+
.DateInput_fangStroke {
34+
stroke: rgba($slate, 0.08);
35+
}
36+
}
37+
38+
.SingleDatePicker_picker {
39+
transform: translateY($datepickerInputHeight - $reactDatesInputHeight - $datepickerPositionAdjust);
40+
}
41+
42+
.DayPicker__withBorder {
43+
box-shadow: $pop-box-shadow;
44+
border-radius: 0;
2145
}
2246

2347
.CalendarDay__selected,

app/javascript/components/dropdown/themes/dropdown-button.scss

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ $dd-button-height: rem(28px);
3030
border-right: none;
3131
transform-origin: 0 0;
3232
transform: rotate(-45deg);
33-
top: calc(#{$dd-button-height} + 6px);
33+
top: calc(#{$dd-button-height} + #{rem(11px)});
3434
left: calc(50% - 14px);
3535
border-bottom-color: #fff;
3636
box-shadow: 1px -2px 3px 0 rgba(85, 85, 85, 0.1);
@@ -39,9 +39,9 @@ $dd-button-height: rem(28px);
3939
}
4040

4141
.menu {
42-
top: calc(#{$dd-button-height} + 5px);
42+
top: calc(#{$dd-button-height} + #{rem(12px)});
4343
border: 0;
44-
box-shadow: 1px 1px 10px 0 rgba(85, 85, 85, 0.25);
44+
box-shadow: $pop-box-shadow;
4545
}
4646
}
4747

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

+1
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ class WidgetHeader extends PureComponent {
110110
{settingsConfig &&
111111
!isEmpty(settingsConfig.options) && (
112112
<Tooltip
113+
className="widget-tooltip-theme"
113114
theme="light"
114115
position="bottom-right"
115116
offset={-95}

app/javascript/components/widget/widget-styles.scss

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@
4949
}
5050

5151
.tippy-popper .tippy-tooltip.widget-tooltip-theme {
52-
box-shadow: 1px 1px 10px 0 rgba($slate, 0.25);
52+
box-shadow: $pop-box-shadow;
5353
}

app/javascript/pages/map/recent-imagery/components/recent-imagery-settings/recent-imagery-settings-component.js

+56-38
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Slider from 'components/slider';
77
import Carousel from 'components/carousel';
88
import Dropdown from 'components/dropdown';
99
import Datepicker from 'components/datepicker';
10+
import NoContent from 'components/no-content';
1011
import RecentImageryThumbnail from 'pages/map/recent-imagery/components/recent-imagery-thumbnail';
1112

1213
import WEEKS from 'pages/map/data/weeks.json';
@@ -84,7 +85,8 @@ class RecentImagerySettings extends PureComponent {
8485
numberOfMonths: 1,
8586
isOutsideRange: d => d.isAfter(moment()),
8687
hideKeyboardShortcutsPanel: true,
87-
noBorder: true
88+
noBorder: true,
89+
readOnly: true
8890
}}
8991
/>
9092
</div>
@@ -113,43 +115,59 @@ class RecentImagerySettings extends PureComponent {
113115
/>
114116
</div>
115117
<div className="c-recent-imagery-settings__thumbnails">
116-
<div className="c-recent-imagery-settings__thumbnails__description">
117-
{this.state.thumbnailsDescription || selectedTile.description}
118-
</div>
119-
<Carousel
120-
settings={{
121-
slidesToShow: thumbsToShow,
122-
infinite: tiles.length > thumbsToShow,
123-
centerMode: tiles.length > thumbsToShow,
124-
centerPadding: '20px',
125-
responsive: null,
126-
draggable: false,
127-
dots: false,
128-
arrows: tiles.length > thumbsToShow
129-
}}
130-
>
131-
{tiles.length &&
132-
tiles.map((tile, i) => (
133-
<div key={`recent-imagery-thumb-${tile.id}`}>
134-
<RecentImageryThumbnail
135-
id={i}
136-
tile={tile}
137-
selected={selectedTileIndex === i}
138-
handleClick={() => {
139-
setRecentImagerySettings({ selectedTileIndex: i });
140-
}}
141-
handleMouseEnter={() => {
142-
this.setState({
143-
thumbnailsDescription: tile.description
144-
});
145-
}}
146-
handleMouseLeave={() => {
147-
this.setState({ thumbnailsDescription: null });
148-
}}
149-
/>
150-
</div>
151-
))}
152-
</Carousel>
118+
{tiles.length >= 2 && (
119+
<div>
120+
<div className="c-recent-imagery-settings__thumbnails__description">
121+
{this.state.thumbnailsDescription || selectedTile.description}
122+
</div>
123+
<Carousel
124+
settings={{
125+
slidesToShow: thumbsToShow,
126+
infinite: tiles.length > thumbsToShow,
127+
centerMode: tiles.length > thumbsToShow,
128+
centerPadding: '20px',
129+
draggable: false,
130+
dots: false,
131+
arrows: tiles.length > thumbsToShow,
132+
responsive: [
133+
{
134+
breakpoint: 620,
135+
settings: {
136+
slidesToShow: thumbsToShow - 2
137+
}
138+
}
139+
]
140+
}}
141+
>
142+
{tiles.map((tile, i) => (
143+
<div key={`recent-imagery-thumb-${tile.id}`}>
144+
<RecentImageryThumbnail
145+
id={i}
146+
tile={tile}
147+
selected={selectedTileIndex === i}
148+
handleClick={() => {
149+
setRecentImagerySettings({ selectedTileIndex: i });
150+
}}
151+
handleMouseEnter={() => {
152+
this.setState({
153+
thumbnailsDescription: tile.description
154+
});
155+
}}
156+
handleMouseLeave={() => {
157+
this.setState({ thumbnailsDescription: null });
158+
}}
159+
/>
160+
</div>
161+
))}
162+
</Carousel>
163+
</div>
164+
)}
165+
{tiles.length < 2 && (
166+
<NoContent
167+
className="c-recent-imagery-settings__empty-thumbnails"
168+
message="We can't find additional images for the selection"
169+
/>
170+
)}
153171
</div>
154172
</div>
155173
);

app/javascript/pages/map/recent-imagery/components/recent-imagery-settings/recent-imagery-settings-styles.scss

+27-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33
.c-recent-imagery-settings {
44
position: absolute;
5-
width: rem(600px);
5+
width: calc(100% - #{rem(20px)});
6+
max-width: rem(600px);
67
padding: rem(25px) 0 rem(22px) 0;
78
transform: translateX(-50%);
89
background-color: $white;
910
box-shadow: 0 1px 3px 0 rgba($black, 0.25);
1011
z-index: 102;
1112

1213
.dragger-icon {
14+
display: none;
1315
position: absolute;
1416
top: rem(9px);
1517
left: rem(10px);
@@ -48,10 +50,10 @@
4850
&__dates {
4951
position: relative;
5052
display: inline-block;
51-
width: 50%;
53+
width: 100%;
5254
padding: 0 rem(20px);
5355
vertical-align: top;
54-
z-index: 2;
56+
z-index: 4;
5557

5658
&__title {
5759
margin-bottom: rem(10px);
@@ -78,8 +80,9 @@
7880
&__clouds {
7981
position: relative;
8082
display: inline-block;
81-
width: 50%;
83+
width: 100%;
8284
padding: 0 rem(20px);
85+
margin-top: rem(11px);
8386
vertical-align: top;
8487

8588
&__title {
@@ -97,6 +100,7 @@
97100
&__thumbnails {
98101
position: relative;
99102
width: 100%;
103+
min-height: rem(146px);
100104
padding-top: rem(14px);
101105
margin-top: rem(20px);
102106
border-top: 1px solid rgba(#9e9e9e, 0.3);
@@ -135,4 +139,23 @@
135139
}
136140
}
137141
}
142+
143+
&__empty-thumbnails {
144+
padding-top: rem(11px);
145+
}
146+
147+
@media screen and (min-width: rem(620px)) {
148+
.dragger-icon {
149+
display: block;
150+
}
151+
152+
&__dates {
153+
width: 50%;
154+
}
155+
156+
&__clouds {
157+
width: 50%;
158+
margin-top: 0;
159+
}
160+
}
138161
}

app/javascript/pages/map/recent-imagery/components/recent-imagery-thumbnail/recent-imagery-thumbnail-styles.scss

+10-2
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,21 @@
1111
cursor: pointer;
1212
outline: none;
1313

14-
&--selected::before {
14+
&::before {
1515
content: '';
1616
position: absolute;
1717
top: 0;
1818
left: 0;
1919
width: 100%;
2020
height: 100%;
21-
border: 4px solid $green-gfw;
21+
border: 4px solid transparent;
22+
}
23+
24+
&:hover::before {
25+
border-color: $slate;
26+
}
27+
28+
&--selected::before {
29+
border-color: $green-gfw !important;
2230
}
2331
}

app/javascript/pages/map/recent-imagery/recent-imagery-actions.js

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import findIndex from 'lodash/findIndex';
66
import { getRecentTiles, getTiles, getThumbs } from 'services/recent-imagery';
77

88
const toogleRecentImagery = createAction('toogleRecentImagery');
9+
const setTimelineFlag = createAction('setTimelineFlag');
910
const setRecentImageryData = createAction('setRecentImageryData');
1011
const setRecentImageryDataStatus = createAction('setRecentImageryDataStatus');
1112
const setRecentImagerySettings = createAction('setRecentImagerySettings');
@@ -125,6 +126,7 @@ const resetData = createThunkAction('resetData', () => dispatch => {
125126

126127
export default {
127128
toogleRecentImagery,
129+
setTimelineFlag,
128130
setRecentImageryData,
129131
setRecentImageryDataStatus,
130132
setRecentImagerySettings,

app/javascript/pages/map/recent-imagery/recent-imagery-component.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class RecentImagery extends PureComponent {
1313
const {
1414
active,
1515
showSettings,
16+
isTimelineOpen,
1617
tile,
1718
allTiles,
1819
settings,
@@ -30,7 +31,9 @@ class RecentImagery extends PureComponent {
3031
}`}
3132
>
3233
<Button
33-
className="c-recent-imagery__button"
34+
className={`c-recent-imagery__button ${
35+
isTimelineOpen ? 'c-recent-imagery__button--timeline-open' : ''
36+
}`}
3437
theme="theme-button-map-control"
3538
active={active}
3639
onClick={() => toogleRecentImagery()}
@@ -57,6 +60,7 @@ class RecentImagery extends PureComponent {
5760
RecentImagery.propTypes = {
5861
active: PropTypes.bool.isRequired,
5962
showSettings: PropTypes.bool.isRequired,
63+
isTimelineOpen: PropTypes.bool.isRequired,
6064
tile: PropTypes.object,
6165
allTiles: PropTypes.array.isRequired,
6266
settings: PropTypes.object.isRequired,

app/javascript/pages/map/recent-imagery/recent-imagery-reducers.js

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export const initialState = {
22
active: false,
33
showSettings: false,
4+
isTimelineOpen: false,
45
data: {},
56
dataStatus: {
67
tilesPerRequest: 6,
@@ -28,6 +29,11 @@ const toogleRecentImagery = state => ({
2829
active: !state.active
2930
});
3031

32+
const setTimelineFlag = (state, { payload }) => ({
33+
...state,
34+
isTimelineOpen: payload
35+
});
36+
3137
const setRecentImageryData = (state, { payload }) => ({
3238
...state,
3339
data: payload.data ? payload.data : state.data,
@@ -60,6 +66,7 @@ const setRecentImageryShowSettings = (state, { payload }) => ({
6066

6167
export default {
6268
toogleRecentImagery,
69+
setTimelineFlag,
6370
setRecentImageryData,
6471
setRecentImageryDataStatus,
6572
setRecentImagerySettings,

0 commit comments

Comments
 (0)