Skip to content

Commit 2c163ea

Browse files
committed
Merge branch 'master' into alerting/zombie-tasks
* master: adds strict types to Alerting Client (#53821) [Dashboard] Empty screen redesign (#53681) Migrate config deprecations and `ShieldUser` functionality to the New Platform (#53768)
2 parents 8c34d4a + 8992a43 commit 2c163ea

File tree

48 files changed

+818
-564
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+818
-564
lines changed

src/legacy/core_plugins/kibana/public/dashboard/__tests__/__snapshots__/dashboard_empty_screen.test.tsx.snap

Lines changed: 285 additions & 227 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/legacy/core_plugins/kibana/public/dashboard/__tests__/dashboard_empty_screen.test.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,16 @@ import {
2424
} from '../np_ready/dashboard_empty_screen';
2525
// @ts-ignore
2626
import { findTestSubject } from '@elastic/eui/lib/test';
27+
import { coreMock } from '../../../../../../core/public/mocks';
2728

2829
describe('DashboardEmptyScreen', () => {
30+
const setupMock = coreMock.createSetup();
31+
2932
const defaultProps = {
3033
showLinkToVisualize: true,
3134
onLinkClick: jest.fn(),
35+
uiSettings: setupMock.uiSettings,
36+
http: setupMock.http,
3237
};
3338

3439
function mountComponent(props?: DashboardEmptyScreenProps) {

src/legacy/core_plugins/kibana/public/dashboard/_dashboard_app.scss

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,31 @@
66

77
.dshStartScreen {
88
text-align: center;
9-
padding: $euiSizeS;
9+
}
10+
11+
.dshStartScreen__pageContent {
12+
padding: $euiSizeXXL;
13+
}
14+
15+
.dshStartScreen__panelDesc {
16+
max-width: 260px;
17+
margin: 0 auto;
18+
}
19+
20+
.dshEmptyWidget {
21+
border: $euiBorderThin;
22+
border-style: dashed;
23+
border-radius: $euiBorderRadius;
24+
padding: $euiSizeXXL * 2;
25+
max-width: 400px;
26+
margin-left: $euiSizeS;
27+
text-align: center;
28+
}
29+
30+
.dshEmptyWidget {
31+
border: 2px dashed $euiColorLightShade;
32+
padding: 4 * $euiSize;
33+
max-width: 20em;
34+
margin-left: 10px;
35+
text-align: center;
1036
}

src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ export class DashboardAppController {
123123
timefilter: { timefilter },
124124
},
125125
},
126-
core: { notifications, overlays, chrome, injectedMetadata, uiSettings, savedObjects },
126+
core: { notifications, overlays, chrome, injectedMetadata, uiSettings, savedObjects, http },
127127
}: DashboardAppControllerDependencies) {
128128
new FilterStateManager(globalState, getAppState, filterManager);
129129
const queryFilter = filterManager;
@@ -197,6 +197,8 @@ export class DashboardAppController {
197197
const emptyScreenProps: DashboardEmptyScreenProps = {
198198
onLinkClick: shouldShowEditHelp ? $scope.showAddPanel : $scope.enterEditMode,
199199
showLinkToVisualize: shouldShowEditHelp,
200+
uiSettings,
201+
http,
200202
};
201203
if (shouldShowEditHelp) {
202204
emptyScreenProps.onVisualizeClick = addVisualization;

src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_empty_screen.tsx

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,94 +19,110 @@
1919
import React from 'react';
2020
import { I18nProvider } from '@kbn/i18n/react';
2121
import {
22-
EuiIcon,
2322
EuiLink,
2423
EuiSpacer,
2524
EuiPageContent,
2625
EuiPageBody,
2726
EuiPage,
27+
EuiImage,
2828
EuiText,
2929
EuiButton,
3030
} from '@elastic/eui';
31+
import { IUiSettingsClient, HttpStart } from 'kibana/public';
3132
import * as constants from './dashboard_empty_screen_constants';
3233

3334
export interface DashboardEmptyScreenProps {
3435
showLinkToVisualize: boolean;
3536
onLinkClick: () => void;
3637
onVisualizeClick?: () => void;
38+
uiSettings: IUiSettingsClient;
39+
http: HttpStart;
3740
}
3841

3942
export function DashboardEmptyScreen({
4043
showLinkToVisualize,
4144
onLinkClick,
4245
onVisualizeClick,
46+
uiSettings,
47+
http,
4348
}: DashboardEmptyScreenProps) {
49+
const IS_DARK_THEME = uiSettings.get('theme:darkMode');
50+
const emptyStateGraphicURL = IS_DARK_THEME
51+
? '/plugins/kibana/home/assets/welcome_graphic_dark_2x.png'
52+
: '/plugins/kibana/home/assets/welcome_graphic_light_2x.png';
4453
const linkToVisualizeParagraph = (
4554
<p data-test-subj="linkToVisualizeParagraph">
4655
<EuiButton
4756
iconSide="right"
57+
size="s"
4858
fill
4959
iconType="arrowDown"
5060
onClick={onVisualizeClick}
5161
data-test-subj="addVisualizationButton"
62+
aria-label={constants.createNewVisualizationButtonAriaLabel}
5263
>
5364
{constants.createNewVisualizationButton}
5465
</EuiButton>
5566
</p>
5667
);
5768
const paragraph = (
58-
description1: string,
69+
description1: string | null,
5970
description2: string,
6071
linkText: string,
6172
ariaLabel: string,
6273
dataTestSubj?: string
6374
) => {
6475
return (
65-
<EuiText size="m">
76+
<EuiText size="m" color="subdued">
6677
<p>
6778
{description1}
79+
{description1 && <span>&nbsp;</span>}
6880
<EuiLink onClick={onLinkClick} aria-label={ariaLabel} data-test-subj={dataTestSubj || ''}>
6981
{linkText}
7082
</EuiLink>
83+
<span>&nbsp;</span>
7184
{description2}
7285
</p>
7386
</EuiText>
7487
);
7588
};
76-
const addVisualizationParagraph = (
77-
<React.Fragment>
78-
{paragraph(
79-
constants.addVisualizationDescription1,
80-
constants.addVisualizationDescription2,
81-
constants.addVisualizationLinkText,
82-
constants.addVisualizationLinkAriaLabel,
83-
'emptyDashboardAddPanelButton'
84-
)}
85-
<EuiSpacer size="m" />
86-
{linkToVisualizeParagraph}
87-
</React.Fragment>
88-
);
8989
const enterEditModeParagraph = paragraph(
9090
constants.howToStartWorkingOnNewDashboardDescription1,
9191
constants.howToStartWorkingOnNewDashboardDescription2,
9292
constants.howToStartWorkingOnNewDashboardEditLinkText,
9393
constants.howToStartWorkingOnNewDashboardEditLinkAriaLabel
9494
);
95-
return (
96-
<I18nProvider>
97-
<EuiPage className="dshStartScreen" restrictWidth="36em">
98-
<EuiPageBody>
99-
<EuiPageContent verticalPosition="center" horizontalPosition="center">
100-
<EuiIcon type="dashboardApp" size="xxl" color="subdued" />
101-
<EuiSpacer size="s" />
102-
<EuiText grow={true}>
103-
<h2 key={0.5}>{constants.fillDashboardTitle}</h2>
104-
</EuiText>
105-
<EuiSpacer size="m" />
106-
{showLinkToVisualize ? addVisualizationParagraph : enterEditModeParagraph}
107-
</EuiPageContent>
108-
</EuiPageBody>
109-
</EuiPage>
110-
</I18nProvider>
95+
const enterViewModeParagraph = paragraph(
96+
null,
97+
constants.addNewVisualizationDescription,
98+
constants.addExistingVisualizationLinkText,
99+
constants.addExistingVisualizationLinkAriaLabel
100+
);
101+
const viewMode = (
102+
<EuiPage className="dshStartScreen" restrictWidth="500px">
103+
<EuiPageBody>
104+
<EuiPageContent
105+
verticalPosition="center"
106+
horizontalPosition="center"
107+
paddingSize="none"
108+
className="dshStartScreen__pageContent"
109+
>
110+
<EuiImage url={http.basePath.prepend(emptyStateGraphicURL)} alt="" />
111+
<EuiText size="m">
112+
<p style={{ fontWeight: 'bold' }}>{constants.fillDashboardTitle}</p>
113+
</EuiText>
114+
<EuiSpacer size="m" />
115+
<div className="dshStartScreen__panelDesc">{enterEditModeParagraph}</div>
116+
</EuiPageContent>
117+
</EuiPageBody>
118+
</EuiPage>
119+
);
120+
const editMode = (
121+
<div data-test-subj="emptyDashboardWidget" className="dshEmptyWidget">
122+
{enterViewModeParagraph}
123+
<EuiSpacer size="l" />
124+
{linkToVisualizeParagraph}
125+
</div>
111126
);
127+
return <I18nProvider>{showLinkToVisualize ? editMode : viewMode}</I18nProvider>;
112128
}

src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_empty_screen_constants.tsx

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,40 +19,20 @@
1919

2020
import { i18n } from '@kbn/i18n';
2121

22-
export const addVisualizationDescription1: string = i18n.translate(
23-
'kbn.dashboard.addVisualizationDescription1',
24-
{
25-
defaultMessage: 'Click the ',
26-
}
27-
);
28-
export const addVisualizationDescription2: string = i18n.translate(
29-
'kbn.dashboard.addVisualizationDescription2',
30-
{
31-
defaultMessage: ' button in the menu bar above to add a visualization to the dashboard.',
32-
}
33-
);
34-
export const addVisualizationLinkText: string = i18n.translate(
35-
'kbn.dashboard.addVisualizationLinkText',
36-
{
37-
defaultMessage: 'Add',
38-
}
39-
);
40-
export const addVisualizationLinkAriaLabel: string = i18n.translate(
41-
'kbn.dashboard.addVisualizationLinkAriaLabel',
42-
{
43-
defaultMessage: 'Add visualization',
44-
}
45-
);
22+
/** VIEW MODE CONSTANTS **/
23+
export const fillDashboardTitle: string = i18n.translate('kbn.dashboard.fillDashboardTitle', {
24+
defaultMessage: 'This dashboard is empty. Let\u2019s fill it up!',
25+
});
4626
export const howToStartWorkingOnNewDashboardDescription1: string = i18n.translate(
4727
'kbn.dashboard.howToStartWorkingOnNewDashboardDescription1',
4828
{
49-
defaultMessage: 'Click the ',
29+
defaultMessage: 'Click',
5030
}
5131
);
5232
export const howToStartWorkingOnNewDashboardDescription2: string = i18n.translate(
5333
'kbn.dashboard.howToStartWorkingOnNewDashboardDescription2',
5434
{
55-
defaultMessage: ' button in the menu bar above to start working on your new dashboard.',
35+
defaultMessage: 'in the menu bar above to start adding panels.',
5636
}
5737
);
5838
export const howToStartWorkingOnNewDashboardEditLinkText: string = i18n.translate(
@@ -67,13 +47,23 @@ export const howToStartWorkingOnNewDashboardEditLinkAriaLabel: string = i18n.tra
6747
defaultMessage: 'Edit dashboard',
6848
}
6949
);
70-
export const fillDashboardTitle: string = i18n.translate('kbn.dashboard.fillDashboardTitle', {
71-
defaultMessage: 'This dashboard is empty. Let\u2019s fill it up!',
72-
});
73-
export const visualizeAppLinkTest: string = i18n.translate(
74-
'kbn.dashboard.visitVisualizeAppLinkText',
50+
/** EDIT MODE CONSTANTS **/
51+
export const addExistingVisualizationLinkText: string = i18n.translate(
52+
'kbn.dashboard.addExistingVisualizationLinkText',
53+
{
54+
defaultMessage: 'Add an existing',
55+
}
56+
);
57+
export const addExistingVisualizationLinkAriaLabel: string = i18n.translate(
58+
'kbn.dashboard.addVisualizationLinkAriaLabel',
59+
{
60+
defaultMessage: 'Add an existing visualization',
61+
}
62+
);
63+
export const addNewVisualizationDescription: string = i18n.translate(
64+
'kbn.dashboard.addNewVisualizationText',
7565
{
76-
defaultMessage: 'visit the Visualize app',
66+
defaultMessage: 'or new object to this dashboard',
7767
}
7868
);
7969
export const createNewVisualizationButton: string = i18n.translate(
@@ -82,3 +72,9 @@ export const createNewVisualizationButton: string = i18n.translate(
8272
defaultMessage: 'Create new',
8373
}
8474
);
75+
export const createNewVisualizationButtonAriaLabel: string = i18n.translate(
76+
'kbn.dashboard.createNewVisualizationButtonAriaLabel',
77+
{
78+
defaultMessage: 'Create new visualization button',
79+
}
80+
);
52.3 KB
Loading
51.9 KB
Loading

test/functional/apps/dashboard/empty_dashboard.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ export default function({ getService, getPageObjects }) {
4444
await PageObjects.dashboard.gotoDashboardLandingPage();
4545
});
4646

47-
it('should display add button', async () => {
48-
const addButtonExists = await testSubjects.exists('emptyDashboardAddPanelButton');
49-
expect(addButtonExists).to.be(true);
47+
it('should display empty widget', async () => {
48+
const emptyWidgetExists = await testSubjects.exists('emptyDashboardWidget');
49+
expect(emptyWidgetExists).to.be(true);
5050
});
5151

5252
it.skip('should open add panel when add button is clicked', async () => {
53-
await testSubjects.click('emptyDashboardAddPanelButton');
53+
await testSubjects.click('dashboardAddPanelButton');
5454
const isAddPanelOpen = await dashboardAddPanel.isAddPanelOpen();
5555
expect(isAddPanelOpen).to.be(true);
5656
});

0 commit comments

Comments
 (0)