2019-12-16 21:03:46 +01:00
|
|
|
/*
|
2021-01-20 02:52:56 +01:00
|
|
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
|
|
* or more contributor license agreements. Licensed under the Elastic License
|
2021-02-04 03:12:39 +01:00
|
|
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
|
|
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
|
|
|
* Side Public License, v 1.
|
2019-12-16 21:03:46 +01:00
|
|
|
*/
|
2021-01-20 02:52:56 +01:00
|
|
|
|
2019-12-16 21:03:46 +01:00
|
|
|
import React from 'react';
|
|
|
|
import ReactDOM from 'react-dom';
|
|
|
|
import {
|
|
|
|
Container,
|
|
|
|
ContainerInput,
|
2020-03-16 20:37:42 +01:00
|
|
|
EmbeddableStart,
|
2019-12-16 21:03:46 +01:00
|
|
|
EmbeddableInput,
|
|
|
|
} from '../../../../src/plugins/embeddable/public';
|
|
|
|
import { SearchableListContainerComponent } from './searchable_list_container_component';
|
|
|
|
|
|
|
|
export const SEARCHABLE_LIST_CONTAINER = 'SEARCHABLE_LIST_CONTAINER';
|
|
|
|
|
|
|
|
export interface SearchableContainerInput extends ContainerInput {
|
|
|
|
search?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
interface ChildInput extends EmbeddableInput {
|
|
|
|
search?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export class SearchableListContainer extends Container<ChildInput, SearchableContainerInput> {
|
|
|
|
public readonly type = SEARCHABLE_LIST_CONTAINER;
|
|
|
|
private node?: HTMLElement;
|
|
|
|
|
2020-04-06 19:45:46 +02:00
|
|
|
constructor(input: SearchableContainerInput, private embeddableServices: EmbeddableStart) {
|
|
|
|
super(input, { embeddableLoaded: {} }, embeddableServices.getEmbeddableFactory);
|
2019-12-16 21:03:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: add a more advanced example here where inherited child input is derived from container
|
|
|
|
// input and not just an exact pass through.
|
|
|
|
getInheritedInput(id: string) {
|
|
|
|
return {
|
|
|
|
id,
|
|
|
|
search: this.getInput().search,
|
2020-04-06 19:45:46 +02:00
|
|
|
viewMode: this.input.viewMode,
|
2019-12-16 21:03:46 +01:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
public render(node: HTMLElement) {
|
|
|
|
if (this.node) {
|
|
|
|
ReactDOM.unmountComponentAtNode(this.node);
|
|
|
|
}
|
|
|
|
this.node = node;
|
2020-04-06 19:45:46 +02:00
|
|
|
ReactDOM.render(
|
|
|
|
<SearchableListContainerComponent
|
|
|
|
embeddable={this}
|
|
|
|
embeddableServices={this.embeddableServices}
|
|
|
|
/>,
|
|
|
|
node
|
|
|
|
);
|
2019-12-16 21:03:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public destroy() {
|
|
|
|
super.destroy();
|
|
|
|
if (this.node) {
|
|
|
|
ReactDOM.unmountComponentAtNode(this.node);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|