Skip to content

Commit d57ea33

Browse files
committed
feat: 🎸 open new drilldown flyout from panel's context menu
1 parent 1f4c4d2 commit d57ea33

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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+
export * from './open_flyout_add_drilldown';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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 React from 'react';
21+
import { i18n } from '@kbn/i18n';
22+
import { Action } from '../../../../../../ui_actions/public';
23+
import { toMountPoint } from '../../../../../../kibana_react/public';
24+
import { IEmbeddable } from '../../../embeddables';
25+
import { CoreStart } from '../../../../../../../core/public';
26+
import { FormCreateDrilldown } from '../../../../components/form_create_drilldown';
27+
28+
export const OPEN_FLYOUT_ADD_DRILLDOWN = '';
29+
30+
interface ActionContext {
31+
embeddable: IEmbeddable;
32+
}
33+
34+
export interface OpenFlyoutAddDrilldownParams {
35+
overlays: CoreStart['overlays'];
36+
}
37+
38+
export class OpenFlyoutAddDrilldown implements Action<ActionContext> {
39+
public readonly type = OPEN_FLYOUT_ADD_DRILLDOWN;
40+
public readonly id = OPEN_FLYOUT_ADD_DRILLDOWN;
41+
public order = 100;
42+
43+
constructor(protected readonly params: OpenFlyoutAddDrilldownParams) {}
44+
45+
public getDisplayName() {
46+
return i18n.translate('embeddableApi.panel.openFlyoutAddDrilldown.displayName', {
47+
defaultMessage: 'Add drilldown',
48+
});
49+
}
50+
51+
public getIconType() {
52+
return 'empty';
53+
}
54+
55+
public async isCompatible({ embeddable }: ActionContext) {
56+
return true;
57+
}
58+
59+
public async execute({ embeddable }: ActionContext) {
60+
this.params.overlays.openFlyout(toMountPoint(<FormCreateDrilldown />));
61+
}
62+
}

‎src/plugins/embeddable/public/lib/panel/embeddable_panel.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { PanelHeader } from './panel_header/panel_header';
3636
import { InspectPanelAction } from './panel_header/panel_actions/inspect_panel_action';
3737
import { EditPanelAction } from '../actions';
3838
import { CustomizePanelModal } from './panel_header/panel_actions/customize_title/customize_panel_modal';
39+
import { OpenFlyoutAddDrilldown } from './actions/open_flyout_add_drilldown';
3940

4041
interface Props {
4142
embeddable: IEmbeddable<any, any>;
@@ -243,6 +244,9 @@ export class EmbeddablePanel extends React.Component<Props, State> {
243244
new InspectPanelAction(this.props.inspector),
244245
new RemovePanelAction(),
245246
new EditPanelAction(this.props.getEmbeddableFactory),
247+
new OpenFlyoutAddDrilldown({
248+
overlays: this.props.overlays,
249+
}),
246250
];
247251

248252
const sorted = actions.concat(extraActions).sort((a: Action, b: Action) => {

0 commit comments

Comments
 (0)