Skip to content

Commit ef8aa16

Browse files
Merge branch 'master' into bug/form-lib-addfield-on-component-mount
2 parents d04098b + 789b67f commit ef8aa16

File tree

20 files changed

+1494
-353
lines changed

20 files changed

+1494
-353
lines changed

src/core/public/chrome/chrome_service.test.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,59 @@ describe('start', () => {
405405
`);
406406
});
407407
});
408+
409+
describe('erase chrome fields', () => {
410+
it('while switching an app', async () => {
411+
const startDeps = defaultStartDeps([new FakeApp('alpha')]);
412+
const { navigateToApp } = startDeps.application;
413+
const { chrome, service } = await start({ startDeps });
414+
415+
const helpExtensionPromise = chrome.getHelpExtension$().pipe(toArray()).toPromise();
416+
const breadcrumbsPromise = chrome.getBreadcrumbs$().pipe(toArray()).toPromise();
417+
const badgePromise = chrome.getBadge$().pipe(toArray()).toPromise();
418+
const docTitleResetSpy = jest.spyOn(chrome.docTitle, 'reset');
419+
420+
const promises = Promise.all([helpExtensionPromise, breadcrumbsPromise, badgePromise]);
421+
422+
chrome.setHelpExtension({ appName: 'App name' });
423+
chrome.setBreadcrumbs([{ text: 'App breadcrumb' }]);
424+
chrome.setBadge({ text: 'App badge', tooltip: 'App tooltip' });
425+
426+
navigateToApp('alpha');
427+
428+
service.stop();
429+
430+
expect(docTitleResetSpy).toBeCalledTimes(1);
431+
await expect(promises).resolves.toMatchInlineSnapshot(`
432+
Array [
433+
Array [
434+
undefined,
435+
Object {
436+
"appName": "App name",
437+
},
438+
undefined,
439+
],
440+
Array [
441+
Array [],
442+
Array [
443+
Object {
444+
"text": "App breadcrumb",
445+
},
446+
],
447+
Array [],
448+
],
449+
Array [
450+
undefined,
451+
Object {
452+
"text": "App badge",
453+
"tooltip": "App tooltip",
454+
},
455+
undefined,
456+
],
457+
]
458+
`);
459+
});
460+
});
408461
});
409462

410463
describe('stop', () => {

src/core/public/chrome/chrome_service.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,14 @@ export class ChromeService {
157157
const recentlyAccessed = await this.recentlyAccessed.start({ http });
158158
const docTitle = this.docTitle.start({ document: window.document });
159159

160+
// erase chrome fields from a previous app while switching to a next app
161+
application.currentAppId$.subscribe(() => {
162+
helpExtension$.next(undefined);
163+
breadcrumbs$.next([]);
164+
badge$.next(undefined);
165+
docTitle.reset();
166+
});
167+
160168
const setIsNavDrawerLocked = (isLocked: boolean) => {
161169
isNavDrawerLocked$.next(isLocked);
162170
localStorage.setItem(IS_LOCKED_KEY, `${isLocked}`);

src/plugins/saved_objects_management/public/management_section/mount_section.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import React, { lazy, Suspense } from 'react';
2121
import ReactDOM from 'react-dom';
2222
import { Router, Switch, Route } from 'react-router-dom';
2323
import { I18nProvider } from '@kbn/i18n/react';
24+
import { i18n } from '@kbn/i18n';
2425
import { EuiLoadingSpinner } from '@elastic/eui';
2526
import { CoreSetup } from 'src/core/public';
2627
import { ManagementAppMountParams } from '../../../management/public';
@@ -36,6 +37,10 @@ interface MountParams {
3637

3738
let allowedObjectTypes: string[] | undefined;
3839

40+
const title = i18n.translate('savedObjectsManagement.objects.savedObjectsTitle', {
41+
defaultMessage: 'Saved Objects',
42+
});
43+
3944
const SavedObjectsEditionPage = lazy(() => import('./saved_objects_edition_page'));
4045
const SavedObjectsTablePage = lazy(() => import('./saved_objects_table_page'));
4146
export const mountManagementSection = async ({
@@ -49,6 +54,8 @@ export const mountManagementSection = async ({
4954
allowedObjectTypes = await getAllowedTypes(coreStart.http);
5055
}
5156

57+
coreStart.chrome.docTitle.change(title);
58+
5259
const capabilities = coreStart.application.capabilities;
5360

5461
const RedirectToHomeIfUnauthorized: React.FunctionComponent = ({ children }) => {

x-pack/plugins/apm/public/components/shared/charts/CustomPlot/StaticPlot.js

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,29 @@ class StaticPlot extends PureComponent {
7171
const data = serie.data.map((value) => {
7272
return 'y' in value && isValidCoordinateValue(value.y)
7373
? value
74-
: {
75-
...value,
76-
y: undefined,
77-
};
74+
: { ...value, y: undefined };
7875
});
76+
77+
// make sure individual markers are displayed in cases
78+
// where there are gaps
79+
80+
const markersForGaps = serie.data.map((value, index) => {
81+
const prevHasData = getNull(serie.data[index - 1] ?? {});
82+
const nextHasData = getNull(serie.data[index + 1] ?? {});
83+
const thisHasData = getNull(value);
84+
85+
const isGap = !prevHasData && !nextHasData && thisHasData;
86+
87+
if (!isGap) {
88+
return {
89+
...value,
90+
y: undefined,
91+
};
92+
}
93+
94+
return value;
95+
});
96+
7997
return [
8098
<AreaSeries
8199
getNull={getNull}
@@ -99,6 +117,21 @@ class StaticPlot extends PureComponent {
99117
stack={true}
100118
cluster="line"
101119
/>,
120+
<LineMarkSeries
121+
getNull={getNull}
122+
key={`${serie.title}-line-markers`}
123+
xType="time-utc"
124+
curve={'curveMonotoneX'}
125+
data={markersForGaps}
126+
stroke={serie.color}
127+
color={serie.color}
128+
lineStyle={{
129+
opacity: 0,
130+
}}
131+
stack={true}
132+
cluster="line-mark"
133+
size={1}
134+
/>,
102135
];
103136
}
104137

@@ -132,7 +165,7 @@ class StaticPlot extends PureComponent {
132165
curve={'curveMonotoneX'}
133166
data={serie.data}
134167
color={serie.color}
135-
size={0.5}
168+
size={1}
136169
/>
137170
);
138171
default:

0 commit comments

Comments
 (0)