mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
[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>
This commit is contained in:
parent
c5e987bc8a
commit
a74c4cc8c4
11 changed files with 95 additions and 23 deletions
|
@ -33,7 +33,6 @@ type CircularDepList = Set<string>;
|
|||
const allowedList: CircularDepList = new Set([
|
||||
'src/plugins/charts -> src/plugins/discover',
|
||||
'src/plugins/vis_default_editor -> src/plugins/visualizations',
|
||||
'src/plugins/vis_default_editor -> src/plugins/visualize',
|
||||
'src/plugins/visualizations -> src/plugins/visualize',
|
||||
'x-pack/plugins/actions -> x-pack/plugins/case',
|
||||
'x-pack/plugins/case -> x-pack/plugins/security_solution',
|
||||
|
|
|
@ -2,5 +2,6 @@
|
|||
"id": "visDefaultEditor",
|
||||
"version": "kibana",
|
||||
"ui": true,
|
||||
"optionalPlugins": ["visualize"],
|
||||
"requiredBundles": ["kibanaUtils", "kibanaReact", "data"]
|
||||
}
|
||||
|
|
|
@ -17,7 +17,11 @@
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
export { DefaultEditorController } from './default_editor_controller';
|
||||
import { PluginInitializerContext } from 'kibana/public';
|
||||
import { DefaultEditorController } from './default_editor_controller';
|
||||
import { VisDefaultEditorPlugin } from './plugin';
|
||||
|
||||
export { DefaultEditorController };
|
||||
export { useValidation } from './components/controls/utils';
|
||||
export * from './components/options';
|
||||
export { RangesParamEditor, RangeValues } from './components/controls/ranges';
|
||||
|
@ -26,10 +30,6 @@ export * from './vis_options_props';
|
|||
export * from './utils';
|
||||
export { ISchemas, Schemas, Schema } from './schemas';
|
||||
|
||||
/** dummy plugin, we just want visDefaultEditor to have its own bundle */
|
||||
export function plugin() {
|
||||
return new (class VisDefaultEditor {
|
||||
setup() {}
|
||||
start() {}
|
||||
})();
|
||||
}
|
||||
export const plugin = (context: PluginInitializerContext) => {
|
||||
return new VisDefaultEditorPlugin();
|
||||
};
|
||||
|
|
40
src/plugins/vis_default_editor/public/plugin.ts
Normal file
40
src/plugins/vis_default_editor/public/plugin.ts
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch B.V. under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch B.V. licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import { CoreSetup, Plugin } from 'kibana/public';
|
||||
|
||||
import { VisualizePluginSetup } from '../../visualize/public';
|
||||
import { DefaultEditorController } from './default_editor_controller';
|
||||
|
||||
export interface VisDefaultEditorSetupDependencies {
|
||||
visualize: VisualizePluginSetup;
|
||||
}
|
||||
|
||||
export class VisDefaultEditorPlugin
|
||||
implements Plugin<void, void, VisDefaultEditorSetupDependencies, {}> {
|
||||
public setup(core: CoreSetup, { visualize }: VisDefaultEditorSetupDependencies) {
|
||||
if (visualize) {
|
||||
visualize.setDefaultEditor(DefaultEditorController);
|
||||
}
|
||||
}
|
||||
|
||||
public start() {}
|
||||
|
||||
stop() {}
|
||||
}
|
|
@ -22,8 +22,7 @@
|
|||
"kibanaUtils",
|
||||
"kibanaReact",
|
||||
"home",
|
||||
"discover",
|
||||
"visDefaultEditor",
|
||||
"presentationUtil"
|
||||
"presentationUtil",
|
||||
"discover"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import { redirectWhenMissing } from '../../../../../kibana_utils/public';
|
|||
import { getEditBreadcrumbs, getCreateBreadcrumbs } from '../breadcrumbs';
|
||||
import { VisualizeServices } from '../../types';
|
||||
import { VisualizeConstants } from '../../visualize_constants';
|
||||
import { setDefaultEditor } from '../../../services';
|
||||
|
||||
const mockDefaultEditorControllerDestroy = jest.fn();
|
||||
const mockEmbeddableHandlerDestroy = jest.fn();
|
||||
|
@ -54,10 +55,14 @@ jest.mock('../breadcrumbs', () => ({
|
|||
getEditBreadcrumbs: jest.fn((text) => text),
|
||||
getCreateBreadcrumbs: jest.fn((text) => text),
|
||||
}));
|
||||
jest.mock('../../../../../vis_default_editor/public', () => ({
|
||||
DefaultEditorController: jest.fn(() => ({ destroy: mockDefaultEditorControllerDestroy })),
|
||||
}));
|
||||
jest.mock('../../../../../kibana_utils/public');
|
||||
|
||||
jest.mock('../../../../../kibana_utils/public', () => {
|
||||
const actual = jest.requireActual('../../../../../kibana_utils/public');
|
||||
return {
|
||||
...actual,
|
||||
redirectWhenMissing: jest.fn(),
|
||||
};
|
||||
});
|
||||
|
||||
const mockGetVisualizationInstance = jest.requireMock('../get_visualization_instance')
|
||||
.getVisualizationInstance;
|
||||
|
@ -69,6 +74,10 @@ describe('useSavedVisInstance', () => {
|
|||
const eventEmitter = new EventEmitter();
|
||||
|
||||
beforeEach(() => {
|
||||
setDefaultEditor(
|
||||
jest.fn().mockImplementation(() => ({ destroy: mockDefaultEditorControllerDestroy }))
|
||||
);
|
||||
|
||||
mockServices = ({
|
||||
...coreStartMock,
|
||||
toastNotifications,
|
||||
|
|
|
@ -23,12 +23,12 @@ import { parse } from 'query-string';
|
|||
import { i18n } from '@kbn/i18n';
|
||||
|
||||
import { redirectWhenMissing } from '../../../../../kibana_utils/public';
|
||||
import { DefaultEditorController } from '../../../../../vis_default_editor/public';
|
||||
|
||||
import { getVisualizationInstance } from '../get_visualization_instance';
|
||||
import { getEditBreadcrumbs, getCreateBreadcrumbs } from '../breadcrumbs';
|
||||
import { SavedVisInstance, IEditorController, VisualizeServices } from '../../types';
|
||||
import { VisualizeConstants } from '../../visualize_constants';
|
||||
import { getDefaultEditor } from '../../../services';
|
||||
|
||||
/**
|
||||
* This effect is responsible for instantiating a saved vis or creating a new one
|
||||
|
@ -104,7 +104,7 @@ export const useSavedVisInstance = (
|
|||
// do not create editor in embeded mode
|
||||
if (visEditorRef.current) {
|
||||
if (isChromeVisible) {
|
||||
const Editor = vis.type.editor || DefaultEditorController;
|
||||
const Editor = vis.type.editor || getDefaultEditor();
|
||||
visEditorController = new Editor(
|
||||
visEditorRef.current,
|
||||
vis,
|
||||
|
|
|
@ -23,7 +23,7 @@ import { VisualizeInput } from 'src/plugins/visualizations/public';
|
|||
import { ByValueVisInstance, IEditorController, VisualizeServices } from '../../types';
|
||||
import { getVisualizationInstanceFromInput } from '../get_visualization_instance';
|
||||
import { getBreadcrumbsPrefixedWithApp, getEditBreadcrumbs } from '../breadcrumbs';
|
||||
import { DefaultEditorController } from '../../../../../vis_default_editor/public';
|
||||
import { getDefaultEditor } from '../../../services';
|
||||
|
||||
export const useVisByValue = (
|
||||
services: VisualizeServices,
|
||||
|
@ -46,7 +46,8 @@ export const useVisByValue = (
|
|||
}
|
||||
const byValueVisInstance = await getVisualizationInstanceFromInput(services, valueInput);
|
||||
const { embeddableHandler, vis } = byValueVisInstance;
|
||||
const Editor = vis.type.editor || DefaultEditorController;
|
||||
|
||||
const Editor = vis.type.editor || getDefaultEditor();
|
||||
const visEditorController = new Editor(
|
||||
visEditorRef.current,
|
||||
vis,
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
import { PluginInitializerContext } from 'kibana/public';
|
||||
import { VisualizePlugin } from './plugin';
|
||||
import { VisualizePlugin, VisualizePluginSetup } from './plugin';
|
||||
|
||||
export type {
|
||||
EditorRenderProps,
|
||||
|
@ -27,6 +27,8 @@ export type {
|
|||
} from './application/types';
|
||||
export { VisualizeConstants } from './application/visualize_constants';
|
||||
|
||||
export { VisualizePluginSetup };
|
||||
|
||||
export const plugin = (context: PluginInitializerContext) => {
|
||||
return new VisualizePlugin(context);
|
||||
};
|
||||
|
|
|
@ -44,7 +44,7 @@ import { UrlForwardingSetup, UrlForwardingStart } from '../../url_forwarding/pub
|
|||
import { VisualizationsStart } from '../../visualizations/public';
|
||||
import { VisualizeConstants } from './application/visualize_constants';
|
||||
import { FeatureCatalogueCategory, HomePublicPluginSetup } from '../../home/public';
|
||||
import { VisualizeServices } from './application/types';
|
||||
import { VisEditorConstructor, VisualizeServices } from './application/types';
|
||||
import { DEFAULT_APP_CATEGORIES } from '../../../core/public';
|
||||
import { SavedObjectsStart } from '../../saved_objects/public';
|
||||
import { EmbeddableStart } from '../../embeddable/public';
|
||||
|
@ -57,6 +57,7 @@ import {
|
|||
setIndexPatterns,
|
||||
setQueryService,
|
||||
setShareService,
|
||||
setDefaultEditor,
|
||||
} from './services';
|
||||
import { visualizeFieldAction } from './actions/visualize_field_action';
|
||||
import { createVisualizeUrlGenerator } from './url_generator';
|
||||
|
@ -81,9 +82,18 @@ export interface VisualizePluginSetupDependencies {
|
|||
uiActions: UiActionsSetup;
|
||||
}
|
||||
|
||||
export interface VisualizePluginSetup {
|
||||
setDefaultEditor: (editor: VisEditorConstructor) => void;
|
||||
}
|
||||
|
||||
export class VisualizePlugin
|
||||
implements
|
||||
Plugin<void, void, VisualizePluginSetupDependencies, VisualizePluginStartDependencies> {
|
||||
Plugin<
|
||||
VisualizePluginSetup,
|
||||
void,
|
||||
VisualizePluginSetupDependencies,
|
||||
VisualizePluginStartDependencies
|
||||
> {
|
||||
private appStateUpdater = new BehaviorSubject<AppUpdater>(() => ({}));
|
||||
private stopUrlTracking: (() => void) | undefined = undefined;
|
||||
private currentHistory: ScopedHistory | undefined = undefined;
|
||||
|
@ -231,6 +241,12 @@ export class VisualizePlugin
|
|||
category: FeatureCatalogueCategory.DATA,
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
setDefaultEditor: (editor) => {
|
||||
setDefaultEditor(editor);
|
||||
},
|
||||
} as VisualizePluginSetup;
|
||||
}
|
||||
|
||||
public start(core: CoreStart, plugins: VisualizePluginStartDependencies) {
|
||||
|
|
|
@ -21,6 +21,7 @@ import { ApplicationStart, IUiSettingsClient } from '../../../core/public';
|
|||
import { createGetterSetter } from '../../../plugins/kibana_utils/public';
|
||||
import { IndexPatternsContract, DataPublicPluginStart } from '../../../plugins/data/public';
|
||||
import { SharePluginStart } from '../../../plugins/share/public';
|
||||
import { VisEditorConstructor } from './application/types';
|
||||
|
||||
export const [getUISettings, setUISettings] = createGetterSetter<IUiSettingsClient>('UISettings');
|
||||
|
||||
|
@ -32,6 +33,10 @@ export const [getIndexPatterns, setIndexPatterns] = createGetterSetter<IndexPatt
|
|||
'IndexPatterns'
|
||||
);
|
||||
|
||||
export const [getDefaultEditor, setDefaultEditor] = createGetterSetter<VisEditorConstructor>(
|
||||
'DefaultEditor'
|
||||
);
|
||||
|
||||
export const [getQueryService, setQueryService] = createGetterSetter<
|
||||
DataPublicPluginStart['query']
|
||||
>('Query');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue