diff --git a/src/plugins/kibana_overview/public/application.tsx b/src/plugins/kibana_overview/public/application.tsx
index d42c6dcd51da07..1611b9a8abf1fd 100644
--- a/src/plugins/kibana_overview/public/application.tsx
+++ b/src/plugins/kibana_overview/public/application.tsx
@@ -10,7 +10,10 @@ import React from 'react';
import ReactDOM from 'react-dom';
import { i18n } from '@kbn/i18n';
import { I18nProvider } from '@kbn/i18n/react';
-import { KibanaContextProvider } from '../../../../src/plugins/kibana_react/public';
+import {
+ KibanaContextProvider,
+ KibanaThemeProvider,
+} from '../../../../src/plugins/kibana_react/public';
import { NewsfeedApiEndpoint } from '../../../../src/plugins/newsfeed/public';
import { AppMountParameters, CoreStart } from '../../../../src/core/public';
import { AppPluginStartDependencies } from './types';
@@ -19,7 +22,7 @@ import { KibanaOverviewApp } from './components/app';
export const renderApp = (
core: CoreStart,
deps: AppPluginStartDependencies,
- { appBasePath, element }: AppMountParameters
+ { appBasePath, element, theme$ }: AppMountParameters
) => {
const { notifications, http } = core;
const { newsfeed, home, navigation } = deps;
@@ -37,17 +40,19 @@ export const renderApp = (
ReactDOM.render(
-
-
-
+
+
+
+
+
,
element
);
diff --git a/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap b/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap
index babcab15a49749..1a52bf05b92380 100644
--- a/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap
+++ b/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap
@@ -1,1027 +1,1100 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`Overview render 1`] = `
-,
- "rightSideItems": Array [],
+ "error": null,
+ "feedItems": Array [
+ Object {
+ "badge": null,
+ "description": "The official Go client now includes features like request retries and node discovery. Learn more about its architecture and package and repository layout.",
+ "expireOn": "2050-12-31T11:59:59.000Z",
+ "hash": "8e18fcedbc",
+ "linkText": "Read more on the blog",
+ "linkUrl": "https://www.elastic.co/blog/the-go-client-for-elasticsearch-introduction?blade=kibanafeed",
+ "publishOn": "2020-08-31T10:23:47.000Z",
+ "title": "The Go client for Elasticsearch: Introduction",
+ },
+ Object {
+ "badge": null,
+ "description": "Learn how to use Elastic Uptime to configure alerting and anomaly detection for sites, services, and APIs.",
+ "expireOn": "2050-12-31T11:59:59.000Z",
+ "hash": "fb3e3d42ef",
+ "linkText": "Read more on the blog",
+ "linkUrl": "https://www.elastic.co/blog/alerting-and-anomaly-detection-for-uptime-and-reliability?blade=kibanafeed",
+ "publishOn": "2020-08-14T10:23:47.000Z",
+ "title": "Alerting and anomaly detection for uptime and reliability",
+ },
+ Object {
+ "badge": null,
+ "description": "Managing data using hot-warm architecture and ILM is a cost-effective way of retaining data — and a great way to easily keep your cloud costs down.",
+ "expireOn": "2050-12-31T11:59:59.000Z",
+ "hash": "b2fc7d47d5",
+ "linkText": "Learn more on the blog",
+ "linkUrl": "https://www.elastic.co/blog/optimizing-costs-elastic-cloud-hot-warm-index-lifecycle-management?blade=kibanafeed",
+ "publishOn": "2020-08-01T10:23:47.000Z",
+ "title": "Optimizing costs in Elastic Cloud: Hot-warm + index lifecycle management",
+ },
+ ],
+ "hasNew": true,
+ "kibanaVersion": "8.0.0",
}
}
- template="empty"
+ solutions={
+ Array [
+ Object {
+ "description": "Description of Kibana",
+ "icon": "logoKibana",
+ "id": "kibana",
+ "order": 1,
+ "path": "kibana_landing_page",
+ "title": "Analytics",
+ },
+ Object {
+ "description": "Description of solution two",
+ "icon": "empty",
+ "id": "solution-2",
+ "order": 2,
+ "path": "path-to-solution-two",
+ "title": "Solution two",
+ },
+ Object {
+ "description": "Description of solution three",
+ "icon": "empty",
+ "id": "solution-3",
+ "order": 3,
+ "path": "path-to-solution-three",
+ "title": "Solution three",
+ },
+ Object {
+ "description": "Description of solution four",
+ "icon": "empty",
+ "id": "solution-4",
+ "order": 4,
+ "path": "path-to-solution-four",
+ "title": "Solution four",
+ },
+ ]
+ }
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- image="/plugins/kibanaReact/assets/solutions_kibana.svg"
- onClick={[Function]}
- title="Analytics"
- titleElement="h3"
- titleSize="xs"
- />
-
-
-
-
-
- }
- image="/plugins/kibanaReact/assets/solutions_solution_2.svg"
- onClick={[Function]}
- title="Solution two"
- titleElement="h3"
- titleSize="xs"
- />
-
-
-
-
-
- }
- image="/plugins/kibanaReact/assets/solutions_solution_3.svg"
- onClick={[Function]}
- title="Solution three"
- titleElement="h3"
- titleSize="xs"
- />
-
-
-
-
-
- }
- image="/plugins/kibanaReact/assets/solutions_solution_4.svg"
- onClick={[Function]}
- title="Solution four"
- titleElement="h3"
- titleSize="xs"
- />
-
-
-
-
-
+
+
+
+
-
+
+`;
+
+exports[`Overview render 1`] = `
+
,
+ "rightSideItems": Array [],
}
}
- onChangeDefaultRoute={[Function]}
- onSetDefaultRoute={[Function]}
- path="/app/kibana_overview"
+ template="empty"
/>
-
+
`;
-exports[`Overview without features 1`] = `
-,
- "rightSideItems": Array [],
+ "defaultFormats": Object {},
+ "defaultLocale": "en",
+ "formatDate": [Function],
+ "formatHTMLMessage": [Function],
+ "formatMessage": [Function],
+ "formatNumber": [Function],
+ "formatPlural": [Function],
+ "formatRelative": [Function],
+ "formatTime": [Function],
+ "formats": Object {
+ "date": Object {
+ "full": Object {
+ "day": "numeric",
+ "month": "long",
+ "weekday": "long",
+ "year": "numeric",
+ },
+ "long": Object {
+ "day": "numeric",
+ "month": "long",
+ "year": "numeric",
+ },
+ "medium": Object {
+ "day": "numeric",
+ "month": "short",
+ "year": "numeric",
+ },
+ "short": Object {
+ "day": "numeric",
+ "month": "numeric",
+ "year": "2-digit",
+ },
+ },
+ "number": Object {
+ "currency": Object {
+ "style": "currency",
+ },
+ "percent": Object {
+ "style": "percent",
+ },
+ },
+ "relative": Object {
+ "days": Object {
+ "units": "day",
+ },
+ "hours": Object {
+ "units": "hour",
+ },
+ "minutes": Object {
+ "units": "minute",
+ },
+ "months": Object {
+ "units": "month",
+ },
+ "seconds": Object {
+ "units": "second",
+ },
+ "years": Object {
+ "units": "year",
+ },
+ },
+ "time": Object {
+ "full": Object {
+ "hour": "numeric",
+ "minute": "numeric",
+ "second": "numeric",
+ "timeZoneName": "short",
+ },
+ "long": Object {
+ "hour": "numeric",
+ "minute": "numeric",
+ "second": "numeric",
+ "timeZoneName": "short",
+ },
+ "medium": Object {
+ "hour": "numeric",
+ "minute": "numeric",
+ "second": "numeric",
+ },
+ "short": Object {
+ "hour": "numeric",
+ "minute": "numeric",
+ },
+ },
+ },
+ "formatters": Object {
+ "getDateTimeFormat": [Function],
+ "getMessageFormat": [Function],
+ "getNumberFormat": [Function],
+ "getPluralFormat": [Function],
+ "getRelativeFormat": [Function],
+ },
+ "locale": "en",
+ "messages": Object {},
+ "now": [Function],
+ "onError": [Function],
+ "textComponent": Symbol(react.fragment),
+ "timeZone": null,
}
}
- template="empty"
+ newsFetchResult={
+ Object {
+ "error": null,
+ "feedItems": Array [
+ Object {
+ "badge": null,
+ "description": "The official Go client now includes features like request retries and node discovery. Learn more about its architecture and package and repository layout.",
+ "expireOn": "2050-12-31T11:59:59.000Z",
+ "hash": "8e18fcedbc",
+ "linkText": "Read more on the blog",
+ "linkUrl": "https://www.elastic.co/blog/the-go-client-for-elasticsearch-introduction?blade=kibanafeed",
+ "publishOn": "2020-08-31T10:23:47.000Z",
+ "title": "The Go client for Elasticsearch: Introduction",
+ },
+ Object {
+ "badge": null,
+ "description": "Learn how to use Elastic Uptime to configure alerting and anomaly detection for sites, services, and APIs.",
+ "expireOn": "2050-12-31T11:59:59.000Z",
+ "hash": "fb3e3d42ef",
+ "linkText": "Read more on the blog",
+ "linkUrl": "https://www.elastic.co/blog/alerting-and-anomaly-detection-for-uptime-and-reliability?blade=kibanafeed",
+ "publishOn": "2020-08-14T10:23:47.000Z",
+ "title": "Alerting and anomaly detection for uptime and reliability",
+ },
+ Object {
+ "badge": null,
+ "description": "Managing data using hot-warm architecture and ILM is a cost-effective way of retaining data — and a great way to easily keep your cloud costs down.",
+ "expireOn": "2050-12-31T11:59:59.000Z",
+ "hash": "b2fc7d47d5",
+ "linkText": "Learn more on the blog",
+ "linkUrl": "https://www.elastic.co/blog/optimizing-costs-elastic-cloud-hot-warm-index-lifecycle-management?blade=kibanafeed",
+ "publishOn": "2020-08-01T10:23:47.000Z",
+ "title": "Optimizing costs in Elastic Cloud: Hot-warm + index lifecycle management",
+ },
+ ],
+ "hasNew": true,
+ "kibanaVersion": "8.0.0",
+ }
+ }
+ solutions={
+ Array [
+ Object {
+ "description": "Description of Kibana",
+ "icon": "logoKibana",
+ "id": "kibana",
+ "order": 1,
+ "path": "kibana_landing_page",
+ "title": "Analytics",
+ },
+ Object {
+ "description": "Description of solution two",
+ "icon": "empty",
+ "id": "solution-2",
+ "order": 2,
+ "path": "path-to-solution-two",
+ "title": "Solution two",
+ },
+ Object {
+ "description": "Description of solution three",
+ "icon": "empty",
+ "id": "solution-3",
+ "order": 3,
+ "path": "path-to-solution-three",
+ "title": "Solution three",
+ },
+ Object {
+ "description": "Description of solution four",
+ "icon": "empty",
+ "id": "solution-4",
+ "order": 4,
+ "path": "path-to-solution-four",
+ "title": "Solution four",
+ },
+ ]
+ }
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- image="/plugins/kibanaReact/assets/solutions_kibana.svg"
- onClick={[Function]}
- title="Analytics"
- titleElement="h3"
- titleSize="xs"
- />
-
-
-
-
-
- }
- image="/plugins/kibanaReact/assets/solutions_solution_2.svg"
- onClick={[Function]}
- title="Solution two"
- titleElement="h3"
- titleSize="xs"
- />
-
-
-
-
-
- }
- image="/plugins/kibanaReact/assets/solutions_solution_3.svg"
- onClick={[Function]}
- title="Solution three"
- titleElement="h3"
- titleSize="xs"
- />
-
-
-
-
-
- }
- image="/plugins/kibanaReact/assets/solutions_solution_4.svg"
- onClick={[Function]}
- title="Solution four"
- titleElement="h3"
- titleSize="xs"
- />
-
-
-
-
-
-
- ,
+ "rightSideItems": Array [],
+ }
+ }
+ template="empty"
/>
+
+`;
+
+exports[`Overview without features 1`] = `
+
,
+ "rightSideItems": Array [],
}
}
- onChangeDefaultRoute={[Function]}
- onSetDefaultRoute={[Function]}
- path="/app/kibana_overview"
+ template="empty"
/>
-
+
`;
exports[`Overview without solutions 1`] = `
-,
- "rightSideItems": Array [],
+ "defaultFormats": Object {},
+ "defaultLocale": "en",
+ "formatDate": [Function],
+ "formatHTMLMessage": [Function],
+ "formatMessage": [Function],
+ "formatNumber": [Function],
+ "formatPlural": [Function],
+ "formatRelative": [Function],
+ "formatTime": [Function],
+ "formats": Object {
+ "date": Object {
+ "full": Object {
+ "day": "numeric",
+ "month": "long",
+ "weekday": "long",
+ "year": "numeric",
+ },
+ "long": Object {
+ "day": "numeric",
+ "month": "long",
+ "year": "numeric",
+ },
+ "medium": Object {
+ "day": "numeric",
+ "month": "short",
+ "year": "numeric",
+ },
+ "short": Object {
+ "day": "numeric",
+ "month": "numeric",
+ "year": "2-digit",
+ },
+ },
+ "number": Object {
+ "currency": Object {
+ "style": "currency",
+ },
+ "percent": Object {
+ "style": "percent",
+ },
+ },
+ "relative": Object {
+ "days": Object {
+ "units": "day",
+ },
+ "hours": Object {
+ "units": "hour",
+ },
+ "minutes": Object {
+ "units": "minute",
+ },
+ "months": Object {
+ "units": "month",
+ },
+ "seconds": Object {
+ "units": "second",
+ },
+ "years": Object {
+ "units": "year",
+ },
+ },
+ "time": Object {
+ "full": Object {
+ "hour": "numeric",
+ "minute": "numeric",
+ "second": "numeric",
+ "timeZoneName": "short",
+ },
+ "long": Object {
+ "hour": "numeric",
+ "minute": "numeric",
+ "second": "numeric",
+ "timeZoneName": "short",
+ },
+ "medium": Object {
+ "hour": "numeric",
+ "minute": "numeric",
+ "second": "numeric",
+ },
+ "short": Object {
+ "hour": "numeric",
+ "minute": "numeric",
+ },
+ },
+ },
+ "formatters": Object {
+ "getDateTimeFormat": [Function],
+ "getMessageFormat": [Function],
+ "getNumberFormat": [Function],
+ "getPluralFormat": [Function],
+ "getRelativeFormat": [Function],
+ },
+ "locale": "en",
+ "messages": Object {},
+ "now": [Function],
+ "onError": [Function],
+ "textComponent": Symbol(react.fragment),
+ "timeZone": null,
}
}
- template="empty"
+ newsFetchResult={
+ Object {
+ "error": null,
+ "feedItems": Array [
+ Object {
+ "badge": null,
+ "description": "The official Go client now includes features like request retries and node discovery. Learn more about its architecture and package and repository layout.",
+ "expireOn": "2050-12-31T11:59:59.000Z",
+ "hash": "8e18fcedbc",
+ "linkText": "Read more on the blog",
+ "linkUrl": "https://www.elastic.co/blog/the-go-client-for-elasticsearch-introduction?blade=kibanafeed",
+ "publishOn": "2020-08-31T10:23:47.000Z",
+ "title": "The Go client for Elasticsearch: Introduction",
+ },
+ Object {
+ "badge": null,
+ "description": "Learn how to use Elastic Uptime to configure alerting and anomaly detection for sites, services, and APIs.",
+ "expireOn": "2050-12-31T11:59:59.000Z",
+ "hash": "fb3e3d42ef",
+ "linkText": "Read more on the blog",
+ "linkUrl": "https://www.elastic.co/blog/alerting-and-anomaly-detection-for-uptime-and-reliability?blade=kibanafeed",
+ "publishOn": "2020-08-14T10:23:47.000Z",
+ "title": "Alerting and anomaly detection for uptime and reliability",
+ },
+ Object {
+ "badge": null,
+ "description": "Managing data using hot-warm architecture and ILM is a cost-effective way of retaining data — and a great way to easily keep your cloud costs down.",
+ "expireOn": "2050-12-31T11:59:59.000Z",
+ "hash": "b2fc7d47d5",
+ "linkText": "Learn more on the blog",
+ "linkUrl": "https://www.elastic.co/blog/optimizing-costs-elastic-cloud-hot-warm-index-lifecycle-management?blade=kibanafeed",
+ "publishOn": "2020-08-01T10:23:47.000Z",
+ "title": "Optimizing costs in Elastic Cloud: Hot-warm + index lifecycle management",
+ },
+ ],
+ "hasNew": true,
+ "kibanaVersion": "8.0.0",
+ }
+ }
+ solutions={Array []}
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
,
+ "rightSideItems": Array [],
}
}
- onChangeDefaultRoute={[Function]}
- onSetDefaultRoute={[Function]}
- path="/app/kibana_overview"
+ template="empty"
/>
-
+
`;
diff --git a/src/plugins/kibana_overview/public/components/overview/overview.test.mocks.ts b/src/plugins/kibana_overview/public/components/overview/overview.test.mocks.ts
new file mode 100644
index 00000000000000..02ccf511770f3e
--- /dev/null
+++ b/src/plugins/kibana_overview/public/components/overview/overview.test.mocks.ts
@@ -0,0 +1,42 @@
+/*
+ * 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';
+
+export const hasUserDataViewMock = jest.fn();
+
+jest.doMock('../../../../../../src/plugins/kibana_react/public', () => ({
+ useKibana: jest.fn().mockReturnValue({
+ services: {
+ http: { basePath: { prepend: jest.fn((path: string) => (path ? path : 'path')) } },
+ data: {
+ indexPatterns: {
+ hasUserDataView: hasUserDataViewMock,
+ },
+ },
+ share: { url: { locators: { get: () => ({ useUrl: () => '' }) } } },
+ uiSettings: { get: jest.fn() },
+ docLinks: {
+ links: {
+ kibana: 'kibana_docs_url',
+ },
+ },
+ },
+ }),
+ RedirectAppLinks: jest.fn((element: JSX.Element) => element),
+ overviewPageActions: jest.fn().mockReturnValue([]),
+ OverviewPageFooter: jest.fn().mockReturnValue(React.createElement(React.Fragment)),
+ KibanaPageTemplate: jest.fn().mockReturnValue(React.createElement(React.Fragment)),
+ KibanaPageTemplateSolutionNavAvatar: jest
+ .fn()
+ .mockReturnValue(React.createElement(React.Fragment)),
+}));
+
+jest.doMock('../../lib/ui_metric', () => ({
+ trackUiMetric: jest.fn(),
+}));
diff --git a/src/plugins/kibana_overview/public/components/overview/overview.test.tsx b/src/plugins/kibana_overview/public/components/overview/overview.test.tsx
index ca9b404ed98103..b4804fe56f4701 100644
--- a/src/plugins/kibana_overview/public/components/overview/overview.test.tsx
+++ b/src/plugins/kibana_overview/public/components/overview/overview.test.tsx
@@ -6,39 +6,16 @@
* Side Public License, v 1.
*/
+import { hasUserDataViewMock } from './overview.test.mocks';
+import { setTimeout as setTimeoutP } from 'timers/promises';
import moment from 'moment';
import React from 'react';
+import { act } from 'react-dom/test-utils';
+import { ReactWrapper } from 'enzyme';
import { Overview } from './overview';
-import { shallowWithIntl } from '@kbn/test/jest';
+import { mountWithIntl } from '@kbn/test/jest';
import { FeatureCatalogueCategory } from 'src/plugins/home/public';
-jest.mock('../../../../../../src/plugins/kibana_react/public', () => ({
- useKibana: jest.fn().mockReturnValue({
- services: {
- http: { basePath: { prepend: jest.fn((path: string) => (path ? path : 'path')) } },
- data: { indexPatterns: {} },
- share: { url: { locators: { get: () => ({ useUrl: () => '' }) } } },
- uiSettings: { get: jest.fn() },
- docLinks: {
- links: {
- kibana: 'kibana_docs_url',
- },
- },
- },
- }),
- RedirectAppLinks: jest.fn((element: JSX.Element) => element),
- overviewPageActions: jest.fn().mockReturnValue([]),
- OverviewPageFooter: jest.fn().mockReturnValue(<>>),
- KibanaPageTemplate: jest.fn().mockReturnValue(<>>),
- KibanaPageTemplateSolutionNavAvatar: jest.fn().mockReturnValue(<>>),
-}));
-
-jest.mock('../../lib/ui_metric', () => ({
- trackUiMetric: jest.fn(),
-}));
-
-afterAll(() => jest.clearAllMocks());
-
const mockNewsFetchResult = {
error: null,
feedItems: [
@@ -148,27 +125,86 @@ const mockFeatures = [
},
];
+const flushPromises = async () => await setTimeoutP(10);
+
+const updateComponent = async (component: ReactWrapper) => {
+ await act(async () => {
+ await flushPromises();
+ component.update();
+ });
+};
+
describe('Overview', () => {
- test('render', () => {
- const component = shallowWithIntl(
+ beforeEach(() => {
+ hasUserDataViewMock.mockClear();
+ hasUserDataViewMock.mockResolvedValue(true);
+ });
+
+ afterAll(() => jest.clearAllMocks());
+
+ test('render', async () => {
+ const component = mountWithIntl(
);
+
+ await updateComponent(component);
+
expect(component).toMatchSnapshot();
});
- test('without solutions', () => {
- const component = shallowWithIntl(
+
+ test('without solutions', async () => {
+ const component = mountWithIntl(
);
+
+ await updateComponent(component);
+
expect(component).toMatchSnapshot();
});
- test('without features', () => {
- const component = shallowWithIntl(
+
+ test('without features', async () => {
+ const component = mountWithIntl(
);
+
+ await updateComponent(component);
+
+ expect(component).toMatchSnapshot();
+ });
+
+ test('when there is no user data view', async () => {
+ hasUserDataViewMock.mockResolvedValue(false);
+
+ const component = mountWithIntl(
+
+ );
+
+ await updateComponent(component);
+
+ expect(component).toMatchSnapshot();
+ });
+
+ test('during loading', async () => {
+ hasUserDataViewMock.mockImplementation(() => new Promise(() => {}));
+
+ const component = mountWithIntl(
+
+ );
+
+ await updateComponent(component);
+
expect(component).toMatchSnapshot();
});
});
diff --git a/src/plugins/kibana_overview/public/components/overview/overview.tsx b/src/plugins/kibana_overview/public/components/overview/overview.tsx
index 5108150f7ff8d1..9bb685caecb7bc 100644
--- a/src/plugins/kibana_overview/public/components/overview/overview.tsx
+++ b/src/plugins/kibana_overview/public/components/overview/overview.tsx
@@ -16,6 +16,7 @@ import {
EuiScreenReaderOnly,
EuiSpacer,
EuiTitle,
+ EuiLoadingSpinner,
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n/react';
import { CoreStart } from 'kibana/public';
@@ -53,6 +54,7 @@ interface Props {
export const Overview: FC = ({ newsFetchResult, solutions, features }) => {
const [isNewKibanaInstance, setNewKibanaInstance] = useState(false);
+ const [isLoading, setIsLoading] = useState(true);
const {
services: { http, docLinks, data, share, uiSettings, application },
} = useKibana();
@@ -112,6 +114,7 @@ export const Overview: FC = ({ newsFetchResult, solutions, features }) =>
const hasUserIndexPattern = await indexPatternService.hasUserDataView().catch(() => true);
setNewKibanaInstance(!hasUserIndexPattern);
+ setIsLoading(false);
};
fetchIsNewKibanaInstance();
@@ -145,6 +148,16 @@ export const Overview: FC = ({ newsFetchResult, solutions, features }) =>
const mainApps = ['dashboard', 'discover'];
const remainingApps = kibanaApps.map(({ id }) => id).filter((id) => !mainApps.includes(id));
+ if (isLoading) {
+ return (
+
+
+
+
+
+ );
+ }
+
return (
- Add data
+ Add integrations
,
]
@@ -50,7 +50,7 @@ Array [
href=""
iconType="plusInCircle"
>
- Add data
+ Add integrations
,
]
diff --git a/src/plugins/kibana_react/public/overview_page/overview_page_actions/overview_page_actions.tsx b/src/plugins/kibana_react/public/overview_page/overview_page_actions/overview_page_actions.tsx
index 19a3a0e9a760cc..5d61cc3e96bd0f 100644
--- a/src/plugins/kibana_react/public/overview_page/overview_page_actions/overview_page_actions.tsx
+++ b/src/plugins/kibana_react/public/overview_page/overview_page_actions/overview_page_actions.tsx
@@ -43,8 +43,8 @@ export const overviewPageActions = ({
href={addDataHref}
iconType="plusInCircle"
>
- {i18n.translate('kibana-react.kbnOverviewPageHeader.addDataButtonLabel', {
- defaultMessage: 'Add data',
+ {i18n.translate('kibana-react.kbnOverviewPageHeader.addIntegrationsButtonLabel', {
+ defaultMessage: 'Add integrations',
})}
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index a590563921e8fb..5645ebfebf34e4 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -3459,7 +3459,6 @@
"kibana-react.exitFullScreenButton.exitFullScreenModeButtonAriaLabel": "全画面モードを終了",
"kibana-react.exitFullScreenButton.exitFullScreenModeButtonText": "全画面を終了",
"kibana-react.exitFullScreenButton.fullScreenModeDescription": "ESC キーで全画面モードを終了します。",
- "kibana-react.kbnOverviewPageHeader.addDataButtonLabel": "データの追加",
"kibana-react.kbnOverviewPageHeader.devToolsButtonLabel": "開発ツール",
"kibana-react.kbnOverviewPageHeader.stackManagementButtonLabel": "管理",
"kibana-react.kibanaCodeEditor.ariaLabel": "コードエディター",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index 6b4a1d49cf9a99..97d68b36baaa28 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -3484,7 +3484,6 @@
"kibana-react.exitFullScreenButton.exitFullScreenModeButtonAriaLabel": "退出全屏模式",
"kibana-react.exitFullScreenButton.exitFullScreenModeButtonText": "退出全屏",
"kibana-react.exitFullScreenButton.fullScreenModeDescription": "在全屏模式下,按 ESC 键可退出。",
- "kibana-react.kbnOverviewPageHeader.addDataButtonLabel": "添加数据",
"kibana-react.kbnOverviewPageHeader.devToolsButtonLabel": "开发工具",
"kibana-react.kbnOverviewPageHeader.stackManagementButtonLabel": "管理",
"kibana-react.kibanaCodeEditor.ariaLabel": "代码编辑器",