Skip to content

Commit

Permalink
New visualization editor Lens (elastic#36437)
Browse files Browse the repository at this point in the history
* [lens] Initial Commit (elastic#35627)

* [visualization editor] Initial Commit

* [lens] Add more complete initial state

* [lens] Fix type issues

* [lens] Remove feature control

* [lens] Bring back feature control and add tests

* [lens] Update plugin structure and naming per comments

* replace any usage by safe casting

* [lens] Respond to review comments

* [lens] Remove unused EditorFrameState type

* [lens] Initial state for IndexPatternDatasource (elastic#36052)

* [lens] Add first tests to indexpattern data source

* Respond to review comments

* Fix type definitions

* [lens] Editor frame initializes datasources and visualizations (elastic#36060)

* [lens] Editor frame initializes datasources and visualizations

* Respond to review comments

* Fix build issues

* Fix state management issue

* [lens][draft] Lens/drag drop (elastic#36268)

Add basic drag / drop component to Lens

* remove local package (elastic#36456)

* [lens] Native renderer (elastic#36165)

* Add nativerenderer component

* Use native renderer in app and editor frame

* [Lens] No explicit any (elastic#36515)

* [Lens] Implement basic editor frame state handling (elastic#36443)

* [lens] Load index patterns and render in data panel (elastic#36463)

* [lens] Editor frame initializes datasources and visualizations

* Respond to review comments

* Fix build issues

* remove local package

* [lens] Load index patterns into data source

* Redo types for Index Pattern Datasource

* Fix one more type

* Respond to review comments

* [draft] Lens/line chart renderer (elastic#36827)

Expression logic for the Lens xy chart.

* [lens] Index pattern data panel (initial) (elastic#37015)

* [lens] Index pattern switcher

* Respond to review comments

* [Lens] Editor state 2 (elastic#36513)

* [lens] Dimension panel that generates columns (elastic#37117)

* [lens] Dimension panel that generates columns

* Update from review comments

* [lens] Generate esdocs queries from index pattern (elastic#37361)

* [lens] Generate esdocs queries from index pattern

* Remove unused code

* Update yarn.lock from yarn kbn bootstrap

* [Lens] Add basic Lens xy chart suggestions (elastic#37030)

Basic xy chart suggestions

* [Lens] Expression rendering (elastic#37648)

* [Lens] Expression handling (elastic#37876)

* [Lens] Lens/xy config panel (elastic#37391)

Basic xy chart configuration panel

* [Lens] Xy expression building (elastic#37967)

* [Lens] Initialize visualization with datasource api (elastic#38142)

* [lens] Dimension panel lets users select operations and fields individually (elastic#37573)

* [lens] Dimension panel lets users select operations and fields individually

* Split files and add tests

* Fix dimension labeling and add clear button

* Support more aggregations, aggregation nesting, rollups, and clearing

* Fix esaggs expression

* Increase top-level test coverage of dimension panel

* Update from review comments

* [Lens] Rename columns (elastic#38278)

* [Lens] Lens/index pattern drag drop (elastic#37711)

* Basic xy chart suggestions

* Re-apply XY config panel after force merge

* Initial integration of lens drag and drop

* Tweak naming, remove irellevant comment

* Tweaks per Wylie's feedback

* Add xy chart internationalization
Tweak types per Joe's feedback

* Update xy chart i18n implementation

* Fix i18n id

* Add drop tests to the lens index pattern

* improve tests

* [lens] Only allow aggregated dimensions (elastic#38820)

* [lens] Only allow aggregated dimensions

* [lens] Index pattern suggest on drop

* Fully remove value

* Revert "[lens] Index pattern suggest on drop"

This reverts commit 604c6ed.

* Fix type errors

* [lens] Suggest on drop (elastic#38848)

* [lens] Index pattern suggest on drop

* Add test for suggestion without date field

* fix merge

* [Lens] Parameter configurations and new dimension config flow (elastic#38863)

* fix eslint failure

* [lens] Fix build by updating saved objects and i18n (elastic#39391)

* [lens] Update location of saved objects code

* Update internatationalization

* Remove added file

* [lens] Fix arguments to esaggs using booleans (elastic#39462)

* [lens] Datatable visualization plugin (elastic#39390)

* [lens] Datatable visualization plugin

* Fix merge issues and add tests

* Update from review

* Fix file locations

* [lens] Use first suggestion when switching visualizations (elastic#39377)

* [lens] Label each Y axis with its operation label (elastic#39461)

* [lens] Label each Y axis with its operation label

* Remove comment

* Add link to chart issue

* [Lens] Suggestion preview rendering (elastic#39576)

* [Lens] Popover configs (elastic#39565)

* [Lens] Basic layouting (elastic#39587)

* remove datasource public API in suggestions (elastic#39772)

* [Lens] Basic save / load (elastic#39257)

Add basic routing, save, and load to Lens

* [lens] Fix lint error

* [lens] Use node scripts/eslint.js --fix to fix errors

* [lens] Include link to lens from Visualize (elastic#40542)

* [lens] Support stacking in xy visualization (elastic#40546)

* [lens] Support stacking in xy visualization

* Use chart type switcher for stacked and horizontal xy charts

* Clean up remaining isStacked code

* Fix type error

* [Lens] Add xy split series support (elastic#39726)

* Add split series to lens xy chart

* [lens] Lens Filter Ratio (elastic#40196)

* WIP filter ratio

* Fix test issues

* Pass dependencies through plugin like new platform

* Pass props into filter ratio popover editor

* Provide mocks to filter_ratio popover test

* Add another test

* Clean up to prepare for review

* Clean up unnecessary changes

* Respond to review comments

* Fix tests

* [Lens] Terms order direction (elastic#39884)

* fix types

* [Lens] Data panel styling and optimizations (elastic#40787)

Style the data panel (mostly Joe Reuter's doing). Optimize a bunch of the Lens stack.

* [Lens] Optimize dimension panel flow (elastic#41114)

* [Lens] re-introduce no-explicit-any (elastic#41454)

* [Lens] No results marker (elastic#41450)

* [lens] Support layers for visualizing results of multiple queries (elastic#41290)

* [lens] WIP add support for layers

* [lens] WIP switch to nested tables

* Get basic layering to work

* Load multiple tables and render in one chart

* Fix priority ordering

* Reduce quantity of linting errors

* Ensure that new xy layer state has a split column

* Make the "add" y / split the trailing accessor

* Various fixes for datasource public API and implementation

* Unify datasource deletion and accessor removal

* Fix broken scss

* Fix xy visualization TypeScript errors?

* Build basic suggestions

* Restore save/load and fix typescript bugs

* simplify init routine

* fix save tests

* fix persistence tests

* fix state management tests

* Ensure the data table is aligned to the top

* Add layer support to Lens datatable

* Give xy chart a default layer initially

* Allow deletion of layers in xy charts

* xy: Make split accessor singular
Remove commented code blocks

* Change expression type for lens_merge_tables

* Fix XY chart rendering expression

* Fix type errors relating to `layerId` in table suggestions

* Pass around tables for suggestions with associated layerIds

* fix tests in workspace panel

* fix editor_frame tests

* Fix xy tests, skip inapplicable tests
that will be implemented in a separate PR

* add some tests for multiple datasources and layers

* Suggest that split series comes before X axis in XY chart

* Get datatable suggestion working

* Adjust how xy axis labels are computed

* Datasource suggestions should handle layers and have tests

* Fix linting in XY chart and remove commented code

* Update snapshots from earlier change

* Fix linting errors

* More cleanup

* Remove commented code

* Test the multi-column editor

* XY Visualization does not need to track datasourceId

* Fix various comments

* Remove unused xy prop
Add datasource header to datatable config

* Use operation labels for XY chart

* Adding and removing layers is reflected in the datasource

* rewrote datasource state init

* clean up editor_frame frame api implementation

* clean up editor frame

* [Lens] Embeddable (elastic#41361)

* [lens] Move XY chart config into popover and fix layering (elastic#41927)

* [lens] Move XY chart config into popover and fix layering

* Fix tests

* Update style

* Change wrapping of layer settings popover

* [Lens] Fix bugs in date_histogram and filter ratio (elastic#42046)

* [Lens] Performance improvements (elastic#41784)

* fix type error

* switch default size of terms operation to 3 (elastic#42334)

* [lens] Improve suggestions for split series (elastic#42052)

* [lens] Add chart switcher (elastic#42093)

* solve merge conflicts

* fix test case

* [Lens] Allow only current visualization on field drop in workspace (elastic#42344)

* [Lens] Remove indexpattern id on column (elastic#42429)

* [lens] Implement app-level filtering and time picker (elastic#42031)

* [lens] Implement app-level filtering and time picker

* More integration with filter bar

* Clean up test code and type errors

* Add frame level tests for syncing with app

* Add test coverage for app logic

* Simplify state management from app down

* Fix import errors

* Clarify whether properties are ids or titles for index pattern

* pass new saved object by ref

* add dirty state checking

* Fix tests

* [Lens] Add some tests around document handling in dimension panel (elastic#42670)

* [Lens] Terms operation boolean support (elastic#42817)

* [lens] Minor UX/UI improvements in Lens (elastic#42852)

* Make dimension popover toggle when clicking button

* Without suggestions hide suggestion panel

* Add missing translations (elastic#42921)

* [Lens] Config panel design (elastic#42980)

* Fix up design of config panel

Does not include config popover

* Remove a couple of non-null assertions (elastic#43013)

* Remove a couple of non-null assertions

* Remove orphaned import

* [Lens] Switch indexpattern manually (elastic#42599)

* [Lens] Update frame to put suggestions at the bottom (elastic#42997)

* fix type errors

* switch indexpattern on layer if there is only a single empty one (elastic#43079)

* [Lens] Suggest reduced versions of current data table (elastic#42537)

* [Lens] Field formatter support (elastic#38874)

* Fix bugs

* [Lens] Add bucket nesting editor to indexpattern (elastic#42869)

* [Lens] Remove unnecessary fields and indexing from mappings (elastic#43285)

* [Lens] Xy scale type (elastic#42142)

* [lens] Allow updater function to be used for updating state (elastic#43373)

* [Lens] Lens metric visualization (elastic#39364)

* Fix axis rotation (elastic#43792)

* [Lens] Auto date histogram (elastic#43775)

* Add auto date histogram

* Improve documentation and cleanup

* Add tests

* Change test name

* [Lens] Fix query bar integration (elastic#43865)

* [Lens] Clean up operations code (elastic#43784)

* [Lens] Functional tests (elastic#44279)

Foundational layer for lens functional tests. Lens-specific page objects are not in this PR.

* [Lens] Add Lens visualizations to Visualize list (elastic#43398)

* [Lens] Suggestion improvements (elastic#43688)

* [lens] Calculate existence of fields in datasource (elastic#44422)

* [lens] Calculate existence of fields in datasource

* Fix route registration

* Add page object and use existence in functional test

* Simplify layout of filters for index pattern

* Respond to review feedback

* Update class names

* Use new URL constant

* Fix usage of base path

* Fix lint errors

* [Lens ] Preview metric (elastic#43755)

* format filter ratio as percentage (elastic#44625)

* [Lens] Remove datasource suggestion id (elastic#44495)

* [Lens] Make breadcrumbs look and feel like Visualize (elastic#44258)

* [lens] Fix breakage from app-arch movements (elastic#44720)

* [lens] Fix type error in test from merge

* [lens] Fix registration of embeddable (elastic#45171)

* [Lens] Functional tests (elastic#44814)

Basic functional tests for Lens, by no means comprehensive. This is more of a smokescreen test of some normal use cases.

* [lens] Add Lens to CODEOWNERS (elastic#45296)

* [lens] Fix visualization alias registration

* [lens] Fix usage of EUI after typescript upgrade (elastic#45404)

* [lens] Fix usage of EUI after typescript upgrade

* Use local fix instead of workaround

* [lens] Fix usage of expressions plugin (elastic#45544)

* [lens] Fix usage of expressions plugin

* Use updated exports from elastic#45538

* Fix imports and mocha tests

* Use relative instead of absolute path to fix tests

* [lens] More cleanup from QueryBar changes in master (elastic#45687)

* [lens] Fix build and use new platform from entry points (elastic#45834)

* [lens] Fix build and use new platform from entry points

* Fix params for existence route
  • Loading branch information
flash1293 authored and wylieconlon committed Sep 17, 2019
1 parent 3a63d67 commit 9d55c9b
Show file tree
Hide file tree
Showing 192 changed files with 28,026 additions and 15 deletions.
10 changes: 10 additions & 0 deletions .eslintrc.js
Expand Up @@ -636,6 +636,16 @@ module.exports = {
},
},

/**
* Lens overrides
*/
{
files: ['x-pack/legacy/plugins/lens/**/*.ts', 'x-pack/legacy/plugins/lens/**/*.tsx'],
rules: {
'@typescript-eslint/no-explicit-any': 'error',
},
},

/**
* disable jsx-a11y for kbn-ui-framework
*/
Expand Down
79 changes: 79 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
@@ -0,0 +1,79 @@
# GitHub CODEOWNERS definition
# Identify which groups will be pinged by changes to different parts of the codebase.
# For more info, see https://help.github.com/articles/about-codeowners/

# App
/x-pack/legacy/plugins/lens/ @elastic/kibana-app

# App Architecture
/src/plugins/data/ @elastic/kibana-app-arch
/src/plugins/kibana_utils/ @elastic/kibana-app-arch
/src/plugins/kibana_react/ @elastic/kibana-app-arch

# APM
/x-pack/legacy/plugins/apm/ @elastic/apm-ui

# Beats
/x-pack/legacy/plugins/beats_management/ @elastic/beats

# Canvas
/x-pack/legacy/plugins/canvas/ @elastic/kibana-canvas

# Code
/x-pack/legacy/plugins/code/ @teams/code
/x-pack/test/functional/apps/code/ @teams/code
/x-pack/test/api_integration/apis/code/ @teams/code

# Infrastructure and Logs UI
/x-pack/legacy/plugins/infra/ @elastic/infra-logs-ui

# Machine Learning
/x-pack/legacy/plugins/ml/ @elastic/ml-ui

# Operations
/renovate.json5 @elastic/kibana-operations
/src/dev/ @elastic/kibana-operations
/src/setup_node_env/ @elastic/kibana-operations
/src/optimize/ @elastic/kibana-operations

# Platform
/src/core/ @elastic/kibana-platform
/src/legacy/server/saved_objects/ @elastic/kibana-platform
/src/legacy/ui/public/saved_objects @elastic/kibana-platform
/config/kibana.yml @elastic/kibana-platform
/x-pack/plugins/features/ @elastic/kibana-platform

# Security
/x-pack/legacy/plugins/security/ @elastic/kibana-security
/x-pack/legacy/plugins/spaces/ @elastic/kibana-security
/x-pack/legacy/plugins/encrypted_saved_objects/ @elastic/kibana-security
/src/legacy/server/csp/ @elastic/kibana-security
/x-pack/plugins/security/ @elastic/kibana-security

# Kibana Stack Services
/packages/kbn-analytics/ @elastic/kibana-stack-services
/src/legacy/core_plugins/ui_metric/ @elastic/kibana-stack-services
/x-pack/legacy/plugins/telemetry @elastic/kibana-stack-services
/x-pack/legacy/plugins/alerting @elastic/kibana-stack-services
/x-pack/legacy/plugins/actions @elastic/kibana-stack-services
/x-pack/legacy/plugins/task_manager @elastic/kibana-stack-services

# Design
**/*.scss @elastic/kibana-design

# Elasticsearch UI
/src/legacy/core_plugins/console/ @elastic/es-ui
/src/plugins/es_ui_shared/ @elastic/es-ui
/x-pack/legacy/plugins/console_extensions/ @elastic/es-ui
/x-pack/legacy/plugins/cross_cluster_replication/ @elastic/es-ui
/x-pack/legacy/plugins/index_lifecycle_management/ @elastic/es-ui
/x-pack/legacy/plugins/index_management/ @elastic/es-ui
/x-pack/legacy/plugins/license_management/ @elastic/es-ui
/x-pack/legacy/plugins/remote_clusters/ @elastic/es-ui
/x-pack/legacy/plugins/rollup/ @elastic/es-ui
/x-pack/legacy/plugins/searchprofiler/ @elastic/es-ui
/x-pack/legacy/plugins/snapshot_restore/ @elastic/es-ui
/x-pack/legacy/plugins/watcher/ @elastic/es-ui

# Kibana TSVB external contractors
/src/legacy/core_plugins/metrics/ @elastic/kibana-tsvb-external
2 changes: 1 addition & 1 deletion packages/kbn-interpreter/src/common/index.d.ts
Expand Up @@ -19,4 +19,4 @@

export { Registry } from './lib/registry';

export { fromExpression, toExpression, Ast } from './lib/ast';
export { fromExpression, toExpression, Ast, ExpressionFunctionAST } from './lib/ast';
15 changes: 14 additions & 1 deletion packages/kbn-interpreter/src/common/lib/ast.d.ts
Expand Up @@ -17,7 +17,20 @@
* under the License.
*/

export type Ast = unknown;
export type ExpressionArgAST = string | boolean | number | Ast;

export interface ExpressionFunctionAST {
type: 'function';
function: string;
arguments: {
[key: string]: ExpressionArgAST[];
};
}

export interface Ast {
type: 'expression';
chain: ExpressionFunctionAST[];
}

export declare function fromExpression(expression: string): Ast;
export declare function toExpression(astObj: Ast, type?: string): string;
3 changes: 2 additions & 1 deletion src/fixtures/logstash_fields.js
Expand Up @@ -39,7 +39,8 @@ function stubbedLogstashFields() {
['area', 'geo_shape', true, true ],
['hashed', 'murmur3', false, true ],
['geo.coordinates', 'geo_point', true, true ],
['extension', 'keyword', true, true ],
['extension', 'text', true, true],
['extension.keyword', 'keyword', true, true, {}, 'extension', 'multi' ],
['machine.os', 'text', true, true ],
['machine.os.raw', 'keyword', true, true, {}, 'machine.os', 'multi' ],
['geo.src', 'keyword', true, true ],
Expand Down
Expand Up @@ -359,5 +359,4 @@ export class QueryBarTopRowUI extends Component<Props, State> {
}
}

// @ts-ignore
export const QueryBarTopRow = injectI18n(QueryBarTopRowUI);
Expand Up @@ -26,7 +26,7 @@ import { IExpressionLoader, ExpressionLoader } from './lib/loader';
// Accept all options of the runner as props except for the
// dom element which is provided by the component itself
export interface ExpressionRendererProps extends IExpressionLoaderParams {
className: 'string';
className: string;
expression: string | ExpressionAST;
/**
* If an element is specified, but the response of the expression run can't be rendered
Expand Down
Expand Up @@ -24,6 +24,7 @@ import { setInspector, setInterpreter } from './services';
import { execute } from './lib/execute';
import { loader } from './lib/loader';
import { render } from './lib/render';
import { IInterpreter } from './lib/_types';
import { createRenderer } from './expression_renderer';

import { Start as IInspector } from '../../../../../plugins/inspector/public';
Expand All @@ -40,7 +41,9 @@ export class ExpressionsService {
// eslint-disable-next-line
const { getInterpreter } = require('../../../interpreter/public/interpreter');
getInterpreter()
.then(setInterpreter)
.then(({ interpreter }: { interpreter: IInterpreter }) => {
setInterpreter(interpreter);
})
.catch((e: Error) => {
throw new Error('interpreter is not initialized');
});
Expand Down
Expand Up @@ -17,8 +17,8 @@
* under the License.
*/

import { TimeRange } from 'src/plugins/data/public';
import { Filter } from '@kbn/es-query';
import { TimeRange } from '../../../../../../plugins/data/public';
import { Adapters } from '../../../../../../plugins/inspector/public';
import { Query } from '../../../../../../plugins/data/public';
import { ExpressionAST } from '../../../../../../plugins/expressions/common';
Expand Down Expand Up @@ -68,13 +68,13 @@ export interface IInterpreterRenderHandlers {
event: (event: event) => void;
}

export interface IInterpreterRenderFunction {
export interface IInterpreterRenderFunction<T = unknown> {
name: string;
displayName: string;
help: string;
validate: () => void;
reuseDomNode: boolean;
render: (domNode: Element, data: unknown, handlers: IInterpreterRenderHandlers) => void;
render: (domNode: Element, data: T, handlers: IInterpreterRenderHandlers) => void | Promise<void>;
}

export interface IInterpreter {
Expand Down
Expand Up @@ -50,6 +50,7 @@ class VisualizeListingTableUi extends Component {
editItem={capabilities.get().visualize.save ? this.props.editItem : null}
tableColumns={this.getTableColumns()}
listingLimit={this.props.listingLimit}
selectable={item => item.canDelete}
initialFilter={''}
noItemsFragment={this.getNoItemsMessage()}
entityName={
Expand Down
1 change: 1 addition & 0 deletions src/legacy/plugin_discovery/types.ts
Expand Up @@ -58,6 +58,7 @@ export interface LegacyPluginOptions {
icon: string;
euiIconType: string;
order: number;
listed: boolean;
}>;
apps: any;
hacks: string[];
Expand Down
20 changes: 20 additions & 0 deletions src/plugins/data/common/query/index.ts
@@ -0,0 +1,20 @@
/*
* 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.
*/

export * from './types';
1 change: 1 addition & 0 deletions x-pack/.i18nrc.json
Expand Up @@ -18,6 +18,7 @@
"xpack.indexLifecycleMgmt": "legacy/plugins/index_lifecycle_management",
"xpack.infra": "legacy/plugins/infra",
"xpack.kueryAutocomplete": "legacy/plugins/kuery_autocomplete",
"xpack.lens": "legacy/plugins/lens",
"xpack.licenseMgmt": "legacy/plugins/license_management",
"xpack.maps": "legacy/plugins/maps",
"xpack.ml": "legacy/plugins/ml",
Expand Down
2 changes: 2 additions & 0 deletions x-pack/index.js
Expand Up @@ -44,6 +44,7 @@ import { snapshotRestore } from './legacy/plugins/snapshot_restore';
import { actions } from './legacy/plugins/actions';
import { alerting } from './legacy/plugins/alerting';
import { advancedUiActions } from './legacy/plugins/advanced_ui_actions';
import { lens } from './legacy/plugins/lens';

module.exports = function (kibana) {
return [
Expand Down Expand Up @@ -83,6 +84,7 @@ module.exports = function (kibana) {
ossTelemetry(kibana),
fileUpload(kibana),
encryptedSavedObjects(kibana),
lens(kibana),
snapshotRestore(kibana),
actions(kibana),
alerting(kibana),
Expand Down
Expand Up @@ -4,8 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/

// @ts-ignore - Interpreter not typed yet
import { fromExpression, toExpression } from '@kbn/interpreter/common';
import { fromExpression, toExpression, Ast } from '@kbn/interpreter/common';
import { get } from 'lodash';
import React from 'react';
import ReactDOM from 'react-dom';
Expand Down Expand Up @@ -58,7 +57,7 @@ export const dropdownFilter: RendererFactory<Config> = () => ({
if (commitValue === '%%CANVAS_MATCH_ALL%%') {
handlers.setFilter('');
} else {
const newFilterAST = {
const newFilterAST: Ast = {
type: 'expression',
chain: [
{
Expand Down
14 changes: 14 additions & 0 deletions x-pack/legacy/plugins/lens/common/constants.ts
@@ -0,0 +1,14 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/

export const PLUGIN_ID = 'lens';

export const BASE_APP_URL = '/app/lens';
export const BASE_API_URL = '/api/lens';

export function getEditPath(id: string) {
return `${BASE_APP_URL}#/edit/${encodeURIComponent(id)}`;
}
7 changes: 7 additions & 0 deletions x-pack/legacy/plugins/lens/common/index.ts
@@ -0,0 +1,7 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/

export * from './constants';
99 changes: 99 additions & 0 deletions x-pack/legacy/plugins/lens/index.ts
@@ -0,0 +1,99 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/

import * as Joi from 'joi';
import { resolve } from 'path';
import { LegacyPluginInitializer } from 'src/legacy/types';
import KbnServer, { Server } from 'src/legacy/server/kbn_server';
import { CoreSetup } from 'src/core/server';
import mappings from './mappings.json';
import { PLUGIN_ID, getEditPath, BASE_API_URL } from './common';
import { lensServerPlugin } from './server';

const NOT_INTERNATIONALIZED_PRODUCT_NAME = 'Lens Visualizations';

export const lens: LegacyPluginInitializer = kibana => {
return new kibana.Plugin({
id: PLUGIN_ID,
configPrefix: `xpack.${PLUGIN_ID}`,
require: ['kibana', 'elasticsearch', 'xpack_main', 'interpreter', 'data'],
publicDir: resolve(__dirname, 'public'),

uiExports: {
app: {
title: NOT_INTERNATIONALIZED_PRODUCT_NAME,
description: 'Explore and visualize data.',
main: `plugins/${PLUGIN_ID}/index`,
listed: false,
},
embeddableFactories: ['plugins/lens/register_embeddable'],
styleSheetPaths: resolve(__dirname, 'public/index.scss'),
mappings,
visTypes: ['plugins/lens/register_vis_type_alias'],
savedObjectsManagement: {
lens: {
defaultSearchField: 'title',
isImportableAndExportable: true,
getTitle: (obj: { attributes: { title: string } }) => obj.attributes.title,
getInAppUrl: (obj: { id: string }) => ({
path: getEditPath(obj.id),
uiCapabilitiesPath: 'lens.show',
}),
},
},
},

config: () => {
return Joi.object({
enabled: Joi.boolean().default(true),
}).default();
},

init(server: Server) {
const kbnServer = (server as unknown) as KbnServer;

server.plugins.xpack_main.registerFeature({
id: PLUGIN_ID,
name: NOT_INTERNATIONALIZED_PRODUCT_NAME,
app: [PLUGIN_ID, 'kibana'],
catalogue: [PLUGIN_ID],
privileges: {
all: {
api: [PLUGIN_ID],
catalogue: [PLUGIN_ID],
savedObject: {
all: [],
read: [],
},
ui: ['save', 'show'],
},
read: {
api: [PLUGIN_ID],
catalogue: [PLUGIN_ID],
savedObject: {
all: [],
read: [],
},
ui: ['show'],
},
},
});

// Set up with the new platform plugin lifecycle API.
const plugin = lensServerPlugin();
plugin.setup(({
http: {
...kbnServer.newPlatform.setup.core.http,
createRouter: () => kbnServer.newPlatform.setup.core.http.createRouter(BASE_API_URL),
},
} as unknown) as CoreSetup);

server.events.on('stop', () => {
plugin.stop();
});
},
});
};

0 comments on commit 9d55c9b

Please sign in to comment.