Skip to content

Commit

Permalink
Merge branch 'master' into 86758-3
Browse files Browse the repository at this point in the history
  • Loading branch information
kibanamachine authored Jan 6, 2021
2 parents abd1d6c + 8ead390 commit 79fe1ab
Show file tree
Hide file tree
Showing 222 changed files with 3,130 additions and 2,181 deletions.
4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,10 @@
/x-pack/test/functional/apps/maps/ @elastic/kibana-gis
/x-pack/test/functional/es_archives/maps/ @elastic/kibana-gis
/x-pack/test/visual_regression/tests/maps/index.js @elastic/kibana-gis
/x-pack/plugins/stack_alerts/server/alert_types/geo_containment @elastic/kibana-gis
/x-pack/plugins/stack_alerts/public/alert_types/geo_containment @elastic/kibana-gis
/x-pack/plugins/stack_alerts/server/alert_types/geo_threshold @elastic/kibana-gis
/x-pack/plugins/stack_alerts/public/alert_types/geo_threshold @elastic/kibana-gis
#CC# /src/plugins/maps_legacy/ @elastic/kibana-gis
#CC# /src/plugins/maps_oss/ @elastic/kibana-gis
#CC# /x-pack/plugins/file_upload @elastic/kibana-gis
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@
"proper-lockfile": "^3.2.0",
"proxy-from-env": "1.0.0",
"puid": "1.0.7",
"puppeteer": "^5.5.0",
"puppeteer": "npm:@elastic/puppeteer@5.4.1-patch.1",
"query-string": "^6.13.2",
"raw-loader": "^3.1.0",
"re2": "^1.15.4",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@
*/
import _ from 'lodash';
// @ts-ignore
import collapsingTests from './utils_string_collapsing.txt';
import collapsingTests from './__fixtures__/utils_string_collapsing.txt';
// @ts-ignore
import expandingTests from './utils_string_expanding.txt';
import expandingTests from './__fixtures__/utils_string_expanding.txt';

import * as utils from '../index';
import { extractJSONStringValues } from '../parser';
import * as utils from './index';
import { extractJSONStringValues } from './parser';

