mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
visualize embeddable to visualizations plugin (#54840)
This commit is contained in:
parent
63ad7a9cb2
commit
297aa7bd23
36 changed files with 200 additions and 191 deletions
|
@ -61,10 +61,7 @@ export default function(kibana) {
|
|||
|
||||
uiExports: {
|
||||
hacks: ['plugins/kibana/discover', 'plugins/kibana/dev_tools', 'plugins/kibana/visualize'],
|
||||
savedObjectTypes: [
|
||||
'plugins/kibana/visualize/saved_visualizations/saved_visualization_register',
|
||||
'plugins/kibana/dashboard/saved_dashboard/saved_dashboard_register',
|
||||
],
|
||||
savedObjectTypes: ['plugins/kibana/dashboard/saved_dashboard/saved_dashboard_register'],
|
||||
app: {
|
||||
id: 'kibana',
|
||||
title: 'Kibana',
|
||||
|
|
|
@ -65,6 +65,6 @@ export { ensureDefaultIndexPattern } from 'ui/legacy_compat';
|
|||
export { unhashUrl } from '../../../../../plugins/kibana_utils/public';
|
||||
export { IInjector } from 'ui/chrome';
|
||||
export { SavedObjectLoader } from 'ui/saved_objects';
|
||||
export { VISUALIZE_EMBEDDABLE_TYPE } from '../visualize_embeddable';
|
||||
export { VISUALIZE_EMBEDDABLE_TYPE } from '../../../visualizations/public/embeddable';
|
||||
export { registerTimefilterWithGlobalStateFactory } from 'ui/timefilter/setup_router';
|
||||
export { absoluteToParsedUrl } from 'ui/url/absolute_to_parsed_url';
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
|
||||
// Visualize styles
|
||||
@import './visualize/index';
|
||||
@import './visualize_embeddable/index';
|
||||
// Has to come after visualize because of some
|
||||
// bad cascading in the Editor layout
|
||||
@import 'src/legacy/ui/public/vis/index';
|
||||
|
|
|
@ -72,6 +72,5 @@ export { VisType } from 'ui/vis';
|
|||
export { wrapInI18nContext } from 'ui/i18n';
|
||||
|
||||
export { DashboardConstants } from '../dashboard/np_ready/dashboard_constants';
|
||||
export { VisSavedObject } from '../visualize_embeddable/visualize_embeddable';
|
||||
export { VISUALIZE_EMBEDDABLE_TYPE } from '../visualize_embeddable';
|
||||
export { VisualizeEmbeddableFactory } from '../visualize_embeddable/visualize_embeddable_factory';
|
||||
export { VisSavedObject } from '../../../visualizations/public/embeddable/visualize_embeddable';
|
||||
export { VISUALIZE_EMBEDDABLE_TYPE } from '../../../visualizations/public/embeddable';
|
||||
|
|
|
@ -27,6 +27,9 @@ import {
|
|||
SavedObjectsClientContract,
|
||||
} from 'kibana/public';
|
||||
|
||||
// @ts-ignore
|
||||
import { uiModules } from 'ui/modules';
|
||||
|
||||
import { Storage } from '../../../../../plugins/kibana_utils/public';
|
||||
import { DataPublicPluginStart } from '../../../../../plugins/data/public';
|
||||
import { IEmbeddableStart } from '../../../../../plugins/embeddable/public';
|
||||
|
@ -40,14 +43,11 @@ import {
|
|||
FeatureCatalogueCategory,
|
||||
HomePublicPluginSetup,
|
||||
} from '../../../../../plugins/home/public';
|
||||
import {
|
||||
defaultEditor,
|
||||
VisEditorTypesRegistryProvider,
|
||||
VisualizeEmbeddableFactory,
|
||||
VISUALIZE_EMBEDDABLE_TYPE,
|
||||
} from './legacy_imports';
|
||||
import { defaultEditor, VisEditorTypesRegistryProvider } from './legacy_imports';
|
||||
import { UsageCollectionSetup } from '../../../../../plugins/usage_collection/public';
|
||||
import { createSavedVisLoader } from './saved_visualizations/saved_visualizations';
|
||||
// @ts-ignore
|
||||
import { savedObjectManagementRegistry } from '../management/saved_object_registry';
|
||||
|
||||
export interface LegacyAngularInjectedDependencies {
|
||||
legacyChrome: any;
|
||||
|
@ -113,6 +113,7 @@ export class VisualizePlugin implements Plugin {
|
|||
indexPatterns: data.indexPatterns,
|
||||
chrome: contextCore.chrome,
|
||||
overlays: contextCore.overlays,
|
||||
visualizations,
|
||||
});
|
||||
const deps: VisualizeKibanaServices = {
|
||||
...angularDependencies,
|
||||
|
@ -159,19 +160,32 @@ export class VisualizePlugin implements Plugin {
|
|||
}
|
||||
|
||||
public start(
|
||||
{ savedObjects: { client: savedObjectsClient } }: CoreStart,
|
||||
core: CoreStart,
|
||||
{ embeddables, navigation, data, share, visualizations }: VisualizePluginStartDependencies
|
||||
) {
|
||||
this.startDependencies = {
|
||||
data,
|
||||
embeddables,
|
||||
navigation,
|
||||
savedObjectsClient,
|
||||
savedObjectsClient: core.savedObjects.client,
|
||||
share,
|
||||
visualizations,
|
||||
};
|
||||
|
||||
const embeddableFactory = new VisualizeEmbeddableFactory(visualizations.types);
|
||||
embeddables.registerEmbeddableFactory(VISUALIZE_EMBEDDABLE_TYPE, embeddableFactory);
|
||||
const savedVisualizations = createSavedVisLoader({
|
||||
savedObjectsClient: core.savedObjects.client,
|
||||
indexPatterns: data.indexPatterns,
|
||||
chrome: core.chrome,
|
||||
overlays: core.overlays,
|
||||
visualizations,
|
||||
});
|
||||
|
||||
// TODO: remove once savedobjectregistry is refactored
|
||||
savedObjectManagementRegistry.register({
|
||||
service: 'savedVisualizations',
|
||||
title: 'visualizations',
|
||||
});
|
||||
|
||||
uiModules.get('app/visualize').service('savedVisualizations', () => savedVisualizations);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ import { IIndexPattern } from '../../../../../../plugins/data/public';
|
|||
import { VisSavedObject } from '../legacy_imports';
|
||||
|
||||
import { createSavedSearchesService } from '../../discover';
|
||||
import { VisualizeConstants } from '..';
|
||||
import { VisualizeConstants } from '../np_ready/visualize_constants';
|
||||
|
||||
async function _afterEsResp(savedVis: VisSavedObject, services: any) {
|
||||
await _getLinkedSavedSearch(savedVis, services);
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
import { extractReferences, injectReferences } from './saved_visualization_references';
|
||||
import { VisSavedObject } from '../../visualize_embeddable/visualize_embeddable';
|
||||
import { VisSavedObject } from '../../../../visualizations/public/embeddable/visualize_embeddable';
|
||||
|
||||
describe('extractReferences', () => {
|
||||
test('extracts nothing if savedSearchId is empty', () => {
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
* under the License.
|
||||
*/
|
||||
import { SavedObjectAttributes, SavedObjectReference } from 'kibana/server';
|
||||
import { VisSavedObject } from '../../visualize_embeddable/visualize_embeddable';
|
||||
import { VisSavedObject } from '../../../../visualizations/public/embeddable/visualize_embeddable';
|
||||
|
||||
export function extractReferences({
|
||||
attributes,
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
/*
|
||||
* 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 { npStart } from 'ui/new_platform';
|
||||
// @ts-ignore
|
||||
import { uiModules } from 'ui/modules';
|
||||
// @ts-ignore
|
||||
import { savedObjectManagementRegistry } from '../../management/saved_object_registry';
|
||||
import './saved_visualizations';
|
||||
import { createSavedVisLoader } from './saved_visualizations';
|
||||
|
||||
const services = {
|
||||
savedObjectsClient: npStart.core.savedObjects.client,
|
||||
indexPatterns: npStart.plugins.data.indexPatterns,
|
||||
chrome: npStart.core.chrome,
|
||||
overlays: npStart.core.overlays,
|
||||
};
|
||||
|
||||
const savedObjectLoaderVisualize = createSavedVisLoader(services);
|
||||
|
||||
// Register this service with the saved object registry so it can be
|
||||
// edited by the object editor.
|
||||
savedObjectManagementRegistry.register({
|
||||
service: 'savedVisualizations',
|
||||
title: 'visualizations',
|
||||
});
|
||||
|
||||
uiModules.get('app/visualize').service('savedVisualizations', () => savedObjectLoaderVisualize);
|
|
@ -19,14 +19,18 @@
|
|||
import { SavedObjectLoader } from 'ui/saved_objects';
|
||||
import { SavedObjectKibanaServices } from 'ui/saved_objects/types';
|
||||
|
||||
import { start as visualizations } from '../../../../visualizations/public/np_ready/public/legacy';
|
||||
// @ts-ignore
|
||||
import { findListItems } from './find_list_items';
|
||||
import { createSavedVisClass } from './_saved_vis';
|
||||
import { createVisualizeEditUrl } from '..';
|
||||
import { createVisualizeEditUrl } from '../np_ready/visualize_constants';
|
||||
import { VisualizationsStart } from '../../../../visualizations/public/np_ready/public';
|
||||
|
||||
export function createSavedVisLoader(services: SavedObjectKibanaServices) {
|
||||
const { savedObjectsClient } = services;
|
||||
interface SavedObjectKibanaServicesWithVisualizations extends SavedObjectKibanaServices {
|
||||
visualizations: VisualizationsStart;
|
||||
}
|
||||
|
||||
export function createSavedVisLoader(services: SavedObjectKibanaServicesWithVisualizations) {
|
||||
const { savedObjectsClient, visualizations } = services;
|
||||
|
||||
class SavedObjectLoaderVisualize extends SavedObjectLoader {
|
||||
mapHitSource = (source: Record<string, any>, id: string) => {
|
||||
|
|
|
@ -26,7 +26,7 @@ export const visualizations: LegacyPluginInitializer = kibana =>
|
|||
publicDir: resolve(__dirname, 'public'),
|
||||
require: [],
|
||||
uiExports: {
|
||||
interpreter: ['plugins/visualizations/expressions/boot'],
|
||||
styleSheetPaths: resolve(__dirname, 'public/index.scss'),
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -29,14 +29,14 @@ export function DisabledLabVisualization({ title }: { title: string }) {
|
|||
/>
|
||||
<div className="kuiVerticalRhythm">
|
||||
<FormattedMessage
|
||||
id="kbn.visualize.disabledLabVisualizationTitle"
|
||||
id="visualizations.disabledLabVisualizationTitle"
|
||||
defaultMessage="{title} is a lab visualization."
|
||||
values={{ title: <em className="visDisabledLabVisualization__title">{title}</em> }}
|
||||
/>
|
||||
</div>
|
||||
<div className="kuiVerticalRhythm">
|
||||
<FormattedMessage
|
||||
id="kbn.visualize.disabledLabVisualizationMessage"
|
||||
id="visualizations.disabledLabVisualizationMessage"
|
||||
defaultMessage="Please turn on lab-mode in the advanced settings to see lab visualizations."
|
||||
/>
|
||||
</div>
|
|
@ -17,10 +17,9 @@
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import { npStart } from 'ui/new_platform';
|
||||
|
||||
import { VisSavedObject } from './visualize_embeddable';
|
||||
import { indexPatterns, IIndexPattern } from '../../../../../plugins/data/public';
|
||||
import { getUISettings, getSavedObjects } from '../np_ready/public/services';
|
||||
|
||||
export async function getIndexPattern(
|
||||
savedVis: VisSavedObject
|
||||
|
@ -29,8 +28,8 @@ export async function getIndexPattern(
|
|||
return savedVis.vis.indexPattern;
|
||||
}
|
||||
|
||||
const savedObjectsClient = npStart.core.savedObjects.client;
|
||||
const defaultIndex = npStart.core.uiSettings.get('defaultIndex');
|
||||
const savedObjectsClient = getSavedObjects().client;
|
||||
const defaultIndex = getUISettings().get('defaultIndex');
|
||||
|
||||
if (savedVis.vis.params.index_pattern) {
|
||||
const indexPatternObjects = await savedObjectsClient.find({
|
|
@ -47,7 +47,7 @@ import {
|
|||
APPLY_FILTER_TRIGGER,
|
||||
} from '../../../../../plugins/embeddable/public';
|
||||
import { dispatchRenderComplete } from '../../../../../plugins/kibana_utils/public';
|
||||
import { SavedSearch } from '../discover/np_ready/types';
|
||||
import { SavedSearch } from '../../../kibana/public/discover/np_ready/types';
|
||||
|
||||
const getKeys = <T extends {}>(o: T): Array<keyof T> => Object.keys(o) as Array<keyof T>;
|
||||
|
|
@ -17,26 +17,9 @@
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import 'uiExports/contextMenuActions';
|
||||
import 'uiExports/devTools';
|
||||
import 'uiExports/docViews';
|
||||
import 'uiExports/embeddableActions';
|
||||
import 'uiExports/fieldFormatEditors';
|
||||
import 'uiExports/fieldFormats';
|
||||
import 'uiExports/indexManagement';
|
||||
import 'uiExports/inspectorViews';
|
||||
import 'uiExports/savedObjectTypes';
|
||||
import 'uiExports/search';
|
||||
import 'uiExports/shareContextMenuExtensions';
|
||||
import 'uiExports/visTypes';
|
||||
import 'uiExports/visualize';
|
||||
|
||||
import { i18n } from '@kbn/i18n';
|
||||
|
||||
import chrome from 'ui/chrome';
|
||||
import { npSetup, npStart } from 'ui/new_platform';
|
||||
|
||||
import { Legacy } from 'kibana';
|
||||
|
||||
import { SavedObjectAttributes } from 'kibana/server';
|
||||
import {
|
||||
|
@ -45,9 +28,8 @@ import {
|
|||
Container,
|
||||
EmbeddableOutput,
|
||||
} from '../../../../../plugins/embeddable/public';
|
||||
import { start as visualizations } from '../../../visualizations/public/np_ready/public/legacy';
|
||||
import { showNewVisModal } from '../visualize';
|
||||
import { SavedVisualizations } from '../visualize/np_ready/types';
|
||||
import { showNewVisModal } from '../../../kibana/public/visualize/np_ready/wizard/show_new_vis';
|
||||
import { SavedVisualizations } from '../../../kibana/public/visualize/np_ready/types';
|
||||
import { DisabledLabEmbeddable } from './disabled_lab_embeddable';
|
||||
import { getIndexPattern } from './get_index_pattern';
|
||||
import {
|
||||
|
@ -57,7 +39,15 @@ import {
|
|||
VisSavedObject,
|
||||
} from './visualize_embeddable';
|
||||
import { VISUALIZE_EMBEDDABLE_TYPE } from './constants';
|
||||
import { TypesStart } from '../../../visualizations/public/np_ready/public/types';
|
||||
|
||||
import {
|
||||
getUISettings,
|
||||
getCapabilities,
|
||||
getHttp,
|
||||
getTypes,
|
||||
getSavedObjects,
|
||||
getUsageCollector,
|
||||
} from '../np_ready/public/services';
|
||||
|
||||
interface VisualizationAttributes extends SavedObjectAttributes {
|
||||
visState: string;
|
||||
|
@ -70,60 +60,48 @@ export class VisualizeEmbeddableFactory extends EmbeddableFactory<
|
|||
VisualizationAttributes
|
||||
> {
|
||||
public readonly type = VISUALIZE_EMBEDDABLE_TYPE;
|
||||
private readonly visTypes: TypesStart;
|
||||
|
||||
static async createVisualizeEmbeddableFactory(): Promise<VisualizeEmbeddableFactory> {
|
||||
return new VisualizeEmbeddableFactory(visualizations.types);
|
||||
return new VisualizeEmbeddableFactory();
|
||||
}
|
||||
|
||||
constructor(visTypes: TypesStart) {
|
||||
constructor() {
|
||||
super({
|
||||
savedObjectMetaData: {
|
||||
name: i18n.translate('kbn.visualize.savedObjectName', { defaultMessage: 'Visualization' }),
|
||||
name: i18n.translate('visualizations.savedObjectName', { defaultMessage: 'Visualization' }),
|
||||
includeFields: ['visState'],
|
||||
type: 'visualization',
|
||||
getIconForSavedObject: savedObject => {
|
||||
if (!visTypes) {
|
||||
return 'visualizeApp';
|
||||
}
|
||||
return (
|
||||
visTypes.get(JSON.parse(savedObject.attributes.visState).type).icon || 'visualizeApp'
|
||||
getTypes().get(JSON.parse(savedObject.attributes.visState).type).icon || 'visualizeApp'
|
||||
);
|
||||
},
|
||||
getTooltipForSavedObject: savedObject => {
|
||||
if (!visTypes) {
|
||||
return '';
|
||||
}
|
||||
return `${savedObject.attributes.title} (${
|
||||
visTypes.get(JSON.parse(savedObject.attributes.visState).type).title
|
||||
getTypes().get(JSON.parse(savedObject.attributes.visState).type).title
|
||||
})`;
|
||||
},
|
||||
showSavedObject: savedObject => {
|
||||
if (!visTypes) {
|
||||
return false;
|
||||
}
|
||||
const typeName: string = JSON.parse(savedObject.attributes.visState).type;
|
||||
const visType = visTypes.get(typeName);
|
||||
const visType = getTypes().get(typeName);
|
||||
if (!visType) {
|
||||
return false;
|
||||
}
|
||||
if (npStart.core.uiSettings.get('visualize:enableLabs')) {
|
||||
if (getUISettings().get('visualize:enableLabs')) {
|
||||
return true;
|
||||
}
|
||||
return visType.stage !== 'experimental';
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.visTypes = visTypes;
|
||||
}
|
||||
|
||||
public isEditable() {
|
||||
return npStart.core.application.capabilities.visualize.save as boolean;
|
||||
return getCapabilities().visualize.save as boolean;
|
||||
}
|
||||
|
||||
public getDisplayName() {
|
||||
return i18n.translate('kbn.embeddable.visualizations.displayName', {
|
||||
return i18n.translate('visualizations.displayName', {
|
||||
defaultMessage: 'visualization',
|
||||
});
|
||||
}
|
||||
|
@ -134,16 +112,15 @@ export class VisualizeEmbeddableFactory extends EmbeddableFactory<
|
|||
parent?: Container
|
||||
): Promise<VisualizeEmbeddable | ErrorEmbeddable | DisabledLabEmbeddable> {
|
||||
const $injector = await chrome.dangerouslyGetActiveInjector();
|
||||
const config = $injector.get<Legacy.KibanaConfig>('config');
|
||||
const savedVisualizations = $injector.get<SavedVisualizations>('savedVisualizations');
|
||||
|
||||
try {
|
||||
const visId = savedObject.id as string;
|
||||
|
||||
const editUrl = visId
|
||||
? npStart.core.http.basePath.prepend(`/app/kibana${savedVisualizations.urlFor(visId)}`)
|
||||
? getHttp().basePath.prepend(`/app/kibana${savedVisualizations.urlFor(visId)}`)
|
||||
: '';
|
||||
const isLabsEnabled = config.get<boolean>('visualize:enableLabs');
|
||||
const isLabsEnabled = getUISettings().get<boolean>('visualize:enableLabs');
|
||||
|
||||
if (!isLabsEnabled && savedObject.vis.type.stage === 'experimental') {
|
||||
return new DisabledLabEmbeddable(savedObject.title, input);
|
||||
|
@ -191,18 +168,16 @@ export class VisualizeEmbeddableFactory extends EmbeddableFactory<
|
|||
public async create() {
|
||||
// TODO: This is a bit of a hack to preserve the original functionality. Ideally we will clean this up
|
||||
// to allow for in place creation of visualizations without having to navigate away to a new URL.
|
||||
if (this.visTypes) {
|
||||
showNewVisModal(
|
||||
this.visTypes,
|
||||
{
|
||||
editorParams: ['addToDashboard'],
|
||||
},
|
||||
npStart.core.http.basePath.prepend,
|
||||
npStart.core.uiSettings,
|
||||
npStart.core.savedObjects,
|
||||
npSetup.plugins.usageCollection
|
||||
);
|
||||
}
|
||||
showNewVisModal(
|
||||
getTypes(),
|
||||
{
|
||||
editorParams: ['addToDashboard'],
|
||||
},
|
||||
getHttp().basePath.prepend,
|
||||
getUISettings(),
|
||||
getSavedObjects(),
|
||||
getUsageCollector()
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
/*
|
||||
* 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 { npSetup } from 'ui/new_platform';
|
||||
import { visualization as visualizationFunction } from './visualization_function';
|
||||
import { visualization as visualizationRenderer } from './visualization_renderer';
|
||||
|
||||
npSetup.plugins.expressions.registerFunction(visualizationFunction);
|
||||
npSetup.plugins.expressions.registerRenderer(visualizationRenderer);
|
|
@ -29,11 +29,8 @@
|
|||
|
||||
import { EventEmitter } from 'events';
|
||||
import _ from 'lodash';
|
||||
import { PersistedState } from '../../persisted_state';
|
||||
|
||||
import { start as visualizations } from '../../../../core_plugins/visualizations/public/np_ready/public/legacy';
|
||||
|
||||
const visTypes = visualizations.types;
|
||||
import { PersistedState } from '../../../../ui/public/persisted_state';
|
||||
import { getTypes } from '../np_ready/public/services';
|
||||
|
||||
export class Vis extends EventEmitter {
|
||||
constructor(visState = { type: 'histogram' }) {
|
||||
|
@ -64,7 +61,7 @@ export class Vis extends EventEmitter {
|
|||
this.title = state.title || '';
|
||||
const type = state.type || this.type;
|
||||
if (_.isString(type)) {
|
||||
this.type = visTypes.get(type);
|
||||
this.type = getTypes().get(type);
|
||||
if (!this.type) {
|
||||
throw new Error(`Invalid type "${type}"`);
|
||||
}
|
|
@ -25,7 +25,7 @@ import { PersistedState } from 'ui/persisted_state';
|
|||
import { VisResponseValue } from 'src/plugins/visualizations/public';
|
||||
import { ExpressionFunction, Render } from 'src/plugins/expressions/public';
|
||||
import { npStart } from 'ui/new_platform';
|
||||
import { start as visualizations } from '../np_ready/public/legacy';
|
||||
import { getTypes } from '../np_ready/public/services';
|
||||
|
||||
interface Arguments {
|
||||
index?: string | null;
|
||||
|
@ -97,7 +97,7 @@ export const visualization = (): ExpressionFunctionVisualization => ({
|
|||
|
||||
const visConfigParams = args.visConfig ? JSON.parse(args.visConfig) : {};
|
||||
const schemas = args.schemas ? JSON.parse(args.schemas) : {};
|
||||
const visType = visualizations.types.get(args.type || 'histogram') as any;
|
||||
const visType = getTypes().get(args.type || 'histogram') as any;
|
||||
const indexPattern = args.index ? await indexPatterns.get(args.index) : null;
|
||||
|
||||
const uiStateParams = args.uiState ? JSON.parse(args.uiState) : {};
|
||||
|
|
|
@ -21,8 +21,8 @@ import chrome from 'ui/chrome';
|
|||
import React from 'react';
|
||||
import { render, unmountComponentAtNode } from 'react-dom';
|
||||
// @ts-ignore
|
||||
import { Vis } from '../../../../ui/public/visualize/loader/vis';
|
||||
import { Visualization } from '../../../visualizations/public/np_ready/public/components';
|
||||
import { Vis } from './vis';
|
||||
import { Visualization } from '../np_ready/public/components';
|
||||
|
||||
export const visualization = () => ({
|
||||
name: 'visualization',
|
||||
|
|
3
src/legacy/core_plugins/visualizations/public/index.scss
Normal file
3
src/legacy/core_plugins/visualizations/public/index.scss
Normal file
|
@ -0,0 +1,3 @@
|
|||
@import 'src/legacy/ui/public/styles/styling_constants';
|
||||
|
||||
@import './embeddable/_index';
|
|
@ -27,5 +27,5 @@ import { plugin } from '.';
|
|||
|
||||
const pluginInstance = plugin({} as PluginInitializerContext);
|
||||
|
||||
export const setup = pluginInstance.setup(npSetup.core);
|
||||
export const start = pluginInstance.start(npStart.core);
|
||||
export const setup = pluginInstance.setup(npSetup.core, npSetup.plugins);
|
||||
export const start = pluginInstance.start(npStart.core, npStart.plugins);
|
||||
|
|
|
@ -28,6 +28,10 @@ import { PluginInitializerContext } from 'src/core/public';
|
|||
import { VisualizationsSetup, VisualizationsStart } from './';
|
||||
import { VisualizationsPlugin } from './plugin';
|
||||
import { coreMock } from '../../../../../../core/public/mocks';
|
||||
import { embeddablePluginMock } from '../../../../../../plugins/embeddable/public/mocks';
|
||||
import { expressionsPluginMock } from '../../../../../../plugins/expressions/public/mocks';
|
||||
import { dataPluginMock } from '../../../../../../plugins/data/public/mocks';
|
||||
import { usageCollectionPluginMock } from '../../../../../../plugins/usage_collection/public/mocks';
|
||||
|
||||
const createSetupContract = (): VisualizationsSetup => ({
|
||||
types: {
|
||||
|
@ -49,8 +53,15 @@ const createStartContract = (): VisualizationsStart => ({
|
|||
const createInstance = async () => {
|
||||
const plugin = new VisualizationsPlugin({} as PluginInitializerContext);
|
||||
|
||||
const setup = plugin.setup(coreMock.createSetup());
|
||||
const doStart = () => plugin.start(coreMock.createStart());
|
||||
const setup = plugin.setup(coreMock.createSetup(), {
|
||||
expressions: expressionsPluginMock.createSetupContract(),
|
||||
embeddable: embeddablePluginMock.createStartContract(),
|
||||
usageCollection: usageCollectionPluginMock.createSetupContract(),
|
||||
});
|
||||
const doStart = () =>
|
||||
plugin.start(coreMock.createStart(), {
|
||||
data: dataPluginMock.createStartContract(),
|
||||
});
|
||||
|
||||
return {
|
||||
plugin,
|
||||
|
|
|
@ -18,8 +18,24 @@
|
|||
*/
|
||||
import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from 'src/core/public';
|
||||
import { TypesService, TypesSetup, TypesStart } from './types';
|
||||
import { setUISettings, setTypes, setI18n } from './services';
|
||||
|
||||
import {
|
||||
setUISettings,
|
||||
setTypes,
|
||||
setI18n,
|
||||
setCapabilities,
|
||||
setHttp,
|
||||
setIndexPatterns,
|
||||
setSavedObjects,
|
||||
setUsageCollector,
|
||||
} from './services';
|
||||
import { VisualizeEmbeddableFactory } from '../../embeddable/visualize_embeddable_factory';
|
||||
import { VISUALIZE_EMBEDDABLE_TYPE } from '../../embeddable';
|
||||
import { ExpressionsSetup } from '../../../../../../plugins/expressions/public';
|
||||
import { IEmbeddableSetup } from '../../../../../../plugins/embeddable/public';
|
||||
import { visualization as visualizationFunction } from '../../expressions/visualization_function';
|
||||
import { visualization as visualizationRenderer } from '../../expressions/visualization_renderer';
|
||||
import { DataPublicPluginStart } from '../../../../../../plugins/data/public';
|
||||
import { UsageCollectionSetup } from '../../../../../../plugins/usage_collection/public';
|
||||
/**
|
||||
* Interface for this plugin's returned setup/start contracts.
|
||||
*
|
||||
|
@ -34,6 +50,16 @@ export interface VisualizationsStart {
|
|||
types: TypesStart;
|
||||
}
|
||||
|
||||
export interface VisualizationsSetupDeps {
|
||||
expressions: ExpressionsSetup;
|
||||
embeddable: IEmbeddableSetup;
|
||||
usageCollection: UsageCollectionSetup;
|
||||
}
|
||||
|
||||
export interface VisualizationsStartDeps {
|
||||
data: DataPublicPluginStart;
|
||||
}
|
||||
|
||||
/**
|
||||
* Visualizations Plugin - public
|
||||
*
|
||||
|
@ -42,22 +68,45 @@ export interface VisualizationsStart {
|
|||
*
|
||||
* @internal
|
||||
*/
|
||||
export class VisualizationsPlugin implements Plugin<VisualizationsSetup, VisualizationsStart> {
|
||||
export class VisualizationsPlugin
|
||||
implements
|
||||
Plugin<
|
||||
VisualizationsSetup,
|
||||
VisualizationsStart,
|
||||
VisualizationsSetupDeps,
|
||||
VisualizationsStartDeps
|
||||
> {
|
||||
private readonly types: TypesService = new TypesService();
|
||||
|
||||
constructor(initializerContext: PluginInitializerContext) {}
|
||||
|
||||
public setup(core: CoreSetup) {
|
||||
public setup(
|
||||
core: CoreSetup,
|
||||
{ expressions, embeddable, usageCollection }: VisualizationsSetupDeps
|
||||
) {
|
||||
setUISettings(core.uiSettings);
|
||||
setUsageCollector(usageCollection);
|
||||
|
||||
expressions.registerFunction(visualizationFunction);
|
||||
expressions.registerRenderer(visualizationRenderer);
|
||||
|
||||
const embeddableFactory = new VisualizeEmbeddableFactory();
|
||||
embeddable.registerEmbeddableFactory(VISUALIZE_EMBEDDABLE_TYPE, embeddableFactory);
|
||||
|
||||
return {
|
||||
types: this.types.setup(),
|
||||
};
|
||||
}
|
||||
|
||||
public start(core: CoreStart) {
|
||||
setI18n(core.i18n);
|
||||
public start(core: CoreStart, { data }: VisualizationsStartDeps) {
|
||||
const types = this.types.start();
|
||||
setI18n(core.i18n);
|
||||
setTypes(types);
|
||||
setCapabilities(core.application.capabilities);
|
||||
setHttp(core.http);
|
||||
setSavedObjects(core.savedObjects);
|
||||
setIndexPatterns(data.indexPatterns);
|
||||
|
||||
return {
|
||||
types,
|
||||
};
|
||||
|
|
|
@ -17,12 +17,36 @@
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import { I18nStart, IUiSettingsClient } from 'src/core/public';
|
||||
import {
|
||||
Capabilities,
|
||||
HttpStart,
|
||||
I18nStart,
|
||||
IUiSettingsClient,
|
||||
SavedObjectsStart,
|
||||
} from 'src/core/public';
|
||||
import { TypesStart } from './types';
|
||||
import { createGetterSetter } from '../../../../../../plugins/kibana_utils/public';
|
||||
import { IndexPatternsContract } from '../../../../../../plugins/data/public';
|
||||
import { UsageCollectionSetup } from '../../../../../../plugins/usage_collection/public';
|
||||
|
||||
export const [getUISettings, setUISettings] = createGetterSetter<IUiSettingsClient>('UISettings');
|
||||
|
||||
export const [getCapabilities, setCapabilities] = createGetterSetter<Capabilities>('Capabilities');
|
||||
|
||||
export const [getHttp, setHttp] = createGetterSetter<HttpStart>('Http');
|
||||
|
||||
export const [getSavedObjects, setSavedObjects] = createGetterSetter<SavedObjectsStart>(
|
||||
'SavedObjects'
|
||||
);
|
||||
|
||||
export const [getTypes, setTypes] = createGetterSetter<TypesStart>('Types');
|
||||
|
||||
export const [getI18n, setI18n] = createGetterSetter<I18nStart>('I18n');
|
||||
|
||||
export const [getIndexPatterns, setIndexPatterns] = createGetterSetter<IndexPatternsContract>(
|
||||
'IndexPatterns'
|
||||
);
|
||||
|
||||
export const [getUsageCollector, setUsageCollector] = createGetterSetter<UsageCollectionSetup>(
|
||||
'UsageCollection'
|
||||
);
|
||||
|
|
|
@ -39,7 +39,7 @@ import { FormattedMessage } from '@kbn/i18n/react';
|
|||
import React from 'react';
|
||||
import { EuiText } from '@elastic/eui';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { VISUALIZE_EMBEDDABLE_TYPE } from '../../../../legacy/core_plugins/kibana/public/visualize_embeddable/constants';
|
||||
import { VISUALIZE_EMBEDDABLE_TYPE } from '../../../../legacy/core_plugins/visualizations/public/embeddable/constants';
|
||||
|
||||
export interface OnSaveProps {
|
||||
newTitle: string;
|
||||
|
|
|
@ -22,6 +22,20 @@ import 'ui/autoload/all';
|
|||
import 'uiExports/interpreter';
|
||||
import 'uiExports/embeddableFactories';
|
||||
import 'uiExports/embeddableActions';
|
||||
import 'uiExports/contextMenuActions';
|
||||
import 'uiExports/devTools';
|
||||
import 'uiExports/docViews';
|
||||
import 'uiExports/embeddableActions';
|
||||
import 'uiExports/fieldFormatEditors';
|
||||
import 'uiExports/fieldFormats';
|
||||
import 'uiExports/home';
|
||||
import 'uiExports/indexManagement';
|
||||
import 'uiExports/inspectorViews';
|
||||
import 'uiExports/savedObjectTypes';
|
||||
import 'uiExports/search';
|
||||
import 'uiExports/shareContextMenuExtensions';
|
||||
import 'uiExports/visTypes';
|
||||
import 'uiExports/visualize';
|
||||
|
||||
import { npSetup, npStart } from 'ui/new_platform';
|
||||
import { ExitFullScreenButton } from 'ui/exit_full_screen';
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
// @ts-ignore
|
||||
import { MAP_SAVED_OBJECT_TYPE } from '../../../maps/common/constants';
|
||||
import { VISUALIZE_EMBEDDABLE_TYPE } from '../../../../../../src/legacy/core_plugins/kibana/public/visualize_embeddable/constants';
|
||||
import { VISUALIZE_EMBEDDABLE_TYPE } from '../../../../../../src/legacy/core_plugins/visualizations/public/embeddable/constants';
|
||||
import { SEARCH_EMBEDDABLE_TYPE } from '../../../../../../src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/constants';
|
||||
|
||||
export const EmbeddableTypes: { map: string; search: string; visualization: string } = {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
*/
|
||||
|
||||
import { ExpressionFunction } from 'src/plugins/expressions/common/types';
|
||||
import { VisualizeInput } from 'src/legacy/core_plugins/kibana/public/visualize_embeddable';
|
||||
import { VisualizeInput } from 'src/legacy/core_plugins/visualizations/public/embeddable';
|
||||
import {
|
||||
EmbeddableTypes,
|
||||
EmbeddableExpressionType,
|
||||
|
|
|
@ -1636,7 +1636,6 @@
|
|||
"kbn.embeddable.inspectorRequestDataTitle": "データ",
|
||||
"kbn.embeddable.inspectorRequestDescription": "このリクエストは Elasticsearch にクエリをかけ、検索データを取得します。",
|
||||
"kbn.embeddable.search.displayName": "検索",
|
||||
"kbn.embeddable.visualizations.displayName": "ビジュアライゼーション",
|
||||
"kbn.home.addData.addDataToKibanaDescription": "これらのソリューションで、データを作成済みのダッシュボードと監視システムへとすぐに変えることができます。",
|
||||
"kbn.home.addData.addDataToKibanaTitle": "Kibana にデータを追加",
|
||||
"kbn.home.addData.apm.addApmButtonLabel": "APM を追加",
|
||||
|
@ -2440,8 +2439,6 @@
|
|||
"kbn.visualize.badge.readOnly.text": "読み込み専用",
|
||||
"kbn.visualize.badge.readOnly.tooltip": "ビジュアライゼーションを保存できません",
|
||||
"kbn.visualize.createVisualization.noIndexPatternOrSavedSearchIdErrorMessage": "indexPattern または savedSearchId が必要です",
|
||||
"kbn.visualize.disabledLabVisualizationMessage": "ラボビジュアライゼーションを表示するには、高度な設定でラボモードをオンにしてください。",
|
||||
"kbn.visualize.disabledLabVisualizationTitle": "{title} はラボビジュアライゼーションです。",
|
||||
"kbn.visualize.editor.createBreadcrumb": "作成",
|
||||
"kbn.visualize.experimentalVisInfoText": "このビジュアライゼーションは実験的なものです。",
|
||||
"kbn.visualize.linkedToSearch.unlinkButtonTooltip": "保存された検索からリンクを解除するにはダブルクリックします",
|
||||
|
@ -2481,7 +2478,6 @@
|
|||
"kbn.visualize.newVisWizard.visTypeAliasTitle": "Kibanaアプリケーション",
|
||||
"kbn.visualize.pageHeading": "{chartName} {chartType} ビジュアライゼーション",
|
||||
"kbn.visualize.saveDialog.saveAndAddToDashboardButtonLabel": "保存してダッシュボードに追加",
|
||||
"kbn.visualize.savedObjectName": "ビジュアライゼーション",
|
||||
"kbn.visualize.topNavMenu.openInspectorButtonAriaLabel": "ビジュアライゼーションのインスペクターを開く",
|
||||
"kbn.visualize.topNavMenu.openInspectorDisabledButtonTooltip": "このビジュアライゼーションはインスペクターをサポートしていません。",
|
||||
"kbn.visualize.topNavMenu.refreshButtonAriaLabel": "更新",
|
||||
|
|
|
@ -1636,7 +1636,6 @@
|
|||
"kbn.embeddable.inspectorRequestDataTitle": "数据",
|
||||
"kbn.embeddable.inspectorRequestDescription": "此请求将查询 Elasticsearch 以获取搜索的数据。",
|
||||
"kbn.embeddable.search.displayName": "搜索",
|
||||
"kbn.embeddable.visualizations.displayName": "可视化",
|
||||
"kbn.home.addData.addDataToKibanaDescription": "使用这些解决方案可快速将您的数据转换成预建仪表板和监测系统。",
|
||||
"kbn.home.addData.addDataToKibanaTitle": "将数据添加到 Kibana",
|
||||
"kbn.home.addData.apm.addApmButtonLabel": "添加 APM",
|
||||
|
@ -2440,8 +2439,6 @@
|
|||
"kbn.visualize.badge.readOnly.text": "只读",
|
||||
"kbn.visualize.badge.readOnly.tooltip": "无法保存可视化",
|
||||
"kbn.visualize.createVisualization.noIndexPatternOrSavedSearchIdErrorMessage": "必须提供 indexPattern 或 savedSearchId",
|
||||
"kbn.visualize.disabledLabVisualizationMessage": "请在高级设置中打开实验室模式,以查看实验室可视化。",
|
||||
"kbn.visualize.disabledLabVisualizationTitle": "{title} 为实验室可视化。",
|
||||
"kbn.visualize.editor.createBreadcrumb": "创建",
|
||||
"kbn.visualize.experimentalVisInfoText": "此可视化标记为“实验”。",
|
||||
"kbn.visualize.linkedToSearch.unlinkButtonTooltip": "双击可取消与“已保存搜索”的链接",
|
||||
|
@ -2481,7 +2478,6 @@
|
|||
"kbn.visualize.newVisWizard.visTypeAliasTitle": "Kibana 应用程序",
|
||||
"kbn.visualize.pageHeading": "{chartName} {chartType}可视化",
|
||||
"kbn.visualize.saveDialog.saveAndAddToDashboardButtonLabel": "保存并添加到仪表板",
|
||||
"kbn.visualize.savedObjectName": "可视化",
|
||||
"kbn.visualize.topNavMenu.openInspectorButtonAriaLabel": "打开检查器查看可视化",
|
||||
"kbn.visualize.topNavMenu.openInspectorDisabledButtonTooltip": "此可视化不支持任何检查器。",
|
||||
"kbn.visualize.topNavMenu.refreshButtonAriaLabel": "刷新",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue