diff --git a/x-pack/plugins/ml/public/application/explorer/explorer.js b/x-pack/plugins/ml/public/application/explorer/explorer.js
index ee05387633940..cea1159ebc14a 100644
--- a/x-pack/plugins/ml/public/application/explorer/explorer.js
+++ b/x-pack/plugins/ml/public/application/explorer/explorer.js
@@ -269,7 +269,6 @@ export class Explorer extends React.Component {
const timefilter = getTimefilter();
const bounds = timefilter.getActiveBounds();
const selectedJobIds = Array.isArray(selectedJobs) ? selectedJobs.map((job) => job.id) : [];
-
return (
)}
+
();
+ const id = useMemo(() => htmlIdGenerator()(), []);
const embeddableRoot: React.RefObject = useRef(null);
const layerList = useRef([]);
@@ -35,10 +38,14 @@ export function EmbeddedMapComponent({ seriesConfig, severity }: Props) {
services: { embeddable: embeddablePlugin, maps: mapsPlugin },
} = useMlKibana();
- const factory = embeddablePlugin.getEmbeddableFactory(MAP_SAVED_OBJECT_TYPE);
+ const factory:
+ | EmbeddableFactory
+ | undefined = embeddablePlugin
+ ? embeddablePlugin.getEmbeddableFactory(MAP_SAVED_OBJECT_TYPE)
+ : undefined;
const input: MapEmbeddableInput = {
- id: uuid.v4(),
+ id,
attributes: { title: '' },
filters: [],
hidePanelTitles: true,
@@ -83,7 +90,7 @@ export function EmbeddedMapComponent({ seriesConfig, severity }: Props) {
console.error('Map embeddable not found.');
return;
}
- const embeddableObject: any = await factory.create({
+ const embeddableObject = await factory.create({
...input,
title: 'Explorer map',
});
diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container.js
index 103aad865d85b..ca65e2249cf6e 100644
--- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container.js
+++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container.js
@@ -31,6 +31,7 @@ import { FormattedMessage } from '@kbn/i18n/react';
import { MlTooltipComponent } from '../../components/chart_tooltip';
import { withKibana } from '../../../../../../../src/plugins/kibana_react/public';
import { ML_APP_URL_GENERATOR } from '../../../../common/constants/ml_url_generator';
+import { ML_JOB_AGGREGATION } from '../../../../common/constants/aggregation_types';
import { addItemToRecentlyAccessed } from '../../util/recently_accessed';
import { ExplorerChartsErrorCallOuts } from './explorer_charts_error_callouts';
@@ -58,7 +59,6 @@ function getChartId(series) {
function ExplorerChartContainer({
series,
severity,
- showSingleMetricViewerLink,
tooManyBuckets,
wrapLabel,
mlUrlGenerator,
@@ -69,8 +69,8 @@ function ExplorerChartContainer({
useEffect(() => {
let isCancelled = false;
const generateLink = async () => {
- const singleMetricViewerLink = await getExploreSeriesLink(mlUrlGenerator, series);
- if (!isCancelled && showSingleMetricViewerLink === true) {
+ if (!isCancelled && series.functionDescription !== ML_JOB_AGGREGATION.LAT_LONG) {
+ const singleMetricViewerLink = await getExploreSeriesLink(mlUrlGenerator, series);
setExplorerSeriesLink(singleMetricViewerLink);
}
};
diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.js
index 29f740bc59f27..97b19d40de477 100644
--- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.js
+++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.js
@@ -37,7 +37,6 @@ export function getDefaultChartsData() {
chartsPerRow: 1,
errorMessages: undefined,
seriesToPlot: [],
- showSingleMetricViewerLink: true,
// default values, will update on every re-render
tooManyBuckets: false,
timeFieldName: 'timestamp',
diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_utils.js b/x-pack/plugins/ml/public/application/explorer/explorer_utils.js
index f6889c9a6f24c..e5d400599036d 100644
--- a/x-pack/plugins/ml/public/application/explorer/explorer_utils.js
+++ b/x-pack/plugins/ml/public/application/explorer/explorer_utils.js
@@ -17,6 +17,7 @@ import {
} from '../../../common/constants/search';
import { getEntityFieldList } from '../../../common/util/anomaly_utils';
import { extractErrorMessage } from '../../../common/util/errors';
+import { ML_JOB_AGGREGATION } from '../../../common/constants/aggregation_types';
import {
isSourceDataChartableForDetector,
isModelPlotChartableForDetector,
@@ -511,7 +512,9 @@ export async function loadAnomaliesTableData(
const entityFields = getEntityFieldList(anomaly.source);
isChartable = isModelPlotEnabled(job, anomaly.detectorIndex, entityFields);
}
- anomaly.isTimeSeriesViewRecord = isChartable;
+
+ anomaly.isTimeSeriesViewRecord =
+ isChartable && anomaly.source?.function !== ML_JOB_AGGREGATION.LAT_LONG;
if (mlJobService.customUrlsByJob[jobId] !== undefined) {
anomaly.customUrls = mlJobService.customUrlsByJob[jobId];
diff --git a/x-pack/plugins/ml/public/application/util/chart_config_builder.js b/x-pack/plugins/ml/public/application/util/chart_config_builder.js
index a30280f1220c0..a306211defc87 100644
--- a/x-pack/plugins/ml/public/application/util/chart_config_builder.js
+++ b/x-pack/plugins/ml/public/application/util/chart_config_builder.js
@@ -24,7 +24,10 @@ export function buildConfigFromDetector(job, detectorIndex) {
const config = {
jobId: job.job_id,
detectorIndex: detectorIndex,
- metricFunction: mlFunctionToESAggregation(detector.function),
+ metricFunction:
+ detector.function === ML_JOB_AGGREGATION.LAT_LONG
+ ? ML_JOB_AGGREGATION.LAT_LONG
+ : mlFunctionToESAggregation(detector.function),
timeField: job.data_description.time_field,
interval: job.analysis_config.bucket_span,
datafeedConfig: job.datafeed_config,