describe('JSON to XJSON conversion tools', () => {
it('will collapse multiline strings', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export const VisualizeByValueEditor = ({ onAppLeave }: VisualizeAppProps) => {

useEffect(() => {
const { originatingApp: value, embeddableId: embeddableIdValue, valueInput: valueInputValue } =
services.embeddable.getStateTransfer().getIncomingEditorState() || {};
services.stateTransferService.getIncomingEditorState() || {};
setOriginatingApp(value);
setValueInput(valueInputValue);
setEmbeddableId(embeddableIdValue);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export const VisualizeEditor = ({ onAppLeave }: VisualizeAppProps) => {
services,
eventEmitter,
isChromeVisible,
originatingApp,
visualizationIdFromUrl
);
const { appState, hasUnappliedChanges } = useVisualizeAppState(
Expand All @@ -64,8 +65,7 @@ export const VisualizeEditor = ({ onAppLeave }: VisualizeAppProps) => {
useLinkedSearchUpdates(services, eventEmitter, appState, savedVisInstance);

useEffect(() => {
const { originatingApp: value } =
services.embeddable.getStateTransfer().getIncomingEditorState() || {};
const { originatingApp: value } = services.stateTransferService.getIncomingEditorState() || {};
setOriginatingApp(value);
}, [services]);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export const VisualizeListing = () => {
savedVisualizations,
toastNotifications,
visualizations,
embeddable,
stateTransferService,
savedObjects,
savedObjectsPublic,
savedObjectsTagging,
Expand Down Expand Up @@ -74,7 +74,7 @@ export const VisualizeListing = () => {

useMount(() => {
// Reset editor state if the visualize listing page is loaded.
embeddable.getStateTransfer().clearEditorState();
stateTransferService.clearEditorState();
chrome.setBreadcrumbs([
{
text: i18n.translate('visualize.visualizeListingBreadcrumbsTitle', {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ const TopNav = ({
},
[visInstance.embeddableHandler]
);
const stateTransfer = services.embeddable.getStateTransfer();
const savedObjectsClient = services.savedObjects.client;

const config = useMemo(() => {
Expand All @@ -96,7 +95,7 @@ const TopNav = ({
visInstance,
stateContainer,
visualizationIdFromUrl,
stateTransfer,
stateTransfer: services.stateTransferService,
savedObjectsClient,
embeddableId,
onAppLeave,
Expand All @@ -117,7 +116,6 @@ const TopNav = ({
visualizationIdFromUrl,
services,
embeddableId,
stateTransfer,
savedObjectsClient,
onAppLeave,
]);
Expand Down
3 changes: 2 additions & 1 deletion src/plugins/visualize/public/application/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import {
} from 'src/plugins/kibana_utils/public';
import { SharePluginStart } from 'src/plugins/share/public';
import { SavedObjectsStart, SavedObject } from 'src/plugins/saved_objects/public';
import { EmbeddableStart } from 'src/plugins/embeddable/public';
import { EmbeddableStart, EmbeddableStateTransfer } from 'src/plugins/embeddable/public';
import { UrlForwardingStart } from 'src/plugins/url_forwarding/public';
import { EventEmitter } from 'events';
import { DashboardStart } from '../../../dashboard/public';
Expand Down Expand Up @@ -95,6 +95,7 @@ export interface EditorRenderProps {
}

export interface VisualizeServices extends CoreStart {
stateTransferService: EmbeddableStateTransfer;
embeddable: EmbeddableStart;
history: History;
kbnUrlStateStorage: IKbnUrlStateStorage;
Expand Down
46 changes: 27 additions & 19 deletions src/plugins/visualize/public/application/utils/breadcrumbs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,8 @@ import { i18n } from '@kbn/i18n';

import { VisualizeConstants } from '../visualize_constants';

const appPrefixes: Record<string, any> = {
dashboards: {
text: i18n.translate('visualize.dashboard.prefix.breadcrumb', {
defaultMessage: 'Dashboard',
}),
},
};

const defaultEditText = i18n.translate('visualize.editor.defaultEditBreadcrumbText', {
defaultMessage: 'Edit',
defaultMessage: 'Edit visualization',
});

export function getLandingBreadcrumbs() {
Expand All @@ -44,9 +36,18 @@ export function getLandingBreadcrumbs() {
];
}

export function getCreateBreadcrumbs() {
export function getCreateBreadcrumbs({
byValue,
originatingAppName,
redirectToOrigin,
}: {
byValue?: boolean;
originatingAppName?: string;
redirectToOrigin?: () => void;
}) {
return [
...getLandingBreadcrumbs(),
...(originatingAppName ? [{ text: originatingAppName, onClick: redirectToOrigin }] : []),
...(!byValue ? getLandingBreadcrumbs() : []),
{
text: i18n.translate('visualize.editor.createBreadcrumb', {
defaultMessage: 'Create',
Expand All @@ -55,16 +56,23 @@ export function getCreateBreadcrumbs() {
];
}

export function getBreadcrumbsPrefixedWithApp(originatingApp: string) {
const originatingAppBreadcrumb = appPrefixes[originatingApp];
return [originatingAppBreadcrumb, ...getLandingBreadcrumbs(), { text: defaultEditText }];
}

export function getEditBreadcrumbs(text: string = defaultEditText) {
export function getEditBreadcrumbs(
{
byValue,
originatingAppName,
redirectToOrigin,
}: {
byValue?: boolean;
originatingAppName?: string;
redirectToOrigin?: () => void;
},
title: string = defaultEditText
) {
return [
...getLandingBreadcrumbs(),
...(originatingAppName ? [{ text: originatingAppName, onClick: redirectToOrigin }] : []),
...(!byValue ? getLandingBreadcrumbs() : []),
{
text,
text: title,
},
];
}
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ export const getTopNavConfig = (
stateTransfer.clearEditorState();
}
chrome.docTitle.change(savedVis.lastSavedTitle);
chrome.setBreadcrumbs(getEditBreadcrumbs(savedVis.lastSavedTitle));
chrome.setBreadcrumbs(getEditBreadcrumbs({}, savedVis.lastSavedTitle));

if (id !== visualizationIdFromUrl) {
history.replace({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { getEditBreadcrumbs, getCreateBreadcrumbs } from '../breadcrumbs';
import { VisualizeServices } from '../../types';
import { VisualizeConstants } from '../../visualize_constants';
import { setDefaultEditor } from '../../../services';
import { createEmbeddableStateTransferMock } from '../../../../../embeddable/public/mocks';

const mockDefaultEditorControllerDestroy = jest.fn();
const mockEmbeddableHandlerDestroy = jest.fn();
Expand All @@ -52,7 +53,7 @@ jest.mock('../get_visualization_instance', () => ({
getVisualizationInstance: jest.fn(() => mockSavedVisInstance),
}));
jest.mock('../breadcrumbs', () => ({
getEditBreadcrumbs: jest.fn((text) => text),
getEditBreadcrumbs: jest.fn((args, title) => title),
getCreateBreadcrumbs: jest.fn((text) => text),
}));

Expand Down Expand Up @@ -81,12 +82,15 @@ describe('useSavedVisInstance', () => {
mockServices = ({
...coreStartMock,
toastNotifications,
stateTransferService: createEmbeddableStateTransferMock(),
chrome: { setBreadcrumbs: jest.fn(), docTitle: { change: jest.fn() } },
history: {
location: {
pathname: VisualizeConstants.EDIT_PATH,
},
replace: () => {},
},
dashboard: { dashboardFeatureFlagConfig: { allowByValueEmbeddables: false } },
visualizations: {
all: jest.fn(() => [
{
Expand All @@ -111,7 +115,7 @@ describe('useSavedVisInstance', () => {

test('should not load instance until chrome is defined', () => {
const { result } = renderHook(() =>
useSavedVisInstance(mockServices, eventEmitter, undefined, undefined)
useSavedVisInstance(mockServices, eventEmitter, undefined, undefined, undefined)
);
expect(mockGetVisualizationInstance).not.toHaveBeenCalled();
expect(result.current.visEditorController).toBeUndefined();
Expand All @@ -122,7 +126,7 @@ describe('useSavedVisInstance', () => {
describe('edit saved visualization route', () => {
test('should load instance and initiate an editor if chrome is set up', async () => {
const { result, waitForNextUpdate } = renderHook(() =>
useSavedVisInstance(mockServices, eventEmitter, true, savedVisId)
useSavedVisInstance(mockServices, eventEmitter, true, undefined, savedVisId)
);

result.current.visEditorRef.current = document.createElement('div');
Expand All @@ -131,7 +135,11 @@ describe('useSavedVisInstance', () => {

await waitForNextUpdate();
expect(mockServices.chrome.setBreadcrumbs).toHaveBeenCalledWith('Test Vis');
expect(getEditBreadcrumbs).toHaveBeenCalledWith('Test Vis');
expect(mockServices.chrome.docTitle.change).toHaveBeenCalledWith('Test Vis');
expect(getEditBreadcrumbs).toHaveBeenCalledWith(
{ originatingAppName: undefined, redirectToOrigin: undefined },
'Test Vis'
);
expect(getCreateBreadcrumbs).not.toHaveBeenCalled();
expect(mockEmbeddableHandlerRender).not.toHaveBeenCalled();
expect(result.current.visEditorController).toBeDefined();
Expand All @@ -140,7 +148,7 @@ describe('useSavedVisInstance', () => {

test('should destroy the editor and the savedVis on unmount if chrome exists', async () => {
const { result, unmount, waitForNextUpdate } = renderHook(() =>
useSavedVisInstance(mockServices, eventEmitter, true, savedVisId)
useSavedVisInstance(mockServices, eventEmitter, true, undefined, savedVisId)
);

result.current.visEditorRef.current = document.createElement('div');
Expand All @@ -167,7 +175,7 @@ describe('useSavedVisInstance', () => {

test('should create new visualization based on search params', async () => {
const { result, waitForNextUpdate } = renderHook(() =>
useSavedVisInstance(mockServices, eventEmitter, true, undefined)
useSavedVisInstance(mockServices, eventEmitter, true, undefined, undefined)
);

result.current.visEditorRef.current = document.createElement('div');
Expand All @@ -191,7 +199,7 @@ describe('useSavedVisInstance', () => {
search: '?type=myVisType&indexPattern=1a2b3c4d',
};

renderHook(() => useSavedVisInstance(mockServices, eventEmitter, true, undefined));
renderHook(() => useSavedVisInstance(mockServices, eventEmitter, true, undefined, undefined));

expect(mockGetVisualizationInstance).not.toHaveBeenCalled();
expect(redirectWhenMissing).toHaveBeenCalled();
Expand All @@ -204,7 +212,7 @@ describe('useSavedVisInstance', () => {
search: '?type=area',
};

renderHook(() => useSavedVisInstance(mockServices, eventEmitter, true, undefined));
renderHook(() => useSavedVisInstance(mockServices, eventEmitter, true, undefined, undefined));

expect(mockGetVisualizationInstance).not.toHaveBeenCalled();
expect(redirectWhenMissing).toHaveBeenCalled();
Expand All @@ -215,7 +223,7 @@ describe('useSavedVisInstance', () => {
describe('embeded mode', () => {
test('should create new visualization based on search params', async () => {
const { result, unmount, waitForNextUpdate } = renderHook(() =>
useSavedVisInstance(mockServices, eventEmitter, false, savedVisId)
useSavedVisInstance(mockServices, eventEmitter, false, undefined, savedVisId)
);

// mock editor ref
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export const useSavedVisInstance = (
services: VisualizeServices,
eventEmitter: EventEmitter,
isChromeVisible: boolean | undefined,
originatingApp: string | undefined,
visualizationIdFromUrl: string | undefined
) => {
const [state, setState] = useState<{
Expand All @@ -49,12 +50,14 @@ export const useSavedVisInstance = (

useEffect(() => {
const {
application: { navigateToApp },
chrome,
history,
http: { basePath },
dashboard,
setActiveUrl,
toastNotifications,
http: { basePath },
stateTransferService,
application: { navigateToApp },
} = services;
const getSavedVisInstance = async () => {
try {
Expand Down Expand Up @@ -93,11 +96,25 @@ export const useSavedVisInstance = (

const { embeddableHandler, savedVis, vis } = savedVisInstance;

const originatingAppName = originatingApp
? stateTransferService.getAppNameFromId(originatingApp)
: undefined;
const redirectToOrigin = originatingApp ? () => navigateToApp(originatingApp) : undefined;
const byValueCreateMode = dashboard.dashboardFeatureFlagConfig.allowByValueEmbeddables;

if (savedVis.id) {
chrome.setBreadcrumbs(getEditBreadcrumbs(savedVis.title));
chrome.setBreadcrumbs(
getEditBreadcrumbs({ originatingAppName, redirectToOrigin }, savedVis.title)
);
chrome.docTitle.change(savedVis.title);
} else {
chrome.setBreadcrumbs(getCreateBreadcrumbs());
chrome.setBreadcrumbs(
getCreateBreadcrumbs({
byValue: byValueCreateMode,
originatingAppName,
redirectToOrigin,
})
);
}

let visEditorController;
Expand Down Expand Up @@ -174,6 +191,7 @@ export const useSavedVisInstance = (
}, [
eventEmitter,
isChromeVisible,
originatingApp,
services,
state.savedVisInstance,
state.visEditorController,
Expand Down
Loading

0 comments on commit 79fe1ab

Please sign in to comment.