Skip to content

Commit a74c4cc

Browse files
[Visualizations] Remove vis_default_editor - visualize plugins cyclic dependencies (#85422) (#86753)
* [Visualizations] Remove vis_default_editor - visualize plugins cyclic dependencies # Conflicts: # src/plugins/visualize/kibana.json * fix CI * fix CI Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
1 parent c5e987b commit a74c4cc

File tree

11 files changed

+95
-23
lines changed

11 files changed

+95
-23
lines changed

src/dev/run_find_plugins_with_circular_deps.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ type CircularDepList = Set<string>;
3333
const allowedList: CircularDepList = new Set([
3434
'src/plugins/charts -> src/plugins/discover',
3535
'src/plugins/vis_default_editor -> src/plugins/visualizations',
36-
'src/plugins/vis_default_editor -> src/plugins/visualize',
3736
'src/plugins/visualizations -> src/plugins/visualize',
3837
'x-pack/plugins/actions -> x-pack/plugins/case',
3938
'x-pack/plugins/case -> x-pack/plugins/security_solution',

src/plugins/vis_default_editor/kibana.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
"id": "visDefaultEditor",
33
"version": "kibana",
44
"ui": true,
5+
"optionalPlugins": ["visualize"],
56
"requiredBundles": ["kibanaUtils", "kibanaReact", "data"]
67
}

src/plugins/vis_default_editor/public/index.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@
1717
* under the License.
1818
*/
1919

20-
export { DefaultEditorController } from './default_editor_controller';
20+
import { PluginInitializerContext } from 'kibana/public';
21+
import { DefaultEditorController } from './default_editor_controller';
22+
import { VisDefaultEditorPlugin } from './plugin';
23+
24+
export { DefaultEditorController };
2125
export { useValidation } from './components/controls/utils';
2226
export * from './components/options';
2327
export { RangesParamEditor, RangeValues } from './components/controls/ranges';
@@ -26,10 +30,6 @@ export * from './vis_options_props';
2630
export * from './utils';
2731
export { ISchemas, Schemas, Schema } from './schemas';
2832

29-
/** dummy plugin, we just want visDefaultEditor to have its own bundle */
30-
export function plugin() {
31-
return new (class VisDefaultEditor {
32-
setup() {}
33-
start() {}
34-
})();
35-
}
33+
export const plugin = (context: PluginInitializerContext) => {
34+
return new VisDefaultEditorPlugin();
35+
};
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Licensed to Elasticsearch B.V. under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch B.V. licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
import { CoreSetup, Plugin } from 'kibana/public';
21+
22+
import { VisualizePluginSetup } from '../../visualize/public';
23+
import { DefaultEditorController } from './default_editor_controller';
24+
25+
export interface VisDefaultEditorSetupDependencies {
26+
visualize: VisualizePluginSetup;
27+
}
28+
29+
export class VisDefaultEditorPlugin
30+
implements Plugin<void, void, VisDefaultEditorSetupDependencies, {}> {
31+
public setup(core: CoreSetup, { visualize }: VisDefaultEditorSetupDependencies) {
32+
if (visualize) {
33+
visualize.setDefaultEditor(DefaultEditorController);
34+
}
35+
}
36+
37+
public start() {}
38+
39+
stop() {}
40+
}

src/plugins/visualize/kibana.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
"kibanaUtils",
2323
"kibanaReact",
2424
"home",
25-
"discover",
26-
"visDefaultEditor",
27-
"presentationUtil"
25+
"presentationUtil",
26+
"discover"
2827
]
2928
}

src/plugins/visualize/public/application/utils/use/use_saved_vis_instance.test.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { redirectWhenMissing } from '../../../../../kibana_utils/public';
2626
import { getEditBreadcrumbs, getCreateBreadcrumbs } from '../breadcrumbs';
2727
import { VisualizeServices } from '../../types';
2828
import { VisualizeConstants } from '../../visualize_constants';
29+
import { setDefaultEditor } from '../../../services';
2930

3031
const mockDefaultEditorControllerDestroy = jest.fn();
3132
const mockEmbeddableHandlerDestroy = jest.fn();
@@ -54,10 +55,14 @@ jest.mock('../breadcrumbs', () => ({
5455
getEditBreadcrumbs: jest.fn((text) => text),
5556
getCreateBreadcrumbs: jest.fn((text) => text),
5657
}));
57-
jest.mock('../../../../../vis_default_editor/public', () => ({
58-
DefaultEditorController: jest.fn(() => ({ destroy: mockDefaultEditorControllerDestroy })),
59-
}));
60-
jest.mock('../../../../../kibana_utils/public');
58+
59+
jest.mock('../../../../../kibana_utils/public', () => {
60+
const actual = jest.requireActual('../../../../../kibana_utils/public');
61+
return {
62+
...actual,
63+
redirectWhenMissing: jest.fn(),
64+
};
65+
});
6166

