diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx
index ff9cb9862e0b6..67118869b22fd 100644
--- a/api_docs/actions.mdx
+++ b/api_docs/actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions
title: "actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the actions plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions']
---
import actionsObj from './actions.devdocs.json';
diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx
index 4e4ed223b6388..d2df3c33f33d8 100644
--- a/api_docs/advanced_settings.mdx
+++ b/api_docs/advanced_settings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings
title: "advancedSettings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the advancedSettings plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings']
---
import advancedSettingsObj from './advanced_settings.devdocs.json';
diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx
index 272fd61537d4c..e4d8cceb0fc5f 100644
--- a/api_docs/aiops.mdx
+++ b/api_docs/aiops.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops
title: "aiops"
image: https://source.unsplash.com/400x175/?github
description: API docs for the aiops plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops']
---
import aiopsObj from './aiops.devdocs.json';
diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx
index e054a213dc44a..3f7b1aa0aafc5 100644
--- a/api_docs/alerting.mdx
+++ b/api_docs/alerting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting
title: "alerting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the alerting plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting']
---
import alertingObj from './alerting.devdocs.json';
diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx
index faccc12da0f5a..2ad72d54cc477 100644
--- a/api_docs/apm.mdx
+++ b/api_docs/apm.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm
title: "apm"
image: https://source.unsplash.com/400x175/?github
description: API docs for the apm plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm']
---
import apmObj from './apm.devdocs.json';
diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx
index 35bc93cb3d5a3..ad6cc6ca1781e 100644
--- a/api_docs/asset_manager.mdx
+++ b/api_docs/asset_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager
title: "assetManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the assetManager plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager']
---
import assetManagerObj from './asset_manager.devdocs.json';
diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx
index 1b7079a6f82eb..1dec30a15ab43 100644
--- a/api_docs/banners.mdx
+++ b/api_docs/banners.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners
title: "banners"
image: https://source.unsplash.com/400x175/?github
description: API docs for the banners plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners']
---
import bannersObj from './banners.devdocs.json';
diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx
index 82947be5b71ba..92d7910e021a4 100644
--- a/api_docs/bfetch.mdx
+++ b/api_docs/bfetch.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch
title: "bfetch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the bfetch plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch']
---
import bfetchObj from './bfetch.devdocs.json';
diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx
index 7bf979eedf05e..66f7558acde09 100644
--- a/api_docs/canvas.mdx
+++ b/api_docs/canvas.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas
title: "canvas"
image: https://source.unsplash.com/400x175/?github
description: API docs for the canvas plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas']
---
import canvasObj from './canvas.devdocs.json';
diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx
index a112bc0380e37..08f5869483128 100644
--- a/api_docs/cases.mdx
+++ b/api_docs/cases.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases
title: "cases"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cases plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases']
---
import casesObj from './cases.devdocs.json';
diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx
index b96c6c745f4ce..3501673f5eec4 100644
--- a/api_docs/charts.mdx
+++ b/api_docs/charts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts
title: "charts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the charts plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts']
---
import chartsObj from './charts.devdocs.json';
diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx
index 713ccfd0576bc..2db306ed4a778 100644
--- a/api_docs/cloud.mdx
+++ b/api_docs/cloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud
title: "cloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloud plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud']
---
import cloudObj from './cloud.devdocs.json';
diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx
index 566d0de5e64f7..4c128bac9d5f9 100644
--- a/api_docs/cloud_chat.mdx
+++ b/api_docs/cloud_chat.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat
title: "cloudChat"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudChat plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat']
---
import cloudChatObj from './cloud_chat.devdocs.json';
diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx
index d24b67ed41ba5..3c3b1943f65ac 100644
--- a/api_docs/cloud_data_migration.mdx
+++ b/api_docs/cloud_data_migration.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration
title: "cloudDataMigration"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDataMigration plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration']
---
import cloudDataMigrationObj from './cloud_data_migration.devdocs.json';
diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx
index 35cb8b5d71bf2..6d50d20de33ce 100644
--- a/api_docs/cloud_defend.mdx
+++ b/api_docs/cloud_defend.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend
title: "cloudDefend"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDefend plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend']
---
import cloudDefendObj from './cloud_defend.devdocs.json';
diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx
index 6a3624c70c1a9..7f69ce8b2588a 100644
--- a/api_docs/cloud_experiments.mdx
+++ b/api_docs/cloud_experiments.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments
title: "cloudExperiments"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudExperiments plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments']
---
import cloudExperimentsObj from './cloud_experiments.devdocs.json';
diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx
index bd6a6e3997787..093b6de6ef1ee 100644
--- a/api_docs/cloud_security_posture.mdx
+++ b/api_docs/cloud_security_posture.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture
title: "cloudSecurityPosture"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudSecurityPosture plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture']
---
import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json';
diff --git a/api_docs/console.mdx b/api_docs/console.mdx
index ebbb9b17e3c67..d413f6c6b038b 100644
--- a/api_docs/console.mdx
+++ b/api_docs/console.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console
title: "console"
image: https://source.unsplash.com/400x175/?github
description: API docs for the console plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console']
---
import consoleObj from './console.devdocs.json';
diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx
index 55106ff8bb61e..bcd4523f32e2a 100644
--- a/api_docs/content_management.mdx
+++ b/api_docs/content_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement
title: "contentManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the contentManagement plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement']
---
import contentManagementObj from './content_management.devdocs.json';
diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx
index 7dc060d1661c7..70c4313f09c75 100644
--- a/api_docs/controls.mdx
+++ b/api_docs/controls.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls
title: "controls"
image: https://source.unsplash.com/400x175/?github
description: API docs for the controls plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls']
---
import controlsObj from './controls.devdocs.json';
diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx
index 748787f8ed854..84e90c76098da 100644
--- a/api_docs/custom_integrations.mdx
+++ b/api_docs/custom_integrations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations
title: "customIntegrations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the customIntegrations plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations']
---
import customIntegrationsObj from './custom_integrations.devdocs.json';
diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx
index 1caad88d5eca6..cc46995861b5a 100644
--- a/api_docs/dashboard.mdx
+++ b/api_docs/dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard
title: "dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboard plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard']
---
import dashboardObj from './dashboard.devdocs.json';
diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx
index 6345177cd7557..0c324975a51fc 100644
--- a/api_docs/dashboard_enhanced.mdx
+++ b/api_docs/dashboard_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced
title: "dashboardEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboardEnhanced plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced']
---
import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json';
diff --git a/api_docs/data.mdx b/api_docs/data.mdx
index bffa0a33c5c35..d9bb47ae5a568 100644
--- a/api_docs/data.mdx
+++ b/api_docs/data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data
title: "data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data']
---
import dataObj from './data.devdocs.json';
diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx
index 8ad88c68c2caf..085f544b99a72 100644
--- a/api_docs/data_query.mdx
+++ b/api_docs/data_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query
title: "data.query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.query plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query']
---
import dataQueryObj from './data_query.devdocs.json';
diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx
index 76c453f505942..917b04f4c63c4 100644
--- a/api_docs/data_search.mdx
+++ b/api_docs/data_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search
title: "data.search"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.search plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search']
---
import dataSearchObj from './data_search.devdocs.json';
diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx
index 328367e2856ff..277999b9061aa 100644
--- a/api_docs/data_view_editor.mdx
+++ b/api_docs/data_view_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor
title: "dataViewEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewEditor plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor']
---
import dataViewEditorObj from './data_view_editor.devdocs.json';
diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx
index 5c25100ba1d3e..0855ae0874ea7 100644
--- a/api_docs/data_view_field_editor.mdx
+++ b/api_docs/data_view_field_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor
title: "dataViewFieldEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewFieldEditor plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor']
---
import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json';
diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx
index a766d403d2b13..4d89f57ef1cb7 100644
--- a/api_docs/data_view_management.mdx
+++ b/api_docs/data_view_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement
title: "dataViewManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewManagement plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement']
---
import dataViewManagementObj from './data_view_management.devdocs.json';
diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx
index fc82818e98749..b5edf6bba68f9 100644
--- a/api_docs/data_views.mdx
+++ b/api_docs/data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews
title: "dataViews"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViews plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews']
---
import dataViewsObj from './data_views.devdocs.json';
diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx
index 3976e1fe6a086..d72b4193920cf 100644
--- a/api_docs/data_visualizer.mdx
+++ b/api_docs/data_visualizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer
title: "dataVisualizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataVisualizer plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer']
---
import dataVisualizerObj from './data_visualizer.devdocs.json';
diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx
index 19196ab7341bd..d2e1692c6e71b 100644
--- a/api_docs/deprecations_by_api.mdx
+++ b/api_docs/deprecations_by_api.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api
title: Deprecated API usage by API
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx
index 77bb37fab3036..cc9a85efe66f1 100644
--- a/api_docs/deprecations_by_plugin.mdx
+++ b/api_docs/deprecations_by_plugin.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin
title: Deprecated API usage by plugin
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx
index 0e5faaecb066e..13098ab85450c 100644
--- a/api_docs/deprecations_by_team.mdx
+++ b/api_docs/deprecations_by_team.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam
slug: /kibana-dev-docs/api-meta/deprecations-due-by-team
title: Deprecated APIs due to be removed, by team
description: Lists the teams that are referencing deprecated APIs with a remove by date.
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx
index 668b2fff5ef0e..47b9fd4260589 100644
--- a/api_docs/dev_tools.mdx
+++ b/api_docs/dev_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools
title: "devTools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the devTools plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools']
---
import devToolsObj from './dev_tools.devdocs.json';
diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx
index 9966ab7e66ecd..9956f553d7ecf 100644
--- a/api_docs/discover.mdx
+++ b/api_docs/discover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover
title: "discover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discover plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover']
---
import discoverObj from './discover.devdocs.json';
diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx
index 5316cfa5b7372..cc4da8f1543bb 100644
--- a/api_docs/discover_enhanced.mdx
+++ b/api_docs/discover_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced
title: "discoverEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discoverEnhanced plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced']
---
import discoverEnhancedObj from './discover_enhanced.devdocs.json';
diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx
index 7be0a4219c1c1..e9180bd69f021 100644
--- a/api_docs/ecs_data_quality_dashboard.mdx
+++ b/api_docs/ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard
title: "ecsDataQualityDashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ecsDataQualityDashboard plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard']
---
import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx
index 99ecbddcf4b34..80f71c6bb9df2 100644
--- a/api_docs/embeddable.mdx
+++ b/api_docs/embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable
title: "embeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddable plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable']
---
import embeddableObj from './embeddable.devdocs.json';
diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx
index 37665856e639d..c02fc99085d83 100644
--- a/api_docs/embeddable_enhanced.mdx
+++ b/api_docs/embeddable_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced
title: "embeddableEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddableEnhanced plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced']
---
import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json';
diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx
index 81e2429f651b4..335b92d1c0bc8 100644
--- a/api_docs/encrypted_saved_objects.mdx
+++ b/api_docs/encrypted_saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects
title: "encryptedSavedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the encryptedSavedObjects plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects']
---
import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json';
diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx
index a68a3b12d473a..2626b0b7677fd 100644
--- a/api_docs/enterprise_search.mdx
+++ b/api_docs/enterprise_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch
title: "enterpriseSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the enterpriseSearch plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch']
---
import enterpriseSearchObj from './enterprise_search.devdocs.json';
diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx
index 9d363382a4d04..65042bc8a5ec9 100644
--- a/api_docs/es_ui_shared.mdx
+++ b/api_docs/es_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared
title: "esUiShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the esUiShared plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared']
---
import esUiSharedObj from './es_ui_shared.devdocs.json';
diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx
index f730b498c27a1..c25cd476fc5df 100644
--- a/api_docs/event_annotation.mdx
+++ b/api_docs/event_annotation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation
title: "eventAnnotation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventAnnotation plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation']
---
import eventAnnotationObj from './event_annotation.devdocs.json';
diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx
index 566d130b6dba5..a7d7923a9ab23 100644
--- a/api_docs/event_log.mdx
+++ b/api_docs/event_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog
title: "eventLog"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventLog plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog']
---
import eventLogObj from './event_log.devdocs.json';
diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx
index e9d01181d2a57..acc6a03e2f0e7 100644
--- a/api_docs/exploratory_view.mdx
+++ b/api_docs/exploratory_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView
title: "exploratoryView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the exploratoryView plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView']
---
import exploratoryViewObj from './exploratory_view.devdocs.json';
diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx
index 9bc378e624689..2b4531e7f63ec 100644
--- a/api_docs/expression_error.mdx
+++ b/api_docs/expression_error.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError
title: "expressionError"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionError plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError']
---
import expressionErrorObj from './expression_error.devdocs.json';
diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx
index 9bb5f9e82b19e..eabaff970293e 100644
--- a/api_docs/expression_gauge.mdx
+++ b/api_docs/expression_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge
title: "expressionGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionGauge plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge']
---
import expressionGaugeObj from './expression_gauge.devdocs.json';
diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx
index 883d1d3d8fbd2..0927c1f95445e 100644
--- a/api_docs/expression_heatmap.mdx
+++ b/api_docs/expression_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap
title: "expressionHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionHeatmap plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap']
---
import expressionHeatmapObj from './expression_heatmap.devdocs.json';
diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx
index f296351583f65..c2c392922ab21 100644
--- a/api_docs/expression_image.mdx
+++ b/api_docs/expression_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage
title: "expressionImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionImage plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage']
---
import expressionImageObj from './expression_image.devdocs.json';
diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx
index ac86b8cc8d6e9..d5205515ac740 100644
--- a/api_docs/expression_legacy_metric_vis.mdx
+++ b/api_docs/expression_legacy_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis
title: "expressionLegacyMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionLegacyMetricVis plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis']
---
import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json';
diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx
index 5c2a5e38d0bb7..f58c5beb99335 100644
--- a/api_docs/expression_metric.mdx
+++ b/api_docs/expression_metric.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric
title: "expressionMetric"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetric plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric']
---
import expressionMetricObj from './expression_metric.devdocs.json';
diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx
index cf7e54df282a6..27cd924553389 100644
--- a/api_docs/expression_metric_vis.mdx
+++ b/api_docs/expression_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis
title: "expressionMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetricVis plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis']
---
import expressionMetricVisObj from './expression_metric_vis.devdocs.json';
diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx
index 7ce5c90979728..4faf1d294ab39 100644
--- a/api_docs/expression_partition_vis.mdx
+++ b/api_docs/expression_partition_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis
title: "expressionPartitionVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionPartitionVis plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis']
---
import expressionPartitionVisObj from './expression_partition_vis.devdocs.json';
diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx
index 3233c76e257ad..01fe30797f7e9 100644
--- a/api_docs/expression_repeat_image.mdx
+++ b/api_docs/expression_repeat_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage
title: "expressionRepeatImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRepeatImage plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage']
---
import expressionRepeatImageObj from './expression_repeat_image.devdocs.json';
diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx
index f8303b3ce91f6..0bb7d416bd8be 100644
--- a/api_docs/expression_reveal_image.mdx
+++ b/api_docs/expression_reveal_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage
title: "expressionRevealImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRevealImage plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage']
---
import expressionRevealImageObj from './expression_reveal_image.devdocs.json';
diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx
index 8b1d6b6bb9e57..38d0ea0b11876 100644
--- a/api_docs/expression_shape.mdx
+++ b/api_docs/expression_shape.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape
title: "expressionShape"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionShape plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape']
---
import expressionShapeObj from './expression_shape.devdocs.json';
diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx
index 939c7c8e0d9a5..8a65f19183a2f 100644
--- a/api_docs/expression_tagcloud.mdx
+++ b/api_docs/expression_tagcloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud
title: "expressionTagcloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionTagcloud plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud']
---
import expressionTagcloudObj from './expression_tagcloud.devdocs.json';
diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx
index 419263c08a916..caee522456fc3 100644
--- a/api_docs/expression_x_y.mdx
+++ b/api_docs/expression_x_y.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY
title: "expressionXY"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionXY plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY']
---
import expressionXYObj from './expression_x_y.devdocs.json';
diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx
index 6220bba7336aa..30aa2df65ec79 100644
--- a/api_docs/expressions.mdx
+++ b/api_docs/expressions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions
title: "expressions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressions plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions']
---
import expressionsObj from './expressions.devdocs.json';
diff --git a/api_docs/features.mdx b/api_docs/features.mdx
index a557954a666e0..1001af3656df2 100644
--- a/api_docs/features.mdx
+++ b/api_docs/features.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features
title: "features"
image: https://source.unsplash.com/400x175/?github
description: API docs for the features plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features']
---
import featuresObj from './features.devdocs.json';
diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx
index 16a0f0d4c8439..98a1cf4aafc4f 100644
--- a/api_docs/field_formats.mdx
+++ b/api_docs/field_formats.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats
title: "fieldFormats"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fieldFormats plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats']
---
import fieldFormatsObj from './field_formats.devdocs.json';
diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx
index 3a72270d60918..b52f294a42518 100644
--- a/api_docs/file_upload.mdx
+++ b/api_docs/file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload
title: "fileUpload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fileUpload plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload']
---
import fileUploadObj from './file_upload.devdocs.json';
diff --git a/api_docs/files.mdx b/api_docs/files.mdx
index 457430bc3c375..fe902689c4696 100644
--- a/api_docs/files.mdx
+++ b/api_docs/files.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files
title: "files"
image: https://source.unsplash.com/400x175/?github
description: API docs for the files plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files']
---
import filesObj from './files.devdocs.json';
diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx
index 73da0fbdedc6e..98a82bafd126e 100644
--- a/api_docs/files_management.mdx
+++ b/api_docs/files_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement
title: "filesManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the filesManagement plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement']
---
import filesManagementObj from './files_management.devdocs.json';
diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx
index 4af17ce6008be..1d1460a5cef7b 100644
--- a/api_docs/fleet.mdx
+++ b/api_docs/fleet.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet
title: "fleet"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fleet plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet']
---
import fleetObj from './fleet.devdocs.json';
diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx
index bb0ff4849f94f..657927df2b83b 100644
--- a/api_docs/global_search.mdx
+++ b/api_docs/global_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch
title: "globalSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the globalSearch plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch']
---
import globalSearchObj from './global_search.devdocs.json';
diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx
index d23f847732869..331e918af2614 100644
--- a/api_docs/guided_onboarding.mdx
+++ b/api_docs/guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding
title: "guidedOnboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the guidedOnboarding plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding']
---
import guidedOnboardingObj from './guided_onboarding.devdocs.json';
diff --git a/api_docs/home.mdx b/api_docs/home.mdx
index 3d690c0e68e9f..211e9e2c6a07b 100644
--- a/api_docs/home.mdx
+++ b/api_docs/home.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home
title: "home"
image: https://source.unsplash.com/400x175/?github
description: API docs for the home plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home']
---
import homeObj from './home.devdocs.json';
diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx
index 057fd0184c363..11dd9719cb350 100644
--- a/api_docs/image_embeddable.mdx
+++ b/api_docs/image_embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable
title: "imageEmbeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the imageEmbeddable plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable']
---
import imageEmbeddableObj from './image_embeddable.devdocs.json';
diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx
index b94d95d3c264c..ddf4a31a95360 100644
--- a/api_docs/index_lifecycle_management.mdx
+++ b/api_docs/index_lifecycle_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement
title: "indexLifecycleManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexLifecycleManagement plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement']
---
import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json';
diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx
index ce19286d93df0..b25e2a30b48ed 100644
--- a/api_docs/index_management.mdx
+++ b/api_docs/index_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement
title: "indexManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexManagement plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement']
---
import indexManagementObj from './index_management.devdocs.json';
diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx
index c3385575e09c0..08e236d01bdd9 100644
--- a/api_docs/infra.mdx
+++ b/api_docs/infra.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra
title: "infra"
image: https://source.unsplash.com/400x175/?github
description: API docs for the infra plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra']
---
import infraObj from './infra.devdocs.json';
diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx
index 4a4ec21a4a69c..052f3d1c6df2d 100644
--- a/api_docs/inspector.mdx
+++ b/api_docs/inspector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector
title: "inspector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the inspector plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector']
---
import inspectorObj from './inspector.devdocs.json';
diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx
index 6a4940c68b1ef..920b264df2f78 100644
--- a/api_docs/interactive_setup.mdx
+++ b/api_docs/interactive_setup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup
title: "interactiveSetup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the interactiveSetup plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup']
---
import interactiveSetupObj from './interactive_setup.devdocs.json';
diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx
index 1f8c24f63334d..5f68a33f0cc82 100644
--- a/api_docs/kbn_ace.mdx
+++ b/api_docs/kbn_ace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace
title: "@kbn/ace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ace plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace']
---
import kbnAceObj from './kbn_ace.devdocs.json';
diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx
index 65eba196dc939..977a61ba91acf 100644
--- a/api_docs/kbn_aiops_components.mdx
+++ b/api_docs/kbn_aiops_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components
title: "@kbn/aiops-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-components plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components']
---
import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json';
diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx
index 4722aba40cd4a..56836ea98435f 100644
--- a/api_docs/kbn_aiops_utils.mdx
+++ b/api_docs/kbn_aiops_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils
title: "@kbn/aiops-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils']
---
import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json';
diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx
index 886e61c547f5d..e9dfabe05f60d 100644
--- a/api_docs/kbn_alerting_state_types.mdx
+++ b/api_docs/kbn_alerting_state_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types
title: "@kbn/alerting-state-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerting-state-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types']
---
import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json';
diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx
index 71a26ed1c49c2..ede67e96ec2c1 100644
--- a/api_docs/kbn_alerts.mdx
+++ b/api_docs/kbn_alerts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts
title: "@kbn/alerts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts']
---
import kbnAlertsObj from './kbn_alerts.devdocs.json';
diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx
index 514d6a12f704e..ad2ba4ad7c127 100644
--- a/api_docs/kbn_alerts_as_data_utils.mdx
+++ b/api_docs/kbn_alerts_as_data_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils
title: "@kbn/alerts-as-data-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts-as-data-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils']
---
import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json';
diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx
index cd11e37f365e5..4b7dbea78ab76 100644
--- a/api_docs/kbn_alerts_ui_shared.mdx
+++ b/api_docs/kbn_alerts_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared
title: "@kbn/alerts-ui-shared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts-ui-shared plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared']
---
import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json';
diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx
index fecf59e7f7e14..2af1d27751534 100644
--- a/api_docs/kbn_analytics.mdx
+++ b/api_docs/kbn_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics
title: "@kbn/analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics']
---
import kbnAnalyticsObj from './kbn_analytics.devdocs.json';
diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx
index ebd2f88739a4f..3144b1be4c083 100644
--- a/api_docs/kbn_analytics_client.mdx
+++ b/api_docs/kbn_analytics_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client
title: "@kbn/analytics-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-client plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client']
---
import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
index f922d28b9d05e..d52c1625e8946 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser
title: "@kbn/analytics-shippers-elastic-v3-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser']
---
import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
index 45cdbb83b51dc..e0eefa557ee5a 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common
title: "@kbn/analytics-shippers-elastic-v3-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common']
---
import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
index 81cc70f57ef3e..54abcf2f8dbeb 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server
title: "@kbn/analytics-shippers-elastic-v3-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server']
---
import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx
index d465b152f0d0b..4d759a95fefdd 100644
--- a/api_docs/kbn_analytics_shippers_fullstory.mdx
+++ b/api_docs/kbn_analytics_shippers_fullstory.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory
title: "@kbn/analytics-shippers-fullstory"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-fullstory plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory']
---
import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx
index ae94029f87eba..131f62f3a925e 100644
--- a/api_docs/kbn_analytics_shippers_gainsight.mdx
+++ b/api_docs/kbn_analytics_shippers_gainsight.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight
title: "@kbn/analytics-shippers-gainsight"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-gainsight plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight']
---
import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json';
diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx
index caacce801f4c9..e7223ccaecbc0 100644
--- a/api_docs/kbn_apm_config_loader.mdx
+++ b/api_docs/kbn_apm_config_loader.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader
title: "@kbn/apm-config-loader"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-config-loader plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader']
---
import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx
index e92754fcc428a..289cd900b4cfe 100644
--- a/api_docs/kbn_apm_synthtrace.mdx
+++ b/api_docs/kbn_apm_synthtrace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace
title: "@kbn/apm-synthtrace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace']
---
import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx
index 342c52fbe8a3f..d9215f3f8949c 100644
--- a/api_docs/kbn_apm_synthtrace_client.mdx
+++ b/api_docs/kbn_apm_synthtrace_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client
title: "@kbn/apm-synthtrace-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace-client plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client']
---
import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json';
diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx
index ec9ba2eaef8ae..ec86b99d9a56a 100644
--- a/api_docs/kbn_apm_utils.mdx
+++ b/api_docs/kbn_apm_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils
title: "@kbn/apm-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils']
---
import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json';
diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx
index 26fc64d57574f..5975d4659d0d0 100644
--- a/api_docs/kbn_axe_config.mdx
+++ b/api_docs/kbn_axe_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config
title: "@kbn/axe-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/axe-config plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config']
---
import kbnAxeConfigObj from './kbn_axe_config.devdocs.json';
diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx
index 70e48c585cd7e..b34eb97ecbee0 100644
--- a/api_docs/kbn_cases_components.mdx
+++ b/api_docs/kbn_cases_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components
title: "@kbn/cases-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cases-components plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components']
---
import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json';
diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx
index b0f8ca31ca11b..289fbaae53c07 100644
--- a/api_docs/kbn_cell_actions.mdx
+++ b/api_docs/kbn_cell_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions
title: "@kbn/cell-actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cell-actions plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions']
---
import kbnCellActionsObj from './kbn_cell_actions.devdocs.json';
diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx
index a2b4ad25ab1cf..25ac885511b97 100644
--- a/api_docs/kbn_chart_expressions_common.mdx
+++ b/api_docs/kbn_chart_expressions_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common
title: "@kbn/chart-expressions-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-expressions-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common']
---
import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json';
diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx
index 665af27436352..6dd377acc7580 100644
--- a/api_docs/kbn_chart_icons.mdx
+++ b/api_docs/kbn_chart_icons.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons
title: "@kbn/chart-icons"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-icons plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons']
---
import kbnChartIconsObj from './kbn_chart_icons.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx
index 89475e206ef3a..d557df4c4c4c6 100644
--- a/api_docs/kbn_ci_stats_core.mdx
+++ b/api_docs/kbn_ci_stats_core.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core
title: "@kbn/ci-stats-core"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-core plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core']
---
import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx
index 3e7f161f1da56..950a6d972d822 100644
--- a/api_docs/kbn_ci_stats_performance_metrics.mdx
+++ b/api_docs/kbn_ci_stats_performance_metrics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics
title: "@kbn/ci-stats-performance-metrics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-performance-metrics plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics']
---
import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx
index e1f6b97397de8..619b739151d71 100644
--- a/api_docs/kbn_ci_stats_reporter.mdx
+++ b/api_docs/kbn_ci_stats_reporter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter
title: "@kbn/ci-stats-reporter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-reporter plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter']
---
import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json';
diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx
index 461c090552af1..2479cad78afa9 100644
--- a/api_docs/kbn_cli_dev_mode.mdx
+++ b/api_docs/kbn_cli_dev_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode
title: "@kbn/cli-dev-mode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cli-dev-mode plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode']
---
import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json';
diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx
index 193562592747d..65cadd70b81c4 100644
--- a/api_docs/kbn_code_editor.mdx
+++ b/api_docs/kbn_code_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor
title: "@kbn/code-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor']
---
import kbnCodeEditorObj from './kbn_code_editor.devdocs.json';
diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx
index ac48ccda6db3c..d4289b8312fdb 100644
--- a/api_docs/kbn_code_editor_mocks.mdx
+++ b/api_docs/kbn_code_editor_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks
title: "@kbn/code-editor-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks']
---
import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json';
diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx
index 6995378642c28..3349cc155155e 100644
--- a/api_docs/kbn_coloring.mdx
+++ b/api_docs/kbn_coloring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring
title: "@kbn/coloring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/coloring plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring']
---
import kbnColoringObj from './kbn_coloring.devdocs.json';
diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx
index 841169ceabe84..aee61c626d480 100644
--- a/api_docs/kbn_config.mdx
+++ b/api_docs/kbn_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config
title: "@kbn/config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config']
---
import kbnConfigObj from './kbn_config.devdocs.json';
diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx
index 0ca126ac25b33..df49b4d8744fd 100644
--- a/api_docs/kbn_config_mocks.mdx
+++ b/api_docs/kbn_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks
title: "@kbn/config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks']
---
import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx
index a77e87f1f5d86..0a33d62c86749 100644
--- a/api_docs/kbn_config_schema.mdx
+++ b/api_docs/kbn_config_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema
title: "@kbn/config-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-schema plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema']
---
import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json';
diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx
index f1dd3300ecd25..5a41c4eeb6660 100644
--- a/api_docs/kbn_content_management_content_editor.mdx
+++ b/api_docs/kbn_content_management_content_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor
title: "@kbn/content-management-content-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-content-editor plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor']
---
import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json';
diff --git a/api_docs/kbn_content_management_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx
index 9cc26826d4bf8..5f40c3b41395a 100644
--- a/api_docs/kbn_content_management_table_list.mdx
+++ b/api_docs/kbn_content_management_table_list.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list
title: "@kbn/content-management-table-list"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-table-list plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list']
---
import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json';
diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx
index a66688a7ed512..100159316f841 100644
--- a/api_docs/kbn_content_management_utils.mdx
+++ b/api_docs/kbn_content_management_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils
title: "@kbn/content-management-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils']
---
import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx
index 787eb30aec32c..9fa0bc90bceaa 100644
--- a/api_docs/kbn_core_analytics_browser.mdx
+++ b/api_docs/kbn_core_analytics_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser
title: "@kbn/core-analytics-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser']
---
import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx
index 244d683929b0b..d4bd20bef5a59 100644
--- a/api_docs/kbn_core_analytics_browser_internal.mdx
+++ b/api_docs/kbn_core_analytics_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal
title: "@kbn/core-analytics-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal']
---
import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx
index d07c4c88c98d7..7aeeca7955612 100644
--- a/api_docs/kbn_core_analytics_browser_mocks.mdx
+++ b/api_docs/kbn_core_analytics_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks
title: "@kbn/core-analytics-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks']
---
import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx
index c633da34cd280..392897df30c32 100644
--- a/api_docs/kbn_core_analytics_server.mdx
+++ b/api_docs/kbn_core_analytics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server
title: "@kbn/core-analytics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server']
---
import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx
index ee95e67f91e31..f93be9af01e62 100644
--- a/api_docs/kbn_core_analytics_server_internal.mdx
+++ b/api_docs/kbn_core_analytics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal
title: "@kbn/core-analytics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal']
---
import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx
index b1e1d4d8a83ae..03aaaaaddcdeb 100644
--- a/api_docs/kbn_core_analytics_server_mocks.mdx
+++ b/api_docs/kbn_core_analytics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks
title: "@kbn/core-analytics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks']
---
import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx
index 8229ec1ea935e..6f85db10bfcb1 100644
--- a/api_docs/kbn_core_application_browser.mdx
+++ b/api_docs/kbn_core_application_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser
title: "@kbn/core-application-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser']
---
import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx
index f6e3a88bc07fe..428416d2a3247 100644
--- a/api_docs/kbn_core_application_browser_internal.mdx
+++ b/api_docs/kbn_core_application_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal
title: "@kbn/core-application-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal']
---
import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx
index ad750d73d9dd5..b3fbb51928c6c 100644
--- a/api_docs/kbn_core_application_browser_mocks.mdx
+++ b/api_docs/kbn_core_application_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks
title: "@kbn/core-application-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks']
---
import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx
index 7e03d9e7d10d1..6d94e84aa0f91 100644
--- a/api_docs/kbn_core_application_common.mdx
+++ b/api_docs/kbn_core_application_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common
title: "@kbn/core-application-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common']
---
import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json';
diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx
index 0da3f9afa0c19..9c6ce4b430418 100644
--- a/api_docs/kbn_core_apps_browser_internal.mdx
+++ b/api_docs/kbn_core_apps_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal
title: "@kbn/core-apps-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal']
---
import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx
index cf4a7b9b97122..60f5f46ea3dfe 100644
--- a/api_docs/kbn_core_apps_browser_mocks.mdx
+++ b/api_docs/kbn_core_apps_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks
title: "@kbn/core-apps-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks']
---
import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx
index 47de39fd7671f..11ff523bdf113 100644
--- a/api_docs/kbn_core_apps_server_internal.mdx
+++ b/api_docs/kbn_core_apps_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal
title: "@kbn/core-apps-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal']
---
import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx
index 623995659526b..9e90692d34643 100644
--- a/api_docs/kbn_core_base_browser_mocks.mdx
+++ b/api_docs/kbn_core_base_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks
title: "@kbn/core-base-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks']
---
import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx
index 024b4ee8753ae..0430c23b7a97c 100644
--- a/api_docs/kbn_core_base_common.mdx
+++ b/api_docs/kbn_core_base_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common
title: "@kbn/core-base-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common']
---
import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json';
diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx
index 4aa3516722fbc..0fc01be31a8c9 100644
--- a/api_docs/kbn_core_base_server_internal.mdx
+++ b/api_docs/kbn_core_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal
title: "@kbn/core-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal']
---
import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx
index 95a8c52d50e35..107c89b61fb12 100644
--- a/api_docs/kbn_core_base_server_mocks.mdx
+++ b/api_docs/kbn_core_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks
title: "@kbn/core-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks']
---
import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx
index f77c849a0fce7..0878c173d02d5 100644
--- a/api_docs/kbn_core_capabilities_browser_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks
title: "@kbn/core-capabilities-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks']
---
import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx
index b6ee77050ccf6..5cf855a2af70b 100644
--- a/api_docs/kbn_core_capabilities_common.mdx
+++ b/api_docs/kbn_core_capabilities_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common
title: "@kbn/core-capabilities-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common']
---
import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx
index e9c999d298e34..70fc609730e7a 100644
--- a/api_docs/kbn_core_capabilities_server.mdx
+++ b/api_docs/kbn_core_capabilities_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server
title: "@kbn/core-capabilities-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server']
---
import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx
index 9284359e3c7e6..7a4fe2dc02ac8 100644
--- a/api_docs/kbn_core_capabilities_server_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks
title: "@kbn/core-capabilities-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks']
---
import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx
index 9861c65c6943f..8a918d9da532c 100644
--- a/api_docs/kbn_core_chrome_browser.mdx
+++ b/api_docs/kbn_core_chrome_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser
title: "@kbn/core-chrome-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser']
---
import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json';
diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx
index 103a84c552026..6297d1528df00 100644
--- a/api_docs/kbn_core_chrome_browser_mocks.mdx
+++ b/api_docs/kbn_core_chrome_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks
title: "@kbn/core-chrome-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks']
---
import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx
index 9d23674ff02ce..eb17b1eb63432 100644
--- a/api_docs/kbn_core_config_server_internal.mdx
+++ b/api_docs/kbn_core_config_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal
title: "@kbn/core-config-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-config-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal']
---
import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx
index 0d95d3d3bcc0d..afa2d0c580a36 100644
--- a/api_docs/kbn_core_custom_branding_browser.mdx
+++ b/api_docs/kbn_core_custom_branding_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser
title: "@kbn/core-custom-branding-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser']
---
import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx
index effc620649f29..4ae933dc6a357 100644
--- a/api_docs/kbn_core_custom_branding_browser_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal
title: "@kbn/core-custom-branding-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal']
---
import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx
index 588f63c62943c..aca41ec81af0b 100644
--- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks
title: "@kbn/core-custom-branding-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks']
---
import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx
index b66aed80ea14a..1014afd00dcbe 100644
--- a/api_docs/kbn_core_custom_branding_common.mdx
+++ b/api_docs/kbn_core_custom_branding_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common
title: "@kbn/core-custom-branding-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common']
---
import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx
index 9538c254588d1..cb1c4be09c0f8 100644
--- a/api_docs/kbn_core_custom_branding_server.mdx
+++ b/api_docs/kbn_core_custom_branding_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server
title: "@kbn/core-custom-branding-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server']
---
import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx
index a61545c03e92c..ae66006425b39 100644
--- a/api_docs/kbn_core_custom_branding_server_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal
title: "@kbn/core-custom-branding-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal']
---
import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx
index 70030c5a3edb0..696e2493c4786 100644
--- a/api_docs/kbn_core_custom_branding_server_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks
title: "@kbn/core-custom-branding-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks']
---
import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx
index 7b259d6ade3a6..986ead412011e 100644
--- a/api_docs/kbn_core_deprecations_browser.mdx
+++ b/api_docs/kbn_core_deprecations_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser
title: "@kbn/core-deprecations-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser']
---
import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx
index 06c4f089642b4..f3641ec6cb770 100644
--- a/api_docs/kbn_core_deprecations_browser_internal.mdx
+++ b/api_docs/kbn_core_deprecations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal
title: "@kbn/core-deprecations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal']
---
import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx
index 98417f3aaafd9..25554416e1a3b 100644
--- a/api_docs/kbn_core_deprecations_browser_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks
title: "@kbn/core-deprecations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks']
---
import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx
index e04af7487641f..3c77be0d8410c 100644
--- a/api_docs/kbn_core_deprecations_common.mdx
+++ b/api_docs/kbn_core_deprecations_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common
title: "@kbn/core-deprecations-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common']
---
import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx
index bb1499cc7c126..87bd3856fb7cf 100644
--- a/api_docs/kbn_core_deprecations_server.mdx
+++ b/api_docs/kbn_core_deprecations_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server
title: "@kbn/core-deprecations-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server']
---
import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx
index c65ca4a2c5218..a51a826f5cebc 100644
--- a/api_docs/kbn_core_deprecations_server_internal.mdx
+++ b/api_docs/kbn_core_deprecations_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal
title: "@kbn/core-deprecations-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal']
---
import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx
index a0ba525c9623a..ce8542bc4c31d 100644
--- a/api_docs/kbn_core_deprecations_server_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks
title: "@kbn/core-deprecations-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks']
---
import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx
index 13fd6780d62b2..4a2c4a08c2218 100644
--- a/api_docs/kbn_core_doc_links_browser.mdx
+++ b/api_docs/kbn_core_doc_links_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser
title: "@kbn/core-doc-links-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser']
---
import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx
index 976836b66096c..d5478cc77b0f8 100644
--- a/api_docs/kbn_core_doc_links_browser_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks
title: "@kbn/core-doc-links-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks']
---
import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx
index ea9ee9c1d2799..460766378de0b 100644
--- a/api_docs/kbn_core_doc_links_server.mdx
+++ b/api_docs/kbn_core_doc_links_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server
title: "@kbn/core-doc-links-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server']
---
import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx
index a268c716d6f9f..dae58659412f8 100644
--- a/api_docs/kbn_core_doc_links_server_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks
title: "@kbn/core-doc-links-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks']
---
import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
index 4fb15d2a4bdf0..df17dac5a26b8 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal
title: "@kbn/core-elasticsearch-client-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal']
---
import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
index 61b192756d9a2..acefc0805f872 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks
title: "@kbn/core-elasticsearch-client-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks']
---
import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx
index be6bc3bd852ac..440042e3f8f6b 100644
--- a/api_docs/kbn_core_elasticsearch_server.mdx
+++ b/api_docs/kbn_core_elasticsearch_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server
title: "@kbn/core-elasticsearch-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server']
---
import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx
index 51a90d5e2e5c4..54078783fde60 100644
--- a/api_docs/kbn_core_elasticsearch_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal
title: "@kbn/core-elasticsearch-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal']
---
import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx
index e06c9592d7aa5..19dc15e6d148b 100644
--- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks
title: "@kbn/core-elasticsearch-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks']
---
import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx
index 9bde6165db5a2..c8e0a0c753f4e 100644
--- a/api_docs/kbn_core_environment_server_internal.mdx
+++ b/api_docs/kbn_core_environment_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal
title: "@kbn/core-environment-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal']
---
import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx
index 6996cf3620e56..e34a34f43f89e 100644
--- a/api_docs/kbn_core_environment_server_mocks.mdx
+++ b/api_docs/kbn_core_environment_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks
title: "@kbn/core-environment-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks']
---
import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx
index f503f4302e3c4..f7efa2b77c38c 100644
--- a/api_docs/kbn_core_execution_context_browser.mdx
+++ b/api_docs/kbn_core_execution_context_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser
title: "@kbn/core-execution-context-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser']
---
import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx
index 7989d390a5b16..966fc8995d429 100644
--- a/api_docs/kbn_core_execution_context_browser_internal.mdx
+++ b/api_docs/kbn_core_execution_context_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal
title: "@kbn/core-execution-context-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal']
---
import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx
index f043a247b440b..5840511349ada 100644
--- a/api_docs/kbn_core_execution_context_browser_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks
title: "@kbn/core-execution-context-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks']
---
import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx
index 0c03418d9662e..472b47c09c1a5 100644
--- a/api_docs/kbn_core_execution_context_common.mdx
+++ b/api_docs/kbn_core_execution_context_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common
title: "@kbn/core-execution-context-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common']
---
import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx
index 162f9246796a2..cf71416216110 100644
--- a/api_docs/kbn_core_execution_context_server.mdx
+++ b/api_docs/kbn_core_execution_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server
title: "@kbn/core-execution-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server']
---
import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx
index 3fdd7e33294e1..2ce02a86ac4e7 100644
--- a/api_docs/kbn_core_execution_context_server_internal.mdx
+++ b/api_docs/kbn_core_execution_context_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal
title: "@kbn/core-execution-context-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal']
---
import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx
index 3a0b5dbc64e33..b8212b1ec0182 100644
--- a/api_docs/kbn_core_execution_context_server_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks
title: "@kbn/core-execution-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks']
---
import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx
index 7eb1d47b46b2f..7e67620997a6a 100644
--- a/api_docs/kbn_core_fatal_errors_browser.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser
title: "@kbn/core-fatal-errors-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser']
---
import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json';
diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
index d6da56af8f5fc..69f696f1629c9 100644
--- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks
title: "@kbn/core-fatal-errors-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks']
---
import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx
index af8bf1dc2b484..91716e625a767 100644
--- a/api_docs/kbn_core_http_browser.mdx
+++ b/api_docs/kbn_core_http_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser
title: "@kbn/core-http-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser']
---
import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx
index 4c740a79bc939..7603c8ed982ba 100644
--- a/api_docs/kbn_core_http_browser_internal.mdx
+++ b/api_docs/kbn_core_http_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal
title: "@kbn/core-http-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal']
---
import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx
index 74733305d0432..56d011c4b01ba 100644
--- a/api_docs/kbn_core_http_browser_mocks.mdx
+++ b/api_docs/kbn_core_http_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks
title: "@kbn/core-http-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks']
---
import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx
index d35813f5d97cd..94f7d0366e959 100644
--- a/api_docs/kbn_core_http_common.mdx
+++ b/api_docs/kbn_core_http_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common
title: "@kbn/core-http-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common']
---
import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json';
diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx
index f919439911028..7043415e975aa 100644
--- a/api_docs/kbn_core_http_context_server_mocks.mdx
+++ b/api_docs/kbn_core_http_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks
title: "@kbn/core-http-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-context-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks']
---
import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx
index 5fef5f7ad8aed..c316ee845b8a7 100644
--- a/api_docs/kbn_core_http_request_handler_context_server.mdx
+++ b/api_docs/kbn_core_http_request_handler_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server
title: "@kbn/core-http-request-handler-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-request-handler-context-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server']
---
import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx
index a583a130bcc0b..14b5a16140da3 100644
--- a/api_docs/kbn_core_http_resources_server.mdx
+++ b/api_docs/kbn_core_http_resources_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server
title: "@kbn/core-http-resources-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server']
---
import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx
index 7d697ba73552e..28fcf9300fe68 100644
--- a/api_docs/kbn_core_http_resources_server_internal.mdx
+++ b/api_docs/kbn_core_http_resources_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal
title: "@kbn/core-http-resources-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal']
---
import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx
index 31e3bf8502ee4..1520d7acdde79 100644
--- a/api_docs/kbn_core_http_resources_server_mocks.mdx
+++ b/api_docs/kbn_core_http_resources_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks
title: "@kbn/core-http-resources-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks']
---
import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx
index 2247c8cfbab80..38a2dd621078e 100644
--- a/api_docs/kbn_core_http_router_server_internal.mdx
+++ b/api_docs/kbn_core_http_router_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal
title: "@kbn/core-http-router-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal']
---
import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx
index 30a15b0a999d4..f01bf3770ea09 100644
--- a/api_docs/kbn_core_http_router_server_mocks.mdx
+++ b/api_docs/kbn_core_http_router_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks
title: "@kbn/core-http-router-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks']
---
import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json
index 16eafe8893add..c2cb299143bbe 100644
--- a/api_docs/kbn_core_http_server.devdocs.json
+++ b/api_docs/kbn_core_http_server.devdocs.json
@@ -120,7 +120,7 @@
"section": "def-common.AddVersionOpts",
"text": "AddVersionOpts"
},
- "
"
+ "
"
],
"path": "packages/core/http/core-http-server/src/versioning/types.ts",
"deprecated": false,
@@ -7117,7 +7117,7 @@
"\nAdd a new version of this route"
],
"signature": [
- "
(options: ",
+ "
(options: ",
{
"pluginId": "@kbn/core-http-server",
"scope": "common",
@@ -7125,7 +7125,7 @@
"section": "def-common.AddVersionOpts",
"text": "AddVersionOpts"
},
- "
, handler: (context: Ctx, request: ",
+ "
, handler: (context: Ctx, request: ",
{
"pluginId": "@kbn/core-http-server",
"scope": "common",
@@ -7157,7 +7157,7 @@
"section": "def-common.IKibanaResponse",
"text": "IKibanaResponse"
},
- ">) => ",
+ ">) => ",
{
"pluginId": "@kbn/core-http-server",
"scope": "common",
@@ -7186,7 +7186,7 @@
"section": "def-common.AddVersionOpts",
"text": "AddVersionOpts"
},
- ""
+ "
"
],
"path": "packages/core/http/core-http-server/src/versioning/types.ts",
"deprecated": false,
@@ -7235,7 +7235,7 @@
"section": "def-common.IKibanaResponse",
"text": "IKibanaResponse"
},
- ">"
+ ">"
],
"path": "packages/core/http/core-http-server/src/versioning/types.ts",
"deprecated": false,
diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx
index 7ec42a38ea494..d028f90389a34 100644
--- a/api_docs/kbn_core_http_server.mdx
+++ b/api_docs/kbn_core_http_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server
title: "@kbn/core-http-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server']
---
import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx
index c68737cc28790..127e08f361649 100644
--- a/api_docs/kbn_core_http_server_internal.mdx
+++ b/api_docs/kbn_core_http_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal
title: "@kbn/core-http-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal']
---
import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx
index d9a230e837a95..13b664a56be55 100644
--- a/api_docs/kbn_core_http_server_mocks.mdx
+++ b/api_docs/kbn_core_http_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks
title: "@kbn/core-http-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks']
---
import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx
index 1be660ce32de9..f872c85bde10d 100644
--- a/api_docs/kbn_core_i18n_browser.mdx
+++ b/api_docs/kbn_core_i18n_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser
title: "@kbn/core-i18n-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser']
---
import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx
index 00c3289e4f60d..18d44fb00377a 100644
--- a/api_docs/kbn_core_i18n_browser_mocks.mdx
+++ b/api_docs/kbn_core_i18n_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks
title: "@kbn/core-i18n-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks']
---
import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx
index 31d81f497fd22..13850bcf3dc01 100644
--- a/api_docs/kbn_core_i18n_server.mdx
+++ b/api_docs/kbn_core_i18n_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server
title: "@kbn/core-i18n-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server']
---
import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx
index 56a8659b0ee7c..e09cee0c332fe 100644
--- a/api_docs/kbn_core_i18n_server_internal.mdx
+++ b/api_docs/kbn_core_i18n_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal
title: "@kbn/core-i18n-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal']
---
import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx
index fda30ce94563e..82595510e2392 100644
--- a/api_docs/kbn_core_i18n_server_mocks.mdx
+++ b/api_docs/kbn_core_i18n_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks
title: "@kbn/core-i18n-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks']
---
import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
index b10212ddfb043..92126c51fc2ac 100644
--- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
+++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks
title: "@kbn/core-injected-metadata-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks']
---
import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx
index 3a3ef4f49d777..a93573d646a16 100644
--- a/api_docs/kbn_core_integrations_browser_internal.mdx
+++ b/api_docs/kbn_core_integrations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal
title: "@kbn/core-integrations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal']
---
import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx
index a40a3b79c2fa8..2b0e59d16f627 100644
--- a/api_docs/kbn_core_integrations_browser_mocks.mdx
+++ b/api_docs/kbn_core_integrations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks
title: "@kbn/core-integrations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks']
---
import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx
index 9e7c44f6effa2..61f94ef8e02be 100644
--- a/api_docs/kbn_core_lifecycle_browser.mdx
+++ b/api_docs/kbn_core_lifecycle_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser
title: "@kbn/core-lifecycle-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser']
---
import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx
index b9186b56a64ff..853c894ffa3ec 100644
--- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks
title: "@kbn/core-lifecycle-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks']
---
import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx
index 299f14c4dae4a..0a3056265421b 100644
--- a/api_docs/kbn_core_lifecycle_server.mdx
+++ b/api_docs/kbn_core_lifecycle_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server
title: "@kbn/core-lifecycle-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server']
---
import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx
index d7cb70056ac5a..f45304911da4e 100644
--- a/api_docs/kbn_core_lifecycle_server_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks
title: "@kbn/core-lifecycle-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks']
---
import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx
index 110992fa1d131..bad04f5709f2d 100644
--- a/api_docs/kbn_core_logging_browser_mocks.mdx
+++ b/api_docs/kbn_core_logging_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks
title: "@kbn/core-logging-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks']
---
import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx
index 9ad934ce2eee9..3068727056960 100644
--- a/api_docs/kbn_core_logging_common_internal.mdx
+++ b/api_docs/kbn_core_logging_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal
title: "@kbn/core-logging-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-common-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal']
---
import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx
index b68f86930cd8e..1b19050de0ba6 100644
--- a/api_docs/kbn_core_logging_server.mdx
+++ b/api_docs/kbn_core_logging_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server
title: "@kbn/core-logging-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server']
---
import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx
index fe02d245a27f1..63c90331f6c87 100644
--- a/api_docs/kbn_core_logging_server_internal.mdx
+++ b/api_docs/kbn_core_logging_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal
title: "@kbn/core-logging-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal']
---
import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx
index 7874890989973..a27c66c49669f 100644
--- a/api_docs/kbn_core_logging_server_mocks.mdx
+++ b/api_docs/kbn_core_logging_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks
title: "@kbn/core-logging-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks']
---
import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx
index b1ebd877b4ea7..72c3745d7129e 100644
--- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal
title: "@kbn/core-metrics-collectors-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal']
---
import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
index b328003311a09..dc09f37760aaa 100644
--- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks
title: "@kbn/core-metrics-collectors-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks']
---
import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx
index 6861657f18442..2f3dd1b0a9f73 100644
--- a/api_docs/kbn_core_metrics_server.mdx
+++ b/api_docs/kbn_core_metrics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server
title: "@kbn/core-metrics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server']
---
import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx
index 37c40c874f1d6..91aaa0f4819d9 100644
--- a/api_docs/kbn_core_metrics_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal
title: "@kbn/core-metrics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal']
---
import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx
index f4d975ab1f83b..4fa182d2a35fe 100644
--- a/api_docs/kbn_core_metrics_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks
title: "@kbn/core-metrics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks']
---
import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx
index d12a59a1c82f6..0135493bcfbbe 100644
--- a/api_docs/kbn_core_mount_utils_browser.mdx
+++ b/api_docs/kbn_core_mount_utils_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser
title: "@kbn/core-mount-utils-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-mount-utils-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser']
---
import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json';
diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx
index 3ed95bb1ace98..97f712876f636 100644
--- a/api_docs/kbn_core_node_server.mdx
+++ b/api_docs/kbn_core_node_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server
title: "@kbn/core-node-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server']
---
import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json';
diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx
index d593243bfb0e4..87b21d3ce0a9a 100644
--- a/api_docs/kbn_core_node_server_internal.mdx
+++ b/api_docs/kbn_core_node_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal
title: "@kbn/core-node-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal']
---
import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx
index 5d96693eb6783..4e69752ee679c 100644
--- a/api_docs/kbn_core_node_server_mocks.mdx
+++ b/api_docs/kbn_core_node_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks
title: "@kbn/core-node-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks']
---
import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx
index e245a285c4e6a..13c5daf6ace51 100644
--- a/api_docs/kbn_core_notifications_browser.mdx
+++ b/api_docs/kbn_core_notifications_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser
title: "@kbn/core-notifications-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser']
---
import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx
index 0f65117561d6a..73c2ef739b34e 100644
--- a/api_docs/kbn_core_notifications_browser_internal.mdx
+++ b/api_docs/kbn_core_notifications_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal
title: "@kbn/core-notifications-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal']
---
import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx
index e9bfe64829978..e7ac8015404c7 100644
--- a/api_docs/kbn_core_notifications_browser_mocks.mdx
+++ b/api_docs/kbn_core_notifications_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks
title: "@kbn/core-notifications-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks']
---
import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx
index 0c8add0443090..ad4e99edd7283 100644
--- a/api_docs/kbn_core_overlays_browser.mdx
+++ b/api_docs/kbn_core_overlays_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser
title: "@kbn/core-overlays-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser']
---
import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx
index 63a6209d2a3e8..a95bdb9db823e 100644
--- a/api_docs/kbn_core_overlays_browser_internal.mdx
+++ b/api_docs/kbn_core_overlays_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal
title: "@kbn/core-overlays-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal']
---
import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx
index 6c22c6a00f163..85211ac8f2348 100644
--- a/api_docs/kbn_core_overlays_browser_mocks.mdx
+++ b/api_docs/kbn_core_overlays_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks
title: "@kbn/core-overlays-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks']
---
import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx
index 07659135ddb76..087806d411332 100644
--- a/api_docs/kbn_core_plugins_browser.mdx
+++ b/api_docs/kbn_core_plugins_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser
title: "@kbn/core-plugins-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser']
---
import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx
index ee4990c22604a..8e5c603d924af 100644
--- a/api_docs/kbn_core_plugins_browser_mocks.mdx
+++ b/api_docs/kbn_core_plugins_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks
title: "@kbn/core-plugins-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks']
---
import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx
index fb6416837af54..3ffdbac882224 100644
--- a/api_docs/kbn_core_plugins_server.mdx
+++ b/api_docs/kbn_core_plugins_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server
title: "@kbn/core-plugins-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server']
---
import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx
index da2188b6668c3..40cfefb47d57f 100644
--- a/api_docs/kbn_core_plugins_server_mocks.mdx
+++ b/api_docs/kbn_core_plugins_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks
title: "@kbn/core-plugins-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks']
---
import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx
index ea4a3712a4504..b4980c7bd30c5 100644
--- a/api_docs/kbn_core_preboot_server.mdx
+++ b/api_docs/kbn_core_preboot_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server
title: "@kbn/core-preboot-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server']
---
import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json';
diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx
index c765bb7f09369..4d5909363a3c9 100644
--- a/api_docs/kbn_core_preboot_server_mocks.mdx
+++ b/api_docs/kbn_core_preboot_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks
title: "@kbn/core-preboot-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks']
---
import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx
index d778d31c2e1df..3ef8cfd695b6b 100644
--- a/api_docs/kbn_core_rendering_browser_mocks.mdx
+++ b/api_docs/kbn_core_rendering_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks
title: "@kbn/core-rendering-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks']
---
import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx
index 69aa91290e723..8a6048e98dfa6 100644
--- a/api_docs/kbn_core_rendering_server_internal.mdx
+++ b/api_docs/kbn_core_rendering_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal
title: "@kbn/core-rendering-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal']
---
import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx
index 294bf9e106daa..e9ffbe2095454 100644
--- a/api_docs/kbn_core_rendering_server_mocks.mdx
+++ b/api_docs/kbn_core_rendering_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks
title: "@kbn/core-rendering-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks']
---
import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx
index 3ac9fe5165f6c..de01680f817f3 100644
--- a/api_docs/kbn_core_root_server_internal.mdx
+++ b/api_docs/kbn_core_root_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal
title: "@kbn/core-root-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-root-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal']
---
import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx
index 4e1c4a23cad0f..1901b29a48fd9 100644
--- a/api_docs/kbn_core_saved_objects_api_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_api_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser
title: "@kbn/core-saved-objects-api-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser']
---
import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx
index f7324ccc134a4..0419c111cca01 100644
--- a/api_docs/kbn_core_saved_objects_api_server.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server
title: "@kbn/core-saved-objects-api-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server']
---
import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx
index c0bdfb1d8d036..4d6f1e2661f61 100644
--- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal
title: "@kbn/core-saved-objects-api-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal']
---
import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
index 1b25d8d8c29c6..17ba76762215d 100644
--- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks
title: "@kbn/core-saved-objects-api-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks']
---
import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx
index a35cd0b91b03b..09b2b0ef2042b 100644
--- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal
title: "@kbn/core-saved-objects-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal']
---
import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
index c91c293d3b23c..25f15d7e715f5 100644
--- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks
title: "@kbn/core-saved-objects-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks']
---
import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx
index 1298630578312..05bd5e5a9fcd2 100644
--- a/api_docs/kbn_core_saved_objects_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser
title: "@kbn/core-saved-objects-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser']
---
import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx
index 8338fe06d8139..05b929cbb2d9e 100644
--- a/api_docs/kbn_core_saved_objects_browser_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal
title: "@kbn/core-saved-objects-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal']
---
import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx
index 9ca8b0f20d6eb..f3ee1140c33c2 100644
--- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks
title: "@kbn/core-saved-objects-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks']
---
import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx
index 8da07e8d6b7ab..80b377097029c 100644
--- a/api_docs/kbn_core_saved_objects_common.mdx
+++ b/api_docs/kbn_core_saved_objects_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common
title: "@kbn/core-saved-objects-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common']
---
import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
index c57c5374bacf1..6ab64d7ff1667 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal
title: "@kbn/core-saved-objects-import-export-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal']
---
import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
index 197ad5773a5f5..be2e4e61d6110 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks
title: "@kbn/core-saved-objects-import-export-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks']
---
import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
index 10809e6109f30..9a889b4d169bb 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal
title: "@kbn/core-saved-objects-migration-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal']
---
import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
index f31cb2a5ca823..e2bb5b642d2df 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks
title: "@kbn/core-saved-objects-migration-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks']
---
import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx
index 5e73d47ea1849..3983fd871869b 100644
--- a/api_docs/kbn_core_saved_objects_server.mdx
+++ b/api_docs/kbn_core_saved_objects_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server
title: "@kbn/core-saved-objects-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server']
---
import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx
index a7309a81c6bde..c9f593eb4a544 100644
--- a/api_docs/kbn_core_saved_objects_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal
title: "@kbn/core-saved-objects-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal']
---
import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx
index cf77c6be7f50a..19e76b64effe4 100644
--- a/api_docs/kbn_core_saved_objects_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks
title: "@kbn/core-saved-objects-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks']
---
import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx
index 59a97b3f35eae..6de3f7b8e929c 100644
--- a/api_docs/kbn_core_saved_objects_utils_server.mdx
+++ b/api_docs/kbn_core_saved_objects_utils_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server
title: "@kbn/core-saved-objects-utils-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-utils-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server']
---
import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx
index 8b25666564751..2e5266730ff6b 100644
--- a/api_docs/kbn_core_status_common.mdx
+++ b/api_docs/kbn_core_status_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common
title: "@kbn/core-status-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common']
---
import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json';
diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx
index ffb6a9d0e2830..53f8ee10a1392 100644
--- a/api_docs/kbn_core_status_common_internal.mdx
+++ b/api_docs/kbn_core_status_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal
title: "@kbn/core-status-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal']
---
import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json';
diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx
index 514aa3f559e21..9d703ddba118f 100644
--- a/api_docs/kbn_core_status_server.mdx
+++ b/api_docs/kbn_core_status_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server
title: "@kbn/core-status-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server']
---
import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx
index f905733b8d570..201a353c1b1ea 100644
--- a/api_docs/kbn_core_status_server_internal.mdx
+++ b/api_docs/kbn_core_status_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal
title: "@kbn/core-status-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal']
---
import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx
index f11345670fa1f..40879c08292c9 100644
--- a/api_docs/kbn_core_status_server_mocks.mdx
+++ b/api_docs/kbn_core_status_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks
title: "@kbn/core-status-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks']
---
import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
index 256e664e63c69..2e134415688d4 100644
--- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
+++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters
title: "@kbn/core-test-helpers-deprecations-getters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters']
---
import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
index 0a3b27f105ef5..90d1a77ae4540 100644
--- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
+++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser
title: "@kbn/core-test-helpers-http-setup-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser']
---
import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx
index 4d4e86d70b00a..006776e89c6cd 100644
--- a/api_docs/kbn_core_test_helpers_kbn_server.mdx
+++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server
title: "@kbn/core-test-helpers-kbn-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-kbn-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server']
---
import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
index 084d8a8b39462..50b5be0070a6d 100644
--- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
+++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer
title: "@kbn/core-test-helpers-so-type-serializer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer']
---
import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx
index 95be43a1a86fc..24f7e31fb7285 100644
--- a/api_docs/kbn_core_test_helpers_test_utils.mdx
+++ b/api_docs/kbn_core_test_helpers_test_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils
title: "@kbn/core-test-helpers-test-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-test-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils']
---
import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx
index 8f68fee8605bd..85f937f1ac5c6 100644
--- a/api_docs/kbn_core_theme_browser.mdx
+++ b/api_docs/kbn_core_theme_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser
title: "@kbn/core-theme-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser']
---
import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx
index 2d33459708171..058c80d77fe55 100644
--- a/api_docs/kbn_core_theme_browser_internal.mdx
+++ b/api_docs/kbn_core_theme_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal
title: "@kbn/core-theme-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal']
---
import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx
index 212fd67090572..b78c3cd52a803 100644
--- a/api_docs/kbn_core_theme_browser_mocks.mdx
+++ b/api_docs/kbn_core_theme_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks
title: "@kbn/core-theme-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks']
---
import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx
index 1147a70885a8d..882732754d84b 100644
--- a/api_docs/kbn_core_ui_settings_browser.mdx
+++ b/api_docs/kbn_core_ui_settings_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser
title: "@kbn/core-ui-settings-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser']
---
import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx
index c3e0235c9e9d7..3d819713f4240 100644
--- a/api_docs/kbn_core_ui_settings_browser_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal
title: "@kbn/core-ui-settings-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal']
---
import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx
index 89df3b4f7a6ec..3f1eff6101774 100644
--- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks
title: "@kbn/core-ui-settings-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks']
---
import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx
index 2a427deea54b4..18b7488ea230f 100644
--- a/api_docs/kbn_core_ui_settings_common.mdx
+++ b/api_docs/kbn_core_ui_settings_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common
title: "@kbn/core-ui-settings-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common']
---
import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx
index d7f7fa1d52b74..9f11f161b454c 100644
--- a/api_docs/kbn_core_ui_settings_server.mdx
+++ b/api_docs/kbn_core_ui_settings_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server
title: "@kbn/core-ui-settings-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server']
---
import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx
index fb4875f26b7d0..f214923068d98 100644
--- a/api_docs/kbn_core_ui_settings_server_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal
title: "@kbn/core-ui-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal']
---
import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx
index 553d31f2313e1..bf09280f7c391 100644
--- a/api_docs/kbn_core_ui_settings_server_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks
title: "@kbn/core-ui-settings-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks']
---
import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx
index 203b2ac851b84..f87348a7402c8 100644
--- a/api_docs/kbn_core_usage_data_server.mdx
+++ b/api_docs/kbn_core_usage_data_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server
title: "@kbn/core-usage-data-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server']
---
import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx
index 3a178c6cab7ad..84eed217f1833 100644
--- a/api_docs/kbn_core_usage_data_server_internal.mdx
+++ b/api_docs/kbn_core_usage_data_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal
title: "@kbn/core-usage-data-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal']
---
import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx
index d7fe7054296a3..f4b3e66e5471e 100644
--- a/api_docs/kbn_core_usage_data_server_mocks.mdx
+++ b/api_docs/kbn_core_usage_data_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks
title: "@kbn/core-usage-data-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks']
---
import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx
index 662b32e004020..738bc1f216e20 100644
--- a/api_docs/kbn_core_user_settings_server.mdx
+++ b/api_docs/kbn_core_user_settings_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server
title: "@kbn/core-user-settings-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server']
---
import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx
index 9ccebf40fa667..da2028de1a2f9 100644
--- a/api_docs/kbn_core_user_settings_server_internal.mdx
+++ b/api_docs/kbn_core_user_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal
title: "@kbn/core-user-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server-internal plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal']
---
import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx
index b0a3f1fb019a6..9278631b5f661 100644
--- a/api_docs/kbn_core_user_settings_server_mocks.mdx
+++ b/api_docs/kbn_core_user_settings_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks
title: "@kbn/core-user-settings-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-user-settings-server-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks']
---
import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx
index be243a5596594..28f6b319ad3dd 100644
--- a/api_docs/kbn_crypto.mdx
+++ b/api_docs/kbn_crypto.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto
title: "@kbn/crypto"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto']
---
import kbnCryptoObj from './kbn_crypto.devdocs.json';
diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx
index 1aff54e76f76f..940b6f76bcdfa 100644
--- a/api_docs/kbn_crypto_browser.mdx
+++ b/api_docs/kbn_crypto_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser
title: "@kbn/crypto-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser']
---
import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json';
diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx
index 2f899ff4f9c19..7ac07058f86e0 100644
--- a/api_docs/kbn_cypress_config.mdx
+++ b/api_docs/kbn_cypress_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config
title: "@kbn/cypress-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cypress-config plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config']
---
import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json';
diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx
index 497331d0aab2f..8d3a2cd6acfc9 100644
--- a/api_docs/kbn_datemath.mdx
+++ b/api_docs/kbn_datemath.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath
title: "@kbn/datemath"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/datemath plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath']
---
import kbnDatemathObj from './kbn_datemath.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx
index 1dccb62784a75..45481b43c2c95 100644
--- a/api_docs/kbn_dev_cli_errors.mdx
+++ b/api_docs/kbn_dev_cli_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors
title: "@kbn/dev-cli-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-errors plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors']
---
import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx
index 776dc89f92df2..10d18b6fa7772 100644
--- a/api_docs/kbn_dev_cli_runner.mdx
+++ b/api_docs/kbn_dev_cli_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner
title: "@kbn/dev-cli-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-runner plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner']
---
import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json';
diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx
index 3cb5539590b8e..7beede920bef8 100644
--- a/api_docs/kbn_dev_proc_runner.mdx
+++ b/api_docs/kbn_dev_proc_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner
title: "@kbn/dev-proc-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-proc-runner plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner']
---
import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json';
diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx
index d3988896996e9..ff275992057a3 100644
--- a/api_docs/kbn_dev_utils.mdx
+++ b/api_docs/kbn_dev_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils
title: "@kbn/dev-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils']
---
import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json';
diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx
index 6b837a19de62d..21a661bf5ab5f 100644
--- a/api_docs/kbn_doc_links.mdx
+++ b/api_docs/kbn_doc_links.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links
title: "@kbn/doc-links"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/doc-links plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links']
---
import kbnDocLinksObj from './kbn_doc_links.devdocs.json';
diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx
index c79db6b937fb8..dc194d79d1596 100644
--- a/api_docs/kbn_docs_utils.mdx
+++ b/api_docs/kbn_docs_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils
title: "@kbn/docs-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/docs-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils']
---
import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json';
diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx
index 89764ee0c4f3a..d3ab17a25321d 100644
--- a/api_docs/kbn_dom_drag_drop.mdx
+++ b/api_docs/kbn_dom_drag_drop.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop
title: "@kbn/dom-drag-drop"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dom-drag-drop plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop']
---
import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json';
diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx
index a973b7dc53020..a40c8552d0fbc 100644
--- a/api_docs/kbn_ebt_tools.mdx
+++ b/api_docs/kbn_ebt_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools
title: "@kbn/ebt-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ebt-tools plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools']
---
import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json';
diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx
index f09497f175c42..df7be264080b6 100644
--- a/api_docs/kbn_ecs.mdx
+++ b/api_docs/kbn_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs
title: "@kbn/ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs']
---
import kbnEcsObj from './kbn_ecs.devdocs.json';
diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx
index 410df0a1abdb7..acf12844fa43d 100644
--- a/api_docs/kbn_ecs_data_quality_dashboard.mdx
+++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard
title: "@kbn/ecs-data-quality-dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs-data-quality-dashboard plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard']
---
import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx
index 906f0737539e0..9dfe39dc4817a 100644
--- a/api_docs/kbn_es.mdx
+++ b/api_docs/kbn_es.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es
title: "@kbn/es"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es']
---
import kbnEsObj from './kbn_es.devdocs.json';
diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx
index 28ec66e54de58..f456ac88ed2a4 100644
--- a/api_docs/kbn_es_archiver.mdx
+++ b/api_docs/kbn_es_archiver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver
title: "@kbn/es-archiver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-archiver plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver']
---
import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json';
diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx
index 24dc9889dc84a..b52b1e617e454 100644
--- a/api_docs/kbn_es_errors.mdx
+++ b/api_docs/kbn_es_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors
title: "@kbn/es-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-errors plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors']
---
import kbnEsErrorsObj from './kbn_es_errors.devdocs.json';
diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx
index 0aa269ade0b0b..b22a54f00659c 100644
--- a/api_docs/kbn_es_query.mdx
+++ b/api_docs/kbn_es_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query
title: "@kbn/es-query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-query plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query']
---
import kbnEsQueryObj from './kbn_es_query.devdocs.json';
diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx
index e2a39519029db..1628f4ab457f6 100644
--- a/api_docs/kbn_es_types.mdx
+++ b/api_docs/kbn_es_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types
title: "@kbn/es-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types']
---
import kbnEsTypesObj from './kbn_es_types.devdocs.json';
diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx
index e92ac0a17686d..825279546e2fe 100644
--- a/api_docs/kbn_eslint_plugin_imports.mdx
+++ b/api_docs/kbn_eslint_plugin_imports.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports
title: "@kbn/eslint-plugin-imports"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/eslint-plugin-imports plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports']
---
import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json';
diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx
index 3e572a3779092..fdda2b3f6ebe5 100644
--- a/api_docs/kbn_expandable_flyout.mdx
+++ b/api_docs/kbn_expandable_flyout.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout
title: "@kbn/expandable-flyout"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/expandable-flyout plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout']
---
import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json';
diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx
index 9384211751121..a974251b4dad8 100644
--- a/api_docs/kbn_field_types.mdx
+++ b/api_docs/kbn_field_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types
title: "@kbn/field-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/field-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types']
---
import kbnFieldTypesObj from './kbn_field_types.devdocs.json';
diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx
index 119d12e8c2519..73e86b7c67629 100644
--- a/api_docs/kbn_find_used_node_modules.mdx
+++ b/api_docs/kbn_find_used_node_modules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules
title: "@kbn/find-used-node-modules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/find-used-node-modules plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules']
---
import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json';
diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx
index c8c33f36010f0..63f124509c300 100644
--- a/api_docs/kbn_ftr_common_functional_services.mdx
+++ b/api_docs/kbn_ftr_common_functional_services.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services
title: "@kbn/ftr-common-functional-services"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ftr-common-functional-services plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services']
---
import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json';
diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx
index fa01a4af009d7..37ee26c0f3b3f 100644
--- a/api_docs/kbn_generate.mdx
+++ b/api_docs/kbn_generate.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate
title: "@kbn/generate"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate']
---
import kbnGenerateObj from './kbn_generate.devdocs.json';
diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx
index f17bc597f7bfd..387a413908c52 100644
--- a/api_docs/kbn_generate_csv.mdx
+++ b/api_docs/kbn_generate_csv.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv
title: "@kbn/generate-csv"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-csv plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv']
---
import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json';
diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx
index 554a518043c00..b5bb5cd651076 100644
--- a/api_docs/kbn_generate_csv_types.mdx
+++ b/api_docs/kbn_generate_csv_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types
title: "@kbn/generate-csv-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate-csv-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types']
---
import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json';
diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx
index cc788d3dce7a3..78feb6802044e 100644
--- a/api_docs/kbn_guided_onboarding.mdx
+++ b/api_docs/kbn_guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding
title: "@kbn/guided-onboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/guided-onboarding plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding']
---
import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json';
diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx
index b92550dcff2d3..0327f271ee86e 100644
--- a/api_docs/kbn_handlebars.mdx
+++ b/api_docs/kbn_handlebars.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars
title: "@kbn/handlebars"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/handlebars plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars']
---
import kbnHandlebarsObj from './kbn_handlebars.devdocs.json';
diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx
index 8fba93c99ad10..d3fa5f05e45be 100644
--- a/api_docs/kbn_hapi_mocks.mdx
+++ b/api_docs/kbn_hapi_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks
title: "@kbn/hapi-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/hapi-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks']
---
import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json';
diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx
index 34a5399beb6fb..aaf03cfd7f034 100644
--- a/api_docs/kbn_health_gateway_server.mdx
+++ b/api_docs/kbn_health_gateway_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server
title: "@kbn/health-gateway-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/health-gateway-server plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server']
---
import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json';
diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx
index 1247ec88d81b1..cb479d05332eb 100644
--- a/api_docs/kbn_home_sample_data_card.mdx
+++ b/api_docs/kbn_home_sample_data_card.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card
title: "@kbn/home-sample-data-card"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-card plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card']
---
import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json';
diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx
index 90cf68fc34102..aee3906e9c3b5 100644
--- a/api_docs/kbn_home_sample_data_tab.mdx
+++ b/api_docs/kbn_home_sample_data_tab.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab
title: "@kbn/home-sample-data-tab"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-tab plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab']
---
import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json';
diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx
index b9b54ff5d891e..6d818b543013b 100644
--- a/api_docs/kbn_i18n.mdx
+++ b/api_docs/kbn_i18n.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n
title: "@kbn/i18n"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n']
---
import kbnI18nObj from './kbn_i18n.devdocs.json';
diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx
index 4d0f35fa2fed4..9d9625babad32 100644
--- a/api_docs/kbn_i18n_react.mdx
+++ b/api_docs/kbn_i18n_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react
title: "@kbn/i18n-react"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n-react plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react']
---
import kbnI18nReactObj from './kbn_i18n_react.devdocs.json';
diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx
index c5236a60823d4..26d677cb5a949 100644
--- a/api_docs/kbn_import_resolver.mdx
+++ b/api_docs/kbn_import_resolver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver
title: "@kbn/import-resolver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/import-resolver plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver']
---
import kbnImportResolverObj from './kbn_import_resolver.devdocs.json';
diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx
index f6fec72ca6c5c..0470e40ad7f5c 100644
--- a/api_docs/kbn_interpreter.mdx
+++ b/api_docs/kbn_interpreter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter
title: "@kbn/interpreter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/interpreter plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter']
---
import kbnInterpreterObj from './kbn_interpreter.devdocs.json';
diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx
index 4563e91976c0f..ce0adaa037349 100644
--- a/api_docs/kbn_io_ts_utils.mdx
+++ b/api_docs/kbn_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils
title: "@kbn/io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/io-ts-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils']
---
import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx
index 0f569c7e4b781..c6ab325fe11ab 100644
--- a/api_docs/kbn_jest_serializers.mdx
+++ b/api_docs/kbn_jest_serializers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers
title: "@kbn/jest-serializers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/jest-serializers plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers']
---
import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json';
diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx
index ed185325f7d70..847c76856afea 100644
--- a/api_docs/kbn_journeys.mdx
+++ b/api_docs/kbn_journeys.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys
title: "@kbn/journeys"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/journeys plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys']
---
import kbnJourneysObj from './kbn_journeys.devdocs.json';
diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx
index 3dea9198460e9..22d3d3b2d2be2 100644
--- a/api_docs/kbn_json_ast.mdx
+++ b/api_docs/kbn_json_ast.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast
title: "@kbn/json-ast"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/json-ast plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast']
---
import kbnJsonAstObj from './kbn_json_ast.devdocs.json';
diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx
index 8e92869659352..21ac7e8ef6b01 100644
--- a/api_docs/kbn_kibana_manifest_schema.mdx
+++ b/api_docs/kbn_kibana_manifest_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema
title: "@kbn/kibana-manifest-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/kibana-manifest-schema plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema']
---
import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json';
diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx
index 1dff4192540fb..675a4ff7505f4 100644
--- a/api_docs/kbn_language_documentation_popover.mdx
+++ b/api_docs/kbn_language_documentation_popover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover
title: "@kbn/language-documentation-popover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/language-documentation-popover plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover']
---
import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json';
diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx
index ee841659574df..3c258a7029b7d 100644
--- a/api_docs/kbn_logging.mdx
+++ b/api_docs/kbn_logging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging
title: "@kbn/logging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging']
---
import kbnLoggingObj from './kbn_logging.devdocs.json';
diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx
index bb672082d14a2..5242d16b480ba 100644
--- a/api_docs/kbn_logging_mocks.mdx
+++ b/api_docs/kbn_logging_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks
title: "@kbn/logging-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks']
---
import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json';
diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx
index 148b99fab3dc5..6de983ffe2787 100644
--- a/api_docs/kbn_managed_vscode_config.mdx
+++ b/api_docs/kbn_managed_vscode_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config
title: "@kbn/managed-vscode-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/managed-vscode-config plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config']
---
import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json';
diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx
index 352b8ac112670..f49a95fcb1136 100644
--- a/api_docs/kbn_mapbox_gl.mdx
+++ b/api_docs/kbn_mapbox_gl.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl
title: "@kbn/mapbox-gl"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/mapbox-gl plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl']
---
import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json';
diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx
index b428552cafca0..54bd1594c113c 100644
--- a/api_docs/kbn_ml_agg_utils.mdx
+++ b/api_docs/kbn_ml_agg_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils
title: "@kbn/ml-agg-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-agg-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils']
---
import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx
index 0eb9c7ede7aba..9a68c91936c51 100644
--- a/api_docs/kbn_ml_anomaly_utils.mdx
+++ b/api_docs/kbn_ml_anomaly_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils
title: "@kbn/ml-anomaly-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-anomaly-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils']
---
import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx
index 067156f34c86f..e2fa5d854272d 100644
--- a/api_docs/kbn_ml_date_picker.mdx
+++ b/api_docs/kbn_ml_date_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker
title: "@kbn/ml-date-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-date-picker plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker']
---
import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json';
diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx
index ae639211eb025..bc14af7525a6e 100644
--- a/api_docs/kbn_ml_error_utils.mdx
+++ b/api_docs/kbn_ml_error_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils
title: "@kbn/ml-error-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-error-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils']
---
import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx
index fc9901dc7f7f6..cc370d3e2d4b8 100644
--- a/api_docs/kbn_ml_is_defined.mdx
+++ b/api_docs/kbn_ml_is_defined.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined
title: "@kbn/ml-is-defined"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-defined plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined']
---
import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json';
diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx
index 75333a0955b97..20fef981c6335 100644
--- a/api_docs/kbn_ml_is_populated_object.mdx
+++ b/api_docs/kbn_ml_is_populated_object.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object
title: "@kbn/ml-is-populated-object"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-populated-object plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object']
---
import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json';
diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx
index b95add310c5bf..10b58be3c138f 100644
--- a/api_docs/kbn_ml_local_storage.mdx
+++ b/api_docs/kbn_ml_local_storage.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage
title: "@kbn/ml-local-storage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-local-storage plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage']
---
import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json';
diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx
index 59fb9f92eb568..0f332857c08e3 100644
--- a/api_docs/kbn_ml_nested_property.mdx
+++ b/api_docs/kbn_ml_nested_property.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property
title: "@kbn/ml-nested-property"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-nested-property plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property']
---
import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json';
diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx
index a9d14a18479b8..ddc753c464dcb 100644
--- a/api_docs/kbn_ml_number_utils.mdx
+++ b/api_docs/kbn_ml_number_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils
title: "@kbn/ml-number-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-number-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils']
---
import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx
index 552a18290b02b..42b0bd39a175a 100644
--- a/api_docs/kbn_ml_query_utils.mdx
+++ b/api_docs/kbn_ml_query_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils
title: "@kbn/ml-query-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-query-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils']
---
import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx
index 7ec331e1232db..29aab39564a57 100644
--- a/api_docs/kbn_ml_random_sampler_utils.mdx
+++ b/api_docs/kbn_ml_random_sampler_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils
title: "@kbn/ml-random-sampler-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-random-sampler-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils']
---
import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx
index 8124c253e12a6..9e9e1322b3b28 100644
--- a/api_docs/kbn_ml_route_utils.mdx
+++ b/api_docs/kbn_ml_route_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils
title: "@kbn/ml-route-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-route-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils']
---
import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx
index b83570ce66202..dda169bd3c222 100644
--- a/api_docs/kbn_ml_string_hash.mdx
+++ b/api_docs/kbn_ml_string_hash.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash
title: "@kbn/ml-string-hash"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-string-hash plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash']
---
import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json';
diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx
index 7182e411a7b03..9856f0f2dbbd5 100644
--- a/api_docs/kbn_ml_trained_models_utils.mdx
+++ b/api_docs/kbn_ml_trained_models_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils
title: "@kbn/ml-trained-models-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-trained-models-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils']
---
import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx
index 3a0483363a1a4..ccea04d96aaae 100644
--- a/api_docs/kbn_ml_url_state.mdx
+++ b/api_docs/kbn_ml_url_state.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state
title: "@kbn/ml-url-state"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-url-state plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state']
---
import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json';
diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx
index b01530b7f94fd..1c6c42cde9fb6 100644
--- a/api_docs/kbn_monaco.mdx
+++ b/api_docs/kbn_monaco.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco
title: "@kbn/monaco"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/monaco plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco']
---
import kbnMonacoObj from './kbn_monaco.devdocs.json';
diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx
index db71c463ee32f..b3b714d835e44 100644
--- a/api_docs/kbn_object_versioning.mdx
+++ b/api_docs/kbn_object_versioning.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning
title: "@kbn/object-versioning"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/object-versioning plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning']
---
import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json';
diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx
index 1608a792749e9..0e31177efcc3d 100644
--- a/api_docs/kbn_observability_alert_details.mdx
+++ b/api_docs/kbn_observability_alert_details.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details
title: "@kbn/observability-alert-details"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/observability-alert-details plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details']
---
import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json';
diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx
index 2200af2570574..1cca819b57186 100644
--- a/api_docs/kbn_optimizer.mdx
+++ b/api_docs/kbn_optimizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer
title: "@kbn/optimizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer']
---
import kbnOptimizerObj from './kbn_optimizer.devdocs.json';
diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx
index b85fa82f0a0ab..d83228c92dd7d 100644
--- a/api_docs/kbn_optimizer_webpack_helpers.mdx
+++ b/api_docs/kbn_optimizer_webpack_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers
title: "@kbn/optimizer-webpack-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer-webpack-helpers plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers']
---
import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json';
diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx
index 4e3b8bab95c5d..d2b9c6be3b53d 100644
--- a/api_docs/kbn_osquery_io_ts_types.mdx
+++ b/api_docs/kbn_osquery_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types
title: "@kbn/osquery-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/osquery-io-ts-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types']
---
import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx
index 5a73fcb2ba960..90b0933eec6df 100644
--- a/api_docs/kbn_performance_testing_dataset_extractor.mdx
+++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor
title: "@kbn/performance-testing-dataset-extractor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/performance-testing-dataset-extractor plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor']
---
import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json';
diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx
index 0999880b9357e..6b5a330aec4ff 100644
--- a/api_docs/kbn_plugin_generator.mdx
+++ b/api_docs/kbn_plugin_generator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator
title: "@kbn/plugin-generator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-generator plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator']
---
import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json';
diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx
index ad93ce65a276a..9a659ac1ec0bf 100644
--- a/api_docs/kbn_plugin_helpers.mdx
+++ b/api_docs/kbn_plugin_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers
title: "@kbn/plugin-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-helpers plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers']
---
import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json';
diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx
index c55e5ebca1801..7f65dcab24031 100644
--- a/api_docs/kbn_random_sampling.mdx
+++ b/api_docs/kbn_random_sampling.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling
title: "@kbn/random-sampling"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/random-sampling plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling']
---
import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json';
diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx
index 481b790d0cf2f..90362222dde04 100644
--- a/api_docs/kbn_react_field.mdx
+++ b/api_docs/kbn_react_field.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field
title: "@kbn/react-field"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-field plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field']
---
import kbnReactFieldObj from './kbn_react_field.devdocs.json';
diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx
index ef801b2eabc61..2c037c3c510c4 100644
--- a/api_docs/kbn_repo_file_maps.mdx
+++ b/api_docs/kbn_repo_file_maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps
title: "@kbn/repo-file-maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-file-maps plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps']
---
import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json';
diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx
index c9276070053e4..febadc37eeb41 100644
--- a/api_docs/kbn_repo_linter.mdx
+++ b/api_docs/kbn_repo_linter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter
title: "@kbn/repo-linter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-linter plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter']
---
import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json';
diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx
index c4a7a8f796055..9b26e6d0e23a5 100644
--- a/api_docs/kbn_repo_path.mdx
+++ b/api_docs/kbn_repo_path.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path
title: "@kbn/repo-path"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-path plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path']
---
import kbnRepoPathObj from './kbn_repo_path.devdocs.json';
diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx
index 6cf8023612c09..0554ca54d6fc3 100644
--- a/api_docs/kbn_repo_source_classifier.mdx
+++ b/api_docs/kbn_repo_source_classifier.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier
title: "@kbn/repo-source-classifier"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-source-classifier plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier']
---
import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json';
diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx
index f3a7e01a167c5..c96b8626c67ad 100644
--- a/api_docs/kbn_reporting_common.mdx
+++ b/api_docs/kbn_reporting_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common
title: "@kbn/reporting-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/reporting-common plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common']
---
import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json';
diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx
index 8f0e4e2ae0d95..c8cfc2b7730f4 100644
--- a/api_docs/kbn_rison.mdx
+++ b/api_docs/kbn_rison.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison
title: "@kbn/rison"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rison plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison']
---
import kbnRisonObj from './kbn_rison.devdocs.json';
diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx
index f7ecc8c840253..7565f10827d76 100644
--- a/api_docs/kbn_rule_data_utils.mdx
+++ b/api_docs/kbn_rule_data_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils
title: "@kbn/rule-data-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rule-data-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils']
---
import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json';
diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx
index d259084238454..6cd4a72a43cc6 100644
--- a/api_docs/kbn_saved_objects_settings.mdx
+++ b/api_docs/kbn_saved_objects_settings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings
title: "@kbn/saved-objects-settings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/saved-objects-settings plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings']
---
import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json';
diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx
index c9bf331a35ac8..84afa878dcaaa 100644
--- a/api_docs/kbn_security_solution_side_nav.mdx
+++ b/api_docs/kbn_security_solution_side_nav.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav
title: "@kbn/security-solution-side-nav"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-side-nav plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav']
---
import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json';
diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx
index 9e7966a1f327b..6fd1a860434f5 100644
--- a/api_docs/kbn_security_solution_storybook_config.mdx
+++ b/api_docs/kbn_security_solution_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config
title: "@kbn/security-solution-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/security-solution-storybook-config plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config']
---
import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx
index 2062780d73052..9080331f2487d 100644
--- a/api_docs/kbn_securitysolution_autocomplete.mdx
+++ b/api_docs/kbn_securitysolution_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete
title: "@kbn/securitysolution-autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-autocomplete plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete']
---
import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx
index 6ef0af2e73766..16f0f69e67ce7 100644
--- a/api_docs/kbn_securitysolution_data_table.mdx
+++ b/api_docs/kbn_securitysolution_data_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table
title: "@kbn/securitysolution-data-table"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-data-table plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table']
---
import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx
index 29e7e20b3550e..96d6e4b4a9816 100644
--- a/api_docs/kbn_securitysolution_ecs.mdx
+++ b/api_docs/kbn_securitysolution_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs
title: "@kbn/securitysolution-ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-ecs plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs']
---
import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx
index f79dff45dae33..a8dccf7999ee4 100644
--- a/api_docs/kbn_securitysolution_es_utils.mdx
+++ b/api_docs/kbn_securitysolution_es_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils
title: "@kbn/securitysolution-es-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-es-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils']
---
import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx
index e0d3347dcf55a..bed0332ebc9a8 100644
--- a/api_docs/kbn_securitysolution_exception_list_components.mdx
+++ b/api_docs/kbn_securitysolution_exception_list_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components
title: "@kbn/securitysolution-exception-list-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-exception-list-components plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components']
---
import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx
index fa9a1ddf758fa..06217243260e3 100644
--- a/api_docs/kbn_securitysolution_grouping.mdx
+++ b/api_docs/kbn_securitysolution_grouping.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping
title: "@kbn/securitysolution-grouping"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-grouping plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping']
---
import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx
index 0ce43c34f1a7e..28f3b71d236f5 100644
--- a/api_docs/kbn_securitysolution_hook_utils.mdx
+++ b/api_docs/kbn_securitysolution_hook_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils
title: "@kbn/securitysolution-hook-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-hook-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils']
---
import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
index bfdc8bfe47ba4..bb1f08706707b 100644
--- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types
title: "@kbn/securitysolution-io-ts-alerting-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types']
---
import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx
index f62f221439ab0..3e6a311a00f49 100644
--- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types
title: "@kbn/securitysolution-io-ts-list-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-list-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types']
---
import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx
index d280b1957b676..dc7d45dc27073 100644
--- a/api_docs/kbn_securitysolution_io_ts_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types
title: "@kbn/securitysolution-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types']
---
import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx
index 7ffbb2251ca9f..d509b11e5574c 100644
--- a/api_docs/kbn_securitysolution_io_ts_utils.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils
title: "@kbn/securitysolution-io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils']
---
import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx
index 4aa88d803255f..610dd5d225d1e 100644
--- a/api_docs/kbn_securitysolution_list_api.mdx
+++ b/api_docs/kbn_securitysolution_list_api.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api
title: "@kbn/securitysolution-list-api"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-api plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api']
---
import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx
index a10d6b57145a2..1652819e6987b 100644
--- a/api_docs/kbn_securitysolution_list_constants.mdx
+++ b/api_docs/kbn_securitysolution_list_constants.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants
title: "@kbn/securitysolution-list-constants"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-constants plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants']
---
import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx
index 22f756477855b..38f0f7409e7ce 100644
--- a/api_docs/kbn_securitysolution_list_hooks.mdx
+++ b/api_docs/kbn_securitysolution_list_hooks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks
title: "@kbn/securitysolution-list-hooks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-hooks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks']
---
import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx
index 741e42609c39a..b2f2315b21f88 100644
--- a/api_docs/kbn_securitysolution_list_utils.mdx
+++ b/api_docs/kbn_securitysolution_list_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils
title: "@kbn/securitysolution-list-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils']
---
import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx
index fe86e9b091892..be62c5892a38b 100644
--- a/api_docs/kbn_securitysolution_rules.mdx
+++ b/api_docs/kbn_securitysolution_rules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules
title: "@kbn/securitysolution-rules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-rules plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules']
---
import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx
index 35f792cae9506..efa095b053d10 100644
--- a/api_docs/kbn_securitysolution_t_grid.mdx
+++ b/api_docs/kbn_securitysolution_t_grid.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid
title: "@kbn/securitysolution-t-grid"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-t-grid plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid']
---
import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx
index 37a550c5b5af4..c70d52cdb89fa 100644
--- a/api_docs/kbn_securitysolution_utils.mdx
+++ b/api_docs/kbn_securitysolution_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils
title: "@kbn/securitysolution-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils']
---
import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json';
diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx
index 8f484a655efc6..19d9a9b3baa3c 100644
--- a/api_docs/kbn_server_http_tools.mdx
+++ b/api_docs/kbn_server_http_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools
title: "@kbn/server-http-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-http-tools plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools']
---
import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json';
diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx
index ebffa49138453..a092a4dbe3ddd 100644
--- a/api_docs/kbn_server_route_repository.mdx
+++ b/api_docs/kbn_server_route_repository.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository
title: "@kbn/server-route-repository"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-route-repository plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository']
---
import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json';
diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx
index 1a42ef80fb0de..dbdcc98ebe050 100644
--- a/api_docs/kbn_serverless_project_switcher.mdx
+++ b/api_docs/kbn_serverless_project_switcher.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher
title: "@kbn/serverless-project-switcher"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/serverless-project-switcher plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher']
---
import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json';
diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx
index 5eacd9b0a82f6..38f5b9be7b2b5 100644
--- a/api_docs/kbn_serverless_storybook_config.mdx
+++ b/api_docs/kbn_serverless_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config
title: "@kbn/serverless-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/serverless-storybook-config plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config']
---
import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx
index b17255137db88..baab8d2da063e 100644
--- a/api_docs/kbn_shared_svg.mdx
+++ b/api_docs/kbn_shared_svg.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg
title: "@kbn/shared-svg"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-svg plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg']
---
import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx
index a57196c14281b..ff24cb060a21d 100644
--- a/api_docs/kbn_shared_ux_avatar_solution.mdx
+++ b/api_docs/kbn_shared_ux_avatar_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution
title: "@kbn/shared-ux-avatar-solution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-solution plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution']
---
import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
index 9ebebf364f044..c73e6855e2f14 100644
--- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
+++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components
title: "@kbn/shared-ux-avatar-user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components']
---
import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
index 17fbc06b566f6..9ce8b9a0ba4da 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen
title: "@kbn/shared-ux-button-exit-full-screen"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen']
---
import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
index 1e7944531d452..a8bf9bab293e6 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks
title: "@kbn/shared-ux-button-exit-full-screen-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks']
---
import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx
index be7b573c54aa3..423372462b4c2 100644
--- a/api_docs/kbn_shared_ux_button_toolbar.mdx
+++ b/api_docs/kbn_shared_ux_button_toolbar.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar
title: "@kbn/shared-ux-button-toolbar"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-toolbar plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar']
---
import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx
index d2919745be9f7..2022a9fd65264 100644
--- a/api_docs/kbn_shared_ux_card_no_data.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data
title: "@kbn/shared-ux-card-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data']
---
import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
index 1787030b03df3..59990ae13ea5e 100644
--- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks
title: "@kbn/shared-ux-card-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks']
---
import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx
index cbe4aee50e5ca..0ba5f5b15e15a 100644
--- a/api_docs/kbn_shared_ux_chrome_navigation.mdx
+++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation
title: "@kbn/shared-ux-chrome-navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-chrome-navigation plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation']
---
import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx
index b1e4ea5ca2a3a..5f805dbf12fc5 100644
--- a/api_docs/kbn_shared_ux_file_context.mdx
+++ b/api_docs/kbn_shared_ux_file_context.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context
title: "@kbn/shared-ux-file-context"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-context plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context']
---
import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx
index e02b1bb8104b2..3d99c911b80ac 100644
--- a/api_docs/kbn_shared_ux_file_image.mdx
+++ b/api_docs/kbn_shared_ux_file_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image
title: "@kbn/shared-ux-file-image"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image']
---
import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx
index ad00bb6e0b1df..3bab89888e561 100644
--- a/api_docs/kbn_shared_ux_file_image_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks
title: "@kbn/shared-ux-file-image-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks']
---
import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx
index c190183731438..01ba73d7d3ce3 100644
--- a/api_docs/kbn_shared_ux_file_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks
title: "@kbn/shared-ux-file-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks']
---
import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx
index ffe2cf025a939..6d7a369acc1af 100644
--- a/api_docs/kbn_shared_ux_file_picker.mdx
+++ b/api_docs/kbn_shared_ux_file_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker
title: "@kbn/shared-ux-file-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-picker plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker']
---
import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx
index cb5e706f945c7..eb7bad00d265f 100644
--- a/api_docs/kbn_shared_ux_file_types.mdx
+++ b/api_docs/kbn_shared_ux_file_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types
title: "@kbn/shared-ux-file-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types']
---
import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx
index 38a9d2338a910..c95c80180c360 100644
--- a/api_docs/kbn_shared_ux_file_upload.mdx
+++ b/api_docs/kbn_shared_ux_file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload
title: "@kbn/shared-ux-file-upload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-upload plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload']
---
import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx
index aed2c1e0da3a9..64428d6391a97 100644
--- a/api_docs/kbn_shared_ux_file_util.mdx
+++ b/api_docs/kbn_shared_ux_file_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util
title: "@kbn/shared-ux-file-util"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-util plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util']
---
import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx
index 27daa3a2abf4c..a1b8c195bde10 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app
title: "@kbn/shared-ux-link-redirect-app"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app']
---
import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
index 41c2676d8ebd1..c3e0081b8e803 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks
title: "@kbn/shared-ux-link-redirect-app-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks']
---
import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx
index f8a0af95f5375..aa622d4dd90d7 100644
--- a/api_docs/kbn_shared_ux_markdown.mdx
+++ b/api_docs/kbn_shared_ux_markdown.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown
title: "@kbn/shared-ux-markdown"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown']
---
import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx
index 397a59329cad9..b104e4426f664 100644
--- a/api_docs/kbn_shared_ux_markdown_mocks.mdx
+++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks
title: "@kbn/shared-ux-markdown-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks']
---
import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
index 4b9cf766a08bc..696eab3a759a7 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data
title: "@kbn/shared-ux-page-analytics-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data']
---
import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
index a7664b580acf7..00e111458b597 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks
title: "@kbn/shared-ux-page-analytics-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks']
---
import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
index 5fc059b5f9467..4c59b4cb306ca 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data
title: "@kbn/shared-ux-page-kibana-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data']
---
import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
index bdad9f26332f6..3834de54f82a8 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks
title: "@kbn/shared-ux-page-kibana-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks']
---
import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx
index c55ec200f8899..b165f6a8a47f8 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template
title: "@kbn/shared-ux-page-kibana-template"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template']
---
import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
index 07283d1e905c7..388314aefd2ef 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks
title: "@kbn/shared-ux-page-kibana-template-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks']
---
import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx
index 158cf83a64522..1266f7cbc3ab4 100644
--- a/api_docs/kbn_shared_ux_page_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data
title: "@kbn/shared-ux-page-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data']
---
import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx
index 7caa9f0f25452..a2606f60404de 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config
title: "@kbn/shared-ux-page-no-data-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config']
---
import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
index b0b96167cc56a..0d4f5c8259680 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks
title: "@kbn/shared-ux-page-no-data-config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks']
---
import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
index e28bd8ca19215..3f46d971cc619 100644
--- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks
title: "@kbn/shared-ux-page-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks']
---
import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx
index bf66c63104ac6..82e20aea0ae27 100644
--- a/api_docs/kbn_shared_ux_page_solution_nav.mdx
+++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav
title: "@kbn/shared-ux-page-solution-nav"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-solution-nav plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav']
---
import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
index 2d48b7572fdea..d31bf497d457e 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views
title: "@kbn/shared-ux-prompt-no-data-views"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views']
---
import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
index 09e193317d30f..9f68bf5f6b061 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks
title: "@kbn/shared-ux-prompt-no-data-views-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks']
---
import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx
index ce8c14e6705b7..d139725980d5f 100644
--- a/api_docs/kbn_shared_ux_prompt_not_found.mdx
+++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found
title: "@kbn/shared-ux-prompt-not-found"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-not-found plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found']
---
import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx
index 0456bee00aaab..05ad1054a286d 100644
--- a/api_docs/kbn_shared_ux_router.mdx
+++ b/api_docs/kbn_shared_ux_router.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router
title: "@kbn/shared-ux-router"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router']
---
import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx
index 75272de56ac5c..5449f43864de1 100644
--- a/api_docs/kbn_shared_ux_router_mocks.mdx
+++ b/api_docs/kbn_shared_ux_router_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks
title: "@kbn/shared-ux-router-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router-mocks plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks']
---
import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx
index 51598af60ac3a..bf5a7372e6c25 100644
--- a/api_docs/kbn_shared_ux_storybook_config.mdx
+++ b/api_docs/kbn_shared_ux_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config
title: "@kbn/shared-ux-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-config plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config']
---
import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx
index c8fc37898dfbc..ffe98dc196ed5 100644
--- a/api_docs/kbn_shared_ux_storybook_mock.mdx
+++ b/api_docs/kbn_shared_ux_storybook_mock.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock
title: "@kbn/shared-ux-storybook-mock"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-mock plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock']
---
import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx
index 4eb4e745a3473..19b5b2668355c 100644
--- a/api_docs/kbn_shared_ux_utility.mdx
+++ b/api_docs/kbn_shared_ux_utility.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility
title: "@kbn/shared-ux-utility"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-utility plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility']
---
import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json';
diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx
index a70c4b5d7a732..0606a19e2f866 100644
--- a/api_docs/kbn_slo_schema.mdx
+++ b/api_docs/kbn_slo_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema
title: "@kbn/slo-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/slo-schema plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema']
---
import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json';
diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx
index 208d50cea463b..b1c452803c8c8 100644
--- a/api_docs/kbn_some_dev_log.mdx
+++ b/api_docs/kbn_some_dev_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log
title: "@kbn/some-dev-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/some-dev-log plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log']
---
import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json';
diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx
index 24df7c62c8a4e..8e4538d4ce070 100644
--- a/api_docs/kbn_std.mdx
+++ b/api_docs/kbn_std.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std
title: "@kbn/std"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/std plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std']
---
import kbnStdObj from './kbn_std.devdocs.json';
diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx
index 3de8cc0bba77e..a7b2838b4db17 100644
--- a/api_docs/kbn_stdio_dev_helpers.mdx
+++ b/api_docs/kbn_stdio_dev_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers
title: "@kbn/stdio-dev-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/stdio-dev-helpers plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers']
---
import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json';
diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx
index e27d9997a006a..2c62c77bc8a32 100644
--- a/api_docs/kbn_storybook.mdx
+++ b/api_docs/kbn_storybook.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook
title: "@kbn/storybook"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/storybook plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook']
---
import kbnStorybookObj from './kbn_storybook.devdocs.json';
diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx
index fca7b89d94a55..617616e580a5d 100644
--- a/api_docs/kbn_telemetry_tools.mdx
+++ b/api_docs/kbn_telemetry_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools
title: "@kbn/telemetry-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/telemetry-tools plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools']
---
import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json';
diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx
index 0657acf4decd9..e1286eede926f 100644
--- a/api_docs/kbn_test.mdx
+++ b/api_docs/kbn_test.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test
title: "@kbn/test"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test']
---
import kbnTestObj from './kbn_test.devdocs.json';
diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx
index 97f4123c42f06..713244500746c 100644
--- a/api_docs/kbn_test_jest_helpers.mdx
+++ b/api_docs/kbn_test_jest_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers
title: "@kbn/test-jest-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-jest-helpers plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers']
---
import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json';
diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx
index b428e002d4f38..86a827142731d 100644
--- a/api_docs/kbn_test_subj_selector.mdx
+++ b/api_docs/kbn_test_subj_selector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector
title: "@kbn/test-subj-selector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-subj-selector plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector']
---
import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json';
diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx
index c4c5804f522f4..3daa0d41b8b87 100644
--- a/api_docs/kbn_tooling_log.mdx
+++ b/api_docs/kbn_tooling_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log
title: "@kbn/tooling-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/tooling-log plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log']
---
import kbnToolingLogObj from './kbn_tooling_log.devdocs.json';
diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx
index c5b676a23772a..732ef67b675ad 100644
--- a/api_docs/kbn_ts_projects.mdx
+++ b/api_docs/kbn_ts_projects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects
title: "@kbn/ts-projects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ts-projects plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects']
---
import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json';
diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx
index 58603f8af5378..6728d95ce8627 100644
--- a/api_docs/kbn_typed_react_router_config.mdx
+++ b/api_docs/kbn_typed_react_router_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config
title: "@kbn/typed-react-router-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/typed-react-router-config plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config']
---
import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json';
diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx
index 0edf57214b073..f07f6d3b1a1d5 100644
--- a/api_docs/kbn_ui_actions_browser.mdx
+++ b/api_docs/kbn_ui_actions_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser
title: "@kbn/ui-actions-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-actions-browser plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser']
---
import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json';
diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx
index ec038514694bb..588e84bf40101 100644
--- a/api_docs/kbn_ui_shared_deps_src.mdx
+++ b/api_docs/kbn_ui_shared_deps_src.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src
title: "@kbn/ui-shared-deps-src"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-shared-deps-src plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src']
---
import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json';
diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx
index 7698de3b4ba0a..f8323e7cc6c81 100644
--- a/api_docs/kbn_ui_theme.mdx
+++ b/api_docs/kbn_ui_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme
title: "@kbn/ui-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-theme plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme']
---
import kbnUiThemeObj from './kbn_ui_theme.devdocs.json';
diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx
index 354800e963fcb..192c87114267c 100644
--- a/api_docs/kbn_url_state.mdx
+++ b/api_docs/kbn_url_state.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state
title: "@kbn/url-state"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/url-state plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state']
---
import kbnUrlStateObj from './kbn_url_state.devdocs.json';
diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx
index 3277c7a2d8c7f..3f259a0079d76 100644
--- a/api_docs/kbn_user_profile_components.mdx
+++ b/api_docs/kbn_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components
title: "@kbn/user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/user-profile-components plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components']
---
import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx
index 0dc688a52b6ed..4c3d831cf389b 100644
--- a/api_docs/kbn_utility_types.mdx
+++ b/api_docs/kbn_utility_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types
title: "@kbn/utility-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types']
---
import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json';
diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx
index 403975945e245..8967534511fbd 100644
--- a/api_docs/kbn_utility_types_jest.mdx
+++ b/api_docs/kbn_utility_types_jest.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest
title: "@kbn/utility-types-jest"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types-jest plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest']
---
import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json';
diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx
index 7959b1633e241..f46515c85f752 100644
--- a/api_docs/kbn_utils.mdx
+++ b/api_docs/kbn_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils
title: "@kbn/utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils']
---
import kbnUtilsObj from './kbn_utils.devdocs.json';
diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx
index 8eb18e2e299b2..a549beb3fdf13 100644
--- a/api_docs/kbn_yarn_lock_validator.mdx
+++ b/api_docs/kbn_yarn_lock_validator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator
title: "@kbn/yarn-lock-validator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/yarn-lock-validator plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator']
---
import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json';
diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx
index 4102a137156e0..ab6417bc87366 100644
--- a/api_docs/kibana_overview.mdx
+++ b/api_docs/kibana_overview.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview
title: "kibanaOverview"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaOverview plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview']
---
import kibanaOverviewObj from './kibana_overview.devdocs.json';
diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx
index f543e15cf3f24..34d42e357d2ef 100644
--- a/api_docs/kibana_react.mdx
+++ b/api_docs/kibana_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact
title: "kibanaReact"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaReact plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact']
---
import kibanaReactObj from './kibana_react.devdocs.json';
diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx
index 2fee45c9f0ed3..73c779564bba7 100644
--- a/api_docs/kibana_utils.mdx
+++ b/api_docs/kibana_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils
title: "kibanaUtils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaUtils plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils']
---
import kibanaUtilsObj from './kibana_utils.devdocs.json';
diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx
index dee9e5f4de9b2..21ba4fb22af02 100644
--- a/api_docs/kubernetes_security.mdx
+++ b/api_docs/kubernetes_security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity
title: "kubernetesSecurity"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kubernetesSecurity plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity']
---
import kubernetesSecurityObj from './kubernetes_security.devdocs.json';
diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx
index f04723857001a..71e8b9c32ce5f 100644
--- a/api_docs/lens.mdx
+++ b/api_docs/lens.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens
title: "lens"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lens plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens']
---
import lensObj from './lens.devdocs.json';
diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx
index 162130d0c2787..04ca8b2acdceb 100644
--- a/api_docs/license_api_guard.mdx
+++ b/api_docs/license_api_guard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard
title: "licenseApiGuard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseApiGuard plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard']
---
import licenseApiGuardObj from './license_api_guard.devdocs.json';
diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx
index 48beb3e0ec3d5..20c04bcb5dc02 100644
--- a/api_docs/license_management.mdx
+++ b/api_docs/license_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement
title: "licenseManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseManagement plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement']
---
import licenseManagementObj from './license_management.devdocs.json';
diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx
index e5add4390cb8a..a405d5cf71fe2 100644
--- a/api_docs/licensing.mdx
+++ b/api_docs/licensing.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing
title: "licensing"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licensing plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing']
---
import licensingObj from './licensing.devdocs.json';
diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx
index d17a40ef0185e..f4af3f22a66d8 100644
--- a/api_docs/lists.mdx
+++ b/api_docs/lists.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists
title: "lists"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lists plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists']
---
import listsObj from './lists.devdocs.json';
diff --git a/api_docs/management.mdx b/api_docs/management.mdx
index 73a4d33761a19..769e250dc2fc6 100644
--- a/api_docs/management.mdx
+++ b/api_docs/management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management
title: "management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the management plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management']
---
import managementObj from './management.devdocs.json';
diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx
index 6dbd22c5ead40..200214a2b6820 100644
--- a/api_docs/maps.mdx
+++ b/api_docs/maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps
title: "maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the maps plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps']
---
import mapsObj from './maps.devdocs.json';
diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx
index 0734ff0a7aee3..6ccdf56a2d183 100644
--- a/api_docs/maps_ems.mdx
+++ b/api_docs/maps_ems.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms
title: "mapsEms"
image: https://source.unsplash.com/400x175/?github
description: API docs for the mapsEms plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms']
---
import mapsEmsObj from './maps_ems.devdocs.json';
diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx
index 6490b01e16082..b7bd0ace305a5 100644
--- a/api_docs/ml.mdx
+++ b/api_docs/ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml
title: "ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ml plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml']
---
import mlObj from './ml.devdocs.json';
diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx
index c8a78a87ee562..f0142dbc1d417 100644
--- a/api_docs/monitoring.mdx
+++ b/api_docs/monitoring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring
title: "monitoring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoring plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring']
---
import monitoringObj from './monitoring.devdocs.json';
diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx
index d8c801613b1b3..f74cf04b2f9e3 100644
--- a/api_docs/monitoring_collection.mdx
+++ b/api_docs/monitoring_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection
title: "monitoringCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoringCollection plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection']
---
import monitoringCollectionObj from './monitoring_collection.devdocs.json';
diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx
index fcafeb21935a6..2642dc1591421 100644
--- a/api_docs/navigation.mdx
+++ b/api_docs/navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation
title: "navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the navigation plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation']
---
import navigationObj from './navigation.devdocs.json';
diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx
index dfbd1b4c0f06c..4a3973a7eb881 100644
--- a/api_docs/newsfeed.mdx
+++ b/api_docs/newsfeed.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed
title: "newsfeed"
image: https://source.unsplash.com/400x175/?github
description: API docs for the newsfeed plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed']
---
import newsfeedObj from './newsfeed.devdocs.json';
diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx
index 28e124b9496c2..9e5f1ffda8297 100644
--- a/api_docs/notifications.mdx
+++ b/api_docs/notifications.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications
title: "notifications"
image: https://source.unsplash.com/400x175/?github
description: API docs for the notifications plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications']
---
import notificationsObj from './notifications.devdocs.json';
diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx
index 9a0afd29a1538..5ea4b892d754c 100644
--- a/api_docs/observability.mdx
+++ b/api_docs/observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability
title: "observability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observability plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability']
---
import observabilityObj from './observability.devdocs.json';
diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx
index f7420d96e2eb1..d02e4264d904e 100644
--- a/api_docs/observability_onboarding.mdx
+++ b/api_docs/observability_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding
title: "observabilityOnboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityOnboarding plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding']
---
import observabilityOnboardingObj from './observability_onboarding.devdocs.json';
diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx
index e056f6d5fb147..c5b572a141324 100644
--- a/api_docs/observability_shared.mdx
+++ b/api_docs/observability_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared
title: "observabilityShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observabilityShared plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared']
---
import observabilitySharedObj from './observability_shared.devdocs.json';
diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx
index 78f731aaf6081..289bdaba891e0 100644
--- a/api_docs/osquery.mdx
+++ b/api_docs/osquery.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery
title: "osquery"
image: https://source.unsplash.com/400x175/?github
description: API docs for the osquery plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery']
---
import osqueryObj from './osquery.devdocs.json';
diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx
index 1d3866e098ecd..5e2afad2fc97e 100644
--- a/api_docs/plugin_directory.mdx
+++ b/api_docs/plugin_directory.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory
slug: /kibana-dev-docs/api-meta/plugin-api-directory
title: Directory
description: Directory of public APIs available through plugins or packages.
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| API Count | Any Count | Missing comments | Missing exports |
|--------------|----------|-----------------|--------|
-| 69703 | 523 | 60070 | 1351 |
+| 69705 | 523 | 60072 | 1351 |
## Plugin Directory
@@ -152,10 +152,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| searchprofiler | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 |
| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 283 | 0 | 94 | 1 |
| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 123 | 0 | 82 | 27 |
-| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 7 | 0 | 6 | 0 |
+| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 9 | 0 | 8 | 0 |
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Serverless customizations for observability. | 6 | 0 | 6 | 0 |
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Serverless customizations for search. | 6 | 0 | 6 | 0 |
-| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Serverless customizations for security. | 6 | 0 | 6 | 0 |
+| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 6 | 0 | 6 | 0 |
| | [@elastic/sec-cloudnative-integrations](https://github.com/orgs/elastic/teams/sec-cloudnative-integrations) | - | 7 | 0 | 7 | 1 |
| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 118 | 0 | 59 | 10 |
| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 22 | 1 | 22 | 1 |
diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx
index 5bd5cdf99a18f..98cf4df866fdc 100644
--- a/api_docs/presentation_util.mdx
+++ b/api_docs/presentation_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil
title: "presentationUtil"
image: https://source.unsplash.com/400x175/?github
description: API docs for the presentationUtil plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil']
---
import presentationUtilObj from './presentation_util.devdocs.json';
diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx
index 5400666cf2d09..fb599948f14e0 100644
--- a/api_docs/profiling.mdx
+++ b/api_docs/profiling.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling
title: "profiling"
image: https://source.unsplash.com/400x175/?github
description: API docs for the profiling plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling']
---
import profilingObj from './profiling.devdocs.json';
diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx
index 74eb6f7c5e187..7db18666f79cf 100644
--- a/api_docs/remote_clusters.mdx
+++ b/api_docs/remote_clusters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters
title: "remoteClusters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the remoteClusters plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters']
---
import remoteClustersObj from './remote_clusters.devdocs.json';
diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx
index d35eb4f571a19..9cfdd6baedbc0 100644
--- a/api_docs/reporting.mdx
+++ b/api_docs/reporting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting
title: "reporting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the reporting plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting']
---
import reportingObj from './reporting.devdocs.json';
diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx
index 4f5b74363a1a2..2685a9275713c 100644
--- a/api_docs/rollup.mdx
+++ b/api_docs/rollup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup
title: "rollup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the rollup plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup']
---
import rollupObj from './rollup.devdocs.json';
diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx
index a060a345ca3f9..ee7374c4c3faf 100644
--- a/api_docs/rule_registry.mdx
+++ b/api_docs/rule_registry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry
title: "ruleRegistry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ruleRegistry plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry']
---
import ruleRegistryObj from './rule_registry.devdocs.json';
diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx
index d62e5b91a9791..f3bf528287784 100644
--- a/api_docs/runtime_fields.mdx
+++ b/api_docs/runtime_fields.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields
title: "runtimeFields"
image: https://source.unsplash.com/400x175/?github
description: API docs for the runtimeFields plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields']
---
import runtimeFieldsObj from './runtime_fields.devdocs.json';
diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx
index a824cb2897ef5..9c3047d4e9258 100644
--- a/api_docs/saved_objects.mdx
+++ b/api_docs/saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects
title: "savedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjects plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects']
---
import savedObjectsObj from './saved_objects.devdocs.json';
diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx
index 43e4bfb17667c..2adb728690ada 100644
--- a/api_docs/saved_objects_finder.mdx
+++ b/api_docs/saved_objects_finder.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder
title: "savedObjectsFinder"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsFinder plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder']
---
import savedObjectsFinderObj from './saved_objects_finder.devdocs.json';
diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx
index 09b10100f5617..71f97e68af24a 100644
--- a/api_docs/saved_objects_management.mdx
+++ b/api_docs/saved_objects_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement
title: "savedObjectsManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsManagement plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement']
---
import savedObjectsManagementObj from './saved_objects_management.devdocs.json';
diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx
index d01d9f0eb4b4a..f2facd1079ccb 100644
--- a/api_docs/saved_objects_tagging.mdx
+++ b/api_docs/saved_objects_tagging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging
title: "savedObjectsTagging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTagging plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging']
---
import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json';
diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx
index 5830b1026b7d3..8a470c1a11c2b 100644
--- a/api_docs/saved_objects_tagging_oss.mdx
+++ b/api_docs/saved_objects_tagging_oss.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss
title: "savedObjectsTaggingOss"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTaggingOss plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss']
---
import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json';
diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx
index ba7080b89dce1..eaae2c71bb171 100644
--- a/api_docs/saved_search.mdx
+++ b/api_docs/saved_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch
title: "savedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedSearch plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch']
---
import savedSearchObj from './saved_search.devdocs.json';
diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx
index e6e3a00b640cc..0c6d2fa37669b 100644
--- a/api_docs/screenshot_mode.mdx
+++ b/api_docs/screenshot_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode
title: "screenshotMode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotMode plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode']
---
import screenshotModeObj from './screenshot_mode.devdocs.json';
diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx
index dbacb96586e58..79606cf6cb282 100644
--- a/api_docs/screenshotting.mdx
+++ b/api_docs/screenshotting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting
title: "screenshotting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotting plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting']
---
import screenshottingObj from './screenshotting.devdocs.json';
diff --git a/api_docs/security.mdx b/api_docs/security.mdx
index 75e4699d5df9f..f0078501ae3de 100644
--- a/api_docs/security.mdx
+++ b/api_docs/security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security
title: "security"
image: https://source.unsplash.com/400x175/?github
description: API docs for the security plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security']
---
import securityObj from './security.devdocs.json';
diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json
index 05f9a8ddb8eb8..009207179303b 100644
--- a/api_docs/security_solution.devdocs.json
+++ b/api_docs/security_solution.devdocs.json
@@ -1362,12 +1362,13 @@
"children": [
{
"parentPluginId": "securitySolution",
- "id": "def-public.PluginStart.navLinks$",
- "type": "Object",
+ "id": "def-public.PluginStart.getNavLinks$",
+ "type": "Function",
"tags": [],
- "label": "navLinks$",
+ "label": "getNavLinks$",
"description": [],
"signature": [
+ "() => ",
"Observable",
"<",
"NavigationLink",
@@ -1375,7 +1376,9 @@
],
"path": "x-pack/plugins/security_solution/public/types.ts",
"deprecated": false,
- "trackAdoption": false
+ "trackAdoption": false,
+ "children": [],
+ "returnComment": []
},
{
"parentPluginId": "securitySolution",
diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx
index 7cc755117ee7e..6836644e44d06 100644
--- a/api_docs/security_solution.mdx
+++ b/api_docs/security_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution
title: "securitySolution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolution plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution']
---
import securitySolutionObj from './security_solution.devdocs.json';
diff --git a/api_docs/serverless.devdocs.json b/api_docs/serverless.devdocs.json
index 4f9ed4e252309..71e1b254cf003 100644
--- a/api_docs/serverless.devdocs.json
+++ b/api_docs/serverless.devdocs.json
@@ -31,7 +31,54 @@
"path": "x-pack/plugins/serverless/public/types.ts",
"deprecated": false,
"trackAdoption": false,
- "children": [],
+ "children": [
+ {
+ "parentPluginId": "serverless",
+ "id": "def-public.ServerlessPluginStart.setSideNavComponent",
+ "type": "Function",
+ "tags": [],
+ "label": "setSideNavComponent",
+ "description": [],
+ "signature": [
+ "(navigation: ",
+ {
+ "pluginId": "@kbn/core-chrome-browser",
+ "scope": "common",
+ "docId": "kibKbnCoreChromeBrowserPluginApi",
+ "section": "def-common.SideNavComponent",
+ "text": "SideNavComponent"
+ },
+ ") => void"
+ ],
+ "path": "x-pack/plugins/serverless/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "children": [
+ {
+ "parentPluginId": "serverless",
+ "id": "def-public.ServerlessPluginStart.setSideNavComponent.$1",
+ "type": "CompoundType",
+ "tags": [],
+ "label": "navigation",
+ "description": [],
+ "signature": [
+ {
+ "pluginId": "@kbn/core-chrome-browser",
+ "scope": "common",
+ "docId": "kibKbnCoreChromeBrowserPluginApi",
+ "section": "def-common.SideNavComponent",
+ "text": "SideNavComponent"
+ }
+ ],
+ "path": "x-pack/plugins/serverless/public/types.ts",
+ "deprecated": false,
+ "trackAdoption": false,
+ "isRequired": true
+ }
+ ],
+ "returnComment": []
+ }
+ ],
"lifecycle": "start",
"initialIsOpen": true
}
diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx
index e868dcb82a90a..7c6b220a95afb 100644
--- a/api_docs/serverless.mdx
+++ b/api_docs/serverless.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless
title: "serverless"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverless plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless']
---
import serverlessObj from './serverless.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 7 | 0 | 6 | 0 |
+| 9 | 0 | 8 | 0 |
## Client
diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx
index e55b85257299e..ee777a00b738e 100644
--- a/api_docs/serverless_observability.mdx
+++ b/api_docs/serverless_observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability
title: "serverlessObservability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverlessObservability plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability']
---
import serverlessObservabilityObj from './serverless_observability.devdocs.json';
diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx
index 5144b043ff1a6..95a73b2b669d6 100644
--- a/api_docs/serverless_search.mdx
+++ b/api_docs/serverless_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch
title: "serverlessSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverlessSearch plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch']
---
import serverlessSearchObj from './serverless_search.devdocs.json';
diff --git a/api_docs/serverless_security.mdx b/api_docs/serverless_security.mdx
index 349d31ac5a986..27f6e74eceeaa 100644
--- a/api_docs/serverless_security.mdx
+++ b/api_docs/serverless_security.mdx
@@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/serverlessSecurity
title: "serverlessSecurity"
image: https://source.unsplash.com/400x175/?github
description: API docs for the serverlessSecurity plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSecurity']
---
import serverlessSecurityObj from './serverless_security.devdocs.json';
Serverless customizations for security.
-Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin.
+Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) for questions regarding this plugin.
**Code health stats**
diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx
index 35c9c5789c275..5e5f59a8e04a8 100644
--- a/api_docs/session_view.mdx
+++ b/api_docs/session_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView
title: "sessionView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the sessionView plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView']
---
import sessionViewObj from './session_view.devdocs.json';
diff --git a/api_docs/share.mdx b/api_docs/share.mdx
index 4bee86c772ac4..8cfa06ade103f 100644
--- a/api_docs/share.mdx
+++ b/api_docs/share.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share
title: "share"
image: https://source.unsplash.com/400x175/?github
description: API docs for the share plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share']
---
import shareObj from './share.devdocs.json';
diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx
index dec2a3946aaa9..bc4b1f2fa4bca 100644
--- a/api_docs/snapshot_restore.mdx
+++ b/api_docs/snapshot_restore.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore
title: "snapshotRestore"
image: https://source.unsplash.com/400x175/?github
description: API docs for the snapshotRestore plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore']
---
import snapshotRestoreObj from './snapshot_restore.devdocs.json';
diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx
index 473fc9965d9a7..1342650764938 100644
--- a/api_docs/spaces.mdx
+++ b/api_docs/spaces.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces
title: "spaces"
image: https://source.unsplash.com/400x175/?github
description: API docs for the spaces plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces']
---
import spacesObj from './spaces.devdocs.json';
diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx
index 96f5f8da2afbf..21bb24c03beb6 100644
--- a/api_docs/stack_alerts.mdx
+++ b/api_docs/stack_alerts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts
title: "stackAlerts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackAlerts plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts']
---
import stackAlertsObj from './stack_alerts.devdocs.json';
diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx
index 4db7aa7a26d13..fc5955baa6b75 100644
--- a/api_docs/stack_connectors.mdx
+++ b/api_docs/stack_connectors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors
title: "stackConnectors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackConnectors plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors']
---
import stackConnectorsObj from './stack_connectors.devdocs.json';
diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx
index 4de5cd8e8fa7c..d025481610687 100644
--- a/api_docs/task_manager.mdx
+++ b/api_docs/task_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager
title: "taskManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the taskManager plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager']
---
import taskManagerObj from './task_manager.devdocs.json';
diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx
index f82cac45813a4..f0bd7751a69e5 100644
--- a/api_docs/telemetry.mdx
+++ b/api_docs/telemetry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry
title: "telemetry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetry plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry']
---
import telemetryObj from './telemetry.devdocs.json';
diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx
index 303c5edf25e08..7f7e9eb815661 100644
--- a/api_docs/telemetry_collection_manager.mdx
+++ b/api_docs/telemetry_collection_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager
title: "telemetryCollectionManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionManager plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager']
---
import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json';
diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx
index baa4ec6e0a84e..9c8408d247fe9 100644
--- a/api_docs/telemetry_collection_xpack.mdx
+++ b/api_docs/telemetry_collection_xpack.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack
title: "telemetryCollectionXpack"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionXpack plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack']
---
import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json';
diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx
index faf6dea904470..76e90e05018b3 100644
--- a/api_docs/telemetry_management_section.mdx
+++ b/api_docs/telemetry_management_section.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection
title: "telemetryManagementSection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryManagementSection plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection']
---
import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json';
diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx
index f508dd1a9c6fd..cb195bd0e51bd 100644
--- a/api_docs/threat_intelligence.mdx
+++ b/api_docs/threat_intelligence.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence
title: "threatIntelligence"
image: https://source.unsplash.com/400x175/?github
description: API docs for the threatIntelligence plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence']
---
import threatIntelligenceObj from './threat_intelligence.devdocs.json';
diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx
index ba2bec6fefd46..0bd1db1ac664e 100644
--- a/api_docs/timelines.mdx
+++ b/api_docs/timelines.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines
title: "timelines"
image: https://source.unsplash.com/400x175/?github
description: API docs for the timelines plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines']
---
import timelinesObj from './timelines.devdocs.json';
diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx
index f60b4f7db99fb..46ed7e362f6a0 100644
--- a/api_docs/transform.mdx
+++ b/api_docs/transform.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform
title: "transform"
image: https://source.unsplash.com/400x175/?github
description: API docs for the transform plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform']
---
import transformObj from './transform.devdocs.json';
diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx
index 5d22b2ca98a3e..e174db91dce44 100644
--- a/api_docs/triggers_actions_ui.mdx
+++ b/api_docs/triggers_actions_ui.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi
title: "triggersActionsUi"
image: https://source.unsplash.com/400x175/?github
description: API docs for the triggersActionsUi plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi']
---
import triggersActionsUiObj from './triggers_actions_ui.devdocs.json';
diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx
index 3705aaf4c78f1..74d4046be451e 100644
--- a/api_docs/ui_actions.mdx
+++ b/api_docs/ui_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions
title: "uiActions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActions plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions']
---
import uiActionsObj from './ui_actions.devdocs.json';
diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx
index cb256c9fb9abf..022f468eeb134 100644
--- a/api_docs/ui_actions_enhanced.mdx
+++ b/api_docs/ui_actions_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced
title: "uiActionsEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActionsEnhanced plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced']
---
import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json';
diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx
index bd09491ce8755..c543948436c82 100644
--- a/api_docs/unified_field_list.mdx
+++ b/api_docs/unified_field_list.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList
title: "unifiedFieldList"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedFieldList plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList']
---
import unifiedFieldListObj from './unified_field_list.devdocs.json';
diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx
index d64af8a1e3641..e43946ecb63f6 100644
--- a/api_docs/unified_histogram.mdx
+++ b/api_docs/unified_histogram.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram
title: "unifiedHistogram"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedHistogram plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram']
---
import unifiedHistogramObj from './unified_histogram.devdocs.json';
diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx
index 8a398d89880d2..d9553bb785d87 100644
--- a/api_docs/unified_search.mdx
+++ b/api_docs/unified_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch
title: "unifiedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch']
---
import unifiedSearchObj from './unified_search.devdocs.json';
diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx
index a9b577186dbf9..abacd769fb461 100644
--- a/api_docs/unified_search_autocomplete.mdx
+++ b/api_docs/unified_search_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete
title: "unifiedSearch.autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch.autocomplete plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete']
---
import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json';
diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx
index 311cd642e0475..44947a22f35e7 100644
--- a/api_docs/url_forwarding.mdx
+++ b/api_docs/url_forwarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding
title: "urlForwarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the urlForwarding plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding']
---
import urlForwardingObj from './url_forwarding.devdocs.json';
diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx
index c0018a43dadf3..e775eab96dd31 100644
--- a/api_docs/usage_collection.mdx
+++ b/api_docs/usage_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection
title: "usageCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the usageCollection plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection']
---
import usageCollectionObj from './usage_collection.devdocs.json';
diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx
index f3e6f127592fe..3b0c274789ff5 100644
--- a/api_docs/ux.mdx
+++ b/api_docs/ux.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux
title: "ux"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ux plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux']
---
import uxObj from './ux.devdocs.json';
diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx
index dc18fa47f0339..4f45e6c33d243 100644
--- a/api_docs/vis_default_editor.mdx
+++ b/api_docs/vis_default_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor
title: "visDefaultEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visDefaultEditor plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor']
---
import visDefaultEditorObj from './vis_default_editor.devdocs.json';
diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx
index 51bac28729ef4..4a151bb858eea 100644
--- a/api_docs/vis_type_gauge.mdx
+++ b/api_docs/vis_type_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge
title: "visTypeGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeGauge plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge']
---
import visTypeGaugeObj from './vis_type_gauge.devdocs.json';
diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx
index 0685a74ec84b2..91655e068b69e 100644
--- a/api_docs/vis_type_heatmap.mdx
+++ b/api_docs/vis_type_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap
title: "visTypeHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeHeatmap plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap']
---
import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json';
diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx
index dc7a72f84d7f4..b38f8e8f78f9a 100644
--- a/api_docs/vis_type_pie.mdx
+++ b/api_docs/vis_type_pie.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie
title: "visTypePie"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypePie plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie']
---
import visTypePieObj from './vis_type_pie.devdocs.json';
diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx
index 1233c0e07fed6..d3108cfed9b1a 100644
--- a/api_docs/vis_type_table.mdx
+++ b/api_docs/vis_type_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable
title: "visTypeTable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTable plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable']
---
import visTypeTableObj from './vis_type_table.devdocs.json';
diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx
index 0a53735c4c70a..e33dcc6e017ce 100644
--- a/api_docs/vis_type_timelion.mdx
+++ b/api_docs/vis_type_timelion.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion
title: "visTypeTimelion"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimelion plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion']
---
import visTypeTimelionObj from './vis_type_timelion.devdocs.json';
diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx
index 5fd8c74d9931d..ad0d58217b471 100644
--- a/api_docs/vis_type_timeseries.mdx
+++ b/api_docs/vis_type_timeseries.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries
title: "visTypeTimeseries"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimeseries plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries']
---
import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json';
diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx
index 8d791d58f3384..ba7c80b4c76bd 100644
--- a/api_docs/vis_type_vega.mdx
+++ b/api_docs/vis_type_vega.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega
title: "visTypeVega"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVega plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega']
---
import visTypeVegaObj from './vis_type_vega.devdocs.json';
diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx
index 5defc6f0ad22a..c959f786ce729 100644
--- a/api_docs/vis_type_vislib.mdx
+++ b/api_docs/vis_type_vislib.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib
title: "visTypeVislib"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVislib plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib']
---
import visTypeVislibObj from './vis_type_vislib.devdocs.json';
diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx
index 944ff20076bef..e5f3de27a4459 100644
--- a/api_docs/vis_type_xy.mdx
+++ b/api_docs/vis_type_xy.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy
title: "visTypeXy"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeXy plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy']
---
import visTypeXyObj from './vis_type_xy.devdocs.json';
diff --git a/api_docs/visualization_ui_components.mdx b/api_docs/visualization_ui_components.mdx
index 04ac4ccd8bfbe..81c8a2cdd6685 100644
--- a/api_docs/visualization_ui_components.mdx
+++ b/api_docs/visualization_ui_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizationUiComponents
title: "visualizationUiComponents"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visualizationUiComponents plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizationUiComponents']
---
import visualizationUiComponentsObj from './visualization_ui_components.devdocs.json';
diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx
index 93ac8a01fb12e..9cdf76da675fe 100644
--- a/api_docs/visualizations.mdx
+++ b/api_docs/visualizations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations
title: "visualizations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visualizations plugin
-date: 2023-05-07
+date: 2023-05-08
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations']
---
import visualizationsObj from './visualizations.devdocs.json';
diff --git a/src/plugins/discover/public/__mocks__/data_view_complex.ts b/src/plugins/discover/public/__mocks__/data_view_complex.ts
index a90e858b00a3e..6953c044391ae 100644
--- a/src/plugins/discover/public/__mocks__/data_view_complex.ts
+++ b/src/plugins/discover/public/__mocks__/data_view_complex.ts
@@ -417,3 +417,12 @@ export const dataViewComplexMock = buildDataViewMock({
fields,
timeFieldName: 'data',
});
+
+export const dataViewAdHoc = {
+ ...buildDataViewMock({
+ name: 'data-view-ad-hoc',
+ fields,
+ timeFieldName: 'time',
+ }),
+ isPersisted: () => false,
+} as DataView;
diff --git a/src/plugins/discover/public/__mocks__/data_views.ts b/src/plugins/discover/public/__mocks__/data_views.ts
index 7b599318917a0..a9e5a880e9196 100644
--- a/src/plugins/discover/public/__mocks__/data_views.ts
+++ b/src/plugins/discover/public/__mocks__/data_views.ts
@@ -11,27 +11,34 @@ import { dataViewMock } from './data_view';
import { dataViewComplexMock } from './data_view_complex';
import { dataViewWithTimefieldMock } from './data_view_with_timefield';
+export const dataViewMockList = [dataViewMock, dataViewComplexMock, dataViewWithTimefieldMock];
+
export function createDiscoverDataViewsMock() {
return {
getCache: async () => {
return [dataViewMock];
},
get: async (id: string) => {
- if (id === 'the-data-view-id') {
- return Promise.resolve(dataViewMock);
- } else if (id === 'invalid-data-view-id') {
- return Promise.reject('Invald');
+ if (id === 'invalid-data-view-id') {
+ return Promise.reject('Invalid');
+ }
+ const dataView = dataViewMockList.find((dv) => dv.id === id);
+ if (dataView) {
+ return Promise.resolve(dataView);
+ } else {
+ return Promise.reject(`DataView ${id} not found`);
}
},
getDefaultDataView: jest.fn(() => dataViewMock),
updateSavedObject: jest.fn(),
getIdsWithTitle: jest.fn(() => {
- return Promise.resolve([dataViewMock, dataViewComplexMock, dataViewWithTimefieldMock]);
+ return Promise.resolve(dataViewMockList);
}),
createFilter: jest.fn(),
create: jest.fn(),
clearInstanceCache: jest.fn(),
getFieldsForIndexPattern: jest.fn((dataView) => dataView.fields),
+ refreshFields: jest.fn(),
} as unknown as jest.Mocked;
}
diff --git a/src/plugins/discover/public/__mocks__/discover_state.mock.ts b/src/plugins/discover/public/__mocks__/discover_state.mock.ts
index 7155dd33ac5c0..3e0a36de1d595 100644
--- a/src/plugins/discover/public/__mocks__/discover_state.mock.ts
+++ b/src/plugins/discover/public/__mocks__/discover_state.mock.ts
@@ -9,13 +9,24 @@ import { createBrowserHistory } from 'history';
import { getDiscoverStateContainer } from '../application/main/services/discover_state';
import { savedSearchMockWithTimeField, savedSearchMock } from './saved_search';
import { discoverServiceMock } from './services';
+import { SavedSearch } from '@kbn/saved-search-plugin/public';
-export function getDiscoverStateMock({ isTimeBased = true }) {
+export function getDiscoverStateMock({
+ isTimeBased = true,
+ savedSearch,
+}: {
+ isTimeBased?: boolean;
+ savedSearch?: SavedSearch;
+}) {
const history = createBrowserHistory();
history.push('/');
- return getDiscoverStateContainer({
- savedSearch: isTimeBased ? savedSearchMockWithTimeField : savedSearchMock,
+ const container = getDiscoverStateContainer({
services: discoverServiceMock,
history,
});
+ container.savedSearchState.set(
+ savedSearch ? savedSearch : isTimeBased ? savedSearchMockWithTimeField : savedSearchMock
+ );
+
+ return container;
}
diff --git a/src/plugins/discover/public/__mocks__/saved_search.ts b/src/plugins/discover/public/__mocks__/saved_search.ts
index de97a31d65632..c18c320063240 100644
--- a/src/plugins/discover/public/__mocks__/saved_search.ts
+++ b/src/plugins/discover/public/__mocks__/saved_search.ts
@@ -10,9 +10,11 @@ import { SavedSearch } from '@kbn/saved-search-plugin/public';
import { createSearchSourceMock } from '@kbn/data-plugin/public/mocks';
import { dataViewMock } from './data_view';
import { dataViewWithTimefieldMock } from './data_view_with_timefield';
+import { dataViewAdHoc } from './data_view_complex';
export const savedSearchMock = {
id: 'the-saved-search-id',
+ title: 'A saved search',
searchSource: createSearchSourceMock({ index: dataViewMock }),
} as unknown as SavedSearch;
@@ -21,6 +23,10 @@ export const savedSearchMockWithTimeField = {
searchSource: createSearchSourceMock({ index: dataViewWithTimefieldMock }),
} as unknown as SavedSearch;
+export const savedSearchMockWithTimeFieldNew = {
+ searchSource: createSearchSourceMock({ index: dataViewWithTimefieldMock }),
+} as unknown as SavedSearch;
+
export const savedSearchMockWithSQL = {
id: 'the-saved-search-id-sql',
searchSource: createSearchSourceMock({
@@ -28,3 +34,8 @@ export const savedSearchMockWithSQL = {
query: { sql: 'SELECT * FROM "the-saved-search-id-sql"' },
}),
} as unknown as SavedSearch;
+
+export const savedSearchAdHoc = {
+ id: 'the-saved-search-with-ad-hoc',
+ searchSource: createSearchSourceMock({ index: dataViewAdHoc }),
+} as unknown as SavedSearch;
diff --git a/src/plugins/discover/public/__mocks__/services.ts b/src/plugins/discover/public/__mocks__/services.ts
index b87c8aa32f910..3da63b5c553c7 100644
--- a/src/plugins/discover/public/__mocks__/services.ts
+++ b/src/plugins/discover/public/__mocks__/services.ts
@@ -20,14 +20,22 @@ import {
SAMPLE_ROWS_PER_PAGE_SETTING,
SORT_DEFAULT_ORDER_SETTING,
HIDE_ANNOUNCEMENTS,
+ SEARCH_ON_PAGE_LOAD_SETTING,
} from '../../common';
-import { UI_SETTINGS, calculateBounds } from '@kbn/data-plugin/public';
+import {
+ UI_SETTINGS,
+ calculateBounds,
+ SearchSource,
+ IKibanaSearchResponse,
+} from '@kbn/data-plugin/public';
import { TopNavMenu } from '@kbn/navigation-plugin/public';
import { FORMATS_UI_SETTINGS } from '@kbn/field-formats-plugin/common';
import { chartPluginMock } from '@kbn/charts-plugin/public/mocks';
import { fieldFormatsMock } from '@kbn/field-formats-plugin/common/mocks';
import { LocalStorageMock } from './local_storage_mock';
import { createDiscoverDataViewsMock } from './data_views';
+import { SearchSourceDependencies } from '@kbn/data-plugin/common';
+import { SearchResponse } from '@elastic/elasticsearch/lib/api/types';
export function createDiscoverServicesMock(): DiscoverServices {
const dataPlugin = dataPluginMock.createStartContract();
@@ -65,6 +73,23 @@ export function createDiscoverServicesMock(): DiscoverServices {
},
})
) as unknown as typeof expressionsPlugin.run;
+ dataPlugin.search.searchSource.createEmpty = jest.fn(() => {
+ const deps = {
+ getConfig: jest.fn(),
+ } as unknown as SearchSourceDependencies;
+ const searchSource = new SearchSource({}, deps);
+ searchSource.fetch$ = jest.fn().mockReturnValue(of({ rawResponse: { hits: { total: 2 } } }));
+ searchSource.createChild = jest.fn((options = {}) => {
+ const childSearchSource = new SearchSource({}, deps);
+ childSearchSource.setParent(searchSource, options);
+ childSearchSource.fetch$ = () =>
+ of({ rawResponse: { hits: { hits: [] } } } as unknown as IKibanaSearchResponse<
+ SearchResponse
+ >);
+ return childSearchSource;
+ });
+ return searchSource;
+ });
return {
core: coreMock.createStart(),
@@ -118,6 +143,8 @@ export function createDiscoverServicesMock(): DiscoverServices {
return 50;
} else if (key === HIDE_ANNOUNCEMENTS) {
return false;
+ } else if (key === SEARCH_ON_PAGE_LOAD_SETTING) {
+ return true;
}
}),
isDefault: (key: string) => {
@@ -157,7 +184,12 @@ export function createDiscoverServicesMock(): DiscoverServices {
addSuccess: jest.fn(),
},
expressions: expressionsPlugin,
- savedObjectsTagging: {},
+ savedObjectsTagging: {
+ ui: {
+ getTagIdsFromReferences: jest.fn().mockResolvedValue([]),
+ updateTagsReferences: jest.fn(),
+ },
+ },
dataViews: dataPlugin.dataViews,
timefilter: dataPlugin.query.timefilter.timefilter,
lens: {
diff --git a/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_tab.tsx b/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_tab.tsx
index 87dcbb2297c4f..9ac42f7ad863d 100644
--- a/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_tab.tsx
+++ b/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_tab.tsx
@@ -8,6 +8,7 @@
import React from 'react';
import { useQuerySubscriber } from '@kbn/unified-field-list-plugin/public';
+import { useSavedSearch } from '../../services/discover_state_provider';
import { FieldStatisticsTable, type FieldStatisticsTableProps } from './field_stats_table';
import { useDiscoverServices } from '../../../../hooks/use_discover_services';
@@ -17,10 +18,12 @@ export const FieldStatisticsTab: React.FC
diff --git a/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx b/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx
index 27214f34d8a23..80db81bb4228b 100644
--- a/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx
@@ -14,9 +14,8 @@ import { DiscoverAppState } from '../../../services/discover_app_state_container
import { getDataViewMock } from '../../../../../__mocks__/__storybook_mocks__/get_data_view_mock';
import { withDiscoverServices } from '../../../../../__mocks__/__storybook_mocks__/with_discover_services';
import { getDocumentsLayoutProps, getPlainRecordLayoutProps } from './get_layout_props';
-import { DiscoverLayout } from '../discover_layout';
+import { DiscoverLayout, DiscoverLayoutProps } from '../discover_layout';
import { setHeaderActionMenuMounter } from '../../../../../kibana_services';
-import { DiscoverLayoutProps } from '../types';
setHeaderActionMenuMounter(() => void 0);
diff --git a/src/plugins/discover/public/application/main/components/layout/__stories__/get_layout_props.ts b/src/plugins/discover/public/application/main/components/layout/__stories__/get_layout_props.ts
index 1082a5b127397..0d41251ce4542 100644
--- a/src/plugins/discover/public/application/main/components/layout/__stories__/get_layout_props.ts
+++ b/src/plugins/discover/public/application/main/components/layout/__stories__/get_layout_props.ts
@@ -23,7 +23,7 @@ import {
import { buildDataTableRecordList } from '../../../../../utils/build_data_record';
import { esHits } from '../../../../../__mocks__/es_hits';
import { SavedSearch } from '../../../../..';
-import { DiscoverLayoutProps } from '../types';
+import { DiscoverLayoutProps } from '../discover_layout';
import {
DiscoverStateContainer,
getDiscoverStateContainer,
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx
index f366d37d8d7bb..1360a49676895 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx
@@ -11,7 +11,6 @@ import { BehaviorSubject } from 'rxjs';
import { mountWithIntl } from '@kbn/test-jest-helpers';
import { setHeaderActionMenuMounter } from '../../../../kibana_services';
import { esHits } from '../../../../__mocks__/es_hits';
-import { savedSearchMock } from '../../../../__mocks__/saved_search';
import { DataDocuments$ } from '../../services/discover_data_state_container';
import { discoverServiceMock } from '../../../../__mocks__/services';
import { FetchStatus } from '../../../types';
@@ -41,15 +40,9 @@ function mountComponent(fetchStatus: FetchStatus, hits: EsHitRecord[]) {
stateContainer.dataState.data$.documents$ = documents$;
const props = {
- expandedDoc: undefined,
dataView: dataViewMock,
onAddFilter: jest.fn(),
- savedSearch: savedSearchMock,
- searchSource: savedSearchMock.searchSource,
- setExpandedDoc: jest.fn(),
- state: { columns: [] },
stateContainer,
- navigateTo: jest.fn(),
onFieldEdited: jest.fn(),
};
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx
index 77d6e36715dd7..3070f447712c5 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx
@@ -17,8 +17,7 @@ import {
import { FormattedMessage } from '@kbn/i18n-react';
import { css } from '@emotion/react';
import { DataView } from '@kbn/data-views-plugin/public';
-import { SavedSearch, SortOrder } from '@kbn/saved-search-plugin/public';
-import { DataTableRecord } from '../../../../types';
+import { SortOrder } from '@kbn/saved-search-plugin/public';
import { useInternalStateSelector } from '../../services/discover_internal_state_container';
import { useAppStateSelector } from '../../services/discover_app_state_container';
import { useDiscoverServices } from '../../../../hooks/use_discover_services';
@@ -40,9 +39,11 @@ import { DocTableInfinite } from '../../../../components/doc_table/doc_table_inf
import { DocumentExplorerCallout } from '../document_explorer_callout';
import { DocumentExplorerUpdateCallout } from '../document_explorer_callout/document_explorer_update_callout';
import { DiscoverTourProvider } from '../../../../components/discover_tour';
+import { DataTableRecord } from '../../../../types';
import { getRawRecordType } from '../../utils/get_raw_record_type';
import { DiscoverGridFlyout } from '../../../../components/discover_grid/discover_grid_flyout';
import { DocViewer } from '../../../../services/doc_views/components/doc_viewer';
+import { useSavedSearchInitial } from '../../services/discover_state_provider';
const containerStyles = css`
position: relative;
@@ -73,19 +74,17 @@ export const onResize = (
function DiscoverDocumentsComponent({
dataView,
onAddFilter,
- savedSearch,
stateContainer,
onFieldEdited,
}: {
dataView: DataView;
- navigateTo: (url: string) => void;
onAddFilter?: DocViewFilterFn;
- savedSearch: SavedSearch;
stateContainer: DiscoverStateContainer;
onFieldEdited?: () => void;
}) {
const services = useDiscoverServices();
const documents$ = stateContainer.dataState.data$.documents$;
+ const savedSearch = useSavedSearchInitial();
const { dataViews, capabilities, uiSettings } = services;
const [query, sort, rowHeight, rowsPerPage, grid, columns, index] = useAppStateSelector(
(state) => {
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx
index 2547011242081..beb09b473d2c5 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx
@@ -28,7 +28,6 @@ import { SavedSearch, VIEW_MODE } from '@kbn/saved-search-plugin/public';
import { CoreTheme } from '@kbn/core/public';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { createSearchSessionMock } from '../../../../__mocks__/search_session';
-import { RequestAdapter } from '@kbn/inspector-plugin/public';
import { searchSourceInstanceMock } from '@kbn/data-plugin/common/search/search_source/mocks';
import { getSessionServiceMock } from '@kbn/data-plugin/public/search/session/mocks';
import { ResetSearchButton } from './reset_search_button';
@@ -36,8 +35,8 @@ import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock'
import { DiscoverMainProvider } from '../../services/discover_state_provider';
import { act } from 'react-dom/test-utils';
-function getStateContainer() {
- const stateContainer = getDiscoverStateMock({ isTimeBased: true });
+function getStateContainer(savedSearch?: SavedSearch) {
+ const stateContainer = getDiscoverStateMock({ isTimeBased: true, savedSearch });
stateContainer.appState.update({
interval: 'auto',
@@ -51,14 +50,12 @@ const mountComponent = async ({
isPlainRecord = false,
storage,
savedSearch = savedSearchMock,
- resetSavedSearch = jest.fn(),
searchSessionId = '123',
}: {
isPlainRecord?: boolean;
isTimeBased?: boolean;
storage?: Storage;
savedSearch?: SavedSearch;
- resetSavedSearch?(): void;
searchSessionId?: string | null;
} = {}) => {
let services = discoverServiceMock;
@@ -112,22 +109,19 @@ const mountComponent = async ({
session.getSession$.mockReturnValue(new BehaviorSubject(searchSessionId ?? undefined));
- const stateContainer = getStateContainer();
+ const stateContainer = getStateContainer(savedSearch);
stateContainer.dataState.data$ = savedSearchData$;
+ stateContainer.actions.undoSavedSearchChanges = jest.fn();
const props: DiscoverHistogramLayoutProps = {
isPlainRecord,
dataView: dataViewMock,
- navigateTo: jest.fn(),
- savedSearch,
stateContainer,
onFieldEdited: jest.fn(),
columns: [],
viewMode: VIEW_MODE.DOCUMENT_LEVEL,
onAddFilter: jest.fn(),
- resetSavedSearch,
resizeRef: { current: null },
- inspectorAdapters: { requests: new RequestAdapter() },
};
stateContainer.searchSessionManager = createSearchSessionMock(session).searchSessionManager;
@@ -147,45 +141,45 @@ const mountComponent = async ({
await act(() => new Promise((resolve) => setTimeout(resolve, 0)));
component.update();
- return component;
+ return { component, stateContainer };
};
describe('Discover histogram layout component', () => {
describe('render', () => {
it('should render null if there is no search session', async () => {
- const component = await mountComponent({ searchSessionId: null });
+ const { component } = await mountComponent({ searchSessionId: null });
expect(component.isEmptyRender()).toBe(true);
});
it('should not render null if there is a search session', async () => {
- const component = await mountComponent();
+ const { component } = await mountComponent();
expect(component.isEmptyRender()).toBe(false);
});
it('should not render null if there is no search session, but isPlainRecord is true', async () => {
- const component = await mountComponent({ isPlainRecord: true });
+ const { component } = await mountComponent({ isPlainRecord: true });
expect(component.isEmptyRender()).toBe(false);
});
});
describe('reset search button', () => {
it('renders the button when there is a saved search', async () => {
- const component = await mountComponent();
+ const { component } = await mountComponent();
expect(component.find(ResetSearchButton).exists()).toBe(true);
});
it('does not render the button when there is no saved search', async () => {
- const component = await mountComponent({
+ const { component } = await mountComponent({
savedSearch: { ...savedSearchMock, id: undefined },
});
expect(component.find(ResetSearchButton).exists()).toBe(false);
});
it('should call resetSavedSearch when clicked', async () => {
- const resetSavedSearch = jest.fn();
- const component = await mountComponent({ resetSavedSearch });
+ const { component, stateContainer } = await mountComponent();
+ expect(component.find(ResetSearchButton).exists()).toBe(true);
component.find(ResetSearchButton).find('button').simulate('click');
- expect(resetSavedSearch).toHaveBeenCalled();
+ expect(stateContainer.actions.undoSavedSearchChanges).toHaveBeenCalled();
});
});
});
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx
index 8a7592a92050d..cd6bfd6ab8b75 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx
@@ -10,16 +10,14 @@ import React, { RefObject } from 'react';
import { UnifiedHistogramContainer } from '@kbn/unified-histogram-plugin/public';
import { css } from '@emotion/react';
import useObservable from 'react-use/lib/useObservable';
+import { useSavedSearchInitial } from '../../services/discover_state_provider';
import { useDiscoverHistogram } from './use_discover_histogram';
-import type { InspectorAdapters } from '../../hooks/use_inspector';
import { type DiscoverMainContentProps, DiscoverMainContent } from './discover_main_content';
import { ResetSearchButton } from './reset_search_button';
import { useAppStateSelector } from '../../services/discover_app_state_container';
export interface DiscoverHistogramLayoutProps extends DiscoverMainContentProps {
- resetSavedSearch: () => void;
resizeRef: RefObject;
- inspectorAdapters: InspectorAdapters;
}
const histogramLayoutCss = css`
@@ -29,18 +27,17 @@ const histogramLayoutCss = css`
export const DiscoverHistogramLayout = ({
isPlainRecord,
dataView,
- resetSavedSearch,
- savedSearch,
stateContainer,
resizeRef,
- inspectorAdapters,
...mainContentProps
}: DiscoverHistogramLayoutProps) => {
+ const { dataState } = stateContainer;
+ const savedSearch = useSavedSearchInitial();
const searchSessionId = useObservable(stateContainer.searchSessionManager.searchSessionId$);
const hideChart = useAppStateSelector((state) => state.hideChart);
const unifiedHistogramProps = useDiscoverHistogram({
stateContainer,
- inspectorAdapters,
+ inspectorAdapters: dataState.inspectorAdapters,
hideChart,
isPlainRecord,
});
@@ -56,10 +53,12 @@ export const DiscoverHistogramLayout = ({
{...unifiedHistogramProps}
dataView={dataView}
searchSessionId={searchSessionId}
- requestAdapter={inspectorAdapters.requests}
+ requestAdapter={dataState.inspectorAdapters.requests}
resizeRef={resizeRef}
appendHitsCounter={
- savedSearch?.id ? : undefined
+ savedSearch.id ? (
+
+ ) : undefined
}
css={histogramLayoutCss}
>
@@ -67,7 +66,6 @@ export const DiscoverHistogramLayout = ({
{...mainContentProps}
stateContainer={stateContainer}
dataView={dataView}
- savedSearch={savedSearch}
isPlainRecord={isPlainRecord}
// The documents grid doesn't rerender when the chart visibility changes
// which causes it to render blank space, so we need to force a rerender
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx
index 5027fc4cfe67a..ccb70df16b88f 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx
@@ -123,7 +123,6 @@ async function mountComponent(
stateContainer,
setExpandedDoc: jest.fn(),
persistDataView: jest.fn(),
- updateAdHocDataViewId: jest.fn(),
updateDataViewList: jest.fn(),
};
stateContainer.searchSessionManager = createSearchSessionMock(session).searchSessionManager;
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx
index 1dab027ca81fd..90a18b5ee5a8a 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx
@@ -23,6 +23,8 @@ import classNames from 'classnames';
import { generateFilters } from '@kbn/data-plugin/public';
import { DragContext } from '@kbn/dom-drag-drop';
import { DataView, DataViewField, DataViewType } from '@kbn/data-views-plugin/public';
+import { useSavedSearchInitial } from '../../services/discover_state_provider';
+import { DiscoverStateContainer } from '../../services/discover_state';
import { VIEW_MODE } from '../../../../../common/constants';
import { useInternalStateSelector } from '../../services/discover_internal_state_container';
import { useAppStateSelector } from '../../services/discover_app_state_container';
@@ -31,7 +33,6 @@ import { useDiscoverServices } from '../../../../hooks/use_discover_services';
import { DiscoverNoResults } from '../no_results';
import { LoadingSpinner } from '../loading_spinner/loading_spinner';
import { DiscoverSidebarResponsive } from '../sidebar';
-import { DiscoverLayoutProps } from './types';
import { SEARCH_FIELDS_FROM_SOURCE, SHOW_FIELD_STATISTICS } from '../../../../../common';
import { popularizeField } from '../../../../utils/popularize_field';
import { DiscoverTopNav } from '../top_nav/discover_topnav';
@@ -55,18 +56,16 @@ export const SIDEBAR_CLOSED_KEY = 'discover:sidebarClosed';
const SidebarMemoized = React.memo(DiscoverSidebarResponsive);
const TopNavMemoized = React.memo(DiscoverTopNav);
+export interface DiscoverLayoutProps {
+ navigateTo: (url: string) => void;
+ stateContainer: DiscoverStateContainer;
+ persistDataView: (dataView: DataView) => Promise;
+}
+
export function DiscoverLayout({
- inspectorAdapters,
navigateTo,
- onChangeDataView,
- onUpdateQuery,
- resetSavedSearch,
- savedSearch,
- searchSource,
stateContainer,
persistDataView,
- updateAdHocDataViewId,
- updateDataViewList,
}: DiscoverLayoutProps) {
const {
trackUiMetric,
@@ -93,6 +92,7 @@ export function DiscoverLayout({
});
const dataView = useInternalStateSelector((state) => state.dataView!);
const dataState: DataMainMsg = useDataState(main$);
+ const savedSearch = useSavedSearchInitial();
const fetchCounter = useRef(0);
@@ -123,8 +123,6 @@ export function DiscoverLayout({
const onOpenInspector = useInspector({
inspector,
stateContainer,
- inspectorAdapters,
- savedSearch,
});
const {
@@ -161,11 +159,11 @@ export function DiscoverLayout({
onRemoveColumn(removedFieldName);
}
if (!dataView.isPersisted()) {
- await updateAdHocDataViewId(dataView);
+ await stateContainer.actions.updateAdHocDataViewId();
}
stateContainer.dataState.refetch$.next('reset');
},
- [dataView, stateContainer, updateAdHocDataViewId, currentColumns, onRemoveColumn]
+ [dataView, stateContainer, currentColumns, onRemoveColumn]
);
const onDisableFilters = useCallback(() => {
@@ -181,19 +179,6 @@ export function DiscoverLayout({
}, [isSidebarClosed, storage]);
const contentCentered = resultState === 'uninitialized' || resultState === 'none';
- const onDataViewCreated = useCallback(
- async (nextDataView: DataView) => {
- if (!nextDataView.isPersisted()) {
- stateContainer.actions.appendAdHocDataViews(nextDataView);
- } else {
- await stateContainer.actions.loadDataViewList();
- }
- if (nextDataView.id) {
- onChangeDataView(nextDataView.id);
- }
- },
- [onChangeDataView, stateContainer]
- );
const savedSearchTitle = useRef(null);
useEffect(() => {
@@ -235,11 +220,7 @@ export function DiscoverLayout({
}
if (resultState === 'uninitialized') {
- return (
- stateContainer.dataState.refetch$.next(undefined)}
- />
- );
+ return stateContainer.dataState.fetch()} />;
}
return (
@@ -247,16 +228,12 @@ export function DiscoverLayout({
{resultState === 'loading' && }
@@ -266,16 +243,12 @@ export function DiscoverLayout({
currentColumns,
data,
dataView,
- inspectorAdapters,
isPlainRecord,
isTimeBased,
- navigateTo,
onAddFilter,
onDisableFilters,
onFieldEdited,
- resetSavedSearch,
resultState,
- savedSearch,
stateContainer,
viewMode,
onDropFieldToTable,
@@ -306,19 +279,12 @@ export function DiscoverLayout({
query={query}
navigateTo={navigateTo}
savedQuery={savedQuery}
- savedSearch={savedSearch}
- searchSource={searchSource}
stateContainer={stateContainer}
- updateQuery={onUpdateQuery}
- resetSavedSearch={resetSavedSearch}
- onChangeDataView={onChangeDataView}
- onDataViewCreated={onDataViewCreated}
+ updateQuery={stateContainer.actions.onUpdateQuery}
isPlainRecord={isPlainRecord}
textBasedLanguageModeErrors={textBasedLanguageModeErrors}
onFieldEdited={onFieldEdited}
persistDataView={persistDataView}
- updateAdHocDataViewId={updateAdHocDataViewId}
- updateDataViewList={updateDataViewList}
/>
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_main_content.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_main_content.test.tsx
index b85580e75b7c1..5ab1a6e4d6e3b 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_main_content.test.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_main_content.test.tsx
@@ -11,7 +11,6 @@ import { BehaviorSubject, of } from 'rxjs';
import { mountWithIntl } from '@kbn/test-jest-helpers';
import { esHits } from '../../../../__mocks__/es_hits';
import { dataViewMock } from '../../../../__mocks__/data_view';
-import { savedSearchMock } from '../../../../__mocks__/saved_search';
import {
AvailableFields$,
DataDocuments$,
@@ -39,7 +38,6 @@ const mountComponent = ({
isPlainRecord = false,
viewMode = VIEW_MODE.DOCUMENT_LEVEL,
storage,
- savedSearch = savedSearchMock,
}: {
hideChart?: boolean;
isPlainRecord?: boolean;
@@ -99,8 +97,6 @@ const mountComponent = ({
const props: DiscoverMainContentProps = {
isPlainRecord,
dataView: dataViewMock,
- navigateTo: jest.fn(),
- savedSearch,
stateContainer,
onFieldEdited: jest.fn(),
columns: [],
diff --git a/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx b/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx
index d8f8c5463dbab..655ff5cbbb04f 100644
--- a/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx
+++ b/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx
@@ -7,7 +7,6 @@
*/
import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule } from '@elastic/eui';
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
import { DragDrop, type DropType, DropOverlayWrapper } from '@kbn/dom-drag-drop';
import React, { useCallback } from 'react';
import { DataView } from '@kbn/data-views-plugin/common';
@@ -39,9 +38,7 @@ const DROP_PROPS = {
export interface DiscoverMainContentProps {
dataView: DataView;
- savedSearch: SavedSearch;
isPlainRecord: boolean;
- navigateTo: (url: string) => void;
stateContainer: DiscoverStateContainer;
viewMode: VIEW_MODE;
onAddFilter: DocViewFilterFn | undefined;
@@ -53,13 +50,11 @@ export interface DiscoverMainContentProps {
export const DiscoverMainContent = ({
dataView,
isPlainRecord,
- navigateTo,
viewMode,
onAddFilter,
onFieldEdited,
columns,
stateContainer,
- savedSearch,
onDropFieldToTable,
}: DiscoverMainContentProps) => {
const { trackUiMetric } = useDiscoverServices();
@@ -121,15 +116,12 @@ export const DiscoverMainContent = ({
{viewMode === VIEW_MODE.DOCUMENT_LEVEL ? (
) : (
void;
- onChangeDataView: (id: string) => void;
- onUpdateQuery: (
- payload: { dateRange: TimeRange; query?: Query | AggregateQuery },
- isUpdate?: boolean
- ) => void;
- resetSavedSearch: () => void;
- savedSearch: SavedSearch;
- searchSource: ISearchSource;
- stateContainer: DiscoverStateContainer;
- persistDataView: (dataView: DataView) => Promise;
- updateAdHocDataViewId: (dataView: DataView) => Promise;
- updateDataViewList: (newAdHocDataViews: DataView[]) => void;
-}
diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx
index 85c7e381588ea..122476b815310 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx
@@ -9,10 +9,8 @@
import React from 'react';
import { mountWithIntl } from '@kbn/test-jest-helpers';
import { dataViewMock } from '../../../../__mocks__/data_view';
-import { savedSearchMock } from '../../../../__mocks__/saved_search';
import { DiscoverTopNav, DiscoverTopNavProps } from './discover_topnav';
import { TopNavMenu, TopNavMenuData } from '@kbn/navigation-plugin/public';
-import { ISearchSource } from '@kbn/data-plugin/public';
import { Query } from '@kbn/es-query';
import { setHeaderActionMenuMounter } from '../../../../kibana_services';
import { discoverServiceMock } from '../../../../__mocks__/services';
@@ -35,21 +33,14 @@ function getProps(savePermissions = true): DiscoverTopNavProps {
return {
stateContainer,
- savedSearch: savedSearchMock,
navigateTo: jest.fn(),
query: {} as Query,
savedQuery: '',
updateQuery: jest.fn(),
onOpenInspector: jest.fn(),
- searchSource: {} as ISearchSource,
- resetSavedSearch: () => {},
onFieldEdited: jest.fn(),
- onChangeDataView: jest.fn(),
isPlainRecord: false,
persistDataView: jest.fn(),
- updateAdHocDataViewId: jest.fn(),
- updateDataViewList: jest.fn(),
- onDataViewCreated: jest.fn(),
};
}
diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx
index bf4b608a3c017..4892f696477fe 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx
@@ -6,23 +6,20 @@
* Side Public License, v 1.
*/
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
-import { useHistory } from 'react-router-dom';
import type { Query, TimeRange, AggregateQuery } from '@kbn/es-query';
import { DataViewType, type DataView } from '@kbn/data-views-plugin/public';
import type { DataViewPickerProps } from '@kbn/unified-search-plugin/public';
+import { useSavedSearchInitial } from '../../services/discover_state_provider';
import { useInternalStateSelector } from '../../services/discover_internal_state_container';
import { ENABLE_SQL } from '../../../../../common';
import { useDiscoverServices } from '../../../../hooks/use_discover_services';
-import { DiscoverLayoutProps } from '../layout/types';
+import { DiscoverLayoutProps } from '../layout/discover_layout';
import { getTopNavLinks } from './get_top_nav_links';
import { getHeaderActionMenuMounter } from '../../../../kibana_services';
import { DiscoverStateContainer } from '../../services/discover_state';
import { onSaveSearch } from './on_save_search';
-export type DiscoverTopNavProps = Pick<
- DiscoverLayoutProps,
- 'navigateTo' | 'savedSearch' | 'searchSource'
-> & {
+export type DiscoverTopNavProps = Pick & {
onOpenInspector: () => void;
query?: Query | AggregateQuery;
savedQuery?: string;
@@ -31,15 +28,10 @@ export type DiscoverTopNavProps = Pick<
isUpdate?: boolean
) => void;
stateContainer: DiscoverStateContainer;
- resetSavedSearch: () => void;
- onChangeDataView: (dataView: string) => void;
- onDataViewCreated: (dataView: DataView) => void;
isPlainRecord: boolean;
textBasedLanguageModeErrors?: Error;
onFieldEdited: () => Promise;
persistDataView: (dataView: DataView) => Promise;
- updateAdHocDataViewId: (dataView: DataView) => Promise;
- updateDataViewList: (newAdHocDataViews: DataView[]) => void;
};
export const DiscoverTopNav = ({
@@ -48,23 +40,16 @@ export const DiscoverTopNav = ({
savedQuery,
stateContainer,
updateQuery,
- searchSource,
navigateTo,
- savedSearch,
- resetSavedSearch,
- onChangeDataView,
- onDataViewCreated,
isPlainRecord,
textBasedLanguageModeErrors,
onFieldEdited,
persistDataView,
- updateAdHocDataViewId,
- updateDataViewList,
}: DiscoverTopNavProps) => {
- const history = useHistory();
const adHocDataViews = useInternalStateSelector((state) => state.adHocDataViews);
const dataView = useInternalStateSelector((state) => state.dataView!);
const savedDataViews = useInternalStateSelector((state) => state.savedDataViews);
+ const savedSearch = useSavedSearchInitial();
const showDatePicker = useMemo(
() => dataView.isTimeBased() && dataView.type !== DataViewType.ROLLUP,
[dataView]
@@ -80,17 +65,6 @@ export const DiscoverTopNav = ({
const { AggregateQueryTopNavMenu } = navigation.ui;
- const onOpenSavedSearch = useCallback(
- (newSavedSearchId: string) => {
- if (savedSearch.id && savedSearch.id === newSavedSearchId) {
- resetSavedSearch();
- } else {
- history.push(`/view/${encodeURIComponent(newSavedSearchId)}`);
- }
- },
- [history, resetSavedSearch, savedSearch.id]
- );
-
useEffect(() => {
return () => {
// Make sure to close the editors when unmounting
@@ -131,57 +105,32 @@ export const DiscoverTopNav = ({
const createNewDataView = useCallback(() => {
closeDataViewEditor.current = dataViewEditor.openEditor({
- onSave: onDataViewCreated,
+ onSave: stateContainer.actions.onDataViewCreated,
allowAdHocDataView: true,
});
- }, [dataViewEditor, onDataViewCreated]);
-
- const onCreateDefaultAdHocDataView = useCallback(
- async (pattern: string) => {
- const newDataView = await dataViews.create({
- title: pattern,
- });
- if (newDataView.fields.getByName('@timestamp')?.type === 'date') {
- newDataView.timeFieldName = '@timestamp';
- }
-
- stateContainer.actions.appendAdHocDataViews(newDataView);
- onChangeDataView(newDataView.id!);
- },
- [dataViews, onChangeDataView, stateContainer.actions]
- );
+ }, [dataViewEditor, stateContainer]);
const topNavMenu = useMemo(
() =>
getTopNavLinks({
dataView,
navigateTo,
- savedSearch,
services,
state: stateContainer,
onOpenInspector,
- searchSource,
- onOpenSavedSearch,
isPlainRecord,
adHocDataViews,
- updateDataViewList,
persistDataView,
- updateAdHocDataViewId,
}),
[
dataView,
navigateTo,
- savedSearch,
services,
stateContainer,
onOpenInspector,
- searchSource,
- onOpenSavedSearch,
isPlainRecord,
adHocDataViews,
persistDataView,
- updateAdHocDataViewId,
- updateDataViewList,
]
);
@@ -192,7 +141,7 @@ export const DiscoverTopNav = ({
dataViews.clearInstanceCache(editedDataView.id);
stateContainer.actions.setDataView(await dataViews.create(editedDataView.toSpec(), true));
} else {
- await updateAdHocDataViewId(editedDataView);
+ await stateContainer.actions.updateAdHocDataViewId();
}
stateContainer.actions.loadDataViewList();
stateContainer.dataState.fetch();
@@ -228,8 +177,8 @@ export const DiscoverTopNav = ({
currentDataViewId: dataView?.id,
onAddField: addField,
onDataViewCreated: createNewDataView,
- onCreateDefaultAdHocDataView,
- onChangeDataView,
+ onCreateDefaultAdHocDataView: stateContainer.actions.onCreateDefaultAdHocDataView,
+ onChangeDataView: stateContainer.actions.onChangeDataView,
textBasedLanguages: supportedTextBasedLanguages as DataViewPickerProps['textBasedLanguages'],
adHocDataViews,
savedDataViews,
@@ -239,17 +188,15 @@ export const DiscoverTopNav = ({
const onTextBasedSavedAndExit = useCallback(
({ onSave, onCancel }) => {
onSaveSearch({
- savedSearch,
+ savedSearch: stateContainer.savedSearchState.getState(),
services,
- dataView,
navigateTo,
state: stateContainer,
onClose: onCancel,
onSaveCb: onSave,
- updateAdHocDataViewId,
});
},
- [dataView, navigateTo, savedSearch, services, stateContainer, updateAdHocDataViewId]
+ [navigateTo, services, stateContainer]
);
return (
diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.test.ts b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.test.ts
index fcd52f1563acf..ba56d565ca1c4 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.test.ts
+++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.test.ts
@@ -6,10 +6,8 @@
* Side Public License, v 1.
*/
-import { ISearchSource } from '@kbn/data-plugin/public';
import { getTopNavLinks } from './get_top_nav_links';
import { dataViewMock } from '../../../../__mocks__/data_view';
-import { savedSearchMock } from '../../../../__mocks__/saved_search';
import { DiscoverServices } from '../../../../build_services';
import { DiscoverStateContainer } from '../../services/discover_state';
@@ -31,16 +29,11 @@ test('getTopNavLinks result', () => {
dataView: dataViewMock,
navigateTo: jest.fn(),
onOpenInspector: jest.fn(),
- savedSearch: savedSearchMock,
services,
state,
- searchSource: {} as ISearchSource,
- onOpenSavedSearch: () => {},
isPlainRecord: false,
persistDataView: jest.fn(),
- updateDataViewList: jest.fn(),
adHocDataViews: [],
- updateAdHocDataViewId: jest.fn(),
});
expect(topNavLinks).toMatchInlineSnapshot(`
Array [
@@ -97,16 +90,11 @@ test('getTopNavLinks result for sql mode', () => {
dataView: dataViewMock,
navigateTo: jest.fn(),
onOpenInspector: jest.fn(),
- savedSearch: savedSearchMock,
services,
state,
- searchSource: {} as ISearchSource,
- onOpenSavedSearch: () => {},
isPlainRecord: true,
persistDataView: jest.fn(),
- updateDataViewList: jest.fn(),
adHocDataViews: [],
- updateAdHocDataViewId: jest.fn(),
});
expect(topNavLinks).toMatchInlineSnapshot(`
Array [
diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx
index 3707e83697fb5..b8004bc389481 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx
@@ -7,11 +7,9 @@
*/
import { i18n } from '@kbn/i18n';
-import type { ISearchSource } from '@kbn/data-plugin/public';
import type { DataView } from '@kbn/data-views-plugin/public';
import { unhashUrl } from '@kbn/kibana-utils-plugin/public';
import type { TopNavMenuData } from '@kbn/navigation-plugin/public';
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
import { showOpenSearchPanel } from './show_open_search_panel';
import { getSharingData, showPublicUrlSwitch } from '../../../../utils/get_sharing_data';
import { DiscoverServices } from '../../../../build_services';
@@ -26,31 +24,21 @@ import { openAlertsPopover } from './open_alerts_popover';
export const getTopNavLinks = ({
dataView,
navigateTo,
- savedSearch,
services,
state,
onOpenInspector,
- searchSource,
- onOpenSavedSearch,
isPlainRecord,
persistDataView,
adHocDataViews,
- updateDataViewList,
- updateAdHocDataViewId,
}: {
dataView: DataView;
navigateTo: (url: string) => void;
- savedSearch: SavedSearch;
services: DiscoverServices;
state: DiscoverStateContainer;
onOpenInspector: () => void;
- searchSource: ISearchSource;
- onOpenSavedSearch: (id: string) => void;
isPlainRecord: boolean;
adHocDataViews: DataView[];
- updateDataViewList: (dataView: DataView[]) => void;
persistDataView: (dataView: DataView) => Promise;
- updateAdHocDataViewId: (dataView: DataView) => Promise;
}): TopNavMenuData[] => {
const options = {
id: 'options',
@@ -83,11 +71,9 @@ export const getTopNavLinks = ({
I18nContext: services.core.i18n.Context,
theme$: services.core.theme.theme$,
anchorElement,
- searchSource: savedSearch.searchSource,
services,
+ stateContainer: state,
adHocDataViews,
- updateDataViewList,
- savedQueryId: state.appState.getState().savedQuery,
});
},
testId: 'discoverAlertsButton',
@@ -118,12 +104,10 @@ export const getTopNavLinks = ({
emphasize: true,
run: (anchorElement: HTMLElement) => {
onSaveSearch({
- savedSearch,
+ savedSearch: state.savedSearchState.getState(),
services,
- dataView,
navigateTo,
state,
- updateAdHocDataViewId,
onClose: () => {
anchorElement?.focus();
},
@@ -142,7 +126,7 @@ export const getTopNavLinks = ({
testId: 'discoverOpenButton',
run: () =>
showOpenSearchPanel({
- onOpenSavedSearch,
+ onOpenSavedSearch: state.actions.onOpenSavedSearch,
I18nContext: services.core.i18n.Context,
theme$: services.core.theme.theme$,
services,
@@ -170,11 +154,11 @@ export const getTopNavLinks = ({
return;
}
}
+ const savedSearch = state.savedSearchState.getState();
const sharingData = await getSharingData(
- searchSource,
+ savedSearch.searchSource,
state.appState.getState(),
- services,
- isPlainRecord
+ services
);
services.share.toggleShareContextMenu({
diff --git a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.test.tsx
index a7efab7d984a9..3945a21024a34 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.test.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.test.tsx
@@ -8,16 +8,11 @@
import * as savedObjectsPlugin from '@kbn/saved-objects-plugin/public';
jest.mock('@kbn/saved-objects-plugin/public');
-jest.mock('../../utils/persist_saved_search', () => ({
- persistSavedSearch: jest.fn(() => ({ id: 'the-saved-search-id' })),
-}));
import { onSaveSearch } from './on_save_search';
-import { dataViewMock } from '../../../../__mocks__/data_view';
import { savedSearchMock } from '../../../../__mocks__/saved_search';
import { getDiscoverStateContainer } from '../../services/discover_state';
import { ReactElement } from 'react';
import { discoverServiceMock } from '../../../../__mocks__/services';
-import * as persistSavedSearchUtils from '../../utils/persist_saved_search';
import { SavedSearch } from '@kbn/saved-search-plugin/public';
import { createBrowserHistory } from 'history';
@@ -25,10 +20,10 @@ function getStateContainer() {
const savedSearch = savedSearchMock;
const history = createBrowserHistory();
const stateContainer = getDiscoverStateContainer({
- savedSearch,
services: discoverServiceMock,
history,
});
+ stateContainer.savedSearchState.set(savedSearch);
stateContainer.appState.getState = jest.fn(() => ({
rowsPerPage: 250,
}));
@@ -38,12 +33,10 @@ function getStateContainer() {
describe('onSaveSearch', () => {
it('should call showSaveModal', async () => {
await onSaveSearch({
- dataView: dataViewMock,
navigateTo: jest.fn(),
savedSearch: savedSearchMock,
services: discoverServiceMock,
state: getStateContainer(),
- updateAdHocDataViewId: jest.fn(),
});
expect(savedObjectsPlugin.showSaveModal).toHaveBeenCalled();
@@ -55,7 +48,6 @@ describe('onSaveSearch', () => {
saveModal = modal;
});
await onSaveSearch({
- dataView: dataViewMock,
navigateTo: jest.fn(),
savedSearch: {
...savedSearchMock,
@@ -63,7 +55,6 @@ describe('onSaveSearch', () => {
},
services: discoverServiceMock,
state: getStateContainer(),
- updateAdHocDataViewId: jest.fn(),
});
expect(saveModal?.props.tags).toEqual(['tag1', 'tag2']);
});
@@ -77,21 +68,19 @@ describe('onSaveSearch', () => {
...savedSearchMock,
tags: ['tag1', 'tag2'],
};
+ const state = getStateContainer();
await onSaveSearch({
- dataView: dataViewMock,
navigateTo: jest.fn(),
savedSearch,
services: discoverServiceMock,
- state: getStateContainer(),
- updateAdHocDataViewId: jest.fn(),
+ state,
});
expect(savedSearch.tags).toEqual(['tag1', 'tag2']);
- jest
- .spyOn(persistSavedSearchUtils, 'persistSavedSearch')
- .mockImplementationOnce((newSavedSearch, _) => {
- savedSearch = newSavedSearch;
- return Promise.resolve({ id: newSavedSearch.id });
- });
+
+ state.savedSearchState.persist = jest.fn().mockImplementationOnce((newSavedSearch, _) => {
+ savedSearch = newSavedSearch;
+ return Promise.resolve(newSavedSearch.id);
+ });
saveModal?.props.onSave({
newTitle: savedSearch.title,
newCopyOnSave: false,
@@ -113,24 +102,21 @@ describe('onSaveSearch', () => {
...savedSearchMock,
tags: ['tag1', 'tag2'],
};
+ const state = getStateContainer();
await onSaveSearch({
- dataView: dataViewMock,
navigateTo: jest.fn(),
savedSearch,
services: {
...serviceMock,
savedObjectsTagging: undefined,
},
- state: getStateContainer(),
- updateAdHocDataViewId: jest.fn(),
+ state,
});
expect(savedSearch.tags).toEqual(['tag1', 'tag2']);
- jest
- .spyOn(persistSavedSearchUtils, 'persistSavedSearch')
- .mockImplementationOnce((newSavedSearch, _) => {
- savedSearch = newSavedSearch;
- return Promise.resolve({ id: newSavedSearch.id });
- });
+ state.savedSearchState.persist = jest.fn().mockImplementationOnce((newSavedSearch, _) => {
+ savedSearch = newSavedSearch;
+ return Promise.resolve(newSavedSearch.id);
+ });
saveModal?.props.onSave({
newTitle: savedSearch.title,
newCopyOnSave: false,
diff --git a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx
index 4d88e48b8adf5..838575184f7d8 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx
@@ -11,16 +11,12 @@ import { i18n } from '@kbn/i18n';
import { EuiFormRow, EuiSwitch } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { SavedObjectSaveModal, showSaveModal, OnSaveProps } from '@kbn/saved-objects-plugin/public';
-import { DataView } from '@kbn/data-views-plugin/public';
import { SavedSearch, SaveSavedSearchOptions } from '@kbn/saved-search-plugin/public';
import { DiscoverServices } from '../../../../build_services';
import { DiscoverStateContainer } from '../../services/discover_state';
-import { setBreadcrumbsTitle } from '../../../../utils/breadcrumbs';
-import { persistSavedSearch } from '../../utils/persist_saved_search';
import { DOC_TABLE_LEGACY } from '../../../../../common';
async function saveDataSource({
- dataView,
navigateTo,
savedSearch,
saveOptions,
@@ -28,7 +24,6 @@ async function saveDataSource({
state,
navigateOrReloadSavedSearch,
}: {
- dataView: DataView;
navigateTo: (url: string) => void;
savedSearch: SavedSearch;
saveOptions: SaveSavedSearchOptions;
@@ -53,16 +48,7 @@ async function saveDataSource({
navigateTo(`/view/${encodeURIComponent(id)}`);
} else {
// Update defaults so that "reload saved query" functions correctly
- state.appState.resetWithSavedSearch(savedSearch);
- services.chrome.docTitle.change(savedSearch.title!);
-
- setBreadcrumbsTitle(
- {
- ...savedSearch,
- id: prevSavedSearchId ?? id,
- },
- services.chrome
- );
+ state.actions.undoSavedSearchChanges();
}
}
}
@@ -79,32 +65,30 @@ async function saveDataSource({
text: error.message,
});
}
- return persistSavedSearch(savedSearch, {
- dataView,
- onError,
- onSuccess,
- saveOptions,
- services,
- state: state.appState.getState(),
- });
+
+ try {
+ const response = await state.savedSearchState.persist(savedSearch, saveOptions);
+ if (response?.id) {
+ onSuccess(response.id!);
+ }
+ return response;
+ } catch (error) {
+ onError(error);
+ }
}
export async function onSaveSearch({
- dataView,
navigateTo,
savedSearch,
services,
state,
onClose,
onSaveCb,
- updateAdHocDataViewId,
}: {
- dataView: DataView;
navigateTo: (path: string) => void;
savedSearch: SavedSearch;
services: DiscoverServices;
state: DiscoverStateContainer;
- updateAdHocDataViewId: (dataView: DataView) => Promise;
onClose?: () => void;
onSaveCb?: () => void;
}) {
@@ -146,12 +130,12 @@ export async function onSaveSearch({
isTitleDuplicateConfirmed,
};
- const updatedDataView =
- !dataView.isPersisted() && newCopyOnSave ? await updateAdHocDataViewId(dataView) : dataView;
+ if (newCopyOnSave) {
+ await state.actions.updateAdHocDataViewId();
+ }
const navigateOrReloadSavedSearch = !Boolean(onSaveCb);
const response = await saveDataSource({
- dataView: updatedDataView,
saveOptions,
services,
navigateTo,
@@ -160,7 +144,7 @@ export async function onSaveSearch({
navigateOrReloadSavedSearch,
});
// If the save wasn't successful, put the original values back.
- if (!response.id || response.error) {
+ if (!response) {
savedSearch.title = currentTitle;
savedSearch.timeRestore = currentTimeRestore;
savedSearch.rowsPerPage = currentRowsPerPage;
diff --git a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx
index 7412dfe599cbe..7a434a4673fa1 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.test.tsx
@@ -9,30 +9,31 @@
import React, { ReactNode } from 'react';
import { mountWithIntl } from '@kbn/test-jest-helpers';
import { findTestSubject } from '@elastic/eui/lib/test';
-import { createSearchSourceMock } from '@kbn/data-plugin/public/mocks';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { AlertsPopover } from './open_alerts_popover';
import { discoverServiceMock } from '../../../../__mocks__/services';
import { dataViewWithTimefieldMock } from '../../../../__mocks__/data_view_with_timefield';
import { dataViewMock } from '../../../../__mocks__/data_view';
+import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock';
const Context = ({ children }: { children: ReactNode }) => <>{children}>;
-const mount = (dataView = dataViewMock) =>
- mountWithIntl(
+const mount = (dataView = dataViewMock) => {
+ const stateContainer = getDiscoverStateMock({ isTimeBased: true });
+ stateContainer.actions.setDataView(dataView);
+ return mountWithIntl(
);
+};
describe('OpenAlertsPopover', () => {
it('should render with the create search threshold rule button disabled if the data view has no time field', () => {
diff --git a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx
index 05eac2fb933b5..f722bc5558bee 100644
--- a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx
+++ b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx
@@ -12,10 +12,10 @@ import type { Observable } from 'rxjs';
import type { CoreTheme, I18nStart } from '@kbn/core/public';
import { EuiWrappingPopover, EuiContextMenu } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
-import type { DataView, ISearchSource } from '@kbn/data-plugin/common';
+import type { DataView } from '@kbn/data-plugin/common';
import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
+import { DiscoverStateContainer } from '../../services/discover_state';
import { DiscoverServices } from '../../../../build_services';
-import { updateSearchSource } from '../../utils/update_search_source';
const container = document.createElement('div');
let isOpen = false;
@@ -25,12 +25,11 @@ const ALERT_TYPE_ID = '.es-query';
interface AlertsPopoverProps {
onClose: () => void;
anchorElement: HTMLElement;
- searchSource: ISearchSource;
+ stateContainer: DiscoverStateContainer;
savedQueryId?: string;
adHocDataViews: DataView[];
I18nContext: I18nStart['Context'];
services: DiscoverServices;
- updateDataViewList: (dataViews: DataView[]) => void;
}
interface EsQueryAlertMetaData {
@@ -39,15 +38,13 @@ interface EsQueryAlertMetaData {
}
export function AlertsPopover({
- searchSource,
anchorElement,
- savedQueryId,
adHocDataViews,
services,
+ stateContainer,
onClose: originalOnClose,
- updateDataViewList,
}: AlertsPopoverProps) {
- const dataView = searchSource.getField('index')!;
+ const dataView = stateContainer.internalState.getState().dataView;
const { triggersActionsUi } = services;
const [alertFlyoutVisible, setAlertFlyoutVisibility] = useState(false);
const onClose = useCallback(() => {
@@ -59,20 +56,15 @@ export function AlertsPopover({
* Provides the default parameters used to initialize the new rule
*/
const getParams = useCallback(() => {
- const nextSearchSource = searchSource.createCopy();
- updateSearchSource(nextSearchSource, true, {
- dataView: searchSource.getField('index')!,
- services,
- sort: [],
- useNewFieldsApi: true,
- });
-
+ const savedQueryId = stateContainer.appState.getState().savedQuery;
return {
searchType: 'searchSource',
- searchConfiguration: nextSearchSource.getSerializedFields(),
+ searchConfiguration: stateContainer.savedSearchState
+ .getState()
+ .searchSource.getSerializedFields(),
savedQueryId,
};
- }, [savedQueryId, searchSource, services]);
+ }, [stateContainer]);
const discoverMetadata: EsQueryAlertMetaData = useMemo(
() => ({
@@ -87,8 +79,9 @@ export function AlertsPopover({
return;
}
- const onFinishFlyoutInteraction = (metadata: EsQueryAlertMetaData) => {
- updateDataViewList(metadata.adHocDataViewList);
+ const onFinishFlyoutInteraction = async (metadata: EsQueryAlertMetaData) => {
+ await stateContainer.actions.loadDataViewList();
+ stateContainer.internalState.transitions.setAdHocDataViews(metadata.adHocDataViewList);
};
return triggersActionsUi?.getAddRuleFlyout({
@@ -105,16 +98,9 @@ export function AlertsPopover({
ruleTypeId: ALERT_TYPE_ID,
initialValues: { params: getParams() },
});
- }, [
- alertFlyoutVisible,
- triggersActionsUi,
- discoverMetadata,
- getParams,
- updateDataViewList,
- onClose,
- ]);
-
- const hasTimeFieldName = dataView.timeFieldName;
+ }, [alertFlyoutVisible, triggersActionsUi, discoverMetadata, getParams, onClose, stateContainer]);
+
+ const hasTimeFieldName = Boolean(dataView?.timeFieldName);
const panels = [
{
id: 'mainPanel',
@@ -180,20 +166,16 @@ export function openAlertsPopover({
I18nContext,
theme$,
anchorElement,
- searchSource,
+ stateContainer,
services,
adHocDataViews,
- savedQueryId,
- updateDataViewList,
}: {
I18nContext: I18nStart['Context'];
theme$: Observable;
anchorElement: HTMLElement;
- searchSource: ISearchSource;
+ stateContainer: DiscoverStateContainer;
services: DiscoverServices;
adHocDataViews: DataView[];
- savedQueryId?: string;
- updateDataViewList: (dataViews: DataView[]) => void;
}) {
if (isOpen) {
closeAlertsPopover();
@@ -210,12 +192,10 @@ export function openAlertsPopover({
diff --git a/src/plugins/discover/public/application/main/discover_main_app.test.tsx b/src/plugins/discover/public/application/main/discover_main_app.test.tsx
index f3cc7f9cee43d..5f28befee9301 100644
--- a/src/plugins/discover/public/application/main/discover_main_app.test.tsx
+++ b/src/plugins/discover/public/application/main/discover_main_app.test.tsx
@@ -12,7 +12,6 @@ import { DataViewListItem } from '@kbn/data-views-plugin/public';
import { dataViewMock } from '../../__mocks__/data_view';
import { DiscoverMainApp } from './discover_main_app';
import { DiscoverTopNav } from './components/top_nav/discover_topnav';
-import { savedSearchMock } from '../../__mocks__/saved_search';
import { setHeaderActionMenuMounter, setUrlTracker } from '../../kibana_services';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { discoverServiceMock } from '../../__mocks__/services';
@@ -36,9 +35,9 @@ describe('DiscoverMainApp', () => {
}) as unknown as DataViewListItem[];
const stateContainer = getDiscoverStateMock({ isTimeBased: true });
stateContainer.actions.setDataView(dataViewMock);
+ stateContainer.internalState.transitions.setSavedDataViews(dataViewList);
const props = {
- dataViewList,
- savedSearch: savedSearchMock,
+ stateContainer,
};
const history = createMemoryHistory({
initialEntries: ['/'],
@@ -60,7 +59,6 @@ describe('DiscoverMainApp', () => {
await component.update();
expect(component.find(DiscoverTopNav).exists()).toBe(true);
- expect(component.find(DiscoverTopNav).prop('savedSearch')).toEqual(savedSearchMock);
});
});
});
diff --git a/src/plugins/discover/public/application/main/discover_main_app.tsx b/src/plugins/discover/public/application/main/discover_main_app.tsx
index 047cca9f33d57..47eac24fb48b5 100644
--- a/src/plugins/discover/public/application/main/discover_main_app.tsx
+++ b/src/plugins/discover/public/application/main/discover_main_app.tsx
@@ -8,32 +8,30 @@
import React, { useCallback, useEffect } from 'react';
import { RootDragDropProvider } from '@kbn/dom-drag-drop';
import { useHistory } from 'react-router-dom';
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
-import { DataViewListItem } from '@kbn/data-views-plugin/public';
+import { useUrlTracking } from './hooks/use_url_tracking';
+import { useSearchSession } from './hooks/use_search_session';
+import { DiscoverStateContainer } from './services/discover_state';
import { DiscoverLayout } from './components/layout';
import { setBreadcrumbsTitle } from '../../utils/breadcrumbs';
import { addHelpMenuToAppChrome } from '../../components/help_menu/help_menu_util';
-import { useDiscoverState } from './hooks/use_discover_state';
-import { useUrl } from './hooks/use_url';
import { useDiscoverServices } from '../../hooks/use_discover_services';
import { useSavedSearchAliasMatchRedirect } from '../../hooks/saved_search_alias_match_redirect';
-import { DiscoverMainProvider } from './services/discover_state_provider';
+import { useSavedSearchInitial } from './services/discover_state_provider';
+import { useAdHocDataViews } from './hooks/use_adhoc_data_views';
+import { useTextBasedQueryLanguage } from './hooks/use_text_based_query_language';
const DiscoverLayoutMemoized = React.memo(DiscoverLayout);
export interface DiscoverMainProps {
/**
- * List of available data views
+ * Central state container
*/
- dataViewList: DataViewListItem[];
- /**
- * Current instance of SavedSearch
- */
- savedSearch: SavedSearch;
+ stateContainer: DiscoverStateContainer;
}
export function DiscoverMainApp(props: DiscoverMainProps) {
- const { savedSearch, dataViewList } = props;
+ const { stateContainer } = props;
+ const savedSearch = useSavedSearchInitial();
const services = useDiscoverServices();
const { chrome, docLinks, data, spaces, history } = services;
const usedHistory = useHistory();
@@ -44,80 +42,66 @@ export function DiscoverMainApp(props: DiscoverMainProps) {
[usedHistory]
);
+ useUrlTracking(stateContainer.savedSearchState);
+
+ /**
+ * Search session logic
+ */
+ useSearchSession({ services, stateContainer });
+
/**
- * State related logic
+ * Adhoc data views functionality
*/
- const {
- inspectorAdapters,
- onChangeDataView,
- onUpdateQuery,
- persistDataView,
- updateAdHocDataViewId,
- resetSavedSearch,
- searchSource,
+ const { persistDataView } = useAdHocDataViews({
stateContainer,
- updateDataViewList,
- } = useDiscoverState({
services,
- history: usedHistory,
- savedSearch,
});
/**
- * Url / Routing logic
+ * State changes (data view, columns), when a text base query result is returned
*/
- useUrl({ history: usedHistory, resetSavedSearch });
+ useTextBasedQueryLanguage({
+ dataViews: services.dataViews,
+ stateContainer,
+ });
+ /**
+ * Start state syncing and fetch data if necessary
+ */
+ useEffect(() => {
+ const unsubscribe = stateContainer.actions.initializeAndSync();
+ stateContainer.actions.fetchData(true);
+ return () => unsubscribe();
+ }, [stateContainer]);
/**
- * SavedSearch depended initializing
+ * SavedSearch dependend initializing
*/
useEffect(() => {
const pageTitleSuffix = savedSearch.id && savedSearch.title ? `: ${savedSearch.title}` : '';
chrome.docTitle.change(`Discover${pageTitleSuffix}`);
- setBreadcrumbsTitle(savedSearch, chrome);
- return () => {
- data.search.session.clear();
- };
- }, [savedSearch, chrome, data]);
+ setBreadcrumbsTitle(savedSearch.title, chrome);
+ }, [savedSearch.id, savedSearch.title, chrome, data]);
- /**
- * Initializing syncing with state and help menu
- */
useEffect(() => {
addHelpMenuToAppChrome(chrome, docLinks);
- }, [stateContainer, chrome, docLinks]);
+ }, [chrome, docLinks]);
- /**
- * Set initial data view list
- * Can be removed once the state container work was completed
- */
useEffect(() => {
- stateContainer.internalState.transitions.setSavedDataViews(dataViewList);
- }, [stateContainer, dataViewList]);
-
- const resetCurrentSavedSearch = useCallback(() => {
- resetSavedSearch(savedSearch.id);
- }, [resetSavedSearch, savedSearch]);
+ return () => {
+ // clear session when navigating away from discover main
+ data.search.session.clear();
+ };
+ }, [data.search.session]);
useSavedSearchAliasMatchRedirect({ savedSearch, spaces, history });
return (
-
-
-
-
-
+
+
+
);
}
diff --git a/src/plugins/discover/public/application/main/discover_main_route.test.tsx b/src/plugins/discover/public/application/main/discover_main_route.test.tsx
index ae3034896c268..b9ff72ec3baae 100644
--- a/src/plugins/discover/public/application/main/discover_main_route.test.tsx
+++ b/src/plugins/discover/public/application/main/discover_main_route.test.tsx
@@ -13,12 +13,7 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { discoverServiceMock } from '../../__mocks__/services';
import { DiscoverMainRoute } from './discover_main_route';
import { MemoryRouter } from 'react-router-dom';
-import { dataViewMock } from '../../__mocks__/data_view';
-import { SavedObject } from '@kbn/core/public';
-import { DataViewSavedObjectAttrs } from '@kbn/data-views-plugin/common';
import { DiscoverMainApp } from './discover_main_app';
-import { SearchSource } from '@kbn/data-plugin/common';
-import { searchSourceInstanceMock } from '@kbn/data-plugin/common/search/search_source/mocks';
import { findTestSubject } from '@elastic/eui/lib/test';
import { scopedHistoryMock } from '@kbn/core/public/mocks';
jest.mock('./discover_main_app', () => {
@@ -80,27 +75,11 @@ const mountComponent = (hasESData = true, hasUserDataView = true) => {
};
function getServicesMock(hasESData = true, hasUserDataView = true) {
const dataViewsMock = discoverServiceMock.data.dataViews;
- dataViewsMock.getCache = jest.fn(() => {
- return Promise.resolve([dataViewMock as unknown as SavedObject]);
- });
- dataViewsMock.get = jest.fn(() => Promise.resolve(dataViewMock));
- dataViewsMock.getDefaultDataView = jest.fn(() => Promise.resolve(dataViewMock));
dataViewsMock.hasData = {
hasESData: jest.fn(() => Promise.resolve(hasESData)),
hasUserDataView: jest.fn(() => Promise.resolve(hasUserDataView)),
hasDataView: jest.fn(() => Promise.resolve(true)),
};
- dataViewsMock.refreshFields = jest.fn();
-
- discoverServiceMock.data.search.searchSource.createEmpty = jest.fn(() => {
- const fields: Record = {};
- const empty = {
- ...searchSourceInstanceMock,
- setField: (key: string, value: unknown) => (fields[key] = value),
- getField: (key: string) => fields[key],
- };
- return empty as unknown as SearchSource;
- });
return discoverServiceMock;
}
diff --git a/src/plugins/discover/public/application/main/discover_main_route.tsx b/src/plugins/discover/public/application/main/discover_main_route.tsx
index 54e90c01b24f3..3f0da4a4f4a7f 100644
--- a/src/plugins/discover/public/application/main/discover_main_route.tsx
+++ b/src/plugins/discover/public/application/main/discover_main_route.tsx
@@ -7,32 +7,27 @@
*/
import React, { useEffect, useState, memo, useCallback, useMemo } from 'react';
import { useParams, useHistory } from 'react-router-dom';
-import { DataViewListItem } from '@kbn/data-plugin/public';
-import { isOfAggregateQueryType } from '@kbn/es-query';
-import { DataViewSavedObjectConflictError, type DataView } from '@kbn/data-views-plugin/public';
-import { redirectWhenMissing } from '@kbn/kibana-utils-plugin/public';
+import type { DataView } from '@kbn/data-views-plugin/public';
+import { redirectWhenMissing, SavedObjectNotFound } from '@kbn/kibana-utils-plugin/public';
import { useExecutionContext } from '@kbn/kibana-react-plugin/public';
import {
AnalyticsNoDataPageKibanaProvider,
AnalyticsNoDataPage,
} from '@kbn/shared-ux-page-analytics-no-data';
-import {
- SavedSearch,
- getSavedSearch,
- getSavedSearchFullPathUrl,
-} from '@kbn/saved-search-plugin/public';
+import { getSavedSearchFullPathUrl } from '@kbn/saved-search-plugin/public';
import useObservable from 'react-use/lib/useObservable';
+import { useUrl } from './hooks/use_url';
+import { useSingleton } from './hooks/use_singleton';
import { MainHistoryLocationState } from '../../../common/locator';
-import { getDiscoverStateContainer } from './services/discover_state';
-import { loadDataView, resolveDataView } from './utils/resolve_data_view';
+import { DiscoverStateContainer, getDiscoverStateContainer } from './services/discover_state';
import { DiscoverMainApp } from './discover_main_app';
import { getRootBreadcrumbs, getSavedSearchBreadcrumbs } from '../../utils/breadcrumbs';
import { LoadingIndicator } from '../../components/common/loading_indicator';
import { DiscoverError } from '../../components/common/error_alert';
import { useDiscoverServices } from '../../hooks/use_discover_services';
import { getScopedHistory, getUrlTracker } from '../../kibana_services';
-import { restoreStateFromSavedSearch } from '../../services/saved_searches/restore_from_saved_search';
import { useAlertResultsToast } from './hooks/use_alert_results_toast';
+import { DiscoverMainProvider } from './services/discover_state_provider';
const DiscoverMainAppMemoized = memo(DiscoverMainApp);
@@ -51,21 +46,24 @@ export function DiscoverMainRoute(props: Props) {
const {
core,
chrome,
- uiSettings: config,
data,
toastNotifications,
http: { basePath },
dataViewEditor,
} = services;
+ const { id: savedSearchId } = useParams();
+ const stateContainer = useSingleton(() =>
+ getDiscoverStateContainer({
+ history,
+ services,
+ })
+ );
const [error, setError] = useState();
const [loading, setLoading] = useState(true);
- const [savedSearch, setSavedSearch] = useState();
- const [dataViewList, setDataViewList] = useState([]);
const [hasESData, setHasESData] = useState(false);
const [hasUserDataView, setHasUserDataView] = useState(false);
const [showNoDataPage, setShowNoDataPage] = useState(false);
const hasCustomBranding = useObservable(core.customBranding.hasCustomBranding$, false);
- const { id } = useParams();
/**
* Get location state of scoped history only on initial load
@@ -83,118 +81,77 @@ export function DiscoverMainRoute(props: Props) {
useExecutionContext(core.executionContext, {
type: 'application',
page: 'app',
- id: id || 'new',
+ id: savedSearchId || 'new',
});
- const loadDefaultOrCurrentDataView = useCallback(
- async (nextSavedSearch: SavedSearch) => {
- try {
- const hasUserDataViewValue = await data.dataViews.hasData
- .hasUserDataView()
- .catch(() => false);
- const hasESDataValue =
- isDev || (await data.dataViews.hasData.hasESData().catch(() => false));
- setHasUserDataView(hasUserDataViewValue);
- setHasESData(hasESDataValue);
-
- if (!hasUserDataViewValue) {
- setShowNoDataPage(true);
- return;
- }
-
- let defaultDataView: DataView | null = null;
- try {
- defaultDataView = await data.dataViews.getDefaultDataView({ displayErrors: false });
- } catch (e) {
- //
- }
-
- if (!defaultDataView) {
- setShowNoDataPage(true);
- return;
- }
-
- const { appState } = getDiscoverStateContainer({
- history,
- savedSearch: nextSavedSearch,
- services,
- });
- const { index, query } = appState.getState();
- const ip = await loadDataView(
- data.dataViews,
- config,
- index,
- historyLocationState?.dataViewSpec
- );
+ const checkData = useCallback(async () => {
+ try {
+ const hasUserDataViewValue = await data.dataViews.hasData
+ .hasUserDataView()
+ .catch(() => false);
+ const hasESDataValue = isDev || (await data.dataViews.hasData.hasESData().catch(() => false));
+ setHasUserDataView(hasUserDataViewValue);
+ setHasESData(hasESDataValue);
- const ipList = ip.list;
- const isTextBasedQuery = query && isOfAggregateQueryType(query);
- const dataViewData = resolveDataView(
- ip,
- nextSavedSearch.searchSource,
- toastNotifications,
- isTextBasedQuery
- );
- setDataViewList(ipList);
+ if (!hasUserDataViewValue) {
+ setShowNoDataPage(true);
+ return false;
+ }
- return dataViewData;
+ let defaultDataView: DataView | null = null;
+ try {
+ defaultDataView = await data.dataViews.getDefaultDataView({ displayErrors: false });
} catch (e) {
- setError(e);
+ //
}
- },
- [
- config,
- data.dataViews,
- history,
- isDev,
- historyLocationState?.dataViewSpec,
- toastNotifications,
- services,
- ]
- );
+
+ if (!defaultDataView) {
+ setShowNoDataPage(true);
+ return false;
+ }
+ return true;
+ } catch (e) {
+ setError(e);
+ return false;
+ }
+ }, [data.dataViews, isDev]);
const loadSavedSearch = useCallback(
async (nextDataView?: DataView) => {
+ setLoading(true);
+ if (!nextDataView && !(await checkData())) {
+ setLoading(false);
+ return;
+ }
try {
- setLoading(true);
- const currentSavedSearch = await getSavedSearch(id, {
- search: services.data.search,
- savedObjectsClient: core.savedObjects.client,
- spaces: services.spaces,
- savedObjectsTagging: services.savedObjectsTagging,
- });
-
- const currentDataView = nextDataView
- ? nextDataView
- : await loadDefaultOrCurrentDataView(currentSavedSearch);
-
- if (!currentDataView) {
- return;
- }
-
- if (!currentSavedSearch.searchSource.getField('index')) {
- currentSavedSearch.searchSource.setField('index', currentDataView);
- }
-
- restoreStateFromSavedSearch({
- savedSearch: currentSavedSearch,
- timefilter: services.timefilter,
+ await stateContainer.actions.loadDataViewList();
+ // reset appState in case a saved search with id is loaded and the url is empty
+ // so the saved search is loaded in a clean state
+ // else it might be updated by the previous app state
+ const useAppState = !stateContainer.appState.isEmptyURL();
+ const currentSavedSearch = await stateContainer.actions.loadSavedSearch({
+ savedSearchId,
+ dataView: nextDataView,
+ dataViewSpec: historyLocationState?.dataViewSpec,
+ useAppState,
});
-
- setSavedSearch(currentSavedSearch);
-
- if (currentSavedSearch.id) {
+ if (currentSavedSearch?.id) {
chrome.recentlyAccessed.add(
getSavedSearchFullPathUrl(currentSavedSearch.id),
currentSavedSearch.title ?? '',
currentSavedSearch.id
);
}
+
+ chrome.setBreadcrumbs(
+ currentSavedSearch && currentSavedSearch.title
+ ? getSavedSearchBreadcrumbs(currentSavedSearch.title)
+ : getRootBreadcrumbs()
+ );
+
setLoading(false);
} catch (e) {
- if (e instanceof DataViewSavedObjectConflictError) {
- setError(e);
- } else {
+ if (e instanceof SavedObjectNotFound) {
redirectWhenMissing({
history,
navigateToApp: core.application.navigateToApp,
@@ -203,7 +160,7 @@ export function DiscoverMainRoute(props: Props) {
search: '/',
'index-pattern': {
app: 'management',
- path: `kibana/objects/savedSearches/${id}`,
+ path: `kibana/objects/savedSearches/${savedSearchId}`,
},
},
toastNotifications,
@@ -212,21 +169,20 @@ export function DiscoverMainRoute(props: Props) {
},
theme: core.theme,
})(e);
+ } else {
+ setError(e);
}
}
},
[
- id,
- services.data,
- services.spaces,
- services.timefilter,
- services.savedObjectsTagging,
- core.savedObjects.client,
+ checkData,
+ stateContainer,
+ savedSearchId,
+ historyLocationState?.dataViewSpec,
+ chrome,
+ history,
core.application.navigateToApp,
core.theme,
- loadDefaultOrCurrentDataView,
- chrome.recentlyAccessed,
- history,
basePath,
toastNotifications,
]
@@ -244,17 +200,22 @@ export function DiscoverMainRoute(props: Props) {
[loadSavedSearch]
);
+ // primary fetch: on initial search + triggered when id changes
useEffect(() => {
- loadSavedSearch();
- }, [loadSavedSearch]);
+ // restore the previously selected data view for a new state
+ loadSavedSearch(!savedSearchId ? stateContainer.internalState.getState().dataView : undefined);
+ }, [loadSavedSearch, savedSearchId, stateContainer]);
- useEffect(() => {
- chrome.setBreadcrumbs(
- savedSearch && savedSearch.title
- ? getSavedSearchBreadcrumbs(savedSearch.title)
- : getRootBreadcrumbs()
- );
- }, [chrome, savedSearch]);
+ // secondary fetch: in case URL is set to `/`, used to reset to 'new' state, keeping the current data view
+ useUrl({
+ history,
+ savedSearchId,
+ onNewUrl: () => {
+ // restore the previously selected data view for a new state
+ const dataView = stateContainer.internalState.getState().dataView;
+ loadSavedSearch(dataView);
+ },
+ });
if (showNoDataPage) {
const analyticsServices = {
@@ -284,9 +245,13 @@ export function DiscoverMainRoute(props: Props) {
return ;
}
- if (loading || !savedSearch) {
+ if (loading) {
return ;
}
- return ;
+ return (
+
+
+
+ );
}
diff --git a/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.test.tsx b/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.test.tsx
index 770373f74825f..09c5c9f1d2d31 100644
--- a/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.test.tsx
+++ b/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.test.tsx
@@ -7,16 +7,15 @@
*/
import React from 'react';
-import { createSearchSourceMock } from '@kbn/data-plugin/public/mocks';
import type { DataView } from '@kbn/data-views-plugin/public';
-import { act, renderHook } from '@testing-library/react-hooks';
-import { discoverServiceMock as mockDiscoverServices } from '../../../__mocks__/services';
+import { renderHook } from '@testing-library/react-hooks';
import { useAdHocDataViews } from './use_adhoc_data_views';
import * as persistencePromptModule from '../../../hooks/use_confirm_persistence_prompt';
import { urlTrackerMock } from '../../../__mocks__/url_tracker.mock';
import { setUrlTracker } from '../../../kibana_services';
import { getDiscoverStateMock } from '../../../__mocks__/discover_state.mock';
import { DiscoverMainProvider } from '../services/discover_state_provider';
+import { discoverServiceMock } from '../../../__mocks__/services';
jest.mock('../../../hooks/use_confirm_persistence_prompt', () => {
const createdDataView = {
@@ -65,27 +64,21 @@ const mockDataView = {
isPersisted: () => false,
getName: () => 'mock-data-view',
toSpec: () => ({}),
+ isTimeBased: () => true,
} as DataView;
-const savedSearchMock = {
- id: 'some-id',
- searchSource: createSearchSourceMock({ index: mockDataView }),
-};
-
describe('useAdHocDataViews', () => {
it('should save data view with new id and update saved search', async () => {
- const stateContainer = getDiscoverStateMock({ isTimeBased: true });
+ const stateContainer = getDiscoverStateMock({
+ isTimeBased: true,
+ });
+ stateContainer.actions.setDataView(mockDataView);
const hook = renderHook(
() =>
useAdHocDataViews({
- dataView: mockDataView,
- savedSearch: savedSearchMock,
stateContainer,
- setUrlTracking: jest.fn(),
- dataViews: mockDiscoverServices.dataViews,
- filterManager: mockDiscoverServices.filterManager,
- toastNotifications: mockDiscoverServices.toastNotifications,
+ services: discoverServiceMock,
}),
{
wrapper: ({ children }: { children: React.ReactElement }) => (
@@ -101,38 +94,4 @@ describe('useAdHocDataViews', () => {
expect(updateSavedSearchCall[0].dataView.id).toEqual('updated-mock-id');
expect(savedDataView!.id).toEqual('updated-mock-id');
});
-
- it('should update id of adhoc data view correctly', async () => {
- const dataViewsCreateMock = mockDiscoverServices.dataViews.create as jest.Mock;
- dataViewsCreateMock.mockImplementation(() => ({
- ...mockDataView,
- id: 'updated-mock-id',
- }));
- const stateContainer = getDiscoverStateMock({ isTimeBased: true });
- const hook = renderHook(
- () =>
- useAdHocDataViews({
- dataView: mockDataView,
- savedSearch: savedSearchMock,
- stateContainer: getDiscoverStateMock({ isTimeBased: true }),
- setUrlTracking: jest.fn(),
- dataViews: mockDiscoverServices.dataViews,
- filterManager: mockDiscoverServices.filterManager,
- toastNotifications: mockDiscoverServices.toastNotifications,
- }),
- {
- wrapper: ({ children }: { children: React.ReactElement }) => (
- {children}
- ),
- }
- );
-
- let updatedDataView: DataView;
- await act(async () => {
- updatedDataView = await hook.result.current.updateAdHocDataViewId(mockDataView);
- });
-
- expect(mockDiscoverServices.dataViews.clearInstanceCache).toHaveBeenCalledWith(mockDataView.id);
- expect(updatedDataView!.id).toEqual('updated-mock-id');
- });
});
diff --git a/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.ts b/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.ts
index 31e96f01a2b74..646861efdf255 100644
--- a/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_adhoc_data_views.ts
@@ -7,80 +7,51 @@
*/
import { useCallback, useEffect } from 'react';
-import { v4 as uuidv4 } from 'uuid';
-import type { DataView, DataViewsContract } from '@kbn/data-views-plugin/public';
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
-import type { FilterManager } from '@kbn/data-plugin/public';
-import type { ToastsStart } from '@kbn/core-notifications-browser';
import { METRIC_TYPE } from '@kbn/analytics';
+import { DiscoverServices } from '../../../build_services';
+import { useSavedSearch } from '../services/discover_state_provider';
+import { isTextBasedQuery } from '../utils/is_text_based_query';
+import { useAppStateSelector } from '../services/discover_app_state_container';
+import { useInternalStateSelector } from '../services/discover_internal_state_container';
import { ADHOC_DATA_VIEW_RENDER_EVENT } from '../../../constants';
import { useConfirmPersistencePrompt } from '../../../hooks/use_confirm_persistence_prompt';
import { DiscoverStateContainer } from '../services/discover_state';
import { useFiltersValidation } from './use_filters_validation';
-import { updateFiltersReferences } from '../utils/update_filter_references';
export const useAdHocDataViews = ({
- dataView,
- savedSearch,
stateContainer,
- setUrlTracking,
- filterManager,
- dataViews,
- toastNotifications,
- trackUiMetric,
- isTextBasedMode,
+ services,
}: {
- dataView: DataView;
- savedSearch: SavedSearch;
stateContainer: DiscoverStateContainer;
- setUrlTracking: (dataView: DataView) => void;
- dataViews: DataViewsContract;
- filterManager: FilterManager;
- toastNotifications: ToastsStart;
- trackUiMetric?: (metricType: string, eventName: string | string[], count?: number) => void;
- isTextBasedMode?: boolean;
+ services: DiscoverServices;
}) => {
+ const query = useAppStateSelector((state) => state.query);
+ const dataView = useInternalStateSelector((state) => state.dataView);
+ const savedSearch = useSavedSearch();
+ const isTextBasedMode = isTextBasedQuery(query);
+ const { filterManager, toastNotifications } = services;
+
useEffect(() => {
- if (!dataView.isPersisted()) {
- trackUiMetric?.(METRIC_TYPE.COUNT, ADHOC_DATA_VIEW_RENDER_EVENT);
+ if (dataView && !dataView.isPersisted()) {
+ services.trackUiMetric?.(METRIC_TYPE.COUNT, ADHOC_DATA_VIEW_RENDER_EVENT);
}
- }, [dataView, isTextBasedMode, trackUiMetric]);
+ }, [dataView, isTextBasedMode, services]);
/**
* Takes care of checking data view id references in filters
*/
useFiltersValidation({ savedSearch, filterManager, toastNotifications });
- /**
- * When saving a saved search with an ad hoc data view, a new id needs to be generated for the data view
- * This is to prevent duplicate ids messing with our system
- */
- const updateAdHocDataViewId = useCallback(
- async (prevDataView: DataView) => {
- const newDataView = await dataViews.create({ ...prevDataView.toSpec(), id: uuidv4() });
- dataViews.clearInstanceCache(prevDataView.id);
-
- updateFiltersReferences(prevDataView, newDataView);
-
- stateContainer.actions.replaceAdHocDataViewWithId(prevDataView.id!, newDataView);
- await stateContainer.appState.update({ index: newDataView.id }, true);
-
- setUrlTracking(newDataView);
- return newDataView;
- },
- [dataViews, setUrlTracking, stateContainer]
- );
-
const { openConfirmSavePrompt, updateSavedSearch } = useConfirmPersistencePrompt(stateContainer);
const persistDataView = useCallback(async () => {
- const currentDataView = savedSearch.searchSource.getField('index')!;
+ const currentDataView = stateContainer.internalState.getState().dataView;
if (!currentDataView || currentDataView.isPersisted()) {
return currentDataView;
}
const createdDataView = await openConfirmSavePrompt(currentDataView);
if (!createdDataView) {
- return currentDataView; // persistance cancelled
+ return; // persistance cancelled
}
if (savedSearch.id) {
@@ -90,7 +61,7 @@ export const useAdHocDataViews = ({
}
return createdDataView;
- }, [stateContainer, openConfirmSavePrompt, savedSearch, updateSavedSearch]);
+ }, [stateContainer, openConfirmSavePrompt, updateSavedSearch, savedSearch]);
- return { persistDataView, updateAdHocDataViewId };
+ return { persistDataView };
};
diff --git a/src/plugins/discover/public/application/main/hooks/use_discover_state.test.tsx b/src/plugins/discover/public/application/main/hooks/use_discover_state.test.tsx
deleted file mode 100644
index c590722d98bac..0000000000000
--- a/src/plugins/discover/public/application/main/hooks/use_discover_state.test.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
- * in compliance with, at your election, the Elastic License 2.0 or the Server
- * Side Public License, v 1.
- */
-import React from 'react';
-import { renderHook } from '@testing-library/react-hooks';
-import { SearchSource } from '@kbn/data-plugin/public';
-import { createSearchSessionMock } from '../../../__mocks__/search_session';
-import { discoverServiceMock } from '../../../__mocks__/services';
-import { savedSearchMock } from '../../../__mocks__/saved_search';
-import { useDiscoverState } from './use_discover_state';
-import { setUrlTracker } from '../../../kibana_services';
-import { urlTrackerMock } from '../../../__mocks__/url_tracker.mock';
-import { DiscoverMainProvider } from '../services/discover_state_provider';
-import { getDiscoverStateMock } from '../../../__mocks__/discover_state.mock';
-setUrlTracker(urlTrackerMock);
-
-describe('test useDiscoverState', () => {
- test('return is valid', async () => {
- const { history } = createSearchSessionMock();
- const stateContainer = getDiscoverStateMock({ isTimeBased: true });
-
- const { result } = renderHook(
- () => {
- return useDiscoverState({
- services: discoverServiceMock,
- history,
- savedSearch: savedSearchMock,
- });
- },
- {
- wrapper: ({ children }: { children: React.ReactElement }) => (
- {children}
- ),
- }
- );
- expect(result.current.stateContainer).toBeInstanceOf(Object);
- expect(result.current.searchSource).toBeInstanceOf(SearchSource);
- });
-});
diff --git a/src/plugins/discover/public/application/main/hooks/use_discover_state.ts b/src/plugins/discover/public/application/main/hooks/use_discover_state.ts
deleted file mode 100644
index 00d30e74fadbc..0000000000000
--- a/src/plugins/discover/public/application/main/hooks/use_discover_state.ts
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
- * in compliance with, at your election, the Elastic License 2.0 or the Server
- * Side Public License, v 1.
- */
-import { useMemo, useEffect, useState, useCallback } from 'react';
-import { History } from 'history';
-import { isOfAggregateQueryType } from '@kbn/es-query';
-import { type DataView, DataViewType } from '@kbn/data-views-plugin/public';
-import { SavedSearch, getSavedSearch } from '@kbn/saved-search-plugin/public';
-import { buildStateSubscribe } from './utils/build_state_subscribe';
-import { changeDataView } from './utils/change_data_view';
-import { useSearchSession } from './use_search_session';
-import { FetchStatus } from '../../types';
-import { useTextBasedQueryLanguage } from './use_text_based_query_language';
-import { useUrlTracking } from './use_url_tracking';
-import { getDiscoverStateContainer } from '../services/discover_state';
-import { getStateDefaults } from '../utils/get_state_defaults';
-import { DiscoverServices } from '../../../build_services';
-import { restoreStateFromSavedSearch } from '../../../services/saved_searches/restore_from_saved_search';
-import { useAdHocDataViews } from './use_adhoc_data_views';
-
-export function useDiscoverState({
- services,
- history,
- savedSearch,
-}: {
- services: DiscoverServices;
- savedSearch: SavedSearch;
- history: History;
-}) {
- const { data, filterManager, dataViews, toastNotifications, trackUiMetric } = services;
-
- const dataView = savedSearch.searchSource.getField('index')!;
-
- const searchSource = useMemo(() => {
- savedSearch.searchSource.setField('index', dataView);
- return savedSearch.searchSource.createChild();
- }, [savedSearch, dataView]);
-
- const stateContainer = useMemo(() => {
- const container = getDiscoverStateContainer({
- history,
- savedSearch,
- services,
- });
- const nextDataView = savedSearch.searchSource.getField('index')!;
- container.actions.setDataView(nextDataView);
- if (!nextDataView.isPersisted()) {
- container.actions.appendAdHocDataViews(nextDataView);
- }
- return container;
- }, [history, savedSearch, services]);
-
- const { setUrlTracking } = useUrlTracking(savedSearch, dataView);
-
- const { appState, searchSessionManager } = stateContainer;
-
- const [state, setState] = useState(appState.getState());
-
- /**
- * Search session logic
- */
- useSearchSession({ services, stateContainer, savedSearch });
-
- /**
- * Adhoc data views functionality
- */
- const isTextBasedMode = state?.query && isOfAggregateQueryType(state?.query);
- const { persistDataView, updateAdHocDataViewId } = useAdHocDataViews({
- dataView,
- dataViews,
- stateContainer,
- savedSearch,
- setUrlTracking,
- filterManager,
- toastNotifications,
- trackUiMetric,
- isTextBasedMode,
- });
-
- /**
- * Updates data views selector state
- */
- const updateDataViewList = useCallback(
- async (newAdHocDataViews: DataView[]) => {
- await stateContainer.actions.loadDataViewList();
- stateContainer.actions.setAdHocDataViews(newAdHocDataViews);
- },
- [stateContainer.actions]
- );
-
- /**
- * Data fetching logic
- */
- const { data$, refetch$, reset, inspectorAdapters, initialFetchStatus } =
- stateContainer.dataState;
- /**
- * State changes (data view, columns), when a text base query result is returned
- */
- useTextBasedQueryLanguage({
- documents$: data$.documents$,
- dataViews,
- stateContainer,
- savedSearch,
- });
-
- /**
- * Reset to display loading spinner when savedSearch is changing
- */
- useEffect(() => reset(), [savedSearch.id, reset]);
-
- /**
- * Sync URL state with local app state on saved search load
- * or dataView / savedSearch switch
- */
- useEffect(() => {
- const stopSync = stateContainer.actions.initializeAndSync(dataView, filterManager, data);
- setState(stateContainer.appState.getState());
-
- return () => stopSync();
- }, [stateContainer, filterManager, data, dataView]);
-
- /**
- * Data store subscribing to trigger fetching
- */
- useEffect(() => {
- const stopSync = stateContainer.dataState.subscribe();
- return () => stopSync();
- }, [stateContainer]);
-
- /**
- * Track state changes that should trigger a fetch
- */
- useEffect(() => {
- const unsubscribe = appState.subscribe(
- buildStateSubscribe({ stateContainer, savedSearch, setState })
- );
- return () => unsubscribe();
- }, [appState, savedSearch, services, stateContainer]);
-
- /**
- * Function triggered when user changes data view in the sidebar
- */
- const onChangeDataView = useCallback(
- async (id: string) => {
- await changeDataView(id, { services, discoverState: stateContainer, setUrlTracking });
- stateContainer.internalState.transitions.setExpandedDoc(undefined);
- },
- [services, setUrlTracking, stateContainer]
- );
-
- /**
- * function to revert any changes to a given saved search
- */
- const resetSavedSearch = useCallback(
- async (id?: string) => {
- const newSavedSearch = await getSavedSearch(id, {
- search: services.data.search,
- savedObjectsClient: services.core.savedObjects.client,
- spaces: services.spaces,
- savedObjectsTagging: services.savedObjectsTagging,
- });
-
- const newDataView = newSavedSearch.searchSource.getField('index') || dataView;
- newSavedSearch.searchSource.setField('index', newDataView);
- const newAppState = getStateDefaults({
- savedSearch: newSavedSearch,
- services,
- });
-
- restoreStateFromSavedSearch({
- savedSearch: newSavedSearch,
- timefilter: services.timefilter,
- });
-
- await stateContainer.appState.update(newAppState, true);
- setState(newAppState);
- },
- [services, dataView, stateContainer]
- );
-
- /**
- * Function triggered when the user changes the query in the search bar
- */
- const onUpdateQuery = useCallback(
- (_payload, isUpdate?: boolean) => {
- if (isUpdate === false) {
- searchSessionManager.removeSearchSessionIdFromURL({ replace: false });
- refetch$.next(undefined);
- }
- },
- [refetch$, searchSessionManager]
- );
-
- /**
- * Trigger data fetching on dataView or savedSearch changes
- */
- useEffect(() => {
- if (dataView && initialFetchStatus === FetchStatus.LOADING) {
- refetch$.next(undefined);
- }
- }, [initialFetchStatus, refetch$, dataView, savedSearch.id]);
-
- /**
- * We need to make sure the auto refresh interval is disabled for
- * non-time series data or rollups since we don't show the date picker
- */
- useEffect(() => {
- if (dataView && (!dataView.isTimeBased() || dataView.type === DataViewType.ROLLUP)) {
- stateContainer.actions.pauseAutoRefreshInterval();
- }
- }, [dataView, stateContainer]);
-
- return {
- inspectorAdapters,
- resetSavedSearch,
- onChangeDataView,
- onUpdateQuery,
- searchSource,
- stateContainer,
- persistDataView,
- updateAdHocDataViewId,
- updateDataViewList,
- };
-}
diff --git a/src/plugins/discover/public/application/main/hooks/use_inspector.test.ts b/src/plugins/discover/public/application/main/hooks/use_inspector.test.ts
index 7f30ef8c51b47..57e94aa7a0db1 100644
--- a/src/plugins/discover/public/application/main/hooks/use_inspector.test.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_inspector.test.ts
@@ -8,7 +8,6 @@
import { act, renderHook } from '@testing-library/react-hooks';
import { discoverServiceMock } from '../../../__mocks__/services';
-import { savedSearchMock } from '../../../__mocks__/saved_search';
import { useInspector } from './use_inspector';
import { Adapters, RequestAdapter } from '@kbn/inspector-plugin/common';
import { OverlayRef } from '@kbn/core/public';
@@ -29,15 +28,14 @@ describe('test useInspector', () => {
stateContainer.internalState.transitions.setExpandedDoc({} as unknown as DataTableRecord);
const { result } = renderHook(() => {
return useInspector({
- inspectorAdapters: { requests, lensRequests },
- savedSearch: savedSearchMock,
- inspector: discoverServiceMock.inspector,
stateContainer,
+ inspector: discoverServiceMock.inspector,
});
});
await act(async () => {
result.current();
});
+
expect(discoverServiceMock.inspector.open).toHaveBeenCalled();
expect(adapters?.requests).toBeInstanceOf(AggregateRequestAdapter);
expect(adapters?.requests?.getRequests()).toEqual([
diff --git a/src/plugins/discover/public/application/main/hooks/use_inspector.ts b/src/plugins/discover/public/application/main/hooks/use_inspector.ts
index 2d4179801faa0..45120d524144f 100644
--- a/src/plugins/discover/public/application/main/hooks/use_inspector.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_inspector.ts
@@ -12,7 +12,6 @@ import {
RequestAdapter,
Start as InspectorPublicPluginStart,
} from '@kbn/inspector-plugin/public';
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
import { DiscoverStateContainer } from '../services/discover_state';
import { AggregateRequestAdapter } from '../utils/aggregate_request_adapter';
@@ -24,11 +23,7 @@ export interface InspectorAdapters {
export function useInspector({
inspector,
stateContainer,
- inspectorAdapters,
- savedSearch,
}: {
- inspectorAdapters: InspectorAdapters;
- savedSearch: SavedSearch;
inspector: InspectorPublicPluginStart;
stateContainer: DiscoverStateContainer;
}) {
@@ -37,6 +32,7 @@ export function useInspector({
const onOpenInspector = useCallback(() => {
// prevent overlapping
stateContainer.internalState.transitions.setExpandedDoc(undefined);
+ const inspectorAdapters = stateContainer.dataState.inspectorAdapters;
const requestAdapters = inspectorAdapters.lensRequests
? [inspectorAdapters.requests, inspectorAdapters.lensRequests]
@@ -44,17 +40,11 @@ export function useInspector({
const session = inspector.open(
{ requests: new AggregateRequestAdapter(requestAdapters) },
- { title: savedSearch.title }
+ { title: stateContainer.savedSearchState.getTitle() }
);
setInspectorSession(session);
- }, [
- stateContainer,
- inspectorAdapters.lensRequests,
- inspectorAdapters.requests,
- inspector,
- savedSearch.title,
- ]);
+ }, [stateContainer, inspector]);
useEffect(() => {
return () => {
diff --git a/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.ts b/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.ts
index 7be14ca9c802e..060b12053c870 100644
--- a/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_saved_search_messages.ts
@@ -15,6 +15,7 @@ import type {
DataTotalHits$,
SavedSearchData,
} from '../services/discover_data_state_container';
+import { RecordRawType } from '../services/discover_data_state_container';
/**
* Sends COMPLETE message to the main$ observable with the information
* that no documents have been found, allowing Discover to show a no
@@ -86,8 +87,11 @@ export function sendErrorMsg(data$: DataMain$ | DataDocuments$ | DataTotalHits$,
* Sends a RESET message to all data subjects
* Needed when data view is switched or a new runtime field is added
*/
-export function sendResetMsg(data: SavedSearchData, initialFetchStatus: FetchStatus) {
- const recordRawType = data.main$.getValue().recordRawType;
+export function sendResetMsg(
+ data: SavedSearchData,
+ initialFetchStatus: FetchStatus,
+ recordRawType: RecordRawType
+) {
data.main$.next({
fetchStatus: initialFetchStatus,
foundDocuments: undefined,
diff --git a/src/plugins/discover/public/application/main/hooks/use_search_session.test.ts b/src/plugins/discover/public/application/main/hooks/use_search_session.test.ts
index 4f483a3e01c31..0e2606c063f75 100644
--- a/src/plugins/discover/public/application/main/hooks/use_search_session.test.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_search_session.test.ts
@@ -8,18 +8,14 @@
import { useSearchSession } from './use_search_session';
import { renderHook } from '@testing-library/react-hooks';
-import { createSearchSessionMock } from '../../../__mocks__/search_session';
import { discoverServiceMock } from '../../../__mocks__/services';
import { savedSearchMock } from '../../../__mocks__/saved_search';
-import { getDiscoverStateContainer } from '../services/discover_state';
+import { getDiscoverStateMock } from '../../../__mocks__/discover_state.mock';
describe('test useSearchSession', () => {
test('getting the next session id', async () => {
- const { history } = createSearchSessionMock();
- const stateContainer = getDiscoverStateContainer({
+ const stateContainer = getDiscoverStateMock({
savedSearch: savedSearchMock,
- history,
- services: discoverServiceMock,
});
const nextId = 'id';
@@ -29,7 +25,6 @@ describe('test useSearchSession', () => {
return useSearchSession({
services: discoverServiceMock,
stateContainer,
- savedSearch: savedSearchMock,
});
});
expect(stateContainer.searchSessionManager.getNextSearchSessionId()).toBe('id');
diff --git a/src/plugins/discover/public/application/main/hooks/use_search_session.ts b/src/plugins/discover/public/application/main/hooks/use_search_session.ts
index 8dadbd9015f1e..dc08eb7fe0b4c 100644
--- a/src/plugins/discover/public/application/main/hooks/use_search_session.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_search_session.ts
@@ -7,7 +7,6 @@
*/
import { useEffect } from 'react';
import { noSearchSessionStorageCapabilityMessage } from '@kbn/data-plugin/public';
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
import {
createSearchSessionRestorationDataProvider,
DiscoverStateContainer,
@@ -17,11 +16,9 @@ import { DiscoverServices } from '../../../build_services';
export function useSearchSession({
services,
stateContainer,
- savedSearch,
}: {
services: DiscoverServices;
stateContainer: DiscoverStateContainer;
- savedSearch: SavedSearch;
}) {
const { data, capabilities } = services;
@@ -30,7 +27,7 @@ export function useSearchSession({
createSearchSessionRestorationDataProvider({
appStateContainer: stateContainer.appState,
data,
- getSavedSearch: () => savedSearch,
+ getSavedSearch: () => stateContainer.savedSearchState.getState(),
}),
{
isDisabled: () =>
@@ -42,5 +39,5 @@ export function useSearchSession({
},
}
);
- }, [capabilities.discover.storeSearchSession, data, savedSearch, stateContainer.appState]);
+ }, [capabilities.discover.storeSearchSession, data, stateContainer]);
}
diff --git a/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.ts b/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx
similarity index 79%
rename from src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.ts
rename to src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx
index d512477d9f53e..edf69444ac5e3 100644
--- a/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx
@@ -5,23 +5,24 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
-
+import React from 'react';
import { renderHook } from '@testing-library/react-hooks';
import { waitFor } from '@testing-library/react';
import { DataViewsContract } from '@kbn/data-plugin/public';
import { discoverServiceMock } from '../../../__mocks__/services';
import { useTextBasedQueryLanguage } from './use_text_based_query_language';
-import { BehaviorSubject } from 'rxjs';
import { FetchStatus } from '../../types';
-import { DataDocuments$, RecordRawType } from '../services/discover_data_state_container';
-import { DiscoverAppState } from '../services/discover_app_state_container';
+import { RecordRawType } from '../services/discover_data_state_container';
import { DataTableRecord } from '../../../types';
import { AggregateQuery, Query } from '@kbn/es-query';
import { dataViewMock } from '../../../__mocks__/data_view';
import { DataViewListItem } from '@kbn/data-views-plugin/common';
import { savedSearchMock } from '../../../__mocks__/saved_search';
import { getDiscoverStateMock } from '../../../__mocks__/discover_state.mock';
-import { VIEW_MODE } from '@kbn/saved-search-plugin/common';
+import { DiscoverMainProvider } from '../services/discover_state_provider';
+import { DiscoverAppState } from '../services/discover_app_state_container';
+import { DiscoverStateContainer } from '../services/discover_state';
+import { VIEW_MODE } from '@kbn/saved-search-plugin/public';
function getHookProps(
query: AggregateQuery | Query | undefined,
@@ -39,11 +40,9 @@ function getHookProps(
fetchStatus: FetchStatus.LOADING,
query,
};
-
- const documents$ = new BehaviorSubject(msgLoading) as DataDocuments$;
+ stateContainer.dataState.data$.documents$.next(msgLoading);
return {
- documents$,
dataViews: dataViewsService ?? discoverServiceMock.dataViews,
stateContainer,
savedSearch: savedSearchMock,
@@ -64,19 +63,49 @@ const msgComplete = {
query,
};
+const getDataViewsService = () => {
+ const dataViewsCreateMock = discoverServiceMock.dataViews.create as jest.Mock;
+ dataViewsCreateMock.mockImplementation(() => ({
+ ...dataViewMock,
+ }));
+ return {
+ ...discoverServiceMock.dataViews,
+ create: dataViewsCreateMock,
+ };
+};
+
+const getHookContext = (stateContainer: DiscoverStateContainer) => {
+ return ({ children }: { children: JSX.Element }) => (
+ {children}
+ );
+};
+const renderHookWithContext = (
+ useDataViewsService: boolean = false,
+ appState?: DiscoverAppState
+) => {
+ const props = getHookProps(query, useDataViewsService ? getDataViewsService() : undefined);
+ if (appState) {
+ props.stateContainer.appState.getState = jest.fn(() => {
+ return appState;
+ });
+ }
+
+ renderHook(() => useTextBasedQueryLanguage(props), {
+ wrapper: getHookContext(props.stateContainer),
+ });
+ return props;
+};
+
describe('useTextBasedQueryLanguage', () => {
test('a text based query should change state when loading and finished', async () => {
- const props = getHookProps(query);
- const { documents$, replaceUrlState } = props;
-
- renderHook(() => useTextBasedQueryLanguage(props));
+ const { replaceUrlState, stateContainer } = renderHookWithContext(false);
await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(1));
expect(replaceUrlState).toHaveBeenCalledWith({ index: 'the-data-view-id' });
replaceUrlState.mockReset();
- documents$.next(msgComplete);
+ stateContainer.dataState.data$.documents$.next(msgComplete);
await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(1));
await waitFor(() => {
@@ -87,12 +116,9 @@ describe('useTextBasedQueryLanguage', () => {
});
});
test('should change viewMode to DOCUMENT_LEVEL if it was AGGREGATED_LEVEL', async () => {
- const props = getHookProps(query, undefined, {
+ const { replaceUrlState } = renderHookWithContext(false, {
viewMode: VIEW_MODE.AGGREGATED_LEVEL,
});
- const { replaceUrlState } = props;
-
- renderHook(() => useTextBasedQueryLanguage(props));
await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(1));
expect(replaceUrlState).toHaveBeenCalledWith({
@@ -101,12 +127,9 @@ describe('useTextBasedQueryLanguage', () => {
});
});
test('changing a text based query with different result columns should change state when loading and finished', async () => {
- const props = getHookProps(query);
- const { documents$, replaceUrlState } = props;
-
- renderHook(() => useTextBasedQueryLanguage(props));
-
- documents$.next(msgComplete);
+ const { replaceUrlState, stateContainer } = renderHookWithContext(false);
+ const documents$ = stateContainer.dataState.data$.documents$;
+ stateContainer.dataState.data$.documents$.next(msgComplete);
await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(2));
replaceUrlState.mockReset();
@@ -132,10 +155,9 @@ describe('useTextBasedQueryLanguage', () => {
});
});
test('only changing a text based query with same result columns should not change columns', async () => {
- const props = getHookProps(query);
- const { documents$, replaceUrlState } = props;
+ const { replaceUrlState, stateContainer } = renderHookWithContext(false);
- renderHook(() => useTextBasedQueryLanguage(props));
+ const documents$ = stateContainer.dataState.data$.documents$;
documents$.next(msgComplete);
await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(2));
@@ -176,10 +198,8 @@ describe('useTextBasedQueryLanguage', () => {
});
});
test('if its not a text based query coming along, it should be ignored', async () => {
- const props = getHookProps(query);
- const { documents$, replaceUrlState } = props;
-
- renderHook(() => useTextBasedQueryLanguage(props));
+ const { replaceUrlState, stateContainer } = renderHookWithContext(false);
+ const documents$ = stateContainer.dataState.data$.documents$;
documents$.next(msgComplete);
await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(2));
@@ -219,13 +239,12 @@ describe('useTextBasedQueryLanguage', () => {
});
test('it should not overwrite existing state columns on initial fetch', async () => {
- const props = getHookProps(query);
- props.stateContainer.appState.getState = jest.fn(() => {
- return { columns: ['field1'], index: 'the-data-view-id' };
+ const { replaceUrlState, stateContainer } = renderHookWithContext(false, {
+ columns: ['field1'],
+ index: 'the-data-view-id',
});
- const { documents$, replaceUrlState } = props;
+ const documents$ = stateContainer.dataState.data$.documents$;
- renderHook(() => useTextBasedQueryLanguage(props));
documents$.next({
recordRawType: RecordRawType.PLAIN,
fetchStatus: FetchStatus.COMPLETE,
@@ -258,13 +277,12 @@ describe('useTextBasedQueryLanguage', () => {
});
test('it should not overwrite state column when successfully fetching after an error fetch', async () => {
- const props = getHookProps(query);
- props.stateContainer.appState.getState = jest.fn(() => {
- return { columns: [], index: 'the-data-view-id' };
+ const { replaceUrlState, stateContainer } = renderHookWithContext(false, {
+ columns: [],
+ index: 'the-data-view-id',
});
- const { documents$, replaceUrlState } = props;
+ const documents$ = stateContainer.dataState.data$.documents$;
- renderHook(() => useTextBasedQueryLanguage(props));
documents$.next({
recordRawType: RecordRawType.PLAIN,
fetchStatus: FetchStatus.LOADING,
@@ -284,7 +302,7 @@ describe('useTextBasedQueryLanguage', () => {
query: { sql: 'SELECT * from the-data-view-title WHERE field1=2' },
});
await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(1));
- props.stateContainer.appState.getState = jest.fn(() => {
+ stateContainer.appState.getState = jest.fn(() => {
return { columns: ['field1', 'field2'], index: 'the-data-view-id' };
});
replaceUrlState.mockReset();
@@ -335,9 +353,10 @@ describe('useTextBasedQueryLanguage', () => {
create: dataViewsCreateMock,
};
const props = getHookProps(query, dataViewsService);
- const { documents$, replaceUrlState } = props;
+ const { stateContainer, replaceUrlState } = props;
+ const documents$ = stateContainer.dataState.data$.documents$;
- renderHook(() => useTextBasedQueryLanguage(props));
+ renderHook(() => useTextBasedQueryLanguage(props), { wrapper: getHookContext(stateContainer) });
documents$.next(msgComplete);
await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(2));
diff --git a/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts b/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts
index ff40121274858..b82b749d2acba 100644
--- a/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts
@@ -14,9 +14,9 @@ import {
} from '@kbn/es-query';
import { useCallback, useEffect, useRef } from 'react';
import type { DataViewsContract } from '@kbn/data-views-plugin/public';
-import { SavedSearch, VIEW_MODE } from '@kbn/saved-search-plugin/public';
+import { VIEW_MODE } from '@kbn/saved-search-plugin/public';
+import { useSavedSearchInitial } from '../services/discover_state_provider';
import type { DiscoverStateContainer } from '../services/discover_state';
-import type { DataDocuments$ } from '../services/discover_data_state_container';
import { getValidViewMode } from '../utils/get_valid_view_mode';
import { FetchStatus } from '../../types';
@@ -27,20 +27,17 @@ const MAX_NUM_OF_COLUMNS = 50;
* If necessary this is setting displayed columns and selected data view
*/
export function useTextBasedQueryLanguage({
- documents$,
dataViews,
stateContainer,
- savedSearch,
}: {
- documents$: DataDocuments$;
stateContainer: DiscoverStateContainer;
dataViews: DataViewsContract;
- savedSearch: SavedSearch;
}) {
const prev = useRef<{ query: AggregateQuery | Query | undefined; columns: string[] }>({
columns: [],
query: undefined,
});
+ const savedSearch = useSavedSearchInitial();
const cleanup = useCallback(() => {
if (prev.current.query) {
@@ -53,7 +50,7 @@ export function useTextBasedQueryLanguage({
}, []);
useEffect(() => {
- const subscription = documents$.subscribe(async (next) => {
+ const subscription = stateContainer.dataState.data$.documents$.subscribe(async (next) => {
const { query, recordRawType } = next;
if (!query || next.fetchStatus === FetchStatus.ERROR) {
return;
@@ -131,5 +128,5 @@ export function useTextBasedQueryLanguage({
cleanup();
subscription.unsubscribe();
};
- }, [documents$, dataViews, stateContainer, savedSearch, cleanup]);
+ }, [dataViews, stateContainer, savedSearch, cleanup]);
}
diff --git a/src/plugins/discover/public/application/main/hooks/use_url.test.ts b/src/plugins/discover/public/application/main/hooks/use_url.test.ts
index 9d8191f3581e4..a9cc1bc838fe9 100644
--- a/src/plugins/discover/public/application/main/hooks/use_url.test.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_url.test.ts
@@ -8,20 +8,39 @@
import { renderHook } from '@testing-library/react-hooks';
import { createSearchSessionMock } from '../../../__mocks__/search_session';
import { useUrl } from './use_url';
+import {
+ savedSearchMockWithTimeField,
+ savedSearchMockWithTimeFieldNew,
+} from '../../../__mocks__/saved_search';
+import { SavedSearch } from '@kbn/saved-search-plugin/public';
-describe('test useUrl', () => {
- test('resetSavedSearch is triggered once path it changed to /', () => {
- const { history } = createSearchSessionMock();
- history.push('/view');
- const props = {
- history,
- resetSavedSearch: jest.fn(),
- };
- renderHook(() => useUrl(props));
- history.push('/new');
- expect(props.resetSavedSearch).toHaveBeenCalledTimes(0);
+function prepareTest(savedSearch: SavedSearch, path: string) {
+ const { history } = createSearchSessionMock();
+ const onNewUrl = jest.fn();
- history.push('/');
- expect(props.resetSavedSearch).toHaveBeenCalledTimes(1);
+ renderHook(() =>
+ useUrl({
+ history,
+ savedSearchId: savedSearch.id,
+ onNewUrl,
+ })
+ );
+ history.push(path);
+ return { load: onNewUrl };
+}
+describe('test useUrl when the url is changed to /', () => {
+ test('loadSavedSearch is not triggered when the url is e.g. /new', () => {
+ // the switch to loading the new saved search is taken care in the main route
+ const { load } = prepareTest(savedSearchMockWithTimeFieldNew, '/new');
+ expect(load).toHaveBeenCalledTimes(0);
+ });
+ test('loadSavedSearch is not triggered when a persisted saved search is pre-selected', () => {
+ // the switch to loading the new saved search is taken care in the main route
+ const { load } = prepareTest(savedSearchMockWithTimeField, '/');
+ expect(load).toHaveBeenCalledTimes(0);
+ });
+ test('loadSavedSearch is triggered when a new saved search is pre-selected ', () => {
+ const { load } = prepareTest(savedSearchMockWithTimeFieldNew, '/');
+ expect(load).toHaveBeenCalledTimes(1);
});
});
diff --git a/src/plugins/discover/public/application/main/hooks/use_url.ts b/src/plugins/discover/public/application/main/hooks/use_url.ts
index bc5554c35b36f..f5c8be6de5b21 100644
--- a/src/plugins/discover/public/application/main/hooks/use_url.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_url.ts
@@ -9,10 +9,12 @@ import { useEffect } from 'react';
import { History } from 'history';
export function useUrl({
history,
- resetSavedSearch,
+ savedSearchId,
+ onNewUrl,
}: {
history: History;
- resetSavedSearch: (val?: string) => void;
+ savedSearchId: string | undefined;
+ onNewUrl: () => void;
}) {
/**
* Url / Routing logic
@@ -22,10 +24,10 @@ export function useUrl({
// which could be set through pressing "New" button in top nav or go to "Discover" plugin from the sidebar
// to reload the page in a right way
const unlistenHistoryBasePath = history.listen(({ pathname, search, hash }) => {
- if (!search && !hash && pathname === '/') {
- resetSavedSearch();
+ if (!search && !hash && pathname === '/' && !savedSearchId) {
+ onNewUrl();
}
});
return () => unlistenHistoryBasePath();
- }, [history, resetSavedSearch]);
+ }, [history, savedSearchId, onNewUrl]);
}
diff --git a/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts b/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts
index 4bed6f846d234..138ca8ce011da 100644
--- a/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts
+++ b/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts
@@ -5,26 +5,26 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
-import { useCallback, useEffect } from 'react';
-import { DataView } from '@kbn/data-views-plugin/common';
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
+import { useEffect } from 'react';
+import { DiscoverSavedSearchContainer } from '../services/discover_saved_search_container';
import { getUrlTracker } from '../../../kibana_services';
/**
* Enable/disable kbn url tracking (That's the URL used when selecting Discover in the side menu)
*/
-export function useUrlTracking(savedSearch: SavedSearch, dataView: DataView) {
- const setUrlTracking = useCallback(
- (actualDataView: DataView) => {
- const trackingEnabled = Boolean(actualDataView.isPersisted() || savedSearch.id);
- getUrlTracker().setTrackingEnabled(trackingEnabled);
- },
- [savedSearch]
- );
-
+export function useUrlTracking(savedSearchContainer: DiscoverSavedSearchContainer) {
useEffect(() => {
- setUrlTracking(dataView);
- }, [dataView, savedSearch.id, setUrlTracking]);
+ const subscription = savedSearchContainer.getCurrent$().subscribe((savedSearch) => {
+ const dataView = savedSearch.searchSource.getField('index');
+ if (!dataView) {
+ return;
+ }
+ const trackingEnabled = Boolean(dataView.isPersisted() || savedSearch.id);
+ getUrlTracker().setTrackingEnabled(trackingEnabled);
+ });
- return { setUrlTracking };
+ return () => {
+ subscription.unsubscribe();
+ };
+ }, [savedSearchContainer]);
}
diff --git a/src/plugins/discover/public/application/main/hooks/utils/build_state_subscribe.test.ts b/src/plugins/discover/public/application/main/hooks/utils/build_state_subscribe.test.ts
index 2ea8275dea013..19c1e06e64b7d 100644
--- a/src/plugins/discover/public/application/main/hooks/utils/build_state_subscribe.test.ts
+++ b/src/plugins/discover/public/application/main/hooks/utils/build_state_subscribe.test.ts
@@ -5,130 +5,88 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
-import { createBrowserHistory } from 'history';
import { buildStateSubscribe } from './build_state_subscribe';
import { savedSearchMock } from '../../../../__mocks__/saved_search';
import { FetchStatus } from '../../../types';
-import { getDiscoverStateContainer } from '../../services/discover_state';
-import { discoverServiceMock } from '../../../../__mocks__/services';
import { dataViewComplexMock } from '../../../../__mocks__/data_view_complex';
+import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock';
+import { discoverServiceMock } from '../../../../__mocks__/services';
describe('buildStateSubscribe', () => {
const savedSearch = savedSearchMock;
- const history = createBrowserHistory();
- const stateContainer = getDiscoverStateContainer({
- savedSearch,
- services: discoverServiceMock,
- history,
- });
+ const stateContainer = getDiscoverStateMock({ savedSearch });
stateContainer.dataState.refetch$.next = jest.fn();
stateContainer.dataState.reset = jest.fn();
stateContainer.actions.setDataView = jest.fn();
- stateContainer.actions.loadAndResolveDataView = jest.fn(() =>
- Promise.resolve({ fallback: false, dataView: dataViewComplexMock })
- );
- const setState = jest.fn();
+ const getSubscribeFn = () => {
+ return buildStateSubscribe({
+ appState: stateContainer.appState,
+ savedSearchState: stateContainer.savedSearchState,
+ dataState: stateContainer.dataState,
+ internalState: stateContainer.internalState,
+ services: discoverServiceMock,
+ setDataView: stateContainer.actions.setDataView,
+ });
+ };
beforeEach(() => {
jest.clearAllMocks();
});
- it('should set the data view if the index has changed, but no refetch should be triggered', async () => {
- await buildStateSubscribe({
- stateContainer,
- savedSearch,
- setState,
- })({ index: dataViewComplexMock.id });
+ it('should set the data view if the index has changed, and refetch should be triggered', async () => {
+ await getSubscribeFn()({ index: dataViewComplexMock.id });
expect(stateContainer.actions.setDataView).toHaveBeenCalledWith(dataViewComplexMock);
expect(stateContainer.dataState.reset).toHaveBeenCalled();
- expect(stateContainer.dataState.refetch$.next).not.toHaveBeenCalled();
- expect(setState).toHaveBeenCalled();
+ expect(stateContainer.dataState.refetch$.next).toHaveBeenCalled();
});
it('should not call refetch$ if nothing changes', async () => {
- await buildStateSubscribe({
- stateContainer,
- savedSearch,
- setState,
- })(stateContainer.appState.getState());
+ await getSubscribeFn()(stateContainer.appState.getState());
expect(stateContainer.dataState.refetch$.next).toHaveBeenCalled();
- expect(setState).toHaveBeenCalled();
});
it('should call refetch$ if the chart is hidden', async () => {
- await buildStateSubscribe({
- stateContainer,
- savedSearch,
- setState,
- })({ hideChart: true });
+ await getSubscribeFn()({ hideChart: true });
expect(stateContainer.dataState.refetch$.next).toHaveBeenCalled();
- expect(setState).toHaveBeenCalled();
});
it('should call refetch$ if the chart interval has changed', async () => {
- await buildStateSubscribe({
- stateContainer,
- savedSearch,
- setState,
- })({ interval: 's' });
+ await getSubscribeFn()({ interval: 's' });
expect(stateContainer.dataState.refetch$.next).toHaveBeenCalled();
- expect(setState).toHaveBeenCalled();
});
it('should call refetch$ if breakdownField has changed', async () => {
- await buildStateSubscribe({
- stateContainer,
- savedSearch,
- setState,
- })({ breakdownField: '💣' });
+ await getSubscribeFn()({ breakdownField: '💣' });
expect(stateContainer.dataState.refetch$.next).toHaveBeenCalled();
- expect(setState).toHaveBeenCalled();
});
it('should call refetch$ if sort has changed', async () => {
- await buildStateSubscribe({
- stateContainer,
- savedSearch,
- setState,
- })({ sort: [['field', 'test']] });
+ await getSubscribeFn()({ sort: [['field', 'test']] });
expect(stateContainer.dataState.refetch$.next).toHaveBeenCalled();
- expect(setState).toHaveBeenCalled();
});
it('should not execute setState function if initialFetchStatus is UNINITIALIZED', async () => {
- const stateSubscribeFn = await buildStateSubscribe({
- stateContainer,
- savedSearch,
- setState,
- });
- stateContainer.dataState.initialFetchStatus = FetchStatus.UNINITIALIZED;
+ const stateSubscribeFn = getSubscribeFn();
+ stateContainer.dataState.getInitialFetchStatus = jest.fn(() => FetchStatus.UNINITIALIZED);
await stateSubscribeFn({ index: dataViewComplexMock.id });
expect(stateContainer.dataState.reset).toHaveBeenCalled();
- expect(setState).not.toHaveBeenCalled();
});
it('should not execute setState twice if the identical data view change is propagated twice', async () => {
- const stateSubscribeFn = await buildStateSubscribe({
- stateContainer,
- savedSearch,
- setState,
- });
- await stateSubscribeFn({ index: dataViewComplexMock.id });
+ await getSubscribeFn()({ index: dataViewComplexMock.id });
- expect(setState).toBeCalledTimes(0);
expect(stateContainer.dataState.reset).toBeCalledTimes(1);
stateContainer.appState.getPrevious = jest.fn(() => ({ index: dataViewComplexMock.id }));
- await stateSubscribeFn({ index: dataViewComplexMock.id });
- expect(setState).toBeCalledTimes(0);
+ await getSubscribeFn()({ index: dataViewComplexMock.id });
expect(stateContainer.dataState.reset).toBeCalledTimes(1);
});
});
diff --git a/src/plugins/discover/public/application/main/hooks/utils/build_state_subscribe.ts b/src/plugins/discover/public/application/main/hooks/utils/build_state_subscribe.ts
index ebe8e22935382..1799e5146c803 100644
--- a/src/plugins/discover/public/application/main/hooks/utils/build_state_subscribe.ts
+++ b/src/plugins/discover/public/application/main/hooks/utils/build_state_subscribe.ts
@@ -5,39 +5,51 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
import { isEqual } from 'lodash';
-import { DiscoverStateContainer } from '../../services/discover_state';
-import { DiscoverAppState, isEqualState } from '../../services/discover_app_state_container';
+import type { DiscoverInternalStateContainer } from '../../services/discover_internal_state_container';
+import type { DiscoverServices } from '../../../../build_services';
+import type { DiscoverSavedSearchContainer } from '../../services/discover_saved_search_container';
+import type { DiscoverDataStateContainer } from '../../services/discover_data_state_container';
+import type { DiscoverStateContainer } from '../../services/discover_state';
+import {
+ DiscoverAppState,
+ DiscoverAppStateContainer,
+ isEqualState,
+} from '../../services/discover_app_state_container';
import { addLog } from '../../../../utils/add_log';
import { FetchStatus } from '../../../types';
+import { loadAndResolveDataView } from '../../utils/resolve_data_view';
/**
* Builds a subscribe function for the AppStateContainer, that is executed when the AppState changes in URL
* or programmatically. It's main purpose is to detect which changes should trigger a refetch of the data.
* @param stateContainer
- * @param savedSearch
- * @param setState
*/
export const buildStateSubscribe =
({
- stateContainer,
- savedSearch,
- setState,
+ appState,
+ dataState,
+ internalState,
+ savedSearchState,
+ services,
+ setDataView,
}: {
- stateContainer: DiscoverStateContainer;
- savedSearch: SavedSearch;
- setState: (state: DiscoverAppState) => void;
+ appState: DiscoverAppStateContainer;
+ dataState: DiscoverDataStateContainer;
+ internalState: DiscoverInternalStateContainer;
+ savedSearchState: DiscoverSavedSearchContainer;
+ services: DiscoverServices;
+ setDataView: DiscoverStateContainer['actions']['setDataView'];
}) =>
async (nextState: DiscoverAppState) => {
- const prevState = stateContainer.appState.getPrevious();
+ const prevState = appState.getPrevious();
+ const savedSearch = savedSearchState.getState();
if (isEqualState(prevState, nextState)) {
- addLog('[appstate] subscribe update ignored due to no changes');
+ addLog('[appstate] subscribe update ignored due to no changes', { prevState, nextState });
return;
}
addLog('[appstate] subscribe triggered', nextState);
- const { hideChart, interval, breakdownField, sort, index } =
- stateContainer.appState.getPrevious();
+ const { hideChart, interval, breakdownField, sort, index } = appState.getPrevious();
// Cast to boolean to avoid false positives when comparing
// undefined and false, which would trigger a refetch
const chartDisplayChanged = Boolean(nextState.hideChart) !== Boolean(hideChart);
@@ -45,26 +57,29 @@ export const buildStateSubscribe =
const breakdownFieldChanged = nextState.breakdownField !== breakdownField;
const docTableSortChanged = !isEqual(nextState.sort, sort);
const dataViewChanged = !isEqual(nextState.index, index);
+ let savedSearchDataView;
// NOTE: this is also called when navigating from discover app to context app
if (nextState.index && dataViewChanged) {
- const { dataView: nextDataView, fallback } =
- await stateContainer.actions.loadAndResolveDataView(nextState.index, savedSearch);
+ const { dataView: nextDataView, fallback } = await loadAndResolveDataView(
+ { id: nextState.index, savedSearch },
+ { internalStateContainer: internalState, services }
+ );
// If the requested data view is not found, don't try to load it,
// and instead reset the app state to the fallback data view
if (fallback) {
- stateContainer.appState.update({ index: nextDataView.id }, true);
+ appState.update({ index: nextDataView.id }, true);
return;
}
savedSearch.searchSource.setField('index', nextDataView);
- stateContainer.dataState.reset();
- stateContainer.actions.setDataView(nextDataView);
+ dataState.reset(savedSearch);
+ setDataView(nextDataView);
+ savedSearchDataView = nextDataView;
}
- if (
- dataViewChanged &&
- stateContainer.dataState.initialFetchStatus === FetchStatus.UNINITIALIZED
- ) {
+ savedSearchState.update({ nextDataView: savedSearchDataView, nextState });
+
+ if (dataViewChanged && dataState.getInitialFetchStatus() === FetchStatus.UNINITIALIZED) {
// stop execution if given data view has changed, and it's not configured to initially start a search in Discover
return;
}
@@ -73,11 +88,10 @@ export const buildStateSubscribe =
chartDisplayChanged ||
chartIntervalChanged ||
breakdownFieldChanged ||
- docTableSortChanged
+ docTableSortChanged ||
+ dataViewChanged
) {
addLog('[appstate] subscribe triggers data fetching');
- stateContainer.dataState.refetch$.next(undefined);
+ dataState.fetch();
}
-
- setState(nextState);
};
diff --git a/src/plugins/discover/public/application/main/hooks/utils/change_data_view.test.ts b/src/plugins/discover/public/application/main/hooks/utils/change_data_view.test.ts
index 04afdac829f97..37a503716af0e 100644
--- a/src/plugins/discover/public/application/main/hooks/utils/change_data_view.test.ts
+++ b/src/plugins/discover/public/application/main/hooks/utils/change_data_view.test.ts
@@ -8,32 +8,29 @@
import { changeDataView } from './change_data_view';
import { savedSearchMock } from '../../../../__mocks__/saved_search';
-import { createBrowserHistory } from 'history';
-import { getDiscoverStateContainer } from '../../services/discover_state';
import { discoverServiceMock } from '../../../../__mocks__/services';
import type { DataView } from '@kbn/data-views-plugin/common';
import { dataViewComplexMock } from '../../../../__mocks__/data_view_complex';
+import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock';
const setupTestParams = (dataView: DataView | undefined) => {
const savedSearch = savedSearchMock;
const services = discoverServiceMock;
- const history = createBrowserHistory();
- const discoverState = getDiscoverStateContainer({
+
+ const discoverState = getDiscoverStateMock({
savedSearch,
- services: discoverServiceMock,
- history,
});
discoverState.internalState.transitions.setDataView(savedSearch.searchSource.getField('index')!);
services.dataViews.get = jest.fn(() => Promise.resolve(dataView as DataView));
discoverState.appState.update = jest.fn();
- return { services, discoverState, setUrlTracking: jest.fn() };
+ return { services, appState: discoverState.appState, internalState: discoverState.internalState };
};
describe('changeDataView', () => {
it('should set the right app state when a valid data view to switch to is given', async () => {
const params = setupTestParams(dataViewComplexMock as DataView);
await changeDataView('data-view-with-various-field-types', params);
- expect(params.discoverState.appState.update).toHaveBeenCalledWith({
+ expect(params.appState.update).toHaveBeenCalledWith({
columns: ['default_column'],
index: 'data-view-with-various-field-types-id',
sort: [['data', 'desc']],
@@ -43,6 +40,6 @@ describe('changeDataView', () => {
it('should not set the app state when an invalid data view to switch to is given', async () => {
const params = setupTestParams(undefined);
await changeDataView('data-view-with-various-field-types', params);
- expect(params.discoverState.appState.update).not.toHaveBeenCalled();
+ expect(params.appState.update).not.toHaveBeenCalled();
});
});
diff --git a/src/plugins/discover/public/application/main/hooks/utils/change_data_view.ts b/src/plugins/discover/public/application/main/hooks/utils/change_data_view.ts
index c53e0ec9da617..0912758b74663 100644
--- a/src/plugins/discover/public/application/main/hooks/utils/change_data_view.ts
+++ b/src/plugins/discover/public/application/main/hooks/utils/change_data_view.ts
@@ -8,39 +8,36 @@
import { SortOrder } from '@kbn/saved-search-plugin/public';
import { DataView } from '@kbn/data-views-plugin/common';
+import { DiscoverInternalStateContainer } from '../../services/discover_internal_state_container';
+import { DiscoverAppStateContainer } from '../../services/discover_app_state_container';
import { addLog } from '../../../../utils/add_log';
import { DiscoverServices } from '../../../../build_services';
-import { DiscoverStateContainer } from '../../services/discover_state';
import { getDataViewAppState } from '../../utils/get_switch_data_view_app_state';
import { MODIFY_COLUMNS_ON_SWITCH, SORT_DEFAULT_ORDER_SETTING } from '../../../../../common';
/**
* Function executed when switching data view in the UI
- * @param id
- * @param services
- * @param discoverState
- * @param setUrlTracking
*/
export async function changeDataView(
- id: string,
+ id: string | DataView,
{
services,
- discoverState,
- setUrlTracking,
+ internalState,
+ appState,
}: {
services: DiscoverServices;
- discoverState: DiscoverStateContainer;
- setUrlTracking: (dataView: DataView) => void;
+ internalState: DiscoverInternalStateContainer;
+ appState: DiscoverAppStateContainer;
}
) {
addLog('[ui] changeDataView', { id });
const { dataViews, uiSettings } = services;
- const dataView = discoverState.internalState.getState().dataView;
- const state = discoverState.appState.getState();
+ const dataView = internalState.getState().dataView;
+ const state = appState.getState();
let nextDataView: DataView | null = null;
try {
- nextDataView = await dataViews.get(id, false);
+ nextDataView = typeof id === 'string' ? await dataViews.get(id, false) : id;
} catch (e) {
//
}
@@ -56,7 +53,9 @@ export async function changeDataView(
state.query
);
- setUrlTracking(nextDataView);
- discoverState.appState.update(nextAppState);
+ appState.update(nextAppState);
+ if (internalState.getState().expandedDoc) {
+ internalState.transitions.setExpandedDoc(undefined);
+ }
}
}
diff --git a/src/plugins/discover/public/application/main/services/discover_app_state_container.ts b/src/plugins/discover/public/application/main/services/discover_app_state_container.ts
index eb552ea023f9b..ba189bec26a1b 100644
--- a/src/plugins/discover/public/application/main/services/discover_app_state_container.ts
+++ b/src/plugins/discover/public/application/main/services/discover_app_state_container.ts
@@ -21,11 +21,10 @@ import {
} from '@kbn/es-query';
import { SavedSearch, VIEW_MODE } from '@kbn/saved-search-plugin/public';
import { IKbnUrlStateStorage, ISyncStateRef, syncState } from '@kbn/kibana-utils-plugin/public';
-import { cloneDeep, isEqual } from 'lodash';
+import { isEqual } from 'lodash';
import { connectToQueryState, syncGlobalQueryStateWithUrl } from '@kbn/data-plugin/public';
import { DiscoverServices } from '../../../build_services';
import { addLog } from '../../../utils/add_log';
-import { getValidFilters } from '../../../utils/get_valid_filters';
import { cleanupUrlState } from '../utils/cleanup_url_state';
import { getStateDefaults } from '../utils/get_state_defaults';
import { handleSourceColumnState } from '../../../utils/state_helpers';
@@ -33,6 +32,10 @@ import { DiscoverGridSettings } from '../../../components/discover_grid/types';
export const APP_STATE_URL_KEY = '_a';
export interface DiscoverAppStateContainer extends ReduxLikeStateContainer {
+ /**
+ * Returns if the current URL is empty
+ */
+ isEmptyURL: () => boolean;
/**
* Returns the previous state, used for diffing e.g. if fetching new data is necessary
*/
@@ -52,11 +55,6 @@ export interface DiscoverAppStateContainer extends ReduxLikeStateContainer void;
- /**
- * Resets the state by the given saved search
- * @param savedSearch
- */
- resetWithSavedSearch: (savedSearch: SavedSearch) => void;
/**
* Resets the current state to the initial state
*/
@@ -180,7 +178,7 @@ export const getDiscoverAppStateContainer = ({
};
const startAppStateUrlSync = () => {
- addLog('[appState] startAppStateUrlSync');
+ addLog('[appState] start syncing state with URL');
return syncState({
storageKey: APP_STATE_URL_KEY,
stateContainer: enhancedAppContainer,
@@ -189,24 +187,17 @@ export const getDiscoverAppStateContainer = ({
};
const initializeAndSync = (currentSavedSearch: SavedSearch) => {
- addLog('[appState] initializeAndSync', currentSavedSearch);
- const dataView = currentSavedSearch.searchSource.getField('index')!;
- if (appStateContainer.getState().index !== dataView.id) {
+ addLog('[appState] initialize state and sync with URL', currentSavedSearch);
+ const { data } = services;
+ const dataView = currentSavedSearch.searchSource.getField('index');
+
+ if (appStateContainer.getState().index !== dataView?.id) {
// used data view is different from the given by url/state which is invalid
- setState(appStateContainer, { index: dataView.id });
+ setState(appStateContainer, { index: dataView?.id });
}
- // sync initial app filters from state to filterManager
- const filters = appStateContainer.getState().filters || [];
- if (filters) {
- services.filterManager.setAppFilters(cloneDeep(filters));
- }
- const query = appStateContainer.getState().query;
- if (query) {
- services.data.query.queryString.setQuery(query);
- }
-
+ // syncs `_a` portion of url with query services
const stopSyncingQueryAppStateWithStateContainer = connectToQueryState(
- services.data.query,
+ data.query,
appStateContainer,
{
filters: FilterStateStore.APP_STATE,
@@ -216,23 +207,13 @@ export const getDiscoverAppStateContainer = ({
// syncs `_g` portion of url with query services
const { stop: stopSyncingGlobalStateWithUrl } = syncGlobalQueryStateWithUrl(
- services.data.query,
+ data.query,
stateStorage
);
- // some filters may not be valid for this context, so update
- // the filter manager with a modified list of valid filters
- const currentFilters = services.filterManager.getFilters();
- const validFilters = getValidFilters(dataView, currentFilters);
- if (!isEqual(currentFilters, validFilters)) {
- services.filterManager.setFilters(validFilters);
- }
-
const { start, stop } = startAppStateUrlSync();
-
- replaceUrlState({}).then(() => {
- start();
- });
+ // current state need to be pushed to url
+ replaceUrlState({}).then(() => start());
return () => {
stopSyncingQueryAppStateWithStateContainer();
@@ -241,12 +222,6 @@ export const getDiscoverAppStateContainer = ({
};
};
- const resetWithSavedSearch = (nextSavedSearch: SavedSearch) => {
- addLog('[appState] reset to saved search', { nextSavedSearch });
- const nextAppState = getInitialState(stateStorage, nextSavedSearch, services);
- appStateContainer.set(nextAppState);
- };
-
const update = (newPartial: DiscoverAppState, replace = false) => {
addLog('[appState] update', { newPartial, replace });
if (replace) {
@@ -257,14 +232,19 @@ export const getDiscoverAppStateContainer = ({
}
};
+ const isEmptyURL = () => {
+ const urlValue = stateStorage.get(APP_STATE_URL_KEY);
+ return urlValue === undefined || urlValue === null;
+ };
+
const getPrevious = () => previousState;
return {
...enhancedAppContainer,
+ isEmptyURL,
getPrevious,
hasChanged,
initAndSync: initializeAndSync,
- resetWithSavedSearch,
resetInitialState,
replaceUrlState,
syncState: startAppStateUrlSync,
@@ -281,21 +261,23 @@ export interface AppStateUrl extends Omit {
export const GLOBAL_STATE_URL_KEY = '_g';
-function getInitialState(
- stateStorage: IKbnUrlStateStorage,
+export function getInitialState(
+ stateStorage: IKbnUrlStateStorage | undefined,
savedSearch: SavedSearch,
services: DiscoverServices
) {
- const appStateFromUrl = cleanupUrlState(stateStorage.get(APP_STATE_URL_KEY) as AppStateUrl);
+ const stateStorageURL = stateStorage?.get(APP_STATE_URL_KEY) as AppStateUrl;
const defaultAppState = getStateDefaults({
savedSearch,
services,
});
return handleSourceColumnState(
- {
- ...defaultAppState,
- ...appStateFromUrl,
- },
+ stateStorageURL === null
+ ? defaultAppState
+ : {
+ ...defaultAppState,
+ ...cleanupUrlState(stateStorageURL),
+ },
services.uiSettings
);
}
diff --git a/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts b/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts
index fcdce1b76a1a0..ccb3f4d39a877 100644
--- a/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts
+++ b/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts
@@ -9,12 +9,10 @@ import { Subject } from 'rxjs';
import { waitFor } from '@testing-library/react';
import { discoverServiceMock } from '../../../__mocks__/services';
import { savedSearchMockWithSQL } from '../../../__mocks__/saved_search';
-import { getDiscoverStateContainer } from './discover_state';
import { FetchStatus } from '../../types';
import { setUrlTracker } from '../../../kibana_services';
import { urlTrackerMock } from '../../../__mocks__/url_tracker.mock';
import { RecordRawType } from './discover_data_state_container';
-import { createBrowserHistory } from 'history';
import { getDiscoverStateMock } from '../../../__mocks__/discover_state.mock';
setUrlTracker(urlTrackerMock);
@@ -70,21 +68,19 @@ describe('test getDataStateContainer', () => {
await waitFor(() => {
expect(dataState.data$.main$.value.fetchStatus).toBe(FetchStatus.COMPLETE);
});
- dataState.reset();
+ dataState.reset(stateContainer.savedSearchState.getState());
await waitFor(() => {
expect(dataState.data$.main$.value.fetchStatus).toBe(FetchStatus.LOADING);
});
-
unsubscribe();
});
test('useSavedSearch returns plain record raw type', async () => {
- const history = createBrowserHistory();
- const stateContainer = getDiscoverStateContainer({
+ const stateContainer = getDiscoverStateMock({
savedSearch: savedSearchMockWithSQL,
- services: discoverServiceMock,
- history,
});
+ stateContainer.savedSearchState.load = jest.fn().mockResolvedValue(savedSearchMockWithSQL);
+ await stateContainer.actions.loadSavedSearch({ savedSearchId: savedSearchMockWithSQL.id });
expect(stateContainer.dataState.data$.main$.getValue().recordRawType).toBe(RecordRawType.PLAIN);
});
diff --git a/src/plugins/discover/public/application/main/services/discover_data_state_container.ts b/src/plugins/discover/public/application/main/services/discover_data_state_container.ts
index 7bac15b6a5808..07e1f089bcd13 100644
--- a/src/plugins/discover/public/application/main/services/discover_data_state_container.ts
+++ b/src/plugins/discover/public/application/main/services/discover_data_state_container.ts
@@ -12,7 +12,6 @@ import { RequestAdapter } from '@kbn/inspector-plugin/common';
import { SavedSearch } from '@kbn/saved-search-plugin/public';
import { AggregateQuery, Query } from '@kbn/es-query';
import type { SearchResponse } from '@elastic/elasticsearch/lib/api/types';
-import { ReduxLikeStateContainer } from '@kbn/kibana-utils-plugin/common';
import { getRawRecordType } from '../utils/get_raw_record_type';
import { DiscoverAppState } from './discover_app_state_container';
import { DiscoverServices } from '../../../build_services';
@@ -108,17 +107,17 @@ export interface DiscoverDataStateContainer {
/**
* resetting all data observable to initial state
*/
- reset: () => void;
+ reset: (savedSearch: SavedSearch) => void;
/**
* Available Inspector Adaptor allowing to get details about recent requests to ES
*/
- inspectorAdapters: { requests: RequestAdapter };
+ inspectorAdapters: { requests: RequestAdapter; lensRequests?: RequestAdapter };
/**
- * Initial fetch status
+ * Return the initial fetch status
* UNINITIALIZED: data is not fetched initially, without user triggering it
* LOADING: data is fetched initially (when Discover is rendered, or data views are switched)
*/
- initialFetchStatus: FetchStatus;
+ getInitialFetchStatus: () => FetchStatus;
}
/**
* Container responsible for fetching of data in Discover Main
@@ -130,13 +129,11 @@ export function getDataStateContainer({
searchSessionManager,
getAppState,
getSavedSearch,
- appStateContainer,
}: {
services: DiscoverServices;
searchSessionManager: DiscoverSearchSessionManager;
getAppState: () => DiscoverAppState;
getSavedSearch: () => SavedSearch;
- appStateContainer: ReduxLikeStateContainer;
}): DiscoverDataStateContainer {
const { data, uiSettings, toastNotifications } = services;
const { timefilter } = data.query.timefilter;
@@ -149,20 +146,20 @@ export function getDataStateContainer({
* to be processed correctly
*/
const refetch$ = new Subject();
- const shouldSearchOnPageLoad =
- uiSettings.get(SEARCH_ON_PAGE_LOAD_SETTING) ||
- getSavedSearch().id !== undefined ||
- !timefilter.getRefreshInterval().pause ||
- searchSessionManager.hasSearchSessionIdInURL();
- const initialFetchStatus = shouldSearchOnPageLoad
- ? FetchStatus.LOADING
- : FetchStatus.UNINITIALIZED;
+ const getInitialFetchStatus = () => {
+ const shouldSearchOnPageLoad =
+ uiSettings.get(SEARCH_ON_PAGE_LOAD_SETTING) ||
+ getSavedSearch().id !== undefined ||
+ !timefilter.getRefreshInterval().pause ||
+ searchSessionManager.hasSearchSessionIdInURL();
+ return shouldSearchOnPageLoad ? FetchStatus.LOADING : FetchStatus.UNINITIALIZED;
+ };
/**
* The observables the UI (aka React component) subscribes to get notified about
* the changes in the data fetching process (high level: fetching started, data was received)
*/
- const initialState = { fetchStatus: initialFetchStatus, recordRawType };
+ const initialState = { fetchStatus: getInitialFetchStatus(), recordRawType };
const dataSubjects: SavedSearchData = {
main$: new BehaviorSubject(initialState),
documents$: new BehaviorSubject(initialState),
@@ -202,14 +199,13 @@ export function getDataStateContainer({
abortController = new AbortController();
const prevAutoRefreshDone = autoRefreshDone;
- await fetchAll(dataSubjects, getSavedSearch().searchSource, reset, {
+ await fetchAll(dataSubjects, reset, {
abortController,
- data,
- initialFetchStatus,
+ initialFetchStatus: getInitialFetchStatus(),
inspectorAdapters,
searchSessionId,
services,
- appStateContainer,
+ getAppState,
savedSearch: getSavedSearch(),
useNewFieldsApi: !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE),
});
@@ -239,7 +235,10 @@ export function getDataStateContainer({
return refetch$;
};
- const reset = () => sendResetMsg(dataSubjects, initialFetchStatus);
+ const reset = (savedSearch: SavedSearch) => {
+ const recordType = getRawRecordType(savedSearch.searchSource.getField('query'));
+ sendResetMsg(dataSubjects, getInitialFetchStatus(), recordType);
+ };
return {
fetch: fetchQuery,
@@ -249,6 +248,6 @@ export function getDataStateContainer({
subscribe,
reset,
inspectorAdapters,
- initialFetchStatus,
+ getInitialFetchStatus,
};
}
diff --git a/src/plugins/discover/public/application/main/services/discover_saved_search_container.test.ts b/src/plugins/discover/public/application/main/services/discover_saved_search_container.test.ts
new file mode 100644
index 0000000000000..fea276a4e1c86
--- /dev/null
+++ b/src/plugins/discover/public/application/main/services/discover_saved_search_container.test.ts
@@ -0,0 +1,254 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { SavedObjectSaveOpts } from '@kbn/saved-objects-plugin/public';
+
+const mockSaveSavedSearch = jest.fn().mockResolvedValue('123');
+jest.mock('@kbn/saved-search-plugin/public', () => {
+ const actualPlugin = jest.requireActual('@kbn/saved-search-plugin/public');
+ return {
+ ...actualPlugin,
+ saveSavedSearch: (val: SavedSearch, opts?: SavedObjectSaveOpts) =>
+ mockSaveSavedSearch(val, opts),
+ };
+});
+import { getSavedSearchContainer, isEqualSavedSearch } from './discover_saved_search_container';
+import type { SavedSearch } from '@kbn/saved-search-plugin/public';
+import { discoverServiceMock } from '../../../__mocks__/services';
+import { savedSearchMock, savedSearchMockWithTimeField } from '../../../__mocks__/saved_search';
+import { dataViewMock } from '../../../__mocks__/data_view';
+import { dataViewComplexMock } from '../../../__mocks__/data_view_complex';
+
+describe('DiscoverSavedSearchContainer', () => {
+ const savedSearch = savedSearchMock;
+ const services = discoverServiceMock;
+
+ describe('getTitle', () => {
+ it('returns undefined for new saved searches', () => {
+ const container = getSavedSearchContainer({ services });
+ expect(container.getTitle()).toBe(undefined);
+ });
+
+ it('returns the title of a persisted saved searches', () => {
+ const container = getSavedSearchContainer({ services });
+ container.set(savedSearch);
+ expect(container.getTitle()).toBe(savedSearch.title);
+ });
+ });
+
+ describe('set', () => {
+ it('should update the current and initial state of the saved search', () => {
+ const container = getSavedSearchContainer({ services });
+ const newSavedSearch: SavedSearch = { ...savedSearch, title: 'New title' };
+ const result = container.set(newSavedSearch);
+
+ expect(result).toBe(newSavedSearch);
+ expect(container.getState()).toBe(newSavedSearch);
+ const initialSavedSearch = container.getInitial$().getValue();
+ const currentSavedSearch = container.getCurrent$().getValue();
+
+ expect(isEqualSavedSearch(initialSavedSearch, currentSavedSearch)).toBeTruthy();
+ });
+
+ it('should reset hasChanged$ to false', () => {
+ const container = getSavedSearchContainer({ services });
+ const newSavedSearch: SavedSearch = { ...savedSearch, title: 'New title' };
+
+ container.set(newSavedSearch);
+ expect(container.getHasChanged$().getValue()).toBe(false);
+ });
+ });
+
+ describe('new', () => {
+ it('should create a new saved search', async () => {
+ const container = getSavedSearchContainer({ services });
+ const result = await container.new(dataViewMock);
+
+ expect(result.title).toBeUndefined();
+ expect(result.id).toBeUndefined();
+ const savedSearchState = container.getState();
+ expect(savedSearchState.id).not.toEqual(savedSearch.id);
+ expect(savedSearchState.searchSource.getField('index')).toEqual(
+ savedSearch.searchSource.getField('index')
+ );
+ });
+
+ it('should create a new saved search with provided DataView', async () => {
+ const container = getSavedSearchContainer({ services });
+ const result = await container.new(dataViewMock);
+ expect(result.title).toBeUndefined();
+ expect(result.id).toBeUndefined();
+ expect(result.searchSource.getField('index')).toBe(dataViewMock);
+ expect(container.getHasChanged$().getValue()).toBe(false);
+ });
+ });
+
+ describe('load', () => {
+ discoverServiceMock.data.search.searchSource.create = jest
+ .fn()
+ .mockReturnValue(savedSearchMock.searchSource);
+ discoverServiceMock.core.savedObjects.client.resolve = jest.fn().mockReturnValue({
+ saved_object: {
+ attributes: {
+ kibanaSavedObjectMeta: {
+ searchSourceJSON:
+ '{"query":{"query":"","language":"kuery"},"filter":[],"indexRefName":"kibanaSavedObjectMeta.searchSourceJSON.index"}',
+ },
+ title: 'The saved search that will save the world',
+ sort: [],
+ columns: ['test123'],
+ description: 'description',
+ hideChart: false,
+ },
+ id: 'the-saved-search-id',
+ type: 'search',
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ id: 'the-data-view-id',
+ type: 'index-pattern',
+ },
+ ],
+ namespaces: ['default'],
+ },
+ outcome: 'exactMatch',
+ });
+
+ it('loads a saved search', async () => {
+ const savedSearchContainer = getSavedSearchContainer({
+ services: discoverServiceMock,
+ });
+ await savedSearchContainer.load('the-saved-search-id');
+ expect(savedSearchContainer.getInitial$().getValue().id).toEqual('the-saved-search-id');
+ expect(savedSearchContainer.getCurrent$().getValue().id).toEqual('the-saved-search-id');
+ expect(savedSearchContainer.getHasChanged$().getValue()).toEqual(false);
+ });
+ });
+
+ describe('persist', () => {
+ const saveOptions = { confirmOverwrite: false };
+
+ it('calls saveSavedSearch with the given saved search and save options', async () => {
+ const savedSearchContainer = getSavedSearchContainer({
+ services: discoverServiceMock,
+ });
+ const savedSearchToPersist = {
+ ...savedSearchMockWithTimeField,
+ title: 'My updated saved search',
+ };
+
+ await savedSearchContainer.persist(savedSearchToPersist, saveOptions);
+ expect(mockSaveSavedSearch).toHaveBeenCalledWith(savedSearchToPersist, saveOptions);
+ });
+
+ it('sets the initial and current saved search to the persisted saved search', async () => {
+ const title = 'My updated saved search';
+ const persistedSavedSearch = {
+ ...savedSearch,
+ title,
+ };
+ const savedSearchContainer = getSavedSearchContainer({
+ services: discoverServiceMock,
+ });
+
+ const result = await savedSearchContainer.persist(persistedSavedSearch, saveOptions);
+ expect(savedSearchContainer.getInitial$().getValue().title).toBe(title);
+ expect(savedSearchContainer.getCurrent$().getValue().title).toBe(title);
+ expect(result).toEqual({ id: '123' });
+ });
+
+ it('emits false to the hasChanged$ BehaviorSubject', async () => {
+ const savedSearchContainer = getSavedSearchContainer({
+ services: discoverServiceMock,
+ });
+ const savedSearchToPersist = {
+ ...savedSearchMockWithTimeField,
+ title: 'My updated saved search',
+ };
+
+ await savedSearchContainer.persist(savedSearchToPersist, saveOptions);
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(false);
+ });
+
+ it('takes care of persisting timeRestore correctly ', async () => {
+ discoverServiceMock.timefilter.getTime = jest.fn(() => ({ from: 'now-15m', to: 'now' }));
+ discoverServiceMock.timefilter.getRefreshInterval = jest.fn(() => ({
+ value: 0,
+ pause: true,
+ }));
+ const savedSearchContainer = getSavedSearchContainer({
+ services: discoverServiceMock,
+ });
+ const savedSearchToPersist = {
+ ...savedSearchMockWithTimeField,
+ title: 'My updated saved search',
+ timeRestore: true,
+ };
+ await savedSearchContainer.persist(savedSearchToPersist, saveOptions);
+ expect(discoverServiceMock.timefilter.getTime).toHaveBeenCalled();
+ expect(discoverServiceMock.timefilter.getRefreshInterval).toHaveBeenCalled();
+ expect(savedSearchToPersist.timeRange).toEqual({ from: 'now-15m', to: 'now' });
+ expect(savedSearchToPersist.refreshInterval).toEqual({
+ value: 0,
+ pause: true,
+ });
+ });
+
+ it('Error thrown on persistence layer bubbling up, no changes to the initial saved search ', async () => {
+ mockSaveSavedSearch.mockImplementation(() => {
+ throw new Error('oh-noes');
+ });
+
+ const savedSearchContainer = getSavedSearchContainer({
+ services: discoverServiceMock,
+ });
+ savedSearchContainer.set(savedSearch);
+ savedSearchContainer.update({ nextState: { hideChart: true } });
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(true);
+ try {
+ await savedSearchContainer.persist(savedSearch, saveOptions);
+ } catch (e) {
+ // intentional error
+ }
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(true);
+ expect(savedSearchContainer.getInitial$().getValue().title).not.toBe(
+ 'My updated saved search'
+ );
+ });
+ });
+
+ describe('update', () => {
+ it('updates a saved search by app state providing hideChart', async () => {
+ const savedSearchContainer = getSavedSearchContainer({
+ services: discoverServiceMock,
+ });
+ savedSearchContainer.set(savedSearch);
+ const updated = await savedSearchContainer.update({ nextState: { hideChart: true } });
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(true);
+ savedSearchContainer.set(updated);
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(false);
+ await savedSearchContainer.update({ nextState: { hideChart: false } });
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(true);
+ await savedSearchContainer.update({ nextState: { hideChart: true } });
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(false);
+ });
+ it('updates a saved search by data view', async () => {
+ const savedSearchContainer = getSavedSearchContainer({
+ services: discoverServiceMock,
+ });
+ const updated = await savedSearchContainer.update({ nextDataView: dataViewMock });
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(true);
+ savedSearchContainer.set(updated);
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(false);
+ await savedSearchContainer.update({ nextDataView: dataViewComplexMock });
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(true);
+ await savedSearchContainer.update({ nextDataView: dataViewMock });
+ expect(savedSearchContainer.getHasChanged$().getValue()).toBe(false);
+ });
+ });
+});
diff --git a/src/plugins/discover/public/application/main/services/discover_saved_search_container.ts b/src/plugins/discover/public/application/main/services/discover_saved_search_container.ts
new file mode 100644
index 0000000000000..21bb8f626605c
--- /dev/null
+++ b/src/plugins/discover/public/application/main/services/discover_saved_search_container.ts
@@ -0,0 +1,268 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import {
+ getNewSavedSearch,
+ getSavedSearch,
+ SavedSearch,
+ saveSavedSearch,
+} from '@kbn/saved-search-plugin/public';
+import { BehaviorSubject } from 'rxjs';
+import type { DataView } from '@kbn/data-views-plugin/common';
+import { SavedObjectSaveOpts } from '@kbn/saved-objects-plugin/public';
+import { isEqual } from 'lodash';
+import { restoreStateFromSavedSearch } from '../../../services/saved_searches/restore_from_saved_search';
+import { updateSavedSearch } from '../utils/update_saved_search';
+import { addLog } from '../../../utils/add_log';
+import { handleSourceColumnState } from '../../../utils/state_helpers';
+import { DiscoverAppState } from './discover_app_state_container';
+import { DiscoverServices } from '../../../build_services';
+import { getStateDefaults } from '../utils/get_state_defaults';
+
+export interface UpdateParams {
+ /**
+ * The next data view to be used
+ */
+ nextDataView?: DataView | undefined;
+ /**
+ * The next AppState that should be used for updating the saved search
+ */
+ nextState?: DiscoverAppState | undefined;
+ /**
+ * use filter and query services to update the saved search
+ */
+ useFilterAndQueryServices?: boolean;
+}
+
+/**
+ * Container for the saved search state, allowing to load, update and persist the saved search
+ * Can also be used to track changes to the saved search
+ * It centralizes functionality that was spread across the Discover main codebase
+ * There are 2 hooks to access the state of the saved search in React components:
+ * - useSavedSearch for the current state, that's updated on every relevant state change
+ * - useSavedSearchInitial for the persisted or initial state, just updated when the saved search is peristed or loaded
+ */
+export interface DiscoverSavedSearchContainer {
+ /**
+ * Get an BehaviorSubject which contains the current state of the current saved search
+ * All modifications are applied to this state
+ */
+ getCurrent$: () => BehaviorSubject;
+ /**
+ * Get the id of the current saved search
+ */
+ getId: () => string | undefined;
+ /**
+ * Get an BehaviorSubject which contains the initial state of the current saved search
+ * This is set when a saved search is loaded or a new saved search is initialized
+ */
+ getInitial$: () => BehaviorSubject;
+ /**
+ * Get the title of the current saved search
+ */
+ getTitle: () => string | undefined;
+ /**
+ * Get an BehaviorSubject containing the state if there have been changes to the initial state of the saved search
+ * Can be used to track if the saved search has been modified and displayed in the UI
+ */
+ getHasChanged$: () => BehaviorSubject;
+ /**
+ * Get the current state of the saved search
+ */
+ getState: () => SavedSearch;
+ /**
+ * Load a saved search by the given id
+ * Resets the initial and current state of the saved search
+ * @param id
+ * @param dataView
+ */
+ load: (id: string, dataView?: DataView) => Promise;
+ /**
+ * Initialize a new saved search
+ * Resets the initial and current state of the saved search
+ * @param dataView
+ */
+ new: (dataView?: DataView) => Promise;
+ /**
+ * Persist the given saved search
+ * Resets the initial and current state of the saved search
+ */
+ persist: (
+ savedSearch: SavedSearch,
+ saveOptions?: SavedObjectSaveOpts
+ ) => Promise<{ id: string | undefined } | undefined>;
+ /**
+ * Set the persisted & current state of the saved search
+ * Happens when a saved search is loaded or a new one is created
+ * @param savedSearch
+ */
+ set: (savedSearch: SavedSearch) => SavedSearch;
+ /**
+ * Updates the current state of the saved search
+ * @param params
+ */
+ update: (params: UpdateParams) => SavedSearch;
+}
+
+export function getSavedSearchContainer({
+ services,
+}: {
+ services: DiscoverServices;
+}): DiscoverSavedSearchContainer {
+ const initialSavedSearch = getNewSavedSearch(services.data);
+ const savedSearchInitial$ = new BehaviorSubject(initialSavedSearch);
+ const savedSearchCurrent$ = new BehaviorSubject(copySavedSearch(initialSavedSearch));
+ const hasChanged$ = new BehaviorSubject(false);
+ const set = (savedSearch: SavedSearch) => {
+ addLog('[savedSearch] set', savedSearch);
+ hasChanged$.next(false);
+ savedSearchCurrent$.next(savedSearch);
+ savedSearchInitial$.next(copySavedSearch(savedSearch));
+ return savedSearch;
+ };
+ const getState = () => savedSearchCurrent$.getValue();
+ const getInitial$ = () => savedSearchInitial$;
+ const getCurrent$ = () => savedSearchCurrent$;
+ const getHasChanged$ = () => hasChanged$;
+ const getTitle = () => savedSearchCurrent$.getValue().title;
+ const getId = () => savedSearchCurrent$.getValue().id;
+
+ const newSavedSearch = async (nextDataView: DataView | undefined) => {
+ addLog('[savedSearch] new', { nextDataView });
+ const dataView = nextDataView ?? getState().searchSource.getField('index');
+ const nextSavedSearch = await getNewSavedSearch(services.data);
+ nextSavedSearch.searchSource.setField('index', dataView);
+ const newAppState = getDefaultAppState(nextSavedSearch, services);
+ const nextSavedSearchToSet = updateSavedSearch({
+ savedSearch: { ...nextSavedSearch },
+ dataView,
+ state: newAppState,
+ services,
+ });
+ return set(nextSavedSearchToSet);
+ };
+
+ const persist = async (nextSavedSearch: SavedSearch, saveOptions?: SavedObjectSaveOpts) => {
+ addLog('[savedSearch] persist', { nextSavedSearch, saveOptions });
+ updateSavedSearch({ savedSearch: nextSavedSearch, services }, true);
+
+ const id = await saveSavedSearch(
+ nextSavedSearch,
+ saveOptions || {},
+ services.core.savedObjects.client,
+ services.savedObjectsTagging
+ );
+
+ if (id) {
+ set(nextSavedSearch);
+ }
+ return { id };
+ };
+ const update = ({ nextDataView, nextState, useFilterAndQueryServices }: UpdateParams) => {
+ addLog('[savedSearch] update', { nextDataView, nextState });
+
+ const previousSavedSearch = getState();
+ const dataView = nextDataView
+ ? nextDataView
+ : previousSavedSearch.searchSource.getField('index')!;
+
+ const nextSavedSearch = updateSavedSearch(
+ {
+ savedSearch: { ...previousSavedSearch },
+ dataView,
+ state: nextState || {},
+ services,
+ },
+ useFilterAndQueryServices
+ );
+
+ const hasChanged = !isEqualSavedSearch(savedSearchInitial$.getValue(), nextSavedSearch);
+ hasChanged$.next(hasChanged);
+ savedSearchCurrent$.next(nextSavedSearch);
+
+ addLog('[savedSearch] update done', nextSavedSearch);
+ return nextSavedSearch;
+ };
+
+ const load = async (id: string, dataView: DataView | undefined): Promise => {
+ addLog('[savedSearch] load', { id, dataView });
+ const loadedSavedSearch = await getSavedSearch(id, {
+ search: services.data.search,
+ savedObjectsClient: services.core.savedObjects.client,
+ spaces: services.spaces,
+ savedObjectsTagging: services.savedObjectsTagging,
+ });
+ if (!loadedSavedSearch.searchSource.getField('index') && dataView) {
+ loadedSavedSearch.searchSource.setField('index', dataView);
+ }
+ restoreStateFromSavedSearch({
+ savedSearch: loadedSavedSearch,
+ timefilter: services.timefilter,
+ });
+ return set(loadedSavedSearch);
+ };
+
+ return {
+ getCurrent$,
+ getHasChanged$,
+ getId,
+ getInitial$,
+ getState,
+ getTitle,
+ load,
+ new: newSavedSearch,
+ persist,
+ set,
+ update,
+ };
+}
+
+/**
+ * Copies a saved search object, due to the stateful nature of searchSource it has to be copied with a dedicated function
+ * @param savedSearch
+ */
+export function copySavedSearch(savedSearch: SavedSearch): SavedSearch {
+ return {
+ ...savedSearch,
+ ...{ searchSource: savedSearch.searchSource.createCopy() },
+ };
+}
+
+export function getDefaultAppState(savedSearch: SavedSearch, services: DiscoverServices) {
+ return handleSourceColumnState(
+ getStateDefaults({
+ savedSearch,
+ services,
+ }),
+ services.uiSettings
+ );
+}
+
+export function isEqualSavedSearch(savedSearchPrev: SavedSearch, savedSearchNext: SavedSearch) {
+ const { searchSource: prevSearchSource, ...prevSavedSearch } = savedSearchPrev;
+ const { searchSource: nextSearchSource, ...nextSavedSearchWithoutSearchSource } = savedSearchNext;
+
+ const keys = new Set([
+ ...Object.keys(prevSavedSearch),
+ ...Object.keys(nextSavedSearchWithoutSearchSource),
+ ]);
+ const savedSearchDiff = [...keys].filter((key: string) => {
+ // @ts-expect-error
+ return !isEqual(prevSavedSearch[key], nextSavedSearchWithoutSearchSource[key]);
+ });
+
+ const searchSourceDiff =
+ !isEqual(prevSearchSource.getField('filter'), nextSearchSource.getField('filter')) ||
+ !isEqual(prevSearchSource.getField('query'), nextSearchSource.getField('query')) ||
+ !isEqual(prevSearchSource.getField('index'), nextSearchSource.getField('index'));
+ const hasChanged = Boolean(savedSearchDiff.length || searchSourceDiff);
+ if (hasChanged) {
+ addLog('[savedSearch] difference between initial and changed version', searchSourceDiff);
+ }
+ return !hasChanged;
+}
diff --git a/src/plugins/discover/public/application/main/services/discover_search_session.ts b/src/plugins/discover/public/application/main/services/discover_search_session.ts
index 0cbaf74159a80..c6c64ed89c10a 100644
--- a/src/plugins/discover/public/application/main/services/discover_search_session.ts
+++ b/src/plugins/discover/public/application/main/services/discover_search_session.ts
@@ -67,7 +67,6 @@ export class DiscoverSearchSessionManager {
this.deps.session.restore(searchSessionIdFromURL);
}
}
-
return searchSessionIdFromURL ?? this.deps.session.start();
}
diff --git a/src/plugins/discover/public/application/main/services/discover_state.test.ts b/src/plugins/discover/public/application/main/services/discover_state.test.ts
index c2efd78b24c8f..4b84e613f4664 100644
--- a/src/plugins/discover/public/application/main/services/discover_state.test.ts
+++ b/src/plugins/discover/public/application/main/services/discover_state.test.ts
@@ -14,32 +14,69 @@ import {
import { createBrowserHistory, History } from 'history';
import { dataPluginMock } from '@kbn/data-plugin/public/mocks';
import type { SavedSearch, SortOrder } from '@kbn/saved-search-plugin/public';
-import { savedSearchMock, savedSearchMockWithTimeField } from '../../../__mocks__/saved_search';
+import {
+ savedSearchAdHoc,
+ savedSearchMock,
+ savedSearchMockWithTimeField,
+ savedSearchMockWithTimeFieldNew,
+} from '../../../__mocks__/saved_search';
import { discoverServiceMock } from '../../../__mocks__/services';
import { dataViewMock } from '../../../__mocks__/data_view';
-import { dataViewComplexMock } from '../../../__mocks__/data_view_complex';
import { DiscoverAppStateContainer } from './discover_app_state_container';
+import { waitFor } from '@testing-library/react';
+import { FetchStatus } from '../../types';
+import { dataViewAdHoc, dataViewComplexMock } from '../../../__mocks__/data_view_complex';
+import { copySavedSearch } from './discover_saved_search_container';
-let history: History;
-let state: DiscoverStateContainer;
-const getCurrentUrl = () => history.createHref(history.location);
const startSync = (appState: DiscoverAppStateContainer) => {
const { start, stop } = appState.syncState();
start();
return stop;
};
+async function getState(url: string, savedSearch?: SavedSearch) {
+ const nextHistory = createBrowserHistory();
+ nextHistory.push(url);
+ const nextState = getDiscoverStateContainer({
+ services: discoverServiceMock,
+ history: nextHistory,
+ });
+ jest.spyOn(nextState.dataState, 'fetch');
+ await nextState.actions.loadDataViewList();
+ if (savedSearch) {
+ nextState.savedSearchState.load = jest.fn(() => {
+ nextState.savedSearchState.set(copySavedSearch(savedSearch));
+ return Promise.resolve(savedSearch);
+ });
+ } else {
+ nextState.savedSearchState.load = jest.fn(() => {
+ nextState.savedSearchState.set(copySavedSearch(savedSearchMockWithTimeFieldNew));
+ return Promise.resolve(savedSearchMockWithTimeFieldNew);
+ });
+ }
+
+ const getCurrentUrl = () => nextHistory.createHref(nextHistory.location);
+ return {
+ history: nextHistory,
+ state: nextState,
+ getCurrentUrl,
+ };
+}
+
describe('Test discover state', () => {
let stopSync = () => {};
+ let history: History;
+ let state: DiscoverStateContainer;
+ const getCurrentUrl = () => history.createHref(history.location);
beforeEach(async () => {
history = createBrowserHistory();
history.push('/');
state = getDiscoverStateContainer({
- savedSearch: savedSearchMock,
services: discoverServiceMock,
history,
});
+ state.savedSearchState.set(savedSearchMock);
await state.appState.update({}, true);
stopSync = startSync(state.appState);
});
@@ -88,65 +125,38 @@ describe('Test discover state', () => {
test('pauseAutoRefreshInterval sets refreshInterval.pause to true', async () => {
history.push('/#?_g=(refreshInterval:(pause:!f,value:5000))');
expect(getCurrentUrl()).toBe('/#?_g=(refreshInterval:(pause:!f,value:5000))');
- await state.actions.pauseAutoRefreshInterval();
+ await state.actions.setDataView(dataViewMock);
expect(getCurrentUrl()).toBe('/#?_g=(refreshInterval:(pause:!t,value:5000))');
});
});
describe('Test discover initial state sort handling', () => {
test('Non-empty sort in URL should not be overwritten by saved search sort', async () => {
- history = createBrowserHistory();
- history.push('/#?_a=(sort:!(!(order_date,desc)))');
+ const savedSearch = {
+ ...savedSearchMockWithTimeField,
+ ...{ sort: [['bytes', 'desc']] },
+ } as SavedSearch;
- state = getDiscoverStateContainer({
- savedSearch: { ...savedSearchMock, ...{ sort: [['bytes', 'desc']] } },
- services: discoverServiceMock,
- history,
- });
- await state.appState.update({}, true);
- const stopSync = startSync(state.appState);
- expect(state.appState.getState().sort).toEqual([['order_date', 'desc']]);
- stopSync();
+ const { state } = await getState('/#?_a=(sort:!(!(timestamp,desc)))', savedSearch);
+ const unsubscribe = state.actions.initializeAndSync();
+ expect(state.appState.getState().sort).toEqual([['timestamp', 'desc']]);
+ unsubscribe();
});
- test('Empty sort in URL should use saved search sort for state', async () => {
- history = createBrowserHistory();
- history.push('/#?_a=(sort:!())');
+ test('Empty URL should use saved search sort for state', async () => {
const nextSavedSearch = { ...savedSearchMock, ...{ sort: [['bytes', 'desc']] as SortOrder[] } };
- state = getDiscoverStateContainer({
- savedSearch: nextSavedSearch,
- services: discoverServiceMock,
- history,
- });
- await state.appState.update({}, true);
- const stopSync = startSync(state.appState);
+ const { state } = await getState('/', nextSavedSearch);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ const unsubscribe = state.actions.initializeAndSync();
expect(state.appState.getState().sort).toEqual([['bytes', 'desc']]);
- stopSync();
- });
- test('Empty sort in URL and saved search should sort by timestamp', async () => {
- history = createBrowserHistory();
- history.push('/#?_a=(sort:!())');
- state = getDiscoverStateContainer({
- savedSearch: savedSearchMockWithTimeField,
- services: discoverServiceMock,
- history,
- });
- await state.appState.update({}, true);
- const stopSync = startSync(state.appState);
- expect(state.appState.getState().sort).toEqual([['timestamp', 'desc']]);
- stopSync();
+ unsubscribe();
});
});
describe('Test discover state with legacy migration', () => {
test('migration of legacy query ', async () => {
- history = createBrowserHistory();
- history.push(
- "/#?_a=(query:(query_string:(analyze_wildcard:!t,query:'type:nice%20name:%22yeah%22')))"
+ const { state } = await getState(
+ "/#?_a=(query:(query_string:(analyze_wildcard:!t,query:'type:nice%20name:%22yeah%22')))",
+ savedSearchMockWithTimeFieldNew
);
- state = getDiscoverStateContainer({
- savedSearch: savedSearchMock,
- services: discoverServiceMock,
- history,
- });
expect(state.appState.getState().query).toMatchInlineSnapshot(`
Object {
"language": "lucene",
@@ -163,7 +173,7 @@ describe('Test discover state with legacy migration', () => {
describe('createSearchSessionRestorationDataProvider', () => {
let mockSavedSearch: SavedSearch = {} as unknown as SavedSearch;
- history = createBrowserHistory();
+ const history = createBrowserHistory();
const mockDataPlugin = dataPluginMock.createStartContract();
const searchSessionInfoProvider = createSearchSessionRestorationDataProvider({
data: mockDataPlugin,
@@ -225,35 +235,454 @@ describe('createSearchSessionRestorationDataProvider', () => {
});
});
});
+});
- describe('actions', () => {
- beforeEach(async () => {
- history = createBrowserHistory();
- state = getDiscoverStateContainer({
- services: discoverServiceMock,
- history,
- savedSearch: savedSearchMock,
- });
+describe('actions', () => {
+ beforeEach(async () => {
+ discoverServiceMock.data.query.timefilter.timefilter.getTime = jest.fn(() => {
+ return { from: 'now-15d', to: 'now' };
+ });
+ discoverServiceMock.data.search.searchSource.create = jest
+ .fn()
+ .mockReturnValue(savedSearchMock.searchSource);
+ discoverServiceMock.core.savedObjects.client.resolve = jest.fn().mockReturnValue({
+ saved_object: {
+ attributes: {
+ kibanaSavedObjectMeta: {
+ searchSourceJSON:
+ '{"query":{"query":"","language":"kuery"},"filter":[],"indexRefName":"kibanaSavedObjectMeta.searchSourceJSON.index"}',
+ },
+ title: 'The saved search that will save the world',
+ sort: [],
+ columns: ['test123'],
+ description: 'description',
+ hideChart: false,
+ },
+ id: 'the-saved-search-id',
+ type: 'search',
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ id: 'the-data-view-id',
+ type: 'index-pattern',
+ },
+ ],
+ namespaces: ['default'],
+ },
+ outcome: 'exactMatch',
});
+ });
+
+ afterEach(() => {
+ jest.clearAllMocks();
+ });
- test('setDataView', async () => {
- state.actions.setDataView(dataViewMock);
- expect(state.internalState.getState().dataView).toBe(dataViewMock);
+ test('setDataView', async () => {
+ const { state } = await getState('');
+ state.actions.setDataView(dataViewMock);
+ expect(state.internalState.getState().dataView).toBe(dataViewMock);
+ });
+
+ test('fetchData', async () => {
+ const { state } = await getState('/');
+ const dataState = state.dataState;
+ await state.actions.loadDataViewList();
+ expect(dataState.data$.main$.value.fetchStatus).toBe(FetchStatus.LOADING);
+ await state.actions.loadSavedSearch();
+ const unsubscribe = state.actions.initializeAndSync();
+ state.actions.fetchData();
+ await waitFor(() => {
+ expect(dataState.data$.documents$.value.fetchStatus).toBe(FetchStatus.COMPLETE);
});
+ unsubscribe();
- test('appendAdHocDataViews', async () => {
- state.actions.appendAdHocDataViews(dataViewMock);
- expect(state.internalState.getState().adHocDataViews).toEqual([dataViewMock]);
+ expect(dataState.data$.totalHits$.value.result).toBe(0);
+ expect(dataState.data$.documents$.value.result).toEqual([]);
+ });
+ test('loadDataViewList', async () => {
+ const { state } = await getState('');
+ expect(state.internalState.getState().savedDataViews.length).toBe(3);
+ });
+ test('loadSavedSearch with no id given an empty URL', async () => {
+ const { state, getCurrentUrl } = await getState('');
+ await state.actions.loadDataViewList();
+ const newSavedSearch = await state.actions.loadSavedSearch();
+ expect(newSavedSearch?.id).toBeUndefined();
+ const unsubscribe = state.actions.initializeAndSync();
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ expect(getCurrentUrl()).toMatchInlineSnapshot(
+ `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:the-data-view-id,interval:auto,sort:!())"`
+ );
+ expect(state.savedSearchState.getHasChanged$().getValue()).toBe(false);
+ const { searchSource, ...savedSearch } = state.savedSearchState.getState();
+ expect(savedSearch).toMatchInlineSnapshot(`
+ Object {
+ "columns": Array [
+ "default_column",
+ ],
+ "refreshInterval": undefined,
+ "sort": Array [],
+ "timeRange": undefined,
+ "usesAdHocDataView": false,
+ }
+ `);
+ expect(searchSource.getField('index')?.id).toEqual('the-data-view-id');
+ unsubscribe();
+ });
+
+ test('loadNewSavedSearch given an empty URL using loadSavedSearch', async () => {
+ const { state, getCurrentUrl } = await getState('/');
+
+ const newSavedSearch = await state.actions.loadSavedSearch();
+ expect(newSavedSearch?.id).toBeUndefined();
+ const unsubscribe = state.actions.initializeAndSync();
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ expect(getCurrentUrl()).toMatchInlineSnapshot(
+ `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:the-data-view-id,interval:auto,sort:!())"`
+ );
+ expect(state.savedSearchState.getHasChanged$().getValue()).toBe(false);
+ unsubscribe();
+ });
+ test('loadNewSavedSearch with URL changing interval state', async () => {
+ const { state, getCurrentUrl } = await getState(
+ '/#?_a=(interval:month,columns:!(bytes))&_g=()'
+ );
+ const newSavedSearch = await state.actions.loadSavedSearch({ useAppState: true });
+ expect(newSavedSearch?.id).toBeUndefined();
+ const unsubscribe = state.actions.initializeAndSync();
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ expect(getCurrentUrl()).toMatchInlineSnapshot(
+ `"/#?_a=(columns:!(bytes),index:the-data-view-id,interval:month,sort:!())&_g=()"`
+ );
+ expect(state.savedSearchState.getHasChanged$().getValue()).toBe(true);
+ unsubscribe();
+ });
+ test('loadSavedSearch with no id, given URL changes state', async () => {
+ const { state, getCurrentUrl } = await getState(
+ '/#?_a=(interval:month,columns:!(bytes))&_g=()'
+ );
+ const newSavedSearch = await state.actions.loadSavedSearch({ useAppState: true });
+ expect(newSavedSearch?.id).toBeUndefined();
+ const unsubscribe = state.actions.initializeAndSync();
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ expect(getCurrentUrl()).toMatchInlineSnapshot(
+ `"/#?_a=(columns:!(bytes),index:the-data-view-id,interval:month,sort:!())&_g=()"`
+ );
+ expect(state.savedSearchState.getHasChanged$().getValue()).toBe(true);
+ unsubscribe();
+ });
+ test('loadSavedSearch given an empty URL, no state changes', async () => {
+ const { state, getCurrentUrl } = await getState('/', savedSearchMock);
+ const newSavedSearch = await state.actions.loadSavedSearch({
+ savedSearchId: 'the-saved-search-id',
});
- test('removeAdHocDataViewById', async () => {
- state.actions.appendAdHocDataViews(dataViewMock);
- state.actions.removeAdHocDataViewById(dataViewMock.id!);
- expect(state.internalState.getState().adHocDataViews).toEqual([]);
+ const unsubscribe = state.actions.initializeAndSync();
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ expect(newSavedSearch?.id).toBe('the-saved-search-id');
+ expect(getCurrentUrl()).toMatchInlineSnapshot(
+ `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:the-data-view-id,interval:auto,sort:!())"`
+ );
+ expect(state.savedSearchState.getHasChanged$().getValue()).toBe(false);
+ unsubscribe();
+ });
+ test('loadSavedSearch given a URL with different interval and columns modifying the state', async () => {
+ const url = '/#?_a=(interval:month,columns:!(message))&_g=()';
+ const { state, getCurrentUrl } = await getState(url, savedSearchMock);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id, useAppState: true });
+ const unsubscribe = state.actions.initializeAndSync();
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ expect(getCurrentUrl()).toMatchInlineSnapshot(
+ `"/#?_a=(columns:!(message),index:the-data-view-id,interval:month,sort:!())&_g=()"`
+ );
+ expect(state.savedSearchState.getHasChanged$().getValue()).toBe(true);
+ unsubscribe();
+ });
+
+ test('loadSavedSearch ignoring hideChart in URL', async () => {
+ const url = '/#?_a=(hideChart:true,columns:!(message))&_g=()';
+ const { state } = await getState(url, savedSearchMock);
+ await state.actions.loadSavedSearch();
+ expect(state.savedSearchState.getState().hideChart).toBe(undefined);
+ expect(state.appState.getState().hideChart).toBe(undefined);
+ });
+
+ test('loadSavedSearch without id ignoring invalid index in URL, adding a warning toast', async () => {
+ const url = '/#?_a=(index:abc)&_g=()';
+ const { state } = await getState(url, savedSearchMock);
+ await state.actions.loadSavedSearch({ useAppState: true });
+ expect(state.savedSearchState.getState().searchSource.getField('index')?.id).toBe(
+ 'the-data-view-id'
+ );
+ expect(discoverServiceMock.toastNotifications.addWarning).toHaveBeenCalledWith(
+ expect.objectContaining({
+ 'data-test-subj': 'dscDataViewNotFoundShowDefaultWarning',
+ })
+ );
+ });
+
+ test('loadSavedSearch without id containing sql, adding no warning toast with an invalid index', async () => {
+ const url = "/#?_a=(index:abcde,query:(sql:'Select * from test'))&_g=()";
+ const { state } = await getState(url, savedSearchMock);
+ await state.actions.loadSavedSearch({ useAppState: true });
+ expect(discoverServiceMock.toastNotifications.addWarning).not.toHaveBeenCalled();
+ });
+
+ test('loadSavedSearch with id ignoring invalid index in URL, adding a warning toast', async () => {
+ const url = '/#?_a=(index:abc)&_g=()';
+ const { state } = await getState(url, savedSearchMock);
+ await state.actions.loadSavedSearch({ useAppState: true, savedSearchId: savedSearchMock.id });
+ expect(state.savedSearchState.getState().searchSource.getField('index')?.id).toBe(
+ 'the-data-view-id'
+ );
+ expect(discoverServiceMock.toastNotifications.addWarning).toHaveBeenCalledWith(
+ expect.objectContaining({
+ 'data-test-subj': 'dscDataViewNotFoundShowSavedWarning',
+ })
+ );
+ });
+
+ test('loadSavedSearch data view handling', async () => {
+ const { state } = await getState('/', savedSearchMock);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ expect(state.savedSearchState.getState().searchSource.getField('index')?.id).toBe(
+ 'the-data-view-id'
+ );
+ expect(state.savedSearchState.getHasChanged$().getValue()).toBe(false);
+
+ state.savedSearchState.load = jest.fn().mockReturnValue(savedSearchMockWithTimeField);
+ // unsetting the previous index else this is considered as update to the persisted saved search
+ state.appState.set({ index: undefined });
+ await state.actions.loadSavedSearch({ savedSearchId: 'the-saved-search-id-with-timefield' });
+ expect(state.savedSearchState.getState().searchSource.getField('index')?.id).toBe(
+ 'index-pattern-with-timefield-id'
+ );
+ expect(state.savedSearchState.getHasChanged$().getValue()).toBe(false);
+
+ // switch back to the previous savedSearch, but not cleaning up appState index, so it's considered as update to the persisted saved search
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id, useAppState: true });
+ expect(state.savedSearchState.getState().searchSource.getField('index')?.id).toBe(
+ 'index-pattern-with-timefield-id'
+ );
+ expect(state.savedSearchState.getHasChanged$().getValue()).toBe(true);
+ });
+ test('loadSavedSearch generating a new saved search, updated by ad-hoc data view', async () => {
+ const { state } = await getState('/');
+ const dataViewSpecMock = {
+ id: 'mock-id',
+ title: 'mock-title',
+ timeFieldName: 'mock-time-field-name',
+ };
+ const dataViewsCreateMock = discoverServiceMock.dataViews.create as jest.Mock;
+ dataViewsCreateMock.mockImplementation(() => ({
+ ...dataViewMock,
+ ...dataViewSpecMock,
+ isPersisted: () => false,
+ }));
+ await state.actions.loadSavedSearch({ dataViewSpec: dataViewSpecMock });
+ expect(state.savedSearchState.getInitial$().getValue().id).toEqual(undefined);
+ expect(state.savedSearchState.getCurrent$().getValue().id).toEqual(undefined);
+ expect(
+ state.savedSearchState.getInitial$().getValue().searchSource?.getField('index')?.id
+ ).toEqual(dataViewSpecMock.id);
+ expect(
+ state.savedSearchState.getCurrent$().getValue().searchSource?.getField('index')?.id
+ ).toEqual(dataViewSpecMock.id);
+ expect(state.savedSearchState.getHasChanged$().getValue()).toEqual(false);
+ expect(state.internalState.getState().adHocDataViews.length).toBe(1);
+ });
+
+ test('loadSavedSearch resetting query & filters of data service', async () => {
+ const { state } = await getState('/', savedSearchMock);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ expect(discoverServiceMock.data.query.queryString.clearQuery).toHaveBeenCalled();
+ expect(discoverServiceMock.data.query.filterManager.setAppFilters).toHaveBeenCalledWith([]);
+ });
+
+ test('loadSavedSearch setting query & filters of data service if query and filters are persisted', async () => {
+ const savedSearchWithQueryAndFilters = copySavedSearch(savedSearchMock);
+ const query = { query: "foo: 'bar'", language: 'kql' };
+ const filters = [{ meta: { index: 'the-data-view-id' }, query: { match_all: {} } }];
+ savedSearchWithQueryAndFilters.searchSource.setField('query', query);
+ savedSearchWithQueryAndFilters.searchSource.setField('filter', filters);
+ const { state } = await getState('/', savedSearchWithQueryAndFilters);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ expect(discoverServiceMock.data.query.queryString.setQuery).toHaveBeenCalledWith(query);
+ expect(discoverServiceMock.data.query.filterManager.setAppFilters).toHaveBeenCalledWith(
+ filters
+ );
+ });
+
+ test('loadSavedSearch with ad-hoc data view being added to internal state adHocDataViews', async () => {
+ const savedSearchAdHocCopy = copySavedSearch(savedSearchAdHoc);
+ const adHocDataViewId = savedSearchAdHoc.searchSource.getField('index')!.id;
+ const { state } = await getState('/', savedSearchAdHocCopy);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchAdHoc.id });
+ expect(state.appState.getState().index).toBe(adHocDataViewId);
+ expect(state.internalState.getState().adHocDataViews[0].id).toBe(adHocDataViewId);
+ });
+
+ test('onChangeDataView', async () => {
+ const { state, getCurrentUrl } = await getState('/', savedSearchMock);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ expect(state.savedSearchState.getState().searchSource.getField('index')!.id).toBe(
+ dataViewMock.id
+ );
+ const unsubscribe = state.actions.initializeAndSync();
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ expect(getCurrentUrl()).toMatchInlineSnapshot(
+ `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:the-data-view-id,interval:auto,sort:!())"`
+ );
+ await state.actions.onChangeDataView(dataViewComplexMock.id!);
+ await waitFor(() => {
+ expect(state.internalState.getState().dataView?.id).toBe(dataViewComplexMock.id);
+ });
+ expect(state.appState.get().index).toBe(dataViewComplexMock.id);
+ expect(state.savedSearchState.getState().searchSource.getField('index')!.id).toBe(
+ dataViewComplexMock.id
+ );
+ unsubscribe();
+ });
+ test('onDataViewCreated - persisted data view', async () => {
+ const { state } = await getState('/', savedSearchMock);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ const unsubscribe = state.actions.initializeAndSync();
+ await state.actions.onDataViewCreated(dataViewComplexMock);
+ await waitFor(() => {
+ expect(state.internalState.getState().dataView?.id).toBe(dataViewComplexMock.id);
});
- test('replaceAdHocDataViewWithId', async () => {
- state.actions.appendAdHocDataViews(dataViewMock);
- state.actions.replaceAdHocDataViewWithId(dataViewMock.id!, dataViewComplexMock);
- expect(state.internalState.getState().adHocDataViews).toEqual([dataViewComplexMock]);
+ expect(state.appState.get().index).toBe(dataViewComplexMock.id);
+ expect(state.savedSearchState.getState().searchSource.getField('index')!.id).toBe(
+ dataViewComplexMock.id
+ );
+ unsubscribe();
+ });
+ test('onDataViewCreated - ad-hoc data view', async () => {
+ const { state } = await getState('/', savedSearchMock);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ const unsubscribe = state.actions.initializeAndSync();
+ await state.actions.onDataViewCreated(dataViewAdHoc);
+ await waitFor(() => {
+ expect(state.internalState.getState().dataView?.id).toBe(dataViewAdHoc.id);
+ });
+ expect(state.appState.get().index).toBe(dataViewAdHoc.id);
+ expect(state.savedSearchState.getState().searchSource.getField('index')!.id).toBe(
+ dataViewAdHoc.id
+ );
+ unsubscribe();
+ });
+ test('onDataViewEdited - persisted data view', async () => {
+ const { state } = await getState('/', savedSearchMock);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ const selectedDataView = state.internalState.getState().dataView;
+ await waitFor(() => {
+ expect(selectedDataView).toBe(dataViewMock);
+ });
+ const unsubscribe = state.actions.initializeAndSync();
+ await state.actions.onDataViewEdited(dataViewMock);
+
+ await waitFor(() => {
+ expect(state.internalState.getState().dataView).not.toBe(selectedDataView);
+ });
+ unsubscribe();
+ });
+ test('onDataViewEdited - ad-hoc data view', async () => {
+ const { state } = await getState('/', savedSearchMock);
+ const unsubscribe = state.actions.initializeAndSync();
+ await state.actions.onDataViewCreated(dataViewAdHoc);
+ const previousId = dataViewAdHoc.id;
+ await state.actions.onDataViewEdited(dataViewAdHoc);
+ await waitFor(() => {
+ expect(state.internalState.getState().dataView?.id).not.toBe(previousId);
+ });
+ unsubscribe();
+ });
+
+ test('onOpenSavedSearch - same target id', async () => {
+ const { state } = await getState('/', savedSearchMock);
+ const unsubscribe = state.actions.initializeAndSync();
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ await state.savedSearchState.update({ nextState: { hideChart: true } });
+ expect(state.savedSearchState.getState().hideChart).toBe(true);
+ await state.actions.onOpenSavedSearch(savedSearchMock.id!);
+ expect(state.savedSearchState.getState().hideChart).toBe(undefined);
+ unsubscribe();
+ });
+
+ test('onOpenSavedSearch - cleanup of previous filter', async () => {
+ const { state } = await getState(
+ "/#?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-15m,to:now))&_a=(columns:!(customer_first_name),filters:!(('$state':(store:appState),meta:(alias:!n,disabled:!f,index:ff959d40-b880-11e8-a6d9-e546fe2bba5f,key:customer_first_name,negate:!f,params:(query:Mary),type:phrase),query:(match_phrase:(customer_first_name:Mary)))),hideChart:!f,index:ff959d40-b880-11e8-a6d9-e546fe2bba5f,interval:auto,query:(language:kuery,query:''),sort:!())",
+ savedSearchMock
+ );
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id, useAppState: true });
+ expect(state.appState.get().filters).toHaveLength(1);
+ await state.actions.loadSavedSearch({ useAppState: false });
+ expect(state.appState.get().filters).toHaveLength(0);
+ });
+
+ test('onCreateDefaultAdHocDataView', async () => {
+ discoverServiceMock.dataViews.create = jest.fn().mockReturnValue({
+ ...dataViewMock,
+ isPersisted: () => false,
+ id: 'ad-hoc-id',
+ title: 'test',
+ });
+ const { state } = await getState('/', savedSearchMock);
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ const unsubscribe = state.actions.initializeAndSync();
+ await state.actions.onCreateDefaultAdHocDataView('ad-hoc-test');
+ expect(state.appState.getState().index).toBe('ad-hoc-id');
+ expect(state.internalState.getState().adHocDataViews[0].id).toBe('ad-hoc-id');
+ unsubscribe();
+ });
+ test('undoSavedSearchChanges - when changing data views', async () => {
+ const { state, getCurrentUrl } = await getState('/', savedSearchMock);
+ // Load a given persisted saved search
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ const unsubscribe = state.actions.initializeAndSync();
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ const initialUrlState =
+ '/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:the-data-view-id,interval:auto,sort:!())';
+ expect(getCurrentUrl()).toBe(initialUrlState);
+ expect(state.internalState.getState().dataView?.id).toBe(dataViewMock.id!);
+
+ // Change the data view, this should change the URL and trigger a fetch
+ await state.actions.onChangeDataView(dataViewComplexMock.id!);
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ expect(getCurrentUrl()).toMatchInlineSnapshot(
+ `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:data-view-with-various-field-types-id,interval:auto,sort:!(!(data,desc)))"`
+ );
+ await waitFor(() => {
+ expect(state.dataState.fetch).toHaveBeenCalledTimes(1);
+ });
+ expect(state.internalState.getState().dataView?.id).toBe(dataViewComplexMock.id!);
+
+ // Undo all changes to the saved search, this should trigger a fetch, again
+ await state.actions.undoSavedSearchChanges();
+ state.kbnUrlStateStorage.kbnUrlControls.flush();
+ expect(getCurrentUrl()).toBe(initialUrlState);
+ await waitFor(() => {
+ expect(state.dataState.fetch).toHaveBeenCalledTimes(2);
+ });
+ expect(state.internalState.getState().dataView?.id).toBe(dataViewMock.id!);
+
+ unsubscribe();
+ });
+
+ test('undoSavedSearchChanges with timeRestore', async () => {
+ const { state } = await getState('/', {
+ ...savedSearchMock,
+ timeRestore: true,
+ refreshInterval: { pause: false, value: 1000 },
+ timeRange: { from: 'now-15d', to: 'now-10d' },
});
+ const setTime = jest.fn();
+ const setRefreshInterval = jest.fn();
+ discoverServiceMock.data.query.timefilter.timefilter.setTime = setTime;
+ discoverServiceMock.data.query.timefilter.timefilter.setRefreshInterval = setRefreshInterval;
+ await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id });
+ await state.actions.undoSavedSearchChanges();
+ expect(setTime).toHaveBeenCalledTimes(1);
+ expect(setTime).toHaveBeenCalledWith({ from: 'now-15d', to: 'now-10d' });
+ expect(setRefreshInterval).toHaveBeenCalledWith({ pause: false, value: 1000 });
});
});
diff --git a/src/plugins/discover/public/application/main/services/discover_state.ts b/src/plugins/discover/public/application/main/services/discover_state.ts
index c283f09a48966..a8736bc82edde 100644
--- a/src/plugins/discover/public/application/main/services/discover_state.ts
+++ b/src/plugins/discover/public/application/main/services/discover_state.ts
@@ -16,13 +16,21 @@ import {
} from '@kbn/kibana-utils-plugin/public';
import {
DataPublicPluginStart,
- FilterManager,
QueryState,
SearchSessionInfoProvider,
} from '@kbn/data-plugin/public';
-import { DataView } from '@kbn/data-views-plugin/public';
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
-import { loadDataView, resolveDataView } from '../utils/resolve_data_view';
+import { DataView, DataViewSpec, DataViewType } from '@kbn/data-views-plugin/public';
+import type { SavedSearch } from '@kbn/saved-search-plugin/public';
+import { v4 as uuidv4 } from 'uuid';
+import { merge } from 'rxjs';
+import { AggregateQuery, Query, TimeRange } from '@kbn/es-query';
+import { loadSavedSearch as loadSavedSearchFn } from './load_saved_search';
+import { restoreStateFromSavedSearch } from '../../../services/saved_searches/restore_from_saved_search';
+import { FetchStatus } from '../../types';
+import { changeDataView } from '../hooks/utils/change_data_view';
+import { buildStateSubscribe } from '../hooks/utils/build_state_subscribe';
+import { addLog } from '../../../utils/add_log';
+import { getUrlTracker } from '../../../kibana_services';
import { DiscoverDataStateContainer, getDataStateContainer } from './discover_data_state_container';
import { DiscoverSearchSessionManager } from './discover_search_session';
import { DISCOVER_APP_LOCATOR, DiscoverAppLocatorParams } from '../../../../common';
@@ -37,6 +45,12 @@ import {
getInternalStateContainer,
} from './discover_internal_state_container';
import { DiscoverServices } from '../../../build_services';
+import {
+ getDefaultAppState,
+ getSavedSearchContainer,
+ DiscoverSavedSearchContainer,
+} from './discover_saved_search_container';
+import { updateFiltersReferences } from '../utils/update_filter_references';
interface DiscoverStateContainerParams {
/**
* Browser history
@@ -45,89 +59,135 @@ interface DiscoverStateContainerParams {
/**
* The current savedSearch
*/
- savedSearch: SavedSearch;
+ savedSearch?: string | SavedSearch;
/**
* core ui settings service
*/
services: DiscoverServices;
}
-export interface DiscoverStateContainer {
+export interface LoadParams {
/**
- * kbnUrlStateStorage
+ * the id of the saved search to load, if undefined, a new saved search will be created
*/
- kbnUrlStateStorage: IKbnUrlStateStorage;
+ savedSearchId?: string;
+ /**
+ * the data view to use, if undefined, the saved search's data view will be used
+ */
+ dataView?: DataView;
+ /**
+ * the data view spec to use, if undefined, the saved search's data view will be used
+ */
+ dataViewSpec?: DataViewSpec;
+ /**
+ * determines if AppState should be used to update the saved search
+ * URL is overwriting savedSearch params in this case
+ */
+ useAppState?: boolean;
+}
+
+export interface DiscoverStateContainer {
/**
* App state, the _a part of the URL
*/
appState: DiscoverAppStateContainer;
/**
- * Internal state that's used at several places in the UI
+ * Data fetching related state
+ **/
+ dataState: DiscoverDataStateContainer;
+ /**
+ * Internal shared state that's used at several places in the UI
*/
internalState: DiscoverInternalStateContainer;
+ /**
+ * kbnUrlStateStorage - it keeps the state in sync with the URL
+ */
+ kbnUrlStateStorage: IKbnUrlStateStorage;
+ /**
+ * State of saved search, the saved object of Discover
+ */
+ savedSearchState: DiscoverSavedSearchContainer;
/**
* Service for handling search sessions
*/
searchSessionManager: DiscoverSearchSessionManager;
/**
- * Data fetching related state
- **/
- dataState: DiscoverDataStateContainer;
- /**
- * functions executed by UI
+ * Complex functions to update multiple containers from UI
*/
actions: {
/**
- * Pause the auto refresh interval without pushing an entry to history
+ * Triggers fetching of new data from Elasticsearch
+ * If initial is true, when SEARCH_ON_PAGE_LOAD_SETTING is set to false and it's a new saved search no fetch is triggered
+ * @param initial
*/
- pauseAutoRefreshInterval: () => Promise;
- /**
- * Set the currently selected data view
- */
- setDataView: (dataView: DataView) => void;
+ fetchData: (initial?: boolean) => void;
/**
- * Load the data view of the given id
- * A fallback data view is returned, given there's no match
- * This is usually the default data view
- * @param dataViewId
- * @param savedSearch
+ * Initializing state containers and start subscribing to changes triggering e.g. data fetching
*/
- loadAndResolveDataView: (
- dataViewId: string,
- savedSearch: SavedSearch
- ) => Promise<{ fallback: boolean; dataView: DataView }>;
+ initializeAndSync: () => () => void;
/**
* Load current list of data views, add them to internal state
*/
loadDataViewList: () => Promise;
/**
- * Set new adhoc data view list
+ * Load a saved search by id or create a new one that's not persisted yet
+ * @param LoadParams - optional parameters to load a saved search
*/
- setAdHocDataViews: (dataViews: DataView[]) => void;
+ loadSavedSearch: (param?: LoadParams) => Promise;
/**
- * Append a given ad-hoc data views to the list of ad-hoc data view
+ * Create and select a temporary/adhoc data view by a given index pattern
+ * Used by the Data View Picker
+ * @param pattern
*/
- appendAdHocDataViews: (dataViews: DataView | DataView[]) => void;
+ onCreateDefaultAdHocDataView: (pattern: string) => Promise;
/**
- * Remove the ad-hoc data view of the given id from the list of ad-hoc data view
- * @param id
+ * Triggered when a new data view is created
+ * @param dataView
+ */
+ onDataViewCreated: (dataView: DataView) => Promise;
+ /**
+ * Triggered when a new data view is edited
+ * @param dataView
+ */
+ onDataViewEdited: (dataView: DataView) => Promise;
+ /**
+ * Triggered when a saved search is opened in the savedObject finder
+ * @param savedSearchId
+ */
+ onOpenSavedSearch: (savedSearchId: string) => void;
+ /**
+ * Triggered when the unified search bar query is updated
+ * @param payload
+ * @param isUpdate
+ */
+ onUpdateQuery: (
+ payload: { dateRange: TimeRange; query?: Query | AggregateQuery },
+ isUpdate?: boolean
+ ) => void;
+ /**
+ * Triggered when the user selects a different data view in the data view picker
+ * @param id - id of the data view
*/
- removeAdHocDataViewById: (id: string) => void;
+ onChangeDataView: (id: string) => Promise;
/**
- * Replace the data view of the given id with the given data view
- * Used when the spec of a data view changed to prevent duplicates
- * @param id
+ * Triggered when an ad-hoc data view is persisted to allow sharing links and CSV
+ * @param dataView
+ */
+ persistAdHocDataView: (dataView: DataView) => Promise;
+ /**
+ * Set the currently selected data view
* @param dataView
*/
- replaceAdHocDataViewWithId: (id: string, dataView: DataView) => void;
+ setDataView: (dataView: DataView) => void;
+ /**
+ * Undo changes made to the saved search, e.g. when the user triggers the "Reset search" button
+ */
+ undoSavedSearchChanges: () => void;
/**
- * Initialize state with filters and query, start state syncing
+ * When saving a saved search with an ad hoc data view, a new id needs to be generated for the data view
+ * This is to prevent duplicate ids messing with our system
*/
- initializeAndSync: (
- dataView: DataView,
- filterManager: FilterManager,
- data: DataPublicPluginStart
- ) => () => void;
+ updateAdHocDataViewId: () => void;
};
}
@@ -137,11 +197,13 @@ export interface DiscoverStateContainer {
*/
export function getDiscoverStateContainer({
history,
- savedSearch,
services,
}: DiscoverStateContainerParams): DiscoverStateContainer {
const storeInSessionStorage = services.uiSettings.get('state:storeInSessionStorage');
const toasts = services.core.notifications.toasts;
+ /**
+ * state storage for state in the URL
+ */
const stateStorage = createKbnUrlStateStorage({
useHash: storeInSessionStorage,
history,
@@ -156,78 +218,257 @@ export function getDiscoverStateContainer({
session: services.data.search.session,
});
/**
- * App State Container, synced with URL
+ * Saved Search State Container, the persisted saved object of Discover
*/
- const appStateContainer = getDiscoverAppStateContainer({ stateStorage, savedSearch, services });
+ const savedSearchContainer = getSavedSearchContainer({
+ services,
+ });
+ /**
+ * App State Container, synced with the _a part URL
+ */
+ const appStateContainer = getDiscoverAppStateContainer({
+ stateStorage,
+ savedSearch: savedSearchContainer.getState(),
+ services,
+ });
+ /**
+ * Internal State Container, state that's not persisted and not part of the URL
+ */
const internalStateContainer = getInternalStateContainer();
- const pauseAutoRefreshInterval = async () => {
- const state = stateStorage.get(GLOBAL_STATE_URL_KEY);
- if (state?.refreshInterval && !state.refreshInterval.pause) {
- await stateStorage.set(
- GLOBAL_STATE_URL_KEY,
- { ...state, refreshInterval: { ...state?.refreshInterval, pause: true } },
- { replace: true }
- );
- }
- };
-
const dataStateContainer = getDataStateContainer({
services,
searchSessionManager,
getAppState: appStateContainer.getState,
- getSavedSearch: () => {
- // Simulating the behavior of the removed hook to always create a clean searchSource child that
- // we then use to add query, filters, etc., will be removed soon.
- return { ...savedSearch, searchSource: savedSearch.searchSource.createChild() };
- },
- appStateContainer,
+ getSavedSearch: savedSearchContainer.getState,
});
+
+ const pauseAutoRefreshInterval = async (dataView: DataView) => {
+ if (dataView && (!dataView.isTimeBased() || dataView.type === DataViewType.ROLLUP)) {
+ const state = stateStorage.get(GLOBAL_STATE_URL_KEY);
+ if (state?.refreshInterval && !state.refreshInterval.pause) {
+ await stateStorage.set(
+ GLOBAL_STATE_URL_KEY,
+ { ...state, refreshInterval: { ...state?.refreshInterval, pause: true } },
+ { replace: true }
+ );
+ }
+ }
+ };
+
const setDataView = (dataView: DataView) => {
internalStateContainer.transitions.setDataView(dataView);
+ pauseAutoRefreshInterval(dataView);
+ savedSearchContainer.getState().searchSource.setField('index', dataView);
};
- const setAdHocDataViews = (dataViews: DataView[]) =>
- internalStateContainer.transitions.setAdHocDataViews(dataViews);
- const appendAdHocDataViews = (dataViews: DataView | DataView[]) =>
- internalStateContainer.transitions.appendAdHocDataViews(dataViews);
- const replaceAdHocDataViewWithId = (id: string, dataView: DataView) =>
- internalStateContainer.transitions.replaceAdHocDataViewWithId(id, dataView);
- const removeAdHocDataViewById = (id: string) =>
- internalStateContainer.transitions.removeAdHocDataViewById(id);
const loadDataViewList = async () => {
const dataViewList = await services.dataViews.getIdsWithTitle(true);
internalStateContainer.transitions.setSavedDataViews(dataViewList);
};
- const loadAndResolveDataView = async (id: string, actualSavedSearch: SavedSearch) => {
- const nextDataViewData = await loadDataView(services.dataViews, services.uiSettings, id);
- const nextDataView = resolveDataView(
- nextDataViewData,
- actualSavedSearch.searchSource,
- services.toastNotifications
+ /**
+ * When saving a saved search with an ad hoc data view, a new id needs to be generated for the data view
+ * This is to prevent duplicate ids messing with our system
+ */
+ const updateAdHocDataViewId = async () => {
+ const prevDataView = internalStateContainer.getState().dataView;
+ if (!prevDataView || prevDataView.isPersisted()) return;
+ const newDataView = await services.dataViews.create({ ...prevDataView.toSpec(), id: uuidv4() });
+ services.dataViews.clearInstanceCache(prevDataView.id);
+
+ updateFiltersReferences(prevDataView, newDataView);
+
+ internalStateContainer.transitions.replaceAdHocDataViewWithId(prevDataView.id!, newDataView);
+ await appStateContainer.replaceUrlState({ index: newDataView.id });
+ const trackingEnabled = Boolean(newDataView.isPersisted() || savedSearchContainer.getId());
+ getUrlTracker().setTrackingEnabled(trackingEnabled);
+
+ return newDataView;
+ };
+
+ const onOpenSavedSearch = async (newSavedSearchId: string) => {
+ addLog('[discoverState] onOpenSavedSearch', newSavedSearchId);
+ const currentSavedSearch = savedSearchContainer.getState();
+ if (currentSavedSearch.id && currentSavedSearch.id === newSavedSearchId) {
+ addLog('[discoverState] undo changes since saved search did not change');
+ await undoSavedSearchChanges();
+ } else {
+ addLog('[discoverState] onOpenSavedSearch open view URL');
+ history.push(`/view/${encodeURIComponent(newSavedSearchId)}`);
+ }
+ };
+
+ const onDataViewCreated = async (nextDataView: DataView) => {
+ if (!nextDataView.isPersisted()) {
+ internalStateContainer.transitions.appendAdHocDataViews(nextDataView);
+ } else {
+ await loadDataViewList();
+ }
+ if (nextDataView.id) {
+ await onChangeDataView(nextDataView);
+ }
+ };
+
+ const onDataViewEdited = async (editedDataView: DataView) => {
+ if (editedDataView.isPersisted()) {
+ // Clear the current data view from the cache and create a new instance
+ // of it, ensuring we have a new object reference to trigger a re-render
+ services.dataViews.clearInstanceCache(editedDataView.id);
+ setDataView(await services.dataViews.create(editedDataView.toSpec(), true));
+ } else {
+ await updateAdHocDataViewId();
+ }
+ loadDataViewList();
+ fetchData();
+ };
+
+ const persistAdHocDataView = async (adHocDataView: DataView) => {
+ const persistedDataView = await services.dataViews.createAndSave({
+ ...adHocDataView.toSpec(),
+ id: uuidv4(),
+ });
+ services.dataViews.clearInstanceCache(adHocDataView.id);
+ updateFiltersReferences(adHocDataView, persistedDataView);
+ internalStateContainer.transitions.removeAdHocDataViewById(adHocDataView.id!);
+ await appStateContainer.update({ index: persistedDataView.id }, true);
+ return persistedDataView;
+ };
+
+ const loadSavedSearch = async (params?: LoadParams): Promise => {
+ return loadSavedSearchFn(params ?? {}, {
+ appStateContainer,
+ dataStateContainer,
+ internalStateContainer,
+ savedSearchContainer,
+ services,
+ setDataView,
+ });
+ };
+
+ /**
+ * state containers initializing and subscribing to changes triggering e.g. data fetching
+ */
+ const initializeAndSync = () => {
+ // initialize app state container, syncing with _g and _a part of the URL
+ const appStateInitAndSyncUnsubscribe = appStateContainer.initAndSync(
+ savedSearchContainer.getState()
);
- return { fallback: !nextDataViewData.stateValFound, dataView: nextDataView };
+ // subscribing to state changes of appStateContainer, triggering data fetching
+ const appStateUnsubscribe = appStateContainer.subscribe(
+ buildStateSubscribe({
+ appState: appStateContainer,
+ savedSearchState: savedSearchContainer,
+ dataState: dataStateContainer,
+ internalState: internalStateContainer,
+ services,
+ setDataView,
+ })
+ );
+ // start subscribing to dataStateContainer, triggering data fetching
+ const unsubscribeData = dataStateContainer.subscribe();
+
+ // updates saved search when query or filters change, triggers data fetching
+ const filterUnsubscribe = merge(
+ services.data.query.queryString.getUpdates$(),
+ services.filterManager.getFetches$()
+ ).subscribe(async () => {
+ await savedSearchContainer.update({
+ nextDataView: internalStateContainer.getState().dataView,
+ nextState: appStateContainer.getState(),
+ useFilterAndQueryServices: true,
+ });
+ fetchData();
+ });
+
+ return () => {
+ unsubscribeData();
+ appStateUnsubscribe();
+ appStateInitAndSyncUnsubscribe();
+ filterUnsubscribe.unsubscribe();
+ };
+ };
+
+ const onCreateDefaultAdHocDataView = async (pattern: string) => {
+ const newDataView = await services.dataViews.create({
+ title: pattern,
+ });
+ if (newDataView.fields.getByName('@timestamp')?.type === 'date') {
+ newDataView.timeFieldName = '@timestamp';
+ }
+ internalStateContainer.transitions.appendAdHocDataViews(newDataView);
+
+ await onChangeDataView(newDataView);
+ };
+ /**
+ * Triggered when a user submits a query in the search bar
+ */
+ const onUpdateQuery = (
+ payload: { dateRange: TimeRange; query?: Query | AggregateQuery },
+ isUpdate?: boolean
+ ) => {
+ if (isUpdate === false) {
+ // remove the search session if the given query is not just updated
+ searchSessionManager.removeSearchSessionIdFromURL({ replace: false });
+ dataStateContainer.fetch();
+ }
+ };
+
+ /**
+ * Function e.g. triggered when user changes data view in the sidebar
+ */
+ const onChangeDataView = async (id: string | DataView) => {
+ await changeDataView(id, {
+ services,
+ internalState: internalStateContainer,
+ appState: appStateContainer,
+ });
+ };
+ /**
+ * Undo all changes to the current saved search
+ */
+ const undoSavedSearchChanges = async () => {
+ addLog('undoSavedSearchChanges');
+ const nextSavedSearch = savedSearchContainer.getInitial$().getValue();
+ await savedSearchContainer.set(nextSavedSearch);
+ restoreStateFromSavedSearch({
+ savedSearch: nextSavedSearch,
+ timefilter: services.timefilter,
+ });
+ const newAppState = getDefaultAppState(nextSavedSearch, services);
+ await appStateContainer.replaceUrlState(newAppState);
+ return nextSavedSearch;
+ };
+ const fetchData = (initial: boolean = false) => {
+ addLog('fetchData', { initial });
+ if (!initial || dataStateContainer.getInitialFetchStatus() === FetchStatus.LOADING) {
+ dataStateContainer.fetch();
+ }
};
- const initializeAndSync = () => appStateContainer.initAndSync(savedSearch);
return {
kbnUrlStateStorage: stateStorage,
appState: appStateContainer,
internalState: internalStateContainer,
dataState: dataStateContainer,
+ savedSearchState: savedSearchContainer,
searchSessionManager,
actions: {
- pauseAutoRefreshInterval,
- setDataView,
- loadAndResolveDataView,
- loadDataViewList,
- setAdHocDataViews,
- appendAdHocDataViews,
- replaceAdHocDataViewWithId,
- removeAdHocDataViewById,
initializeAndSync,
+ fetchData,
+ loadDataViewList,
+ loadSavedSearch,
+ onChangeDataView,
+ onCreateDefaultAdHocDataView,
+ onDataViewCreated,
+ onDataViewEdited,
+ onOpenSavedSearch,
+ onUpdateQuery,
+ persistAdHocDataView,
+ setDataView,
+ undoSavedSearchChanges,
+ updateAdHocDataViewId,
},
};
}
diff --git a/src/plugins/discover/public/application/main/services/discover_state_provider.tsx b/src/plugins/discover/public/application/main/services/discover_state_provider.tsx
index 8cfdc45207ec7..70044385a1338 100644
--- a/src/plugins/discover/public/application/main/services/discover_state_provider.tsx
+++ b/src/plugins/discover/public/application/main/services/discover_state_provider.tsx
@@ -6,19 +6,42 @@
* Side Public License, v 1.
*/
-import React from 'react';
+import React, { useContext } from 'react';
+import useObservable from 'react-use/lib/useObservable';
+import { SavedSearch } from '@kbn/saved-search-plugin/public';
import { InternalStateProvider } from './discover_internal_state_container';
import { DiscoverAppStateProvider } from './discover_app_state_container';
import { DiscoverStateContainer } from './discover_state';
function createStateHelpers() {
const context = React.createContext(null);
+ const useContainer = () => useContext(context);
+ const useSavedSearch = () => {
+ const container = useContainer();
+ return useObservable(
+ container!.savedSearchState.getCurrent$(),
+ container!.savedSearchState.getCurrent$().getValue()
+ );
+ };
+ const useSavedSearchInitial = () => {
+ const container = useContainer();
+ return useObservable(
+ container!.savedSearchState.getInitial$(),
+ container!.savedSearchState.getInitial$().getValue()
+ );
+ };
return {
Provider: context.Provider,
+ useSavedSearch,
+ useSavedSearchInitial,
};
}
-export const { Provider: DiscoverStateProvider } = createStateHelpers();
+export const {
+ Provider: DiscoverStateProvider,
+ useSavedSearchInitial,
+ useSavedSearch,
+} = createStateHelpers();
export const DiscoverMainProvider = ({
value,
diff --git a/src/plugins/discover/public/application/main/services/load_saved_search.ts b/src/plugins/discover/public/application/main/services/load_saved_search.ts
new file mode 100644
index 0000000000000..5bae488754322
--- /dev/null
+++ b/src/plugins/discover/public/application/main/services/load_saved_search.ts
@@ -0,0 +1,165 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import type { SavedSearch } from '@kbn/saved-search-plugin/public';
+import { cloneDeep, isEqual } from 'lodash';
+import { isTextBasedQuery } from '../utils/is_text_based_query';
+import { loadAndResolveDataView } from '../utils/resolve_data_view';
+import { DiscoverInternalStateContainer } from './discover_internal_state_container';
+import { DiscoverDataStateContainer } from './discover_data_state_container';
+import { cleanupUrlState } from '../utils/cleanup_url_state';
+import { getValidFilters } from '../../../utils/get_valid_filters';
+import { DiscoverStateContainer, LoadParams } from './discover_state';
+import { addLog } from '../../../utils/add_log';
+import { DiscoverSavedSearchContainer } from './discover_saved_search_container';
+import {
+ DiscoverAppState,
+ DiscoverAppStateContainer,
+ getInitialState,
+} from './discover_app_state_container';
+import { DiscoverServices } from '../../../build_services';
+
+interface LoadSavedSearchDeps {
+ appStateContainer: DiscoverAppStateContainer;
+ dataStateContainer: DiscoverDataStateContainer;
+ internalStateContainer: DiscoverInternalStateContainer;
+ savedSearchContainer: DiscoverSavedSearchContainer;
+ services: DiscoverServices;
+ setDataView: DiscoverStateContainer['actions']['setDataView'];
+}
+
+/**
+ * Loading persisted saved searches or existing ones and updating services accordingly
+ * @param params
+ * @param deps
+ */
+export const loadSavedSearch = async (
+ params: LoadParams,
+ deps: LoadSavedSearchDeps
+): Promise => {
+ addLog('[discoverState] loadSavedSearch');
+ const { savedSearchId, useAppState } = params ?? {};
+ const { appStateContainer, internalStateContainer, savedSearchContainer, services } = deps;
+ const appState = useAppState ? appStateContainer.getState() : undefined;
+
+ // Loading the saved search or creating a new one
+ let nextSavedSearch = savedSearchId
+ ? await savedSearchContainer.load(savedSearchId)
+ : await savedSearchContainer.new(
+ await getStateDataView(params, { services, appState, internalStateContainer })
+ );
+
+ // Cleaning up the previous state
+ services.filterManager.setAppFilters([]);
+ services.data.query.queryString.clearQuery();
+ if (!useAppState) {
+ appStateContainer.set({});
+ }
+
+ // Update saved search by a given app state (in URL)
+ if (appState) {
+ if (savedSearchId && appState.index) {
+ // This is for the case appState is overwriting the loaded saved search data view
+ const savedSearchDataViewId = nextSavedSearch.searchSource.getField('index')?.id;
+ const stateDataView = await getStateDataView(params, {
+ services,
+ appState,
+ internalStateContainer,
+ savedSearch: nextSavedSearch,
+ });
+ const dataViewDifferentToAppState = stateDataView.id !== savedSearchDataViewId;
+ if (stateDataView && (dataViewDifferentToAppState || !savedSearchDataViewId)) {
+ nextSavedSearch.searchSource.setField('index', stateDataView);
+ }
+ }
+ nextSavedSearch = savedSearchContainer.update({
+ nextDataView: nextSavedSearch.searchSource.getField('index'),
+ nextState: appState,
+ });
+ }
+
+ // Update app state container with the next state derived from the next saved search
+ const nextAppState = getInitialState(undefined, nextSavedSearch, services);
+ appStateContainer.set(
+ appState ? { ...nextAppState, ...cleanupUrlState({ ...appState }) } : nextAppState
+ );
+
+ // Update all other services and state containers by the next saved search
+ updateBySavedSearch(nextSavedSearch, deps);
+ return nextSavedSearch;
+};
+
+/**
+ * Update services and state containers based on the given saved search
+ * @param savedSearch
+ * @param deps
+ */
+function updateBySavedSearch(savedSearch: SavedSearch, deps: LoadSavedSearchDeps) {
+ const { dataStateContainer, internalStateContainer, services, setDataView } = deps;
+ const savedSearchDataView = savedSearch.searchSource.getField('index')!;
+
+ setDataView(savedSearchDataView);
+ if (!savedSearchDataView.isPersisted()) {
+ internalStateContainer.transitions.appendAdHocDataViews(savedSearchDataView);
+ }
+
+ // Finally notify dataStateContainer, data.query and filterManager about new derived state
+ dataStateContainer.reset(savedSearch);
+ // set data service filters
+ const filters = savedSearch.searchSource.getField('filter');
+ if (Array.isArray(filters) && filters.length) {
+ services.data.query.filterManager.setAppFilters(cloneDeep(filters));
+ }
+ // some filters may not be valid for this context, so update
+ // the filter manager with a modified list of valid filters
+ const currentFilters = services.filterManager.getFilters();
+ const validFilters = getValidFilters(savedSearchDataView, currentFilters);
+ if (!isEqual(currentFilters, validFilters)) {
+ services.filterManager.setFilters(validFilters);
+ }
+ // set data service query
+ const query = savedSearch.searchSource.getField('query');
+ if (query) {
+ services.data.query.queryString.setQuery(query);
+ }
+}
+
+// Get the data view to actually use. There are several conditions to consider which data view is used
+// 1. If a data view is passed in, use that
+// 2. If an appState with index set is passed in, use the data view from that
+// 3. If a saved search is passed in, use the data view from that
+// And provide a fallback data view if 2. or 3. don't exist, were deleted or invalid
+const getStateDataView = async (
+ params: LoadParams,
+ {
+ savedSearch,
+ appState,
+ services,
+ internalStateContainer,
+ }: {
+ savedSearch?: SavedSearch;
+ appState?: DiscoverAppState;
+ services: DiscoverServices;
+ internalStateContainer: DiscoverInternalStateContainer;
+ }
+) => {
+ const { dataView, dataViewSpec } = params ?? {};
+ if (dataView) {
+ return dataView;
+ }
+
+ const result = await loadAndResolveDataView(
+ {
+ id: appState?.index,
+ dataViewSpec,
+ savedSearch,
+ isTextBasedQuery: isTextBasedQuery(appState?.query),
+ },
+ { services, internalStateContainer }
+ );
+ return result.dataView;
+};
diff --git a/src/plugins/discover/public/application/main/utils/fetch_all.test.ts b/src/plugins/discover/public/application/main/utils/fetch_all.test.ts
index 25e45f9470502..3d64177571ee1 100644
--- a/src/plugins/discover/public/application/main/utils/fetch_all.test.ts
+++ b/src/plugins/discover/public/application/main/utils/fetch_all.test.ts
@@ -11,7 +11,6 @@ import { reduce } from 'rxjs/operators';
import { SearchSource } from '@kbn/data-plugin/public';
import { RequestAdapter } from '@kbn/inspector-plugin/common';
import { savedSearchMock } from '../../../__mocks__/saved_search';
-import { ReduxLikeStateContainer } from '@kbn/kibana-utils-plugin/common';
import { discoverServiceMock } from '../../../__mocks__/services';
import { fetchAll } from './fetch_all';
import {
@@ -26,8 +25,6 @@ import { fetchDocuments } from './fetch_documents';
import { fetchSql } from './fetch_sql';
import { buildDataTableRecord } from '../../../utils/build_data_record';
import { dataViewMock } from '../../../__mocks__/data_view';
-import { DiscoverAppState } from '../services/discover_app_state_container';
-
jest.mock('./fetch_documents', () => ({
fetchDocuments: jest.fn().mockResolvedValue([]),
}));
@@ -54,7 +51,7 @@ const waitForNextTick = () => new Promise((resolve) => setTimeout(resolve, 0));
describe('test fetchAll', () => {
let subjects: SavedSearchData;
- let deps: Parameters[3];
+ let deps: Parameters[2];
let searchSource: SearchSource;
beforeEach(() => {
subjects = {
@@ -65,22 +62,21 @@ describe('test fetchAll', () => {
fetchStatus: FetchStatus.UNINITIALIZED,
}),
};
+ searchSource = savedSearchMock.searchSource.createChild();
+
deps = {
- appStateContainer: {
- getState: () => {
- return { interval: 'auto' };
- },
- } as ReduxLikeStateContainer,
abortController: new AbortController(),
- data: discoverServiceMock.data,
inspectorAdapters: { requests: new RequestAdapter() },
+ getAppState: () => ({}),
searchSessionId: '123',
initialFetchStatus: FetchStatus.UNINITIALIZED,
useNewFieldsApi: true,
- savedSearch: savedSearchMock,
+ savedSearch: {
+ ...savedSearchMock,
+ searchSource,
+ },
services: discoverServiceMock,
};
- searchSource = savedSearchMock.searchSource.createChild();
mockFetchDocuments.mockReset().mockResolvedValue({ records: [] });
mockFetchSQL.mockReset().mockResolvedValue({ records: [] });
@@ -91,7 +87,7 @@ describe('test fetchAll', () => {
subjects.main$.subscribe((value) => stateArr.push(value.fetchStatus));
- fetchAll(subjects, searchSource, false, deps);
+ fetchAll(subjects, false, deps);
await waitForNextTick();
expect(stateArr).toEqual([
@@ -109,7 +105,7 @@ describe('test fetchAll', () => {
];
const documents = hits.map((hit) => buildDataTableRecord(hit, dataViewMock));
mockFetchDocuments.mockResolvedValue({ records: documents });
- fetchAll(subjects, searchSource, false, deps);
+ fetchAll(subjects, false, deps);
await waitForNextTick();
expect(await collect()).toEqual([
{ fetchStatus: FetchStatus.UNINITIALIZED },
@@ -136,7 +132,7 @@ describe('test fetchAll', () => {
fetchStatus: FetchStatus.LOADING,
recordRawType: RecordRawType.DOCUMENT,
});
- fetchAll(subjects, searchSource, false, deps);
+ fetchAll(subjects, false, deps);
await waitForNextTick();
subjects.totalHits$.next({
fetchStatus: FetchStatus.COMPLETE,
@@ -159,7 +155,7 @@ describe('test fetchAll', () => {
fetchStatus: FetchStatus.LOADING,
recordRawType: RecordRawType.DOCUMENT,
});
- fetchAll(subjects, searchSource, false, deps);
+ fetchAll(subjects, false, deps);
await waitForNextTick();
subjects.totalHits$.next({
fetchStatus: FetchStatus.COMPLETE,
@@ -186,7 +182,7 @@ describe('test fetchAll', () => {
fetchStatus: FetchStatus.LOADING,
recordRawType: RecordRawType.DOCUMENT,
});
- fetchAll(subjects, searchSource, false, deps);
+ fetchAll(subjects, false, deps);
await waitForNextTick();
subjects.totalHits$.next({
fetchStatus: FetchStatus.ERROR,
@@ -221,7 +217,7 @@ describe('test fetchAll', () => {
fetchStatus: FetchStatus.LOADING,
recordRawType: RecordRawType.DOCUMENT,
});
- fetchAll(subjects, searchSource, false, deps);
+ fetchAll(subjects, false, deps);
await waitForNextTick();
subjects.totalHits$.next({
fetchStatus: FetchStatus.COMPLETE,
@@ -254,21 +250,16 @@ describe('test fetchAll', () => {
});
const query = { sql: 'SELECT * from foo' };
deps = {
- appStateContainer: {
- getState: () => {
- return { interval: 'auto', query };
- },
- } as unknown as ReduxLikeStateContainer,
abortController: new AbortController(),
- data: discoverServiceMock.data,
inspectorAdapters: { requests: new RequestAdapter() },
searchSessionId: '123',
initialFetchStatus: FetchStatus.UNINITIALIZED,
useNewFieldsApi: true,
savedSearch: savedSearchMock,
services: discoverServiceMock,
+ getAppState: () => ({ query }),
};
- fetchAll(subjects, searchSource, false, deps);
+ fetchAll(subjects, false, deps);
await waitForNextTick();
expect(await collect()).toEqual([
diff --git a/src/plugins/discover/public/application/main/utils/fetch_all.ts b/src/plugins/discover/public/application/main/utils/fetch_all.ts
index 6ca474eb2dd41..f69399ab1d2bf 100644
--- a/src/plugins/discover/public/application/main/utils/fetch_all.ts
+++ b/src/plugins/discover/public/application/main/utils/fetch_all.ts
@@ -5,12 +5,11 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
-import { DataPublicPluginStart, ISearchSource } from '@kbn/data-plugin/public';
import { Adapters } from '@kbn/inspector-plugin/common';
-import { ReduxLikeStateContainer } from '@kbn/kibana-utils-plugin/common';
import type { SavedSearch, SortOrder } from '@kbn/saved-search-plugin/public';
import { BehaviorSubject, filter, firstValueFrom, map, merge, scan } from 'rxjs';
import { DiscoverAppState } from '../services/discover_app_state_container';
+import { updateVolatileSearchSource } from './update_search_source';
import { getRawRecordType } from './get_raw_record_type';
import {
checkHitCount,
@@ -20,7 +19,6 @@ import {
sendLoadingMsg,
sendResetMsg,
} from '../hooks/use_saved_search_messages';
-import { updateSearchSource } from './update_search_source';
import { fetchDocuments } from './fetch_documents';
import { FetchStatus } from '../../types';
import { DataMsg, RecordRawType, SavedSearchData } from '../services/discover_data_state_container';
@@ -29,8 +27,7 @@ import { fetchSql } from './fetch_sql';
export interface FetchDeps {
abortController: AbortController;
- appStateContainer: ReduxLikeStateContainer;
- data: DataPublicPluginStart;
+ getAppState: () => DiscoverAppState;
initialFetchStatus: FetchStatus;
inspectorAdapters: Adapters;
savedSearch: SavedSearch;
@@ -48,35 +45,28 @@ export interface FetchDeps {
*/
export function fetchAll(
dataSubjects: SavedSearchData,
- searchSource: ISearchSource,
reset = false,
fetchDeps: FetchDeps
): Promise {
- const {
- initialFetchStatus,
- appStateContainer,
- services,
- useNewFieldsApi,
- data,
- inspectorAdapters,
- } = fetchDeps;
+ const { initialFetchStatus, getAppState, services, inspectorAdapters, savedSearch } = fetchDeps;
+ const { data } = services;
+ const searchSource = savedSearch.searchSource.createChild();
try {
const dataView = searchSource.getField('index')!;
+ const query = getAppState().query;
+ const recordRawType = getRawRecordType(query);
if (reset) {
- sendResetMsg(dataSubjects, initialFetchStatus);
+ sendResetMsg(dataSubjects, initialFetchStatus, recordRawType);
}
- const { sort, query } = appStateContainer.getState();
- const recordRawType = getRawRecordType(query);
const useSql = recordRawType === RecordRawType.PLAIN;
if (recordRawType === RecordRawType.DOCUMENT) {
// Update the base searchSource, base for all child fetches
- updateSearchSource(searchSource, false, {
+ updateVolatileSearchSource(searchSource, {
dataView,
services,
- sort: sort as SortOrder[],
- useNewFieldsApi,
+ sort: getAppState().sort as SortOrder[],
});
}
@@ -89,7 +79,7 @@ export function fetchAll(
const response =
useSql && query
? fetchSql(query, dataView, data, services.expressions, inspectorAdapters)
- : fetchDocuments(searchSource.createCopy(), fetchDeps);
+ : fetchDocuments(searchSource, fetchDeps);
// Handle results of the individual queries and forward the results to the corresponding dataSubjects
response
diff --git a/src/plugins/discover/public/application/main/utils/get_fetch_observable.ts b/src/plugins/discover/public/application/main/utils/get_fetch_observable.ts
index 71490f05ac6ce..e19b17dad0489 100644
--- a/src/plugins/discover/public/application/main/utils/get_fetch_observable.ts
+++ b/src/plugins/discover/public/application/main/utils/get_fetch_observable.ts
@@ -35,10 +35,8 @@ export function getFetch$({
searchSource: ISearchSource;
}) {
const { timefilter } = data.query.timefilter;
- const { filterManager } = data.query;
return merge(
refetch$,
- filterManager.getFetches$(),
timefilter.getFetch$(),
timefilter.getAutoRefreshFetch$().pipe(
tap((done) => {
diff --git a/src/plugins/discover/public/application/main/utils/persist_saved_search.ts b/src/plugins/discover/public/application/main/utils/persist_saved_search.ts
deleted file mode 100644
index ec26ad7d5880c..0000000000000
--- a/src/plugins/discover/public/application/main/utils/persist_saved_search.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
- * in compliance with, at your election, the Elastic License 2.0 or the Server
- * Side Public License, v 1.
- */
-import { isOfAggregateQueryType } from '@kbn/es-query';
-import { DataView } from '@kbn/data-views-plugin/public';
-import { SavedObjectSaveOpts } from '@kbn/saved-objects-plugin/public';
-import { SavedSearch, SortOrder, saveSavedSearch } from '@kbn/saved-search-plugin/public';
-import { DiscoverAppState } from '../services/discover_app_state_container';
-import { updateSearchSource } from './update_search_source';
-import { DiscoverServices } from '../../../build_services';
-/**
- * Helper function to update and persist the given savedSearch
- */
-export async function persistSavedSearch(
- savedSearch: SavedSearch,
- {
- dataView,
- onError,
- onSuccess,
- services,
- saveOptions,
- state,
- }: {
- dataView: DataView;
- onError: (error: Error, savedSearch: SavedSearch) => void;
- onSuccess: (id: string) => void;
- saveOptions: SavedObjectSaveOpts;
- services: DiscoverServices;
- state: DiscoverAppState;
- }
-) {
- updateSearchSource(savedSearch.searchSource, true, {
- dataView,
- services,
- sort: state.sort as SortOrder[],
- useNewFieldsApi: false,
- });
-
- savedSearch.columns = state.columns || [];
- savedSearch.sort = (state.sort as SortOrder[]) || [];
- if (state.grid) {
- savedSearch.grid = state.grid;
- }
- if (typeof state.hideChart !== 'undefined') {
- savedSearch.hideChart = state.hideChart;
- }
- if (typeof state.rowHeight !== 'undefined') {
- savedSearch.rowHeight = state.rowHeight;
- }
-
- if (state.viewMode) {
- savedSearch.viewMode = state.viewMode;
- }
-
- if (typeof state.breakdownField !== 'undefined') {
- savedSearch.breakdownField = state.breakdownField;
- } else if (savedSearch.breakdownField) {
- savedSearch.breakdownField = '';
- }
-
- if (state.hideAggregatedPreview) {
- savedSearch.hideAggregatedPreview = state.hideAggregatedPreview;
- }
-
- // add a flag here to identify text based language queries
- // these should be filtered out from the visualize editor
- const isTextBasedQuery = state.query && isOfAggregateQueryType(state.query);
- if (savedSearch.isTextBasedQuery || isTextBasedQuery) {
- savedSearch.isTextBasedQuery = isTextBasedQuery;
- }
-
- savedSearch.usesAdHocDataView = !dataView.isPersisted();
-
- const { from, to } = services.timefilter.getTime();
- const refreshInterval = services.timefilter.getRefreshInterval();
- savedSearch.timeRange =
- savedSearch.timeRestore || savedSearch.timeRange
- ? {
- from,
- to,
- }
- : undefined;
- savedSearch.refreshInterval =
- savedSearch.timeRestore || savedSearch.refreshInterval
- ? { value: refreshInterval.value, pause: refreshInterval.pause }
- : undefined;
-
- try {
- const id = await saveSavedSearch(
- savedSearch,
- saveOptions,
- services.core.savedObjects.client,
- services.savedObjectsTagging
- );
- if (id) {
- onSuccess(id);
- }
- return { id };
- } catch (saveError) {
- onError(saveError, savedSearch);
- return { error: saveError };
- }
-}
diff --git a/src/plugins/discover/public/application/main/utils/resolve_data_view.test.ts b/src/plugins/discover/public/application/main/utils/resolve_data_view.test.ts
index f3db91d5ce40b..10e1780d233b8 100644
--- a/src/plugins/discover/public/application/main/utils/resolve_data_view.test.ts
+++ b/src/plugins/discover/public/application/main/utils/resolve_data_view.test.ts
@@ -7,23 +7,30 @@
*/
import { loadDataView } from './resolve_data_view';
-import { dataViewsMock } from '../../../__mocks__/data_views';
import { dataViewMock } from '../../../__mocks__/data_view';
-import { configMock } from '../../../__mocks__/config';
+import { discoverServiceMock as services } from '../../../__mocks__/services';
describe('Resolve data view tests', () => {
test('returns valid data for an existing data view', async () => {
- const dataViewId = 'the-data-view-id';
- const result = await loadDataView(dataViewsMock, configMock, dataViewId);
+ const id = 'the-data-view-id';
+ const result = await loadDataView({
+ id,
+ services,
+ dataViewList: [],
+ });
expect(result.loaded).toEqual(dataViewMock);
+ expect(result.stateVal).toEqual(id);
expect(result.stateValFound).toEqual(true);
- expect(result.stateVal).toEqual(dataViewId);
});
test('returns fallback data for an invalid data view', async () => {
- const dataViewId = 'invalid-id';
- const result = await loadDataView(dataViewsMock, configMock, dataViewId);
+ const id = 'invalid-id';
+ const result = await loadDataView({
+ id,
+ services,
+ dataViewList: [],
+ });
expect(result.loaded).toEqual(dataViewMock);
expect(result.stateValFound).toBe(false);
- expect(result.stateVal).toBe(dataViewId);
+ expect(result.stateVal).toBe(id);
});
});
diff --git a/src/plugins/discover/public/application/main/utils/resolve_data_view.ts b/src/plugins/discover/public/application/main/utils/resolve_data_view.ts
index 2584d9b7c8279..7a7884e6295ad 100644
--- a/src/plugins/discover/public/application/main/utils/resolve_data_view.ts
+++ b/src/plugins/discover/public/application/main/utils/resolve_data_view.ts
@@ -7,14 +7,11 @@
*/
import { i18n } from '@kbn/i18n';
-import type {
- DataView,
- DataViewListItem,
- DataViewsContract,
- DataViewSpec,
-} from '@kbn/data-views-plugin/public';
-import type { ISearchSource } from '@kbn/data-plugin/public';
-import type { IUiSettingsClient, ToastsStart } from '@kbn/core/public';
+import type { DataView, DataViewListItem, DataViewSpec } from '@kbn/data-views-plugin/public';
+import type { ToastsStart } from '@kbn/core/public';
+import { SavedSearch } from '@kbn/saved-search-plugin/public';
+import { DiscoverInternalStateContainer } from '../services/discover_internal_state_container';
+import { DiscoverServices } from '../../../build_services';
interface DataViewData {
/**
* List of existing data views
@@ -37,13 +34,19 @@ interface DataViewData {
/**
* Function to load the given data view by id, providing a fallback if it doesn't exist
*/
-export async function loadDataView(
- dataViews: DataViewsContract,
- config: IUiSettingsClient,
- id?: string,
- dataViewSpec?: DataViewSpec
-): Promise {
- const dataViewList = await dataViews.getIdsWithTitle();
+export async function loadDataView({
+ id,
+ dataViewSpec,
+ services,
+ dataViewList,
+}: {
+ id?: string;
+ dataViewSpec?: DataViewSpec;
+ services: DiscoverServices;
+ dataViewList: DataViewListItem[];
+}): Promise {
+ const { dataViews } = services;
+
let fetchId: string | undefined = id;
/**
@@ -97,25 +100,26 @@ export async function loadDataView(
// we can be certain that the data view exists due to an earlier hasData check
loaded: fetchedDataView || defaultDataView!,
stateVal: fetchId,
- stateValFound: !!fetchId && !!fetchedDataView,
+ stateValFound: Boolean(fetchId) && Boolean(fetchedDataView),
};
}
/**
- * Function used in the discover controller to message the user about the state of the current
- * data view
+ * Check if the given data view is valid, provide a fallback if it doesn't exist
+ * And message the user in this case with toast notifications
*/
export function resolveDataView(
ip: DataViewData,
- searchSource: ISearchSource,
+ savedSearch: SavedSearch | undefined,
toastNotifications: ToastsStart,
isTextBasedQuery?: boolean
) {
const { loaded: loadedDataView, stateVal, stateValFound } = ip;
- const ownDataView = searchSource.getOwnField('index');
+ const ownDataView = savedSearch?.searchSource.getField('index');
if (ownDataView && !stateVal) {
+ // the given saved search has its own data view, and no data view was specified in the URL
return ownDataView;
}
@@ -128,6 +132,7 @@ export function resolveDataView(
});
if (ownDataView) {
+ // the given data view in the URL was not found, but the saved search has its own data view
toastNotifications.addWarning({
title: warningTitle,
text: i18n.translate('discover.showingSavedDataViewWarningDescription', {
@@ -159,3 +164,39 @@ export function resolveDataView(
return loadedDataView;
}
+
+export const loadAndResolveDataView = async (
+ {
+ id,
+ dataViewSpec,
+ savedSearch,
+ isTextBasedQuery,
+ }: {
+ id?: string;
+ dataViewSpec?: DataViewSpec;
+ savedSearch?: SavedSearch;
+ isTextBasedQuery?: boolean;
+ },
+ {
+ internalStateContainer,
+ services,
+ }: { internalStateContainer: DiscoverInternalStateContainer; services: DiscoverServices }
+) => {
+ const { adHocDataViews, savedDataViews } = internalStateContainer.getState();
+ const adHocDataView = adHocDataViews.find((dataView) => dataView.id === id);
+ if (adHocDataView) return { fallback: false, dataView: adHocDataView };
+
+ const nextDataViewData = await loadDataView({
+ services,
+ id,
+ dataViewSpec,
+ dataViewList: savedDataViews,
+ });
+ const nextDataView = resolveDataView(
+ nextDataViewData,
+ savedSearch,
+ services.toastNotifications,
+ isTextBasedQuery
+ );
+ return { fallback: !nextDataViewData.stateValFound, dataView: nextDataView };
+};
diff --git a/src/plugins/discover/public/application/main/utils/update_saved_search.ts b/src/plugins/discover/public/application/main/utils/update_saved_search.ts
new file mode 100644
index 0000000000000..733bf5ed2a0b8
--- /dev/null
+++ b/src/plugins/discover/public/application/main/utils/update_saved_search.ts
@@ -0,0 +1,101 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import { SavedSearch, SortOrder } from '@kbn/saved-search-plugin/public';
+import { DataView } from '@kbn/data-views-plugin/common';
+import { cloneDeep } from 'lodash';
+import { isTextBasedQuery } from './is_text_based_query';
+import { DiscoverAppState } from '../services/discover_app_state_container';
+import { DiscoverServices } from '../../../build_services';
+
+/**
+ * Updates the saved search with a given data view & Appstate
+ * Is executed on every change of those, for making sure the saved search is
+ * up to date before fetching data and persisting or sharing
+ * @param savedSearch
+ * @param dataView
+ * @param state
+ * @param services
+ * @param useFilterAndQueryServices - when true data services are being used for updating filter + query
+ */
+export function updateSavedSearch(
+ {
+ savedSearch,
+ dataView,
+ state,
+ services,
+ }: {
+ savedSearch: SavedSearch;
+ dataView?: DataView;
+ state?: DiscoverAppState;
+ services: DiscoverServices;
+ },
+ useFilterAndQueryServices: boolean = false
+) {
+ if (dataView) {
+ savedSearch.searchSource.setField('index', dataView);
+ savedSearch.usesAdHocDataView = !dataView.isPersisted();
+ }
+ if (useFilterAndQueryServices) {
+ savedSearch.searchSource
+ .setField('query', services.data.query.queryString.getQuery())
+ .setField('filter', services.data.query.filterManager.getFilters());
+ } else if (state) {
+ savedSearch.searchSource
+ .setField('query', state.query ?? undefined)
+ .setField('filter', state.filters ? cloneDeep(state.filters) : []);
+ }
+ if (state) {
+ savedSearch.columns = state.columns || [];
+ savedSearch.sort = (state.sort as SortOrder[]) || [];
+ if (state.grid) {
+ savedSearch.grid = state.grid;
+ }
+ if (typeof state.hideChart !== 'undefined') {
+ savedSearch.hideChart = state.hideChart;
+ }
+ if (typeof state.rowHeight !== 'undefined') {
+ savedSearch.rowHeight = state.rowHeight;
+ }
+
+ if (state.viewMode) {
+ savedSearch.viewMode = state.viewMode;
+ }
+
+ if (typeof state.breakdownField !== 'undefined') {
+ savedSearch.breakdownField = state.breakdownField;
+ } else if (savedSearch.breakdownField) {
+ savedSearch.breakdownField = '';
+ }
+
+ if (state.hideAggregatedPreview) {
+ savedSearch.hideAggregatedPreview = state.hideAggregatedPreview;
+ }
+
+ // add a flag here to identify text based language queries
+ // these should be filtered out from the visualize editor
+ const isTextBasedQueryResult = isTextBasedQuery(state.query);
+ if (savedSearch.isTextBasedQuery || isTextBasedQueryResult) {
+ savedSearch.isTextBasedQuery = isTextBasedQueryResult;
+ }
+ }
+
+ const { from, to } = services.timefilter.getTime();
+ const refreshInterval = services.timefilter.getRefreshInterval();
+ savedSearch.timeRange =
+ savedSearch.timeRestore || savedSearch.timeRange
+ ? {
+ from,
+ to,
+ }
+ : undefined;
+ savedSearch.refreshInterval =
+ savedSearch.timeRestore || savedSearch.refreshInterval
+ ? { value: refreshInterval.value, pause: refreshInterval.pause }
+ : undefined;
+ return savedSearch;
+}
diff --git a/src/plugins/discover/public/application/main/utils/update_search_source.test.ts b/src/plugins/discover/public/application/main/utils/update_search_source.test.ts
index 5ab1dd962652f..cc09732161890 100644
--- a/src/plugins/discover/public/application/main/utils/update_search_source.test.ts
+++ b/src/plugins/discover/public/application/main/utils/update_search_source.test.ts
@@ -6,55 +6,51 @@
* Side Public License, v 1.
*/
-import { updateSearchSource } from './update_search_source';
+import { updateVolatileSearchSource } from './update_search_source';
import { createSearchSourceMock } from '@kbn/data-plugin/common/search/search_source/mocks';
import { dataViewMock } from '../../../__mocks__/data_view';
import type { SortOrder } from '@kbn/saved-search-plugin/public';
import { discoverServiceMock } from '../../../__mocks__/services';
+import { IUiSettingsClient } from '@kbn/core-ui-settings-browser';
-describe('updateSearchSource', () => {
+const getUiSettingsMock = (value: boolean) => {
+ return {
+ get: jest.fn(() => value),
+ } as unknown as IUiSettingsClient;
+};
+
+describe('updateVolatileSearchSource', () => {
test('updates a given search source', async () => {
- const persistentSearchSourceMock = createSearchSourceMock({});
- const volatileSearchSourceMock = createSearchSourceMock({});
- volatileSearchSourceMock.setParent(persistentSearchSourceMock);
- updateSearchSource(volatileSearchSourceMock, false, {
+ const searchSource = createSearchSourceMock({});
+ discoverServiceMock.uiSettings = getUiSettingsMock(true);
+ updateVolatileSearchSource(searchSource, {
dataView: dataViewMock,
services: discoverServiceMock,
sort: [] as SortOrder[],
- useNewFieldsApi: false,
});
- expect(persistentSearchSourceMock.getField('index')).toEqual(dataViewMock);
- expect(volatileSearchSourceMock.getField('fields')).toBe(undefined);
+ expect(searchSource.getField('fields')).toBe(undefined);
});
test('updates a given search source with the usage of the new fields api', async () => {
- const persistentSearchSourceMock = createSearchSourceMock({});
- const volatileSearchSourceMock = createSearchSourceMock({});
- volatileSearchSourceMock.setParent(persistentSearchSourceMock);
- updateSearchSource(volatileSearchSourceMock, false, {
+ const searchSource = createSearchSourceMock({});
+ discoverServiceMock.uiSettings = getUiSettingsMock(false);
+ updateVolatileSearchSource(searchSource, {
dataView: dataViewMock,
services: discoverServiceMock,
sort: [] as SortOrder[],
- useNewFieldsApi: true,
});
- expect(persistentSearchSourceMock.getField('index')).toEqual(dataViewMock);
- expect(volatileSearchSourceMock.getField('fields')).toEqual([
- { field: '*', include_unmapped: 'true' },
- ]);
- expect(volatileSearchSourceMock.getField('fieldsFromSource')).toBe(undefined);
+ expect(searchSource.getField('fields')).toEqual([{ field: '*', include_unmapped: 'true' }]);
+ expect(searchSource.getField('fieldsFromSource')).toBe(undefined);
});
test('updates a given search source when showUnmappedFields option is set to true', async () => {
- const persistentSearchSourceMock = createSearchSourceMock({});
const volatileSearchSourceMock = createSearchSourceMock({});
- volatileSearchSourceMock.setParent(persistentSearchSourceMock);
- updateSearchSource(volatileSearchSourceMock, false, {
+ discoverServiceMock.uiSettings = getUiSettingsMock(false);
+ updateVolatileSearchSource(volatileSearchSourceMock, {
dataView: dataViewMock,
services: discoverServiceMock,
sort: [] as SortOrder[],
- useNewFieldsApi: true,
});
- expect(persistentSearchSourceMock.getField('index')).toEqual(dataViewMock);
expect(volatileSearchSourceMock.getField('fields')).toEqual([
{ field: '*', include_unmapped: 'true' },
]);
@@ -62,16 +58,13 @@ describe('updateSearchSource', () => {
});
test('does not explicitly request fieldsFromSource when not using fields API', async () => {
- const persistentSearchSourceMock = createSearchSourceMock({});
const volatileSearchSourceMock = createSearchSourceMock({});
- volatileSearchSourceMock.setParent(persistentSearchSourceMock);
- updateSearchSource(volatileSearchSourceMock, false, {
+ discoverServiceMock.uiSettings = getUiSettingsMock(true);
+ updateVolatileSearchSource(volatileSearchSourceMock, {
dataView: dataViewMock,
services: discoverServiceMock,
sort: [] as SortOrder[],
- useNewFieldsApi: false,
});
- expect(persistentSearchSourceMock.getField('index')).toEqual(dataViewMock);
expect(volatileSearchSourceMock.getField('fields')).toEqual(undefined);
expect(volatileSearchSourceMock.getField('fieldsFromSource')).toBe(undefined);
});
diff --git a/src/plugins/discover/public/application/main/utils/update_search_source.ts b/src/plugins/discover/public/application/main/utils/update_search_source.ts
index 4966a66cf9687..4152b57a34a0f 100644
--- a/src/plugins/discover/public/application/main/utils/update_search_source.ts
+++ b/src/plugins/discover/public/application/main/utils/update_search_source.ts
@@ -9,58 +9,47 @@
import { ISearchSource } from '@kbn/data-plugin/public';
import { DataViewType, DataView } from '@kbn/data-views-plugin/public';
import type { SortOrder } from '@kbn/saved-search-plugin/public';
-import { SORT_DEFAULT_ORDER_SETTING } from '../../../../common';
+import { SEARCH_FIELDS_FROM_SOURCE, SORT_DEFAULT_ORDER_SETTING } from '../../../../common';
import { DiscoverServices } from '../../../build_services';
import { getSortForSearchSource } from '../../../utils/sorting';
/**
* Helper function to update the given searchSource before fetching/sharing/persisting
*/
-export function updateSearchSource(
+export function updateVolatileSearchSource(
searchSource: ISearchSource,
- persist = true,
{
dataView,
services,
sort,
- useNewFieldsApi,
}: {
dataView: DataView;
services: DiscoverServices;
- sort: SortOrder[];
- useNewFieldsApi: boolean;
+ sort?: SortOrder[];
}
) {
const { uiSettings, data } = services;
- const parentSearchSource = persist ? searchSource : searchSource.getParent()!;
-
- parentSearchSource
- .setField('index', dataView)
- .setField('query', data.query.queryString.getQuery() || null)
- .setField('filter', data.query.filterManager.getFilters());
-
- if (!persist) {
- const usedSort = getSortForSearchSource(
- sort,
- dataView,
- uiSettings.get(SORT_DEFAULT_ORDER_SETTING)
- );
- searchSource.setField('trackTotalHits', true).setField('sort', usedSort);
-
- if (dataView.type !== DataViewType.ROLLUP) {
- // Set the date range filter fields from timeFilter using the absolute format. Search sessions requires that it be converted from a relative range
- searchSource.setField('filter', data.query.timefilter.timefilter.createFilter(dataView));
- }
+ const usedSort = getSortForSearchSource(
+ sort,
+ dataView,
+ uiSettings.get(SORT_DEFAULT_ORDER_SETTING)
+ );
+ const useNewFieldsApi = !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE);
+ searchSource.setField('trackTotalHits', true).setField('sort', usedSort);
+
+ if (dataView.type !== DataViewType.ROLLUP) {
+ // Set the date range filter fields from timeFilter using the absolute format. Search sessions requires that it be converted from a relative range
+ searchSource.setField('filter', data.query.timefilter.timefilter.createFilter(dataView));
+ }
- if (useNewFieldsApi) {
- searchSource.removeField('fieldsFromSource');
- const fields: Record = { field: '*' };
+ if (useNewFieldsApi) {
+ searchSource.removeField('fieldsFromSource');
+ const fields: Record = { field: '*' };
- fields.include_unmapped = 'true';
+ fields.include_unmapped = 'true';
- searchSource.setField('fields', [fields]);
- } else {
- searchSource.removeField('fields');
- }
+ searchSource.setField('fields', [fields]);
+ } else {
+ searchSource.removeField('fields');
}
}
diff --git a/src/plugins/discover/public/hooks/use_confirm_persistence_prompt.ts b/src/plugins/discover/public/hooks/use_confirm_persistence_prompt.ts
index d5ea19c4316b3..17aeb5bbeea37 100644
--- a/src/plugins/discover/public/hooks/use_confirm_persistence_prompt.ts
+++ b/src/plugins/discover/public/hooks/use_confirm_persistence_prompt.ts
@@ -7,15 +7,12 @@
*/
import { useCallback } from 'react';
-import { v4 as uuidv4 } from 'uuid';
import { i18n } from '@kbn/i18n';
import type { DataView } from '@kbn/data-views-plugin/public';
import { SavedSearch } from '@kbn/saved-search-plugin/public';
import { useDiscoverServices } from './use_discover_services';
import { showConfirmPanel } from './show_confirm_panel';
-import { persistSavedSearch } from '../application/main/utils/persist_saved_search';
import { DiscoverStateContainer } from '../application/main/services/discover_state';
-import { updateFiltersReferences } from '../application/main/utils/update_filter_references';
export const useConfirmPersistencePrompt = (stateContainer: DiscoverStateContainer) => {
const services = useDiscoverServices();
@@ -23,16 +20,7 @@ export const useConfirmPersistencePrompt = (stateContainer: DiscoverStateContain
const persistDataView: (adHocDataView: DataView) => Promise = useCallback(
async (adHocDataView) => {
try {
- const persistedDataView = await services.dataViews.createAndSave({
- ...adHocDataView.toSpec(),
- id: uuidv4(),
- });
- services.dataViews.clearInstanceCache(adHocDataView.id);
-
- updateFiltersReferences(adHocDataView, persistedDataView);
-
- stateContainer.actions.removeAdHocDataViewById(adHocDataView.id!);
- await stateContainer.appState.update({ index: persistedDataView.id }, true);
+ const persistedDataView = await stateContainer.actions.persistAdHocDataView(adHocDataView);
const message = i18n.translate('discover.dataViewPersist.message', {
defaultMessage: "Saved '{dataViewName}'",
@@ -50,7 +38,7 @@ export const useConfirmPersistencePrompt = (stateContainer: DiscoverStateContain
throw new Error(error);
}
},
- [services.dataViews, services.toastNotifications, stateContainer]
+ [services.toastNotifications, stateContainer]
);
const openConfirmSavePrompt: (dataView: DataView) => Promise = useCallback(
@@ -99,17 +87,15 @@ export const useConfirmPersistencePrompt = (stateContainer: DiscoverStateContain
);
const updateSavedSearch = useCallback(
- ({ savedSearch, dataView, state }) => {
- return persistSavedSearch(savedSearch, {
- dataView,
- onSuccess: () => onUpdateSuccess(savedSearch),
- onError: (error) => onUpdateError(error, savedSearch),
- state,
- saveOptions: {},
- services,
- });
+ async ({ savedSearch }) => {
+ try {
+ await stateContainer.savedSearchState.persist(savedSearch);
+ onUpdateSuccess(savedSearch);
+ } catch (e) {
+ onUpdateError(e, savedSearch);
+ }
},
- [onUpdateError, onUpdateSuccess, services]
+ [onUpdateError, onUpdateSuccess, stateContainer.savedSearchState]
);
return { openConfirmSavePrompt, updateSavedSearch };
diff --git a/src/plugins/discover/public/utils/add_log.ts b/src/plugins/discover/public/utils/add_log.ts
index fd2de53ab4e61..7b14f7f69b452 100644
--- a/src/plugins/discover/public/utils/add_log.ts
+++ b/src/plugins/discover/public/utils/add_log.ts
@@ -14,8 +14,15 @@
export const addLog = (message: string, payload?: unknown) => {
// @ts-expect-error
- if (window?.ELASTIC_DISCOVER_LOGGER) {
- // eslint-disable-next-line no-console
- console.log(`[Discover] ${message}`, payload);
+ const logger = window?.ELASTIC_DISCOVER_LOGGER;
+
+ if (logger) {
+ if (logger === 'debug') {
+ // eslint-disable-next-line no-console
+ console.log(`[Discover] ${message}`, payload);
+ } else {
+ // eslint-disable-next-line no-console
+ console.log(`[Discover] ${message}`);
+ }
}
};
diff --git a/src/plugins/discover/public/utils/breadcrumbs.ts b/src/plugins/discover/public/utils/breadcrumbs.ts
index ca968b43fdb2a..bf482587efe30 100644
--- a/src/plugins/discover/public/utils/breadcrumbs.ts
+++ b/src/plugins/discover/public/utils/breadcrumbs.ts
@@ -8,7 +8,6 @@
import { ChromeStart } from '@kbn/core/public';
import { i18n } from '@kbn/i18n';
-import { SavedSearch } from '@kbn/saved-search-plugin/public';
export function getRootBreadcrumbs(breadcrumb?: string) {
return [
@@ -34,18 +33,18 @@ export function getSavedSearchBreadcrumbs(id: string) {
* Helper function to set the Discover's breadcrumb
* if there's an active savedSearch, its title is appended
*/
-export function setBreadcrumbsTitle(savedSearch: SavedSearch, chrome: ChromeStart) {
+export function setBreadcrumbsTitle(title: string | undefined, chrome: ChromeStart) {
const discoverBreadcrumbsTitle = i18n.translate('discover.discoverBreadcrumbTitle', {
defaultMessage: 'Discover',
});
- if (savedSearch.id && savedSearch.title) {
+ if (title) {
chrome.setBreadcrumbs([
{
text: discoverBreadcrumbsTitle,
href: '#/',
},
- { text: savedSearch.title },
+ { text: title },
]);
} else {
chrome.setBreadcrumbs([
diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json
index 1f9beedd297ac..ffc0e2f316b48 100644
--- a/src/plugins/discover/tsconfig.json
+++ b/src/plugins/discover/tsconfig.json
@@ -48,7 +48,6 @@
"@kbn/ui-theme",
"@kbn/react-field",
"@kbn/monaco",
- "@kbn/core-notifications-browser",
"@kbn/config-schema",
"@kbn/storybook",
"@kbn/shared-ux-router",
diff --git a/src/plugins/saved_search/public/index.ts b/src/plugins/saved_search/public/index.ts
index 506e90825209a..4857b0fd153cf 100644
--- a/src/plugins/saved_search/public/index.ts
+++ b/src/plugins/saved_search/public/index.ts
@@ -15,6 +15,7 @@ export {
getSavedSearchUrlConflictMessage,
throwErrorOnSavedSearchUrlConflict,
saveSavedSearch,
+ getNewSavedSearch,
} from './services/saved_searches';
export { VIEW_MODE } from '../common';
diff --git a/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.ts b/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.ts
index 0cae15e729209..d90bbed57e2f5 100644
--- a/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.ts
+++ b/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.ts
@@ -24,14 +24,6 @@ interface GetSavedSearchDependencies {
savedObjectsTagging?: SavedObjectsTaggingApi;
}
-const getEmptySavedSearch = ({
- search,
-}: {
- search: DataPublicPluginStart['search'];
-}): SavedSearch => ({
- searchSource: search.searchSource.createEmpty(),
-});
-
const findSavedSearch = async (
savedSearchId: string,
{ search, savedObjectsClient, spaces, savedObjectsTagging }: GetSavedSearchDependencies
@@ -82,11 +74,29 @@ const findSavedSearch = async (
};
/** @public **/
+
+/**
+ * Returns a new saved search
+ * Used when e.g. Discover is opened without a saved search id
+ * @param search
+ */
+export const getNewSavedSearch = ({
+ search,
+}: {
+ search: DataPublicPluginStart['search'];
+}): SavedSearch => ({
+ searchSource: search.searchSource.createEmpty(),
+});
+/**
+ * Returns a persisted or a new saved search
+ * @param savedSearchId - when undefined a new saved search is returned
+ * @param dependencies
+ */
export const getSavedSearch = async (
savedSearchId: string | undefined,
dependencies: GetSavedSearchDependencies
) => {
return savedSearchId
? findSavedSearch(savedSearchId, dependencies)
- : getEmptySavedSearch(dependencies);
+ : getNewSavedSearch(dependencies);
};
diff --git a/src/plugins/saved_search/public/services/saved_searches/index.ts b/src/plugins/saved_search/public/services/saved_searches/index.ts
index 3aa4120e19e78..53f486e79bb15 100644
--- a/src/plugins/saved_search/public/services/saved_searches/index.ts
+++ b/src/plugins/saved_search/public/services/saved_searches/index.ts
@@ -6,7 +6,7 @@
* Side Public License, v 1.
*/
-export { getSavedSearch } from './get_saved_searches';
+export { getSavedSearch, getNewSavedSearch } from './get_saved_searches';
export {
getSavedSearchUrl,
getSavedSearchFullPathUrl,
diff --git a/x-pack/test/functional/apps/discover/saved_searches.ts b/x-pack/test/functional/apps/discover/saved_searches.ts
index f043c1985e702..76b380274f207 100644
--- a/x-pack/test/functional/apps/discover/saved_searches.ts
+++ b/x-pack/test/functional/apps/discover/saved_searches.ts
@@ -18,6 +18,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const dashboardCustomizePanel = getService('dashboardCustomizePanel');
const queryBar = getService('queryBar');
const filterBar = getService('filterBar');
+ const testSubjects = getService('testSubjects');
const ecommerceSOPath = 'x-pack/test/functional/fixtures/kbn_archiver/reporting/ecommerce.json';
const defaultSettings = {
defaultIndex: 'logstash-*',
@@ -77,6 +78,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await PageObjects.discover.clickNewSearchButton();
+ expect(await testSubjects.getVisibleText('discover-dataView-switch-link')).to.be('ecommerce');
+
expect(await filterBar.hasFilter('category', `Men's Shoes`)).to.be(false);
expect(await queryBar.getQueryString()).to.eql('');
@@ -89,6 +92,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
expect(await filterBar.hasFilter('category', `Men's Shoes`)).to.be(false);
expect(await queryBar.getQueryString()).to.eql('');
+
+ await PageObjects.discover.clickNewSearchButton();
+ expect(await testSubjects.getVisibleText('discover-dataView-switch-link')).to.be('ecommerce');
});
});
}