Skip to content

Commit 12afcba

Browse files
Merge branch 'master' into ml-migrate-router
2 parents dbce65d + d8d8306 commit 12afcba

13 files changed

Lines changed: 204 additions & 301 deletions

File tree

x-pack/plugins/maps/public/actions/map_actions.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ import { Filter, Query, TimeRange } from 'src/plugins/data/public';
1414
import { MapStoreState } from '../reducers/store';
1515
import {
1616
getDataFilters,
17+
getFilters,
1718
getMapSettings,
1819
getWaitingForMapReadyLayerListRaw,
1920
getQuery,
21+
getTimeFilters,
2022
} from '../selectors/map_selectors';
2123
import {
2224
CLEAR_GOTO,
@@ -217,13 +219,13 @@ export function setQuery({
217219

218220
dispatch({
219221
type: SET_QUERY,
220-
timeFilters,
222+
timeFilters: timeFilters ? timeFilters : getTimeFilters(getState()),
221223
query: {
222-
...query,
224+
...(query ? query : getQuery(getState())),
223225
// ensure query changes to trigger re-fetch when "Refresh" clicked
224226
queryLastTriggeredAt: refresh ? generateQueryTimestamp() : prevTriggeredAt,
225227
},
226-
filters,
228+
filters: filters ? filters : getFilters(getState()),
227229
});
228230

229231
if (getMapSettings(getState()).autoFitToDataBounds) {

x-pack/plugins/maps/public/embeddable/map_embeddable_factory.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export class MapEmbeddableFactory implements EmbeddableFactoryDefinition {
4848
const {
4949
addLayerWithoutDataSync,
5050
createMapStore,
51-
getIndexPatternService,
51+
getIndexPatternsFromIds,
5252
getQueryableUniqueIndexPatternIds,
5353
} = await lazyLoadMapModules();
5454
const store = createMapStore();
@@ -66,17 +66,7 @@ export class MapEmbeddableFactory implements EmbeddableFactoryDefinition {
6666
);
6767
}
6868

69-
const promises = queryableIndexPatternIds.map(async (indexPatternId) => {
70-
try {
71-
// @ts-ignore
72-
return await getIndexPatternService().get(indexPatternId);
73-
} catch (error) {
74-
// Unable to load index pattern, better to not throw error so map embeddable can render
75-
// Error will be surfaced by map embeddable since it too will be unable to locate the index pattern
76-
return null;
77-
}
78-
});
79-
const indexPatterns = await Promise.all(promises);
69+
const indexPatterns = await getIndexPatternsFromIds(queryableIndexPatternIds);
8070
return _.compact(indexPatterns) as IIndexPattern[];
8171
}
8272

x-pack/plugins/maps/public/index_pattern_util.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,17 @@ export function getGeoTileAggNotSupportedReason(field: IFieldType): string | nul
3030
export async function getIndexPatternsFromIds(
3131
indexPatternIds: string[] = []
3232
): Promise<IndexPattern[]> {
33-
const promises: Array<Promise<IndexPattern>> = [];
34-
indexPatternIds.forEach((id) => {
35-
promises.push(getIndexPatternService().get(id));
33+
const promises: IndexPattern[] = [];
34+
indexPatternIds.forEach(async (indexPatternId) => {
35+
try {
36+
// @ts-ignore
37+
promises.push(getIndexPatternService().get(indexPatternId));
38+
} catch (error) {
39+
// Unable to load index pattern, better to not throw error so map can render
40+
// Error will be surfaced by layer since it too will be unable to locate the index pattern
41+
return null;
42+
}
3643
});
37-
3844
return await Promise.all(promises);
3945
}
4046

x-pack/plugins/maps/public/lazy_load_bundle/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { AnyAction } from 'redux';
88
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
99
import { IndexPatternsService } from 'src/plugins/data/public/index_patterns';
1010
import { ReactElement } from 'react';
11+
import { IndexPattern } from 'src/plugins/data/public';
1112
import { Embeddable, IContainer } from '../../../../../src/plugins/embeddable/public';
1213
import { LayerDescriptor } from '../../common/descriptor_types';
1314
import { MapStore, MapStoreState } from '../reducers/store';
@@ -44,8 +45,9 @@ interface LazyLoadedMapModules {
4445
indexPatternId: string,
4546
indexPatternTitle: string
4647
) => LayerDescriptor[];
47-
registerLayerWizard(layerWizard: LayerWizard): void;
48+
registerLayerWizard: (layerWizard: LayerWizard) => void;
4849
registerSource(entry: SourceRegistryEntry): void;
50+
getIndexPatternsFromIds: (indexPatternIds: string[]) => Promise<IndexPattern[]>;
4951
}
5052

5153
export async function lazyLoadMapModules(): Promise<LazyLoadedMapModules> {
@@ -71,6 +73,7 @@ export async function lazyLoadMapModules(): Promise<LazyLoadedMapModules> {
7173
createSecurityLayerDescriptors,
7274
registerLayerWizard,
7375
registerSource,
76+
getIndexPatternsFromIds,
7477
} = await import('./lazy');
7578

7679
resolve({
@@ -88,6 +91,7 @@ export async function lazyLoadMapModules(): Promise<LazyLoadedMapModules> {
8891
createSecurityLayerDescriptors,
8992
registerLayerWizard,
9093
registerSource,
94+
getIndexPatternsFromIds,
9195
});
9296
});
9397
return loadModulesPromise;

x-pack/plugins/maps/public/lazy_load_bundle/lazy/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ export * from '../../routing/maps_router';
2121
export * from '../../classes/layers/solution_layers/security';
2222
export { registerLayerWizard } from '../../classes/layers/layer_wizard_registry';
2323
export { registerSource } from '../../classes/sources/source_registry';
24+
export { getIndexPatternsFromIds } from '../../index_pattern_util';

x-pack/plugins/maps/public/routing/bootstrap/get_initial_layers.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
* or more contributor license agreements. Licensed under the Elastic License;
44
* you may not use this file except in compliance with the Elastic License.
55
*/
6+
67
import _ from 'lodash';
8+
import rison from 'rison-node';
9+
import { i18n } from '@kbn/i18n';
710
// Import each layer type, even those not used, to init in registry
811
import '../../classes/sources/wms_source';
912
import '../../classes/sources/ems_file_source';
@@ -16,7 +19,7 @@ import { KibanaTilemapSource } from '../../classes/sources/kibana_tilemap_source
1619
import { TileLayer } from '../../classes/layers/tile_layer/tile_layer';
1720
import { EMSTMSSource } from '../../classes/sources/ems_tms_source';
1821
import { VectorTileLayer } from '../../classes/layers/vector_tile_layer/vector_tile_layer';
19-
import { getIsEmsEnabled } from '../../kibana_services';
22+
import { getIsEmsEnabled, getToasts } from '../../kibana_services';
2023
import { getKibanaTileMap } from '../../meta';
2124

2225
export function getInitialLayers(layerListJSON, initialLayers = []) {
@@ -41,3 +44,33 @@ export function getInitialLayers(layerListJSON, initialLayers = []) {
4144

4245
return initialLayers;
4346
}
47+
48+
export function getInitialLayersFromUrlParam() {
49+
const locationSplit = window.location.href.split('?');
50+
if (locationSplit.length <= 1) {
51+
return [];
52+
}
53+
const mapAppParams = new URLSearchParams(locationSplit[1]);
54+
if (!mapAppParams.has('initialLayers')) {
55+
return [];
56+
}
57+
58+
try {
59+
let mapInitLayers = mapAppParams.get('initialLayers');
60+
if (mapInitLayers[mapInitLayers.length - 1] === '#') {
61+
mapInitLayers = mapInitLayers.substr(0, mapInitLayers.length - 1);
62+
}
63+
return rison.decode_array(mapInitLayers);
64+
} catch (e) {
65+
getToasts().addWarning({
66+
title: i18n.translate('xpack.maps.initialLayers.unableToParseTitle', {
67+
defaultMessage: `Initial layers not added to map`,
68+
}),
69+
text: i18n.translate('xpack.maps.initialLayers.unableToParseMessage', {
70+
defaultMessage: `Unable to parse contents of 'initialLayers' parameter. Error: {errorMsg}`,
71+
values: { errorMsg: e.message },
72+
}),
73+
});
74+
return [];
75+
}
76+
}

x-pack/plugins/maps/public/routing/page_elements/top_nav_menu/index.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,27 @@ import {
1010
enableFullScreen,
1111
openMapSettings,
1212
removePreviewLayers,
13-
setRefreshConfig,
1413
setSelectedLayer,
1514
updateFlyout,
1615
} from '../../../actions';
1716
import { FLYOUT_STATE } from '../../../reducers/ui';
1817
import { getInspectorAdapters } from '../../../reducers/non_serializable_instances';
1918
import { getFlyoutDisplay } from '../../../selectors/ui_selectors';
20-
import { hasDirtyState } from '../../../selectors/map_selectors';
19+
import {
20+
getQuery,
21+
getRefreshConfig,
22+
getTimeFilters,
23+
hasDirtyState,
24+
} from '../../../selectors/map_selectors';
2125

2226
function mapStateToProps(state = {}) {
2327
return {
2428
isOpenSettingsDisabled: getFlyoutDisplay(state) !== FLYOUT_STATE.NONE,
2529
inspectorAdapters: getInspectorAdapters(state),
2630
isSaveDisabled: hasDirtyState(state),
31+
query: getQuery(state),
32+
refreshConfig: getRefreshConfig(state),
33+
timeFilters: getTimeFilters(state),
2734
};
2835
}
2936

@@ -34,7 +41,6 @@ function mapDispatchToProps(dispatch) {
3441
dispatch(updateFlyout(FLYOUT_STATE.NONE));
3542
dispatch(removePreviewLayers());
3643
},
37-
setRefreshStoreConfig: (refreshConfig) => dispatch(setRefreshConfig(refreshConfig)),
3844
enableFullScreen: () => dispatch(enableFullScreen()),
3945
openMapSettings: () => dispatch(openMapSettings()),
4046
};

x-pack/plugins/maps/public/routing/page_elements/top_nav_menu/top_nav_menu.js

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,16 @@ export function MapsTopNavMenu({
2929
onQuerySaved,
3030
onSavedQueryUpdated,
3131
savedQuery,
32-
time,
32+
timeFilters,
3333
refreshConfig,
34-
setRefreshConfig,
35-
setRefreshStoreConfig,
34+
onRefreshConfigChange,
3635
indexPatterns,
37-
updateFiltersAndDispatch,
36+
onFiltersChange,
3837
isSaveDisabled,
3938
closeFlyout,
4039
enableFullScreen,
4140
openMapSettings,
4241
inspectorAdapters,
43-
syncAppAndGlobalState,
4442
setBreadcrumbs,
4543
isOpenSettingsDisabled,
4644
}) {
@@ -75,31 +73,20 @@ export function MapsTopNavMenu({
7573
});
7674
};
7775

78-
const onRefreshChange = function ({ isPaused, refreshInterval }) {
79-
const newRefreshConfig = {
80-
isPaused,
81-
interval: isNaN(refreshInterval) ? refreshConfig.interval : refreshInterval,
82-
};
83-
setRefreshConfig(newRefreshConfig, () => {
84-
setRefreshStoreConfig(newRefreshConfig);
85-
syncAppAndGlobalState();
86-
});
87-
};
88-
8976
return (
9077
<TopNavMenu
9178
appName="maps"
9279
config={config}
93-
indexPatterns={indexPatterns || []}
80+
indexPatterns={indexPatterns}
9481
filters={filterManager.getFilters()}
9582
query={query}
9683
onQuerySubmit={submitQuery}
97-
onFiltersUpdated={updateFiltersAndDispatch}
98-
dateRangeFrom={time.from}
99-
dateRangeTo={time.to}
84+
onFiltersUpdated={onFiltersChange}
85+
dateRangeFrom={timeFilters.from}
86+
dateRangeTo={timeFilters.to}
10087
isRefreshPaused={refreshConfig.isPaused}
10188
refreshInterval={refreshConfig.interval}
102-
onRefreshChange={onRefreshChange}
89+
onRefreshChange={onRefreshConfigChange}
10390
showSearchBar={true}
10491
showFilterBar={true}
10592
showDatePicker={true}

x-pack/plugins/maps/public/routing/routes/maps_app/index.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import { MapsAppView } from './maps_app_view';
99
import { getFlyoutDisplay, getIsFullScreen } from '../../../selectors/ui_selectors';
1010
import {
1111
getFilters,
12+
getQuery,
1213
getQueryableUniqueIndexPatternIds,
1314
getRefreshConfig,
15+
getTimeFilters,
1416
hasUnsavedChanges,
1517
} from '../../../selectors/map_selectors';
1618
import {
@@ -38,17 +40,19 @@ function mapStateToProps(state = {}) {
3840
hasUnsavedChanges: (savedMap, initialLayerListConfig) => {
3941
return hasUnsavedChanges(state, savedMap, initialLayerListConfig);
4042
},
43+
query: getQuery(state),
44+
timeFilters: getTimeFilters(state),
4145
};
4246
}
4347

4448
function mapDispatchToProps(dispatch) {
4549
return {
46-
dispatchSetQuery: (refresh, filters, query, time) => {
50+
dispatchSetQuery: ({ refresh, filters, query, timeFilters }) => {
4751
dispatch(
4852
setQuery({
4953
filters,
5054
query,
51-
timeFilters: time,
55+
timeFilters,
5256
refresh,
5357
})
5458
);

0 commit comments

Comments
 (0)