6267
const mockGetVisualizationInstance = jest.requireMock('../get_visualization_instance')
6368
.getVisualizationInstance;
@@ -69,6 +74,10 @@ describe('useSavedVisInstance', () => {
6974
const eventEmitter = new EventEmitter();
7075

7176
beforeEach(() => {
77+
setDefaultEditor(
78+
jest.fn().mockImplementation(() => ({ destroy: mockDefaultEditorControllerDestroy }))
79+
);
80+
7281
mockServices = ({
7382
...coreStartMock,
7483
toastNotifications,

src/plugins/visualize/public/application/utils/use/use_saved_vis_instance.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ import { parse } from 'query-string';
2323
import { i18n } from '@kbn/i18n';
2424

2525
import { redirectWhenMissing } from '../../../../../kibana_utils/public';
26-
import { DefaultEditorController } from '../../../../../vis_default_editor/public';
2726

2827
import { getVisualizationInstance } from '../get_visualization_instance';
2928
import { getEditBreadcrumbs, getCreateBreadcrumbs } from '../breadcrumbs';
3029
import { SavedVisInstance, IEditorController, VisualizeServices } from '../../types';
3130
import { VisualizeConstants } from '../../visualize_constants';
31+
import { getDefaultEditor } from '../../../services';
3232

3333
/**
3434
* This effect is responsible for instantiating a saved vis or creating a new one
@@ -104,7 +104,7 @@ export const useSavedVisInstance = (
104104
// do not create editor in embeded mode
105105
if (visEditorRef.current) {
106106
if (isChromeVisible) {
107-
const Editor = vis.type.editor || DefaultEditorController;
107+
const Editor = vis.type.editor || getDefaultEditor();
108108
visEditorController = new Editor(
109109
visEditorRef.current,
110110
vis,

src/plugins/visualize/public/application/utils/use/use_vis_byvalue.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { VisualizeInput } from 'src/plugins/visualizations/public';
2323
import { ByValueVisInstance, IEditorController, VisualizeServices } from '../../types';
2424
import { getVisualizationInstanceFromInput } from '../get_visualization_instance';
2525
import { getBreadcrumbsPrefixedWithApp, getEditBreadcrumbs } from '../breadcrumbs';
26-
import { DefaultEditorController } from '../../../../../vis_default_editor/public';
26+
import { getDefaultEditor } from '../../../services';
2727

2828
export const useVisByValue = (
2929
services: VisualizeServices,
@@ -46,7 +46,8 @@ export const useVisByValue = (
4646
}
4747
const byValueVisInstance = await getVisualizationInstanceFromInput(services, valueInput);
4848
const { embeddableHandler, vis } = byValueVisInstance;
49-
const Editor = vis.type.editor || DefaultEditorController;
49+
50+
const Editor = vis.type.editor || getDefaultEditor();
5051
const visEditorController = new Editor(
5152
visEditorRef.current,
5253
vis,

src/plugins/visualize/public/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
import { PluginInitializerContext } from 'kibana/public';
21-
import { VisualizePlugin } from './plugin';
21+
import { VisualizePlugin, VisualizePluginSetup } from './plugin';
2222

2323
export type {
2424
EditorRenderProps,
@@ -27,6 +27,8 @@ export type {
2727
} from './application/types';
2828
export { VisualizeConstants } from './application/visualize_constants';
2929

30+
export { VisualizePluginSetup };
31+
3032
export const plugin = (context: PluginInitializerContext) => {
3133
return new VisualizePlugin(context);
3234
};

src/plugins/visualize/public/plugin.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import { UrlForwardingSetup, UrlForwardingStart } from '../../url_forwarding/pub
4444
import { VisualizationsStart } from '../../visualizations/public';
4545
import { VisualizeConstants } from './application/visualize_constants';
4646
import { FeatureCatalogueCategory, HomePublicPluginSetup } from '../../home/public';
47-
import { VisualizeServices } from './application/types';
47+
import { VisEditorConstructor, VisualizeServices } from './application/types';
4848
import { DEFAULT_APP_CATEGORIES } from '../../../core/public';
4949
import { SavedObjectsStart } from '../../saved_objects/public';
5050
import { EmbeddableStart } from '../../embeddable/public';
@@ -57,6 +57,7 @@ import {
5757
setIndexPatterns,
5858
setQueryService,
5959
setShareService,
60+
setDefaultEditor,
6061
} from './services';
6162
import { visualizeFieldAction } from './actions/visualize_field_action';
6263
import { createVisualizeUrlGenerator } from './url_generator';
@@ -81,9 +82,18 @@ export interface VisualizePluginSetupDependencies {
8182
uiActions: UiActionsSetup;
8283
}
8384

85+
export interface VisualizePluginSetup {
86+
setDefaultEditor: (editor: VisEditorConstructor) => void;
87+
}
88+
8489
export class VisualizePlugin
8590
implements
86-
Plugin<void, void, VisualizePluginSetupDependencies, VisualizePluginStartDependencies> {
91+
Plugin<
92+
VisualizePluginSetup,
93+
void,
94+
VisualizePluginSetupDependencies,
95+
VisualizePluginStartDependencies
96+
> {
8797
private appStateUpdater = new BehaviorSubject<AppUpdater>(() => ({}));
8898
private stopUrlTracking: (() => void) | undefined = undefined;
8999
private currentHistory: ScopedHistory | undefined = undefined;
@@ -231,6 +241,12 @@ export class VisualizePlugin
231241
category: FeatureCatalogueCategory.DATA,
232242
});
233243
}
244+
245+
return {
246+
setDefaultEditor: (editor) => {
247+
setDefaultEditor(editor);
248+
},
249+
} as VisualizePluginSetup;
234250
}
235251

236252
public start(core: CoreStart, plugins: VisualizePluginStartDependencies) {

0 commit comments

Comments
 (0)