Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial visualizations plugin. #35625

Merged
merged 6 commits into from
Jun 11, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions src/legacy/core_plugins/visualizations/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* 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 { resolve } from 'path';
import { Legacy } from '../../../../kibana';

// eslint-disable-next-line import/no-default-export
export default function VisualizationsPlugin(kibana: any) {
const config: Legacy.PluginSpecOptions = {
id: 'visualizations',
require: ['data'],
publicDir: resolve(__dirname, 'public'),
config: (Joi: any) => {
return Joi.object({
enabled: Joi.boolean().default(true),
}).default();
},
init: (server: Legacy.Server) => ({}),
};

return new kibana.Plugin(config);
}
4 changes: 4 additions & 0 deletions src/legacy/core_plugins/visualizations/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "visualizations",
"version": "kibana"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* 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.
*/

// @ts-ignore
import { VisFiltersProvider, createFilter } from 'ui/vis/vis_filters';

/**
* Vis Filters Service
*
* @internal
*/
export class FiltersService {
public setup() {
return {
VisFiltersProvider,
createFilter,
};
}

public stop() {
// nothing to do here yet
}
}

/** @public */
export type FiltersSetup = ReturnType<FiltersService['setup']>;
20 changes: 20 additions & 0 deletions src/legacy/core_plugins/visualizations/public/filters/index.ts
Original file line number Diff line number Diff line change
@@ -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 { FiltersService, FiltersSetup } from './filters_service';
68 changes: 68 additions & 0 deletions src/legacy/core_plugins/visualizations/public/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
* 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 { FiltersService, FiltersSetup } from './filters';
import { TypesService, TypesSetup } from './types';

class VisualizationsPlugin {
private readonly filters: FiltersService;
private readonly types: TypesService;

constructor() {
this.filters = new FiltersService();
this.types = new TypesService();
}

public setup() {
return {
filters: this.filters.setup(),
types: this.types.setup(),
};
}

public stop() {
this.filters.stop();
this.types.stop();
}
}

/**
* We export visualizations here so that users importing from 'plugins/visualizations'
* will automatically receive the response value of the `setup` contract, mimicking
* the data that will eventually be injected by the new platform.
*/
export const visualizations = new VisualizationsPlugin().setup();

/** @public */
export interface VisualizationsSetup {
filters: FiltersSetup;
types: TypesSetup;
}

/** @public types */
export {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the naming got me very confused :)

we have a VisTypesService under vis_types but here we are just re-exporting types from vis_types :) and the import on top is just importing the service and setup type

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah we are exporting all of the types for all services at the top level here. So for simplicity I'm just directly exporting them. However, for the setup type, we need to compose that into the VisualizationsSetup interface, and it doesn't really need to be exported by itself.

Vis,
VisParams,
VisProvider,
VisState,
VisualizationController,
VisType,
VisTypesRegistry,
Status,
} from './types';
32 changes: 32 additions & 0 deletions src/legacy/core_plugins/visualizations/public/types/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* 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 {
TypesService,
// types
TypesSetup,
Vis,
VisParams,
VisProvider,
VisState,
VisualizationController,
VisType,
VisTypesRegistry,
Status,
} from './types_service';
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* 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.
*/

// @ts-ignore
import { defaultFeedbackMessage } from 'ui/vis/default_feedback_message';
// @ts-ignore
import { VisProvider as Vis } from 'ui/vis/index.js';
// @ts-ignore
import { VisFactoryProvider as VisFactory } from 'ui/vis/vis_factory';
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ppisljar Based on your comments I renamed VisProvider -> Vis and VisFactoryProvider -> VisFactory here. When I do a pass to update #35764 with the new imports, I can also rename any instances where they are used.

If you think it will be confusing to temporarily have something exposed as Vis even though it is consumed as a provider, we can revert back; I don't have strong feelings on this either way.

import { VisTypesRegistryProvider } from 'ui/registry/vis_types';

/**
* Vis Types Service
*
* @internal
*/
export class TypesService {
public setup() {
return {
Vis,
VisFactory,
VisTypesRegistryProvider,
lukeelmers marked this conversation as resolved.
Show resolved Hide resolved
defaultFeedbackMessage, // make default in base vis type, or move?
};
}

public stop() {
// nothing to do here yet
}
}

/** @public */
export type TypesSetup = ReturnType<TypesService['setup']>;

/** @public types */
import * as types from 'ui/vis/vis';
export type Vis = types.Vis;
export type VisParams = types.VisParams;
export type VisProvider = types.VisProvider;
export type VisState = types.VisState;
export { VisualizationController, VisType } from 'ui/vis/vis_types/vis_type';
export { VisTypesRegistry } from 'ui/registry/vis_types';
export { Status } from 'ui/vis/update_status';
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jest.mock('ui/chrome',
import _ from 'lodash';
import moment from 'moment';
import expect from '@kbn/expect';
import { onBrushEvent } from '../brush_event';
import { onBrushEvent } from './brush_event';
import { timefilter } from 'ui/timefilter';

describe('brushEvent', () => {
Expand Down
20 changes: 20 additions & 0 deletions src/legacy/ui/public/vis/vis_filters/index.js
Original file line number Diff line number Diff line change
@@ -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 { VisFiltersProvider, createFilter } from './vis_filters';
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
*/

import _ from 'lodash';
import { pushFilterBarFilters } from '../filter_manager/push_filters';
import { FilterBarQueryFilterProvider } from '../filter_manager/query_filter';
import { onBrushEvent } from '../utils/brush_event';
import { pushFilterBarFilters } from '../../filter_manager/push_filters';
import { FilterBarQueryFilterProvider } from '../../filter_manager/query_filter';
import { onBrushEvent } from './brush_event';

/**
* For terms aggregations on `__other__` buckets, this assembles a list of applicable filter
Expand Down