Skip to content

Commit 1256cc7

Browse files
authored
Merge pull request #3690 from Vizzuality/fix/recent-imagery-tile-updates
Fix/issues with recent imagery fetches
2 parents 14f99b5 + 610158e commit 1256cc7

File tree

4 files changed

+47
-30
lines changed

4 files changed

+47
-30
lines changed

app/javascript/components/maps/main-map/components/recent-imagery/recent-imagery-actions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export const getRecentImageryData = createThunkAction(
6666
})
6767
.catch(error => {
6868
dispatch(setRecentImageryLoading(false));
69-
console.info(error && error.response);
69+
console.info(error);
7070
});
7171
}
7272
}

app/javascript/components/maps/main-map/components/recent-imagery/recent-imagery-selectors.js

+30-21
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { createSelector, createStructuredSelector } from 'reselect';
22
import isEmpty from 'lodash/isEmpty';
33
import sortBy from 'lodash/sortBy';
44
import moment from 'moment';
5+
import { checkLocationInsideBbox } from 'utils/geoms';
56

67
import { initialState as mapInitialState } from 'components/maps/map/reducers';
78
import { initialState } from './recent-imagery-reducers';
@@ -22,14 +23,19 @@ const getMapUrlState = state =>
2223
state.location && state.location.query && state.location.query.map;
2324

2425
export const getMapSettings = createSelector([getMapUrlState], urlState => ({
25-
...mapInitialState.settings,
26+
...(mapInitialState && {
27+
...mapInitialState.settings
28+
}),
2629
...urlState
2730
}));
2831

2932
export const getRecentImagerySettings = createSelector(
3033
[getRecentUrlState],
3134
urlState => ({
3235
...initialState.settings,
36+
...(initialState && {
37+
...initialState.settings
38+
}),
3339
...urlState
3440
})
3541
);
@@ -62,43 +68,38 @@ export const getActive = createSelector(
6268
}
6369
);
6470

65-
export const getFilteredData = createSelector(
71+
export const getFilteredTiles = createSelector(
6672
[getData, getRecentImagerySettings],
6773
(data, settings) => {
6874
if (isEmpty(data)) return null;
6975
const { clouds } = settings;
7076

71-
return data
72-
.filter(item => Math.round(item.cloud_score) <= clouds)
73-
.map(item => item);
77+
return data.filter(item => item.cloud_score <= clouds).map(t => ({
78+
id: t.source,
79+
url: t.tile_url,
80+
thumbnail: t.thumbnail_url,
81+
cloudScore: t.cloud_score,
82+
dateTime: t.date_time,
83+
instrument: t.instrument,
84+
bbox: t.bbox
85+
}));
7486
}
7587
);
7688

77-
export const getTiles = createSelector([getFilteredData], data => {
89+
export const getTiles = createSelector([getFilteredTiles], data => {
7890
if (!data || isEmpty(data)) return [];
79-
80-
return sortBy(
81-
data.map(item => ({
82-
id: item.source,
83-
url: item.tile_url,
84-
thumbnail: item.thumbnail_url,
85-
cloudScore: item.cloud_score,
86-
dateTime: item.date_time,
87-
instrument: item.instrument,
88-
bbox: item.bbox
89-
})),
90-
d => new Date(d.dateTime)
91-
).reverse();
91+
return sortBy(data, d => new Date(d.dateTime)).reverse();
9292
});
9393

9494
export const getActiveTile = createSelector(
95-
[getTiles, getRecentImagerySettings],
95+
[getFilteredTiles, getRecentImagerySettings],
9696
(tiles, settings) => {
9797
if (isEmpty(tiles)) return null;
9898
const { selected, selectedIndex } = settings;
9999
const selectedTileById = tiles.find(t => t.id === selected);
100100
if (selectedTileById) return selectedTileById;
101101
const selectedTileByIndex = selectedIndex && tiles[selectedIndex];
102+
102103
return selectedTileByIndex || tiles[0];
103104
}
104105
);
@@ -126,6 +127,14 @@ export const getTileBounds = createSelector([getActiveTile], activeTile => {
126127
return activeTile.bbox.geometry.coordinates;
127128
});
128129

130+
export const getPositionInsideTile = createSelector(
131+
[getTileBounds, getPosition],
132+
(bounds, position) =>
133+
(bounds
134+
? checkLocationInsideBbox([position.lat, position.lng], bounds)
135+
: true)
136+
);
137+
129138
export const getSources = createSelector(
130139
[getData, getDataStatus],
131140
(data, dataStatus) => {
@@ -174,7 +183,7 @@ export const getRecentImageryProps = createStructuredSelector({
174183
dataStatus: getDataStatus,
175184
tiles: getTiles,
176185
activeTile: getActiveTile,
177-
bounds: getTileBounds,
186+
positionInsideTile: getPositionInsideTile,
178187
location: getLocation,
179188
// url props
180189
datasets: getActiveDatasetsFromState,

app/javascript/components/maps/main-map/components/recent-imagery/recent-imagery.js

+12-8
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { connect } from 'react-redux';
33
import PropTypes from 'prop-types';
44
import isEqual from 'lodash/isEqual';
55
import debounce from 'lodash/debounce';
6-
import { checkLocationInsideBbox } from 'utils/geoms';
76
import { CancelToken } from 'axios';
87
import reducerRegistry from 'app/registry';
98

@@ -48,12 +47,12 @@ class RecentImageryContainer extends PureComponent {
4847
active,
4948
dataStatus,
5049
activeTile,
51-
bounds,
5250
sources,
5351
dates,
5452
settings,
5553
getRecentImageryData,
5654
getMoreTiles,
55+
positionInsideTile,
5756
position,
5857
loadingMoreTiles,
5958
resetRecentImageryData
@@ -63,15 +62,13 @@ class RecentImageryContainer extends PureComponent {
6362
activeTile &&
6463
!!activeTile.url &&
6564
(!prevProps.activeTile || activeTile.url !== prevProps.activeTile.url);
66-
const positionInsideTile = bounds
67-
? checkLocationInsideBbox([position.lat, position.lng], bounds)
68-
: true;
6965

7066
// get data if activated or new props
7167
if (
7268
active &&
7369
(active !== prevProps.active ||
74-
!positionInsideTile ||
70+
(!positionInsideTile &&
71+
!isEqual(positionInsideTile, prevProps.positionInsideTile)) ||
7572
!isEqual(settings.date, prevProps.settings.date) ||
7673
!isEqual(settings.weeks, prevProps.settings.weeks) ||
7774
!isEqual(settings.bands, prevProps.settings.bands))
@@ -90,8 +87,15 @@ class RecentImageryContainer extends PureComponent {
9087
token: this.getDataSource.token
9188
});
9289
}
90+
9391
// get the rest of the tiles
94-
if (dataStatus && !dataStatus.haveAllData && !loadingMoreTiles && active) {
92+
if (
93+
dataStatus &&
94+
!dataStatus.haveAllData &&
95+
!loadingMoreTiles &&
96+
active &&
97+
activeTile
98+
) {
9599
getMoreTiles({
96100
sources,
97101
dataStatus,
@@ -159,7 +163,7 @@ RecentImageryContainer.propTypes = {
159163
active: PropTypes.bool,
160164
dataStatus: PropTypes.object,
161165
activeTile: PropTypes.object,
162-
bounds: PropTypes.array,
166+
positionInsideTile: PropTypes.bool,
163167
sources: PropTypes.array,
164168
dates: PropTypes.object,
165169
settings: PropTypes.object,

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

+4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
font-size: 12px;
1313
cursor: pointer;
1414
color: $slate;
15+
16+
&:focus {
17+
outline: none;
18+
}
1519
}
1620

1721
.react-datepicker__day-name {

0 commit comments

Comments
 (0)