mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
parent
f283751196
commit
0ce02453ea
28 changed files with 196 additions and 202 deletions
|
@ -35,7 +35,6 @@ import {
|
|||
AppStateClass as TAppStateClass,
|
||||
KbnUrl,
|
||||
SaveOptions,
|
||||
SavedObjectFinder,
|
||||
unhashUrl,
|
||||
} from './legacy_imports';
|
||||
import { FilterStateManager, IndexPattern } from '../../../data/public';
|
||||
|
@ -71,6 +70,10 @@ import { DashboardAppScope } from './dashboard_app';
|
|||
import { VISUALIZE_EMBEDDABLE_TYPE } from '../visualize/embeddable';
|
||||
import { convertSavedDashboardPanelToPanelState } from './lib/embeddable_saved_object_converters';
|
||||
import { RenderDeps } from './application';
|
||||
import {
|
||||
SavedObjectFinderProps,
|
||||
SavedObjectFinderUi,
|
||||
} from '../../../../../plugins/kibana_react/public';
|
||||
|
||||
export interface DashboardAppControllerDependencies extends RenderDeps {
|
||||
$scope: DashboardAppScope;
|
||||
|
@ -115,7 +118,7 @@ export class DashboardAppController {
|
|||
timefilter: { timefilter },
|
||||
},
|
||||
},
|
||||
core: { notifications, overlays, chrome, injectedMetadata },
|
||||
core: { notifications, overlays, chrome, injectedMetadata, uiSettings, savedObjects },
|
||||
}: DashboardAppControllerDependencies) {
|
||||
new FilterStateManager(globalState, getAppState, filterManager);
|
||||
const queryFilter = filterManager;
|
||||
|
@ -718,6 +721,10 @@ export class DashboardAppController {
|
|||
};
|
||||
navActions[TopNavIds.ADD] = () => {
|
||||
if (dashboardContainer && !isErrorEmbeddable(dashboardContainer)) {
|
||||
const SavedObjectFinder = (props: SavedObjectFinderProps) => (
|
||||
<SavedObjectFinderUi {...props} savedObjects={savedObjects} uiSettings={uiSettings} />
|
||||
);
|
||||
|
||||
openAddPanelFlyout({
|
||||
embeddable: dashboardContainer,
|
||||
getAllFactories: embeddables.getEmbeddableFactories,
|
||||
|
|
|
@ -65,4 +65,3 @@ export { stateMonitorFactory, StateMonitor } from 'ui/state_management/state_mon
|
|||
export { ensureDefaultIndexPattern } from 'ui/legacy_compat';
|
||||
export { unhashUrl } from '../../../../../plugins/kibana_utils/public';
|
||||
export { IInjector } from 'ui/chrome';
|
||||
export { SavedObjectFinder } from 'ui/saved_objects/components/saved_object_finder';
|
||||
|
|
|
@ -26,7 +26,7 @@ exports[`render 1`] = `
|
|||
</EuiTitle>
|
||||
</EuiFlyoutHeader>
|
||||
<EuiFlyoutBody>
|
||||
<SavedObjectFinder
|
||||
<SavedObjectFinderUi
|
||||
noItemsMessage={
|
||||
<FormattedMessage
|
||||
defaultMessage="No matching searches found."
|
||||
|
@ -44,6 +44,8 @@ exports[`render 1`] = `
|
|||
},
|
||||
]
|
||||
}
|
||||
savedObjects={Object {}}
|
||||
uiSettings={Object {}}
|
||||
/>
|
||||
</EuiFlyoutBody>
|
||||
<EuiFlyoutFooter>
|
||||
|
|
|
@ -32,11 +32,16 @@ import {
|
|||
EuiFlyoutBody,
|
||||
EuiTitle,
|
||||
} from '@elastic/eui';
|
||||
import { SavedObjectFinder } from 'ui/saved_objects/components/saved_object_finder';
|
||||
import { SavedObjectFinderUi } from '../../../../../../../plugins/kibana_react/public';
|
||||
import { getServices } from '../../kibana_services';
|
||||
|
||||
const SEARCH_OBJECT_TYPE = 'search';
|
||||
|
||||
export function OpenSearchPanel(props) {
|
||||
const {
|
||||
core: { uiSettings, savedObjects },
|
||||
} = getServices();
|
||||
|
||||
return (
|
||||
<EuiFlyout ownFocus onClose={props.onClose} data-test-subj="loadSearchForm">
|
||||
<EuiFlyoutHeader hasBorder>
|
||||
|
@ -50,7 +55,7 @@ export function OpenSearchPanel(props) {
|
|||
</EuiTitle>
|
||||
</EuiFlyoutHeader>
|
||||
<EuiFlyoutBody>
|
||||
<SavedObjectFinder
|
||||
<SavedObjectFinderUi
|
||||
noItemsMessage={
|
||||
<FormattedMessage
|
||||
id="kbn.discover.topNav.openSearchPanel.noSearchesFoundDescription"
|
||||
|
@ -70,6 +75,8 @@ export function OpenSearchPanel(props) {
|
|||
window.location.assign(props.makeUrl(id));
|
||||
props.onClose();
|
||||
}}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={savedObjects}
|
||||
/>
|
||||
</EuiFlyoutBody>
|
||||
<EuiFlyoutFooter>
|
||||
|
|
|
@ -23,7 +23,7 @@ import { shallow } from 'enzyme';
|
|||
jest.mock('../../kibana_services', () => {
|
||||
return {
|
||||
getServices: () => ({
|
||||
SavedObjectFinder: jest.fn()
|
||||
core: { uiSettings: {}, savedObjects: {} },
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
|
|
@ -199,7 +199,8 @@ export class VisualizeEmbeddableFactory extends EmbeddableFactory<
|
|||
editorParams: ['addToDashboard'],
|
||||
},
|
||||
npStart.core.http.basePath.prepend,
|
||||
npStart.core.uiSettings
|
||||
npStart.core.uiSettings,
|
||||
npStart.core.savedObjects
|
||||
);
|
||||
}
|
||||
return undefined;
|
||||
|
|
|
@ -45,7 +45,6 @@ export { PrivateProvider } from 'ui/private/private';
|
|||
|
||||
export { SavedObjectRegistryProvider } from 'ui/saved_objects';
|
||||
export { SavedObjectSaveModal } from 'ui/saved_objects/components/saved_object_save_modal';
|
||||
export { SavedObjectFinder } from 'ui/saved_objects/components/saved_object_finder';
|
||||
export { showSaveModal } from 'ui/saved_objects/show_saved_object_save_modal';
|
||||
|
||||
export { subscribeWithScope } from 'ui/utils/subscribe_with_scope';
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
vis-types-registry="listingController.visTypeRegistry"
|
||||
add-base-path="listingController.addBasePath"
|
||||
ui-settings="listingController.uiSettings"
|
||||
saved-objects="listingController.savedObjects"
|
||||
></new-vis-modal>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -34,6 +34,7 @@ export function initListingDirective(app) {
|
|||
['onClose', { watchDepth: 'reference' }],
|
||||
['addBasePath', { watchDepth: 'reference' }],
|
||||
['uiSettings', { watchDepth: 'reference' }],
|
||||
['savedObjects', { watchDepth: 'reference' }],
|
||||
'isOpen',
|
||||
])
|
||||
);
|
||||
|
@ -54,7 +55,7 @@ export function VisualizeListingController($injector, createNewVis) {
|
|||
toastNotifications,
|
||||
uiSettings,
|
||||
visualizations,
|
||||
core: { docLinks },
|
||||
core: { docLinks, savedObjects },
|
||||
} = getServices();
|
||||
const kbnUrl = $injector.get('kbnUrl');
|
||||
|
||||
|
@ -64,6 +65,7 @@ export function VisualizeListingController($injector, createNewVis) {
|
|||
this.showNewVisModal = false;
|
||||
this.addBasePath = addBasePath;
|
||||
this.uiSettings = uiSettings;
|
||||
this.savedObjects = savedObjects;
|
||||
|
||||
this.createNewVis = () => {
|
||||
this.showNewVisModal = true;
|
||||
|
|
|
@ -108,6 +108,7 @@ exports[`NewVisModal filter for visualization types should render as expected 1`
|
|||
}
|
||||
isOpen={true}
|
||||
onClose={[Function]}
|
||||
savedObjects={Object {}}
|
||||
uiSettings={
|
||||
Object {
|
||||
"get": [MockFunction] {
|
||||
|
@ -1413,6 +1414,7 @@ exports[`NewVisModal should render as expected 1`] = `
|
|||
}
|
||||
isOpen={true}
|
||||
onClose={[Function]}
|
||||
savedObjects={Object {}}
|
||||
uiSettings={
|
||||
Object {
|
||||
"get": [MockFunction] {
|
||||
|
|
|
@ -29,6 +29,7 @@ jest.mock('../legacy_imports', () => ({
|
|||
}));
|
||||
|
||||
import { NewVisModal } from './new_vis_modal';
|
||||
import { SavedObjectsStart } from 'kibana/public';
|
||||
|
||||
describe('NewVisModal', () => {
|
||||
const defaultVisTypeParams = {
|
||||
|
@ -76,6 +77,7 @@ describe('NewVisModal', () => {
|
|||
visTypesRegistry={visTypes}
|
||||
addBasePath={addBasePath}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={{} as SavedObjectsStart}
|
||||
/>
|
||||
);
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
|
@ -89,6 +91,7 @@ describe('NewVisModal', () => {
|
|||
visTypesRegistry={visTypes}
|
||||
addBasePath={addBasePath}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={{} as SavedObjectsStart}
|
||||
/>
|
||||
);
|
||||
expect(wrapper.find('[data-test-subj="visType-vis"]').exists()).toBe(true);
|
||||
|
@ -104,6 +107,7 @@ describe('NewVisModal', () => {
|
|||
visTypesRegistry={visTypes}
|
||||
addBasePath={addBasePath}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={{} as SavedObjectsStart}
|
||||
/>
|
||||
);
|
||||
const visButton = wrapper.find('button[data-test-subj="visType-vis"]');
|
||||
|
@ -121,6 +125,7 @@ describe('NewVisModal', () => {
|
|||
editorParams={['foo=true', 'bar=42']}
|
||||
addBasePath={addBasePath}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={{} as SavedObjectsStart}
|
||||
/>
|
||||
);
|
||||
const visButton = wrapper.find('button[data-test-subj="visType-vis"]');
|
||||
|
@ -138,6 +143,7 @@ describe('NewVisModal', () => {
|
|||
visTypesRegistry={visTypes}
|
||||
addBasePath={addBasePath}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={{} as SavedObjectsStart}
|
||||
/>
|
||||
);
|
||||
const searchBox = wrapper.find('input[data-test-subj="filterVisType"]');
|
||||
|
@ -156,6 +162,7 @@ describe('NewVisModal', () => {
|
|||
visTypesRegistry={visTypes}
|
||||
addBasePath={addBasePath}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={{} as SavedObjectsStart}
|
||||
/>
|
||||
);
|
||||
expect(wrapper.find('[data-test-subj="visType-visExp"]').exists()).toBe(false);
|
||||
|
@ -170,6 +177,7 @@ describe('NewVisModal', () => {
|
|||
visTypesRegistry={visTypes}
|
||||
addBasePath={addBasePath}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={{} as SavedObjectsStart}
|
||||
/>
|
||||
);
|
||||
expect(wrapper.find('[data-test-subj="visType-visExp"]').exists()).toBe(true);
|
||||
|
|
|
@ -22,7 +22,7 @@ import React from 'react';
|
|||
import { EuiModal, EuiOverlayMask } from '@elastic/eui';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
|
||||
import { IUiSettingsClient } from 'kibana/public';
|
||||
import { IUiSettingsClient, SavedObjectsStart } from 'kibana/public';
|
||||
import { VisType } from '../legacy_imports';
|
||||
import { VisualizeConstants } from '../visualize_constants';
|
||||
import { createUiStatsReporter, METRIC_TYPE } from '../../../../ui_metric/public';
|
||||
|
@ -37,6 +37,7 @@ interface TypeSelectionProps {
|
|||
editorParams?: string[];
|
||||
addBasePath: (path: string) => string;
|
||||
uiSettings: IUiSettingsClient;
|
||||
savedObjects: SavedObjectsStart;
|
||||
}
|
||||
|
||||
interface TypeSelectionState {
|
||||
|
@ -81,7 +82,12 @@ class NewVisModal extends React.Component<TypeSelectionProps, TypeSelectionState
|
|||
const selectionModal =
|
||||
this.state.showSearchVisModal && this.state.visType ? (
|
||||
<EuiModal onClose={this.onCloseModal} className="visNewVisSearchDialog">
|
||||
<SearchSelection onSearchSelected={this.onSearchSelected} visType={this.state.visType} />
|
||||
<SearchSelection
|
||||
onSearchSelected={this.onSearchSelected}
|
||||
visType={this.state.visType}
|
||||
uiSettings={this.props.uiSettings}
|
||||
savedObjects={this.props.savedObjects}
|
||||
/>
|
||||
</EuiModal>
|
||||
) : (
|
||||
<EuiModal
|
||||
|
|
|
@ -21,12 +21,16 @@ import { EuiModalBody, EuiModalHeader, EuiModalHeaderTitle } from '@elastic/eui'
|
|||
import { i18n } from '@kbn/i18n';
|
||||
import { FormattedMessage } from '@kbn/i18n/react';
|
||||
import React from 'react';
|
||||
import { IUiSettingsClient, SavedObjectsStart } from 'kibana/public';
|
||||
|
||||
import { SavedObjectFinder, VisType } from '../../legacy_imports';
|
||||
import { SavedObjectFinderUi } from '../../../../../../../plugins/kibana_react/public';
|
||||
import { VisType } from '../../legacy_imports';
|
||||
|
||||
interface SearchSelectionProps {
|
||||
onSearchSelected: (searchId: string, searchType: string) => void;
|
||||
visType: VisType;
|
||||
uiSettings: IUiSettingsClient;
|
||||
savedObjects: SavedObjectsStart;
|
||||
}
|
||||
|
||||
export class SearchSelection extends React.Component<SearchSelectionProps> {
|
||||
|
@ -50,7 +54,7 @@ export class SearchSelection extends React.Component<SearchSelectionProps> {
|
|||
</EuiModalHeaderTitle>
|
||||
</EuiModalHeader>
|
||||
<EuiModalBody>
|
||||
<SavedObjectFinder
|
||||
<SavedObjectFinderUi
|
||||
key="searchSavedObjectFinder"
|
||||
onChoose={this.props.onSearchSelected}
|
||||
showFilter
|
||||
|
@ -83,6 +87,8 @@ export class SearchSelection extends React.Component<SearchSelectionProps> {
|
|||
},
|
||||
]}
|
||||
fixedPageSize={this.fixedPageSize}
|
||||
uiSettings={this.props.uiSettings}
|
||||
savedObjects={this.props.savedObjects}
|
||||
/>
|
||||
</EuiModalBody>
|
||||
</React.Fragment>
|
||||
|
|
|
@ -21,7 +21,7 @@ import React from 'react';
|
|||
import ReactDOM from 'react-dom';
|
||||
|
||||
import { I18nProvider } from '@kbn/i18n/react';
|
||||
import { IUiSettingsClient } from 'kibana/public';
|
||||
import { IUiSettingsClient, SavedObjectsStart } from 'kibana/public';
|
||||
import { NewVisModal } from './new_vis_modal';
|
||||
import { TypesStart } from '../../../../visualizations/public/np_ready/public/types';
|
||||
|
||||
|
@ -33,7 +33,8 @@ export function showNewVisModal(
|
|||
visTypeRegistry: TypesStart,
|
||||
{ editorParams = [] }: ShowNewVisModalParams = {},
|
||||
addBasePath: (path: string) => string,
|
||||
uiSettings: IUiSettingsClient
|
||||
uiSettings: IUiSettingsClient,
|
||||
savedObjects: SavedObjectsStart
|
||||
) {
|
||||
const container = document.createElement('div');
|
||||
const onClose = () => {
|
||||
|
@ -51,6 +52,7 @@ export function showNewVisModal(
|
|||
editorParams={editorParams}
|
||||
addBasePath={addBasePath}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={savedObjects}
|
||||
/>
|
||||
</I18nProvider>
|
||||
);
|
||||
|
|
|
@ -1,108 +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 React from 'react';
|
||||
import { npStart } from 'ui/new_platform';
|
||||
import { IconType } from '@elastic/eui';
|
||||
import { SavedObjectAttributes } from 'src/core/server';
|
||||
import { SimpleSavedObject } from 'src/core/public';
|
||||
import { SavedObjectFinder as SavedObjectFinderNP } from '../../../../../plugins/kibana_react/public';
|
||||
|
||||
/**
|
||||
* DO NOT USE THIS COMPONENT, IT IS DEPRECATED.
|
||||
* Use the one in `src/plugins/kibana_react` instead.
|
||||
*/
|
||||
|
||||
export interface SavedObjectMetaData<T extends SavedObjectAttributes> {
|
||||
type: string;
|
||||
name: string;
|
||||
getIconForSavedObject(savedObject: SimpleSavedObject<T>): IconType;
|
||||
getTooltipForSavedObject?(savedObject: SimpleSavedObject<T>): string;
|
||||
showSavedObject?(savedObject: SimpleSavedObject<T>): boolean;
|
||||
}
|
||||
|
||||
interface BaseSavedObjectFinder {
|
||||
/**
|
||||
* @deprecated
|
||||
*
|
||||
* Use component in `src/plugins/kibana_react` instead.
|
||||
*/
|
||||
onChoose?: (
|
||||
id: SimpleSavedObject<SavedObjectAttributes>['id'],
|
||||
type: SimpleSavedObject<SavedObjectAttributes>['type'],
|
||||
name: string
|
||||
) => void;
|
||||
/**
|
||||
* @deprecated
|
||||
*
|
||||
* Use component in `src/plugins/kibana_react` instead.
|
||||
*/
|
||||
noItemsMessage?: React.ReactNode;
|
||||
/**
|
||||
* @deprecated
|
||||
*
|
||||
* Use component in `src/plugins/kibana_react` instead.
|
||||
*/
|
||||
savedObjectMetaData: Array<SavedObjectMetaData<SavedObjectAttributes>>;
|
||||
/**
|
||||
* @deprecated
|
||||
*
|
||||
* Use component in `src/plugins/kibana_react` instead.
|
||||
*/
|
||||
showFilter?: boolean;
|
||||
}
|
||||
|
||||
interface SavedObjectFinderFixedPage extends BaseSavedObjectFinder {
|
||||
/**
|
||||
* @deprecated
|
||||
*
|
||||
* Use component in `src/plugins/kibana_react` instead.
|
||||
*/
|
||||
initialPageSize?: undefined;
|
||||
/**
|
||||
* @deprecated
|
||||
*
|
||||
* Use component in `src/plugins/kibana_react` instead.
|
||||
*/
|
||||
fixedPageSize: number;
|
||||
}
|
||||
|
||||
interface SavedObjectFinderInitialPageSize extends BaseSavedObjectFinder {
|
||||
/**
|
||||
* @deprecated
|
||||
*
|
||||
* Use component in `src/plugins/kibana_react` instead.
|
||||
*/
|
||||
initialPageSize?: 5 | 10 | 15 | 25;
|
||||
/**
|
||||
* @deprecated
|
||||
*
|
||||
* Use component in `src/plugins/kibana_react` instead.
|
||||
*/
|
||||
fixedPageSize?: undefined;
|
||||
}
|
||||
type SavedObjectFinderProps = SavedObjectFinderFixedPage | SavedObjectFinderInitialPageSize;
|
||||
|
||||
export const SavedObjectFinder: React.FC<SavedObjectFinderProps> = props => (
|
||||
<SavedObjectFinderNP
|
||||
savedObjects={npStart.core.savedObjects}
|
||||
uiSettings={npStart.core.uiSettings}
|
||||
{...props}
|
||||
/>
|
||||
);
|
|
@ -27,7 +27,7 @@ import { ExpandPanelAction, ReplacePanelAction } from '.';
|
|||
import { DashboardContainerFactory } from './embeddable/dashboard_container_factory';
|
||||
import { Start as InspectorStartContract } from '../../../plugins/inspector/public';
|
||||
import {
|
||||
SavedObjectFinder as SavedObjectFinderUi,
|
||||
SavedObjectFinderUi,
|
||||
SavedObjectFinderProps,
|
||||
ExitFullScreenButton as ExitFullScreenButtonUi,
|
||||
ExitFullScreenButtonProps,
|
||||
|
|
|
@ -35,7 +35,7 @@ import { IconType } from '@elastic/eui';
|
|||
import { shallow } from 'enzyme';
|
||||
import React from 'react';
|
||||
import * as sinon from 'sinon';
|
||||
import { SavedObjectFinder } from './saved_object_finder';
|
||||
import { SavedObjectFinderUi as SavedObjectFinder } from './saved_object_finder';
|
||||
// eslint-disable-next-line
|
||||
import { coreMock } from '../../../../core/public/mocks';
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ import { i18n } from '@kbn/i18n';
|
|||
|
||||
import { SavedObjectAttributes } from '../../../../core/server';
|
||||
import { SimpleSavedObject, CoreStart } from '../../../../core/public';
|
||||
import { useKibana } from '../context';
|
||||
|
||||
// TODO the typings for EuiListGroup are incorrect - maxWidth is missing. This can be removed when the types are adjusted
|
||||
const FixedEuiListGroup = (EuiListGroup as any) as React.FunctionComponent<
|
||||
|
@ -104,12 +105,18 @@ interface SavedObjectFinderInitialPageSize extends BaseSavedObjectFinder {
|
|||
initialPageSize?: 5 | 10 | 15 | 25;
|
||||
fixedPageSize?: undefined;
|
||||
}
|
||||
export type SavedObjectFinderProps = {
|
||||
|
||||
export type SavedObjectFinderProps = SavedObjectFinderFixedPage | SavedObjectFinderInitialPageSize;
|
||||
|
||||
export type SavedObjectFinderUiProps = {
|
||||
savedObjects: CoreStart['savedObjects'];
|
||||
uiSettings: CoreStart['uiSettings'];
|
||||
} & (SavedObjectFinderFixedPage | SavedObjectFinderInitialPageSize);
|
||||
} & SavedObjectFinderProps;
|
||||
|
||||
class SavedObjectFinder extends React.Component<SavedObjectFinderProps, SavedObjectFinderState> {
|
||||
class SavedObjectFinderUi extends React.Component<
|
||||
SavedObjectFinderUiProps,
|
||||
SavedObjectFinderState
|
||||
> {
|
||||
public static propTypes = {
|
||||
onChoose: PropTypes.func,
|
||||
noItemsMessage: PropTypes.node,
|
||||
|
@ -174,7 +181,7 @@ class SavedObjectFinder extends React.Component<SavedObjectFinderProps, SavedObj
|
|||
}
|
||||
}, 300);
|
||||
|
||||
constructor(props: SavedObjectFinderProps) {
|
||||
constructor(props: SavedObjectFinderUiProps) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
|
@ -523,4 +530,15 @@ class SavedObjectFinder extends React.Component<SavedObjectFinderProps, SavedObj
|
|||
}
|
||||
}
|
||||
|
||||
export { SavedObjectFinder };
|
||||
const SavedObjectFinder = (props: SavedObjectFinderProps) => {
|
||||
const { services } = useKibana();
|
||||
return (
|
||||
<SavedObjectFinderUi
|
||||
{...props}
|
||||
savedObjects={services.savedObject}
|
||||
uiSettings={services.uiSettings}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export { SavedObjectFinder, SavedObjectFinderUi };
|
||||
|
|
|
@ -22,7 +22,6 @@ import 'uiExports/embeddableFactories';
|
|||
import 'uiExports/embeddableActions';
|
||||
|
||||
import { npSetup, npStart } from 'ui/new_platform';
|
||||
import { SavedObjectFinder } from 'ui/saved_objects/components/saved_object_finder';
|
||||
import { ExitFullScreenButton } from 'ui/exit_full_screen';
|
||||
import uiRoutes from 'ui/routes';
|
||||
// @ts-ignore
|
||||
|
@ -39,7 +38,6 @@ export const setup = pluginInstance.setup(npSetup.core, {
|
|||
embeddable: npSetup.plugins.embeddable,
|
||||
inspector: npSetup.plugins.inspector,
|
||||
__LEGACY: {
|
||||
SavedObjectFinder,
|
||||
ExitFullScreenButton,
|
||||
},
|
||||
});
|
||||
|
@ -64,7 +62,6 @@ export const start = pluginInstance.start(npStart.core, {
|
|||
inspector: npStart.plugins.inspector,
|
||||
uiActions: npStart.plugins.uiActions,
|
||||
__LEGACY: {
|
||||
SavedObjectFinder,
|
||||
ExitFullScreenButton,
|
||||
onRenderComplete: (renderCompleteListener: () => void) => {
|
||||
if (rendered) {
|
||||
|
|
|
@ -38,6 +38,10 @@ import {
|
|||
ContactCardEmbeddableFactory,
|
||||
} from './embeddable_api';
|
||||
import { App } from './app';
|
||||
import {
|
||||
SavedObjectFinderProps,
|
||||
SavedObjectFinderUi,
|
||||
} from '../../../../../../../src/plugins/kibana_react/public/saved_objects';
|
||||
import {
|
||||
IEmbeddableStart,
|
||||
IEmbeddableSetup,
|
||||
|
@ -47,7 +51,6 @@ export interface SetupDependencies {
|
|||
embeddable: IEmbeddableSetup;
|
||||
inspector: InspectorSetupContract;
|
||||
__LEGACY: {
|
||||
SavedObjectFinder: React.ComponentType<any>;
|
||||
ExitFullScreenButton: React.ComponentType<any>;
|
||||
};
|
||||
}
|
||||
|
@ -57,7 +60,6 @@ interface StartDependencies {
|
|||
uiActions: IUiActionsStart;
|
||||
inspector: InspectorStartContract;
|
||||
__LEGACY: {
|
||||
SavedObjectFinder: React.ComponentType<any>;
|
||||
ExitFullScreenButton: React.ComponentType<any>;
|
||||
onRenderComplete: (onRenderComplete: () => void) => void;
|
||||
};
|
||||
|
@ -99,6 +101,13 @@ export class EmbeddableExplorerPublicPlugin
|
|||
|
||||
plugins.__LEGACY.onRenderComplete(() => {
|
||||
const root = document.getElementById(REACT_ROOT_ID);
|
||||
const SavedObjectFinder = (props: SavedObjectFinderProps) => (
|
||||
<SavedObjectFinderUi
|
||||
{...props}
|
||||
savedObjects={core.savedObjects}
|
||||
uiSettings={core.uiSettings}
|
||||
/>
|
||||
);
|
||||
ReactDOM.render(
|
||||
<App
|
||||
getActions={plugins.uiActions.getTriggerCompatibleActions}
|
||||
|
@ -107,7 +116,7 @@ export class EmbeddableExplorerPublicPlugin
|
|||
notifications={core.notifications}
|
||||
overlays={core.overlays}
|
||||
inspector={plugins.inspector}
|
||||
SavedObjectFinder={plugins.__LEGACY.SavedObjectFinder}
|
||||
SavedObjectFinder={SavedObjectFinder}
|
||||
I18nContext={core.i18n.Context}
|
||||
/>,
|
||||
root
|
||||
|
|
|
@ -16,8 +16,11 @@ import {
|
|||
} from '../../../../../../src/legacy/core_plugins/embeddable_api/public/np_ready/public';
|
||||
import { start } from '../../../../../../src/legacy/core_plugins/embeddable_api/public/np_ready/public/legacy';
|
||||
import { EmbeddableExpression } from '../expression_types/embeddable';
|
||||
import { SavedObjectFinder } from '../../../../../../src/legacy/ui/public/saved_objects/components/saved_object_finder';
|
||||
import { RendererStrings } from '../../i18n';
|
||||
import {
|
||||
SavedObjectFinderProps,
|
||||
SavedObjectFinderUi,
|
||||
} from '../../../../../../src/plugins/kibana_react/public';
|
||||
|
||||
const { embeddable: strings } = RendererStrings;
|
||||
|
||||
|
@ -34,6 +37,13 @@ interface Handlers {
|
|||
}
|
||||
|
||||
const renderEmbeddable = (embeddableObject: IEmbeddable, domNode: HTMLElement) => {
|
||||
const SavedObjectFinder = (props: SavedObjectFinderProps) => (
|
||||
<SavedObjectFinderUi
|
||||
{...props}
|
||||
savedObjects={npStart.core.savedObjects}
|
||||
uiSettings={npStart.core.uiSettings}
|
||||
/>
|
||||
);
|
||||
return (
|
||||
<div
|
||||
className="embeddable"
|
||||
|
|
|
@ -8,7 +8,7 @@ import React from 'react';
|
|||
|
||||
import { EuiFlyout, EuiFlyoutHeader, EuiFlyoutBody, EuiTitle } from '@elastic/eui';
|
||||
import {
|
||||
SavedObjectFinder,
|
||||
SavedObjectFinderUi,
|
||||
SavedObjectMetaData,
|
||||
} from '../../../../../../../src/plugins/kibana_react/public/saved_objects'; // eslint-disable-line
|
||||
import { start } from '../../../../../../../src/legacy/core_plugins/embeddable_api/public/np_ready/public/legacy';
|
||||
|
@ -64,7 +64,7 @@ export class AddEmbeddableFlyout extends React.Component<Props> {
|
|||
</EuiTitle>
|
||||
</EuiFlyoutHeader>
|
||||
<EuiFlyoutBody>
|
||||
<SavedObjectFinder
|
||||
<SavedObjectFinderUi
|
||||
onChoose={this.onAddPanel}
|
||||
savedObjectMetaData={availableSavedObjects}
|
||||
showFilter={true}
|
||||
|
|
|
@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n';
|
|||
import React from 'react';
|
||||
|
||||
import { CoreStart } from 'src/core/public';
|
||||
import { SavedObjectFinder } from '../../../../../../src/plugins/kibana_react/public';
|
||||
import { SavedObjectFinderUi } from '../../../../../../src/plugins/kibana_react/public';
|
||||
import { IndexPatternSavedObject } from '../types';
|
||||
|
||||
export interface SourcePickerProps {
|
||||
|
@ -25,7 +25,7 @@ export function SourcePicker({
|
|||
onIndexPatternSelected,
|
||||
}: SourcePickerProps) {
|
||||
return (
|
||||
<SavedObjectFinder
|
||||
<SavedObjectFinderUi
|
||||
savedObjects={savedObjects}
|
||||
uiSettings={uiSettings}
|
||||
onChoose={(_id, _type, _name, indexPattern) => {
|
||||
|
|
|
@ -15,7 +15,8 @@ import {
|
|||
} from '@elastic/eui';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { FormattedMessage } from '@kbn/i18n/react';
|
||||
import { SavedObjectFinder } from 'ui/saved_objects/components/saved_object_finder';
|
||||
import { npStart } from 'ui/new_platform';
|
||||
import { SavedObjectFinderUi } from '../../../../../../../../../../src/plugins/kibana_react/public';
|
||||
|
||||
export interface PageProps {
|
||||
nextStepPath: string;
|
||||
|
@ -46,7 +47,7 @@ export const Page: FC<PageProps> = ({ nextStepPath }) => {
|
|||
</EuiPageHeaderSection>
|
||||
</EuiPageHeader>
|
||||
<EuiPageContent>
|
||||
<SavedObjectFinder
|
||||
<SavedObjectFinderUi
|
||||
key="searchSavedObjectFinder"
|
||||
onChoose={onObjectSelection}
|
||||
showFilter
|
||||
|
@ -76,6 +77,8 @@ export const Page: FC<PageProps> = ({ nextStepPath }) => {
|
|||
},
|
||||
]}
|
||||
fixedPageSize={RESULTS_PER_PAGE}
|
||||
uiSettings={npStart.core.uiSettings}
|
||||
savedObjects={npStart.core.savedObjects}
|
||||
/>
|
||||
</EuiPageContent>
|
||||
</EuiPageBody>
|
||||
|
|
|
@ -9,7 +9,6 @@ import React, { useEffect, useState } from 'react';
|
|||
import { createPortalNode, InPortal } from 'react-reverse-portal';
|
||||
import styled, { css } from 'styled-components';
|
||||
import { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION } from 'ui/documentation_links';
|
||||
import { SavedObjectFinder } from 'ui/saved_objects/components/saved_object_finder';
|
||||
|
||||
import { EmbeddablePanel } from '../../../../../../../src/legacy/core_plugins/embeddable_api/public/np_ready/public';
|
||||
import { start } from '../../../../../../../src/legacy/core_plugins/embeddable_api/public/np_ready/public/legacy';
|
||||
|
@ -29,6 +28,10 @@ import { MapToolTip } from './map_tool_tip/map_tool_tip';
|
|||
import * as i18n from './translations';
|
||||
import { MapEmbeddable, SetQuery } from './types';
|
||||
import { Query, esFilters } from '../../../../../../../src/plugins/data/public';
|
||||
import {
|
||||
SavedObjectFinderProps,
|
||||
SavedObjectFinderUi,
|
||||
} from '../../../../../../../src/plugins/kibana_react/public';
|
||||
|
||||
interface EmbeddableMapProps {
|
||||
maintainRatio?: boolean;
|
||||
|
@ -176,6 +179,10 @@ export const EmbeddedMapComponent = ({
|
|||
}
|
||||
}, [startDate, endDate]);
|
||||
|
||||
const SavedObjectFinder = (props: SavedObjectFinderProps) => (
|
||||
<SavedObjectFinderUi {...props} savedObjects={core.savedObjects} uiSettings={core.uiSettings} />
|
||||
);
|
||||
|
||||
return isError ? null : (
|
||||
<Embeddable>
|
||||
<EmbeddableHeader title={i18n.EMBEDDABLE_HEADER_TITLE}>
|
||||
|
|
|
@ -8,8 +8,8 @@ import { EuiModalBody, EuiModalHeader, EuiModalHeaderTitle } from '@elastic/eui'
|
|||
import { i18n } from '@kbn/i18n';
|
||||
import { FormattedMessage } from '@kbn/i18n/react';
|
||||
import React, { FC } from 'react';
|
||||
|
||||
import { SavedObjectFinder } from 'ui/saved_objects/components/saved_object_finder';
|
||||
import { SavedObjectFinderUi } from '../../../../../../../../../../src/plugins/kibana_react/public';
|
||||
import { useAppDependencies } from '../../../../app_dependencies';
|
||||
|
||||
interface SearchSelectionProps {
|
||||
onSearchSelected: (searchId: string, searchType: string) => void;
|
||||
|
@ -17,56 +17,63 @@ interface SearchSelectionProps {
|
|||
|
||||
const fixedPageSize: number = 8;
|
||||
|
||||
export const SearchSelection: FC<SearchSelectionProps> = ({ onSearchSelected }) => (
|
||||
<>
|
||||
<EuiModalHeader>
|
||||
<EuiModalHeaderTitle>
|
||||
<FormattedMessage
|
||||
id="xpack.transform.newTransform.newTransformTitle"
|
||||
defaultMessage="New transform"
|
||||
/>{' '}
|
||||
/{' '}
|
||||
<FormattedMessage
|
||||
id="xpack.transform.newTransform.chooseSourceTitle"
|
||||
defaultMessage="Choose a source"
|
||||
export const SearchSelection: FC<SearchSelectionProps> = ({ onSearchSelected }) => {
|
||||
const {
|
||||
core: { uiSettings, savedObjects },
|
||||
} = useAppDependencies();
|
||||
return (
|
||||
<>
|
||||
<EuiModalHeader>
|
||||
<EuiModalHeaderTitle>
|
||||
<FormattedMessage
|
||||
id="xpack.transform.newTransform.newTransformTitle"
|
||||
defaultMessage="New transform"
|
||||
/>{' '}
|
||||
/{' '}
|
||||
<FormattedMessage
|
||||
id="xpack.transform.newTransform.chooseSourceTitle"
|
||||
defaultMessage="Choose a source"
|
||||
/>
|
||||
</EuiModalHeaderTitle>
|
||||
</EuiModalHeader>
|
||||
<EuiModalBody>
|
||||
<SavedObjectFinderUi
|
||||
key="searchSavedObjectFinder"
|
||||
onChoose={onSearchSelected}
|
||||
showFilter
|
||||
noItemsMessage={i18n.translate(
|
||||
'xpack.transform.newTransform.searchSelection.notFoundLabel',
|
||||
{
|
||||
defaultMessage: 'No matching indices or saved searches found.',
|
||||
}
|
||||
)}
|
||||
savedObjectMetaData={[
|
||||
{
|
||||
type: 'search',
|
||||
getIconForSavedObject: () => 'search',
|
||||
name: i18n.translate(
|
||||
'xpack.transform.newTransform.searchSelection.savedObjectType.search',
|
||||
{
|
||||
defaultMessage: 'Saved search',
|
||||
}
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'index-pattern',
|
||||
getIconForSavedObject: () => 'indexPatternApp',
|
||||
name: i18n.translate(
|
||||
'xpack.transform.newTransform.searchSelection.savedObjectType.indexPattern',
|
||||
{
|
||||
defaultMessage: 'Index pattern',
|
||||
}
|
||||
),
|
||||
},
|
||||
]}
|
||||
fixedPageSize={fixedPageSize}
|
||||
uiSettings={uiSettings}
|
||||
savedObjects={savedObjects}
|
||||
/>
|
||||
</EuiModalHeaderTitle>
|
||||
</EuiModalHeader>
|
||||
<EuiModalBody>
|
||||
<SavedObjectFinder
|
||||
key="searchSavedObjectFinder"
|
||||
onChoose={onSearchSelected}
|
||||
showFilter
|
||||
noItemsMessage={i18n.translate(
|
||||
'xpack.transform.newTransform.searchSelection.notFoundLabel',
|
||||
{
|
||||
defaultMessage: 'No matching indices or saved searches found.',
|
||||
}
|
||||
)}
|
||||
savedObjectMetaData={[
|
||||
{
|
||||
type: 'search',
|
||||
getIconForSavedObject: () => 'search',
|
||||
name: i18n.translate(
|
||||
'xpack.transform.newTransform.searchSelection.savedObjectType.search',
|
||||
{
|
||||
defaultMessage: 'Saved search',
|
||||
}
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'index-pattern',
|
||||
getIconForSavedObject: () => 'indexPatternApp',
|
||||
name: i18n.translate(
|
||||
'xpack.transform.newTransform.searchSelection.savedObjectType.indexPattern',
|
||||
{
|
||||
defaultMessage: 'Index pattern',
|
||||
}
|
||||
),
|
||||
},
|
||||
]}
|
||||
fixedPageSize={fixedPageSize}
|
||||
/>
|
||||
</EuiModalBody>
|
||||
</>
|
||||
);
|
||||
</EuiModalBody>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -27,12 +27,21 @@ const template = `<kbn-management-app section="${KBN_MANAGEMENT_SECTION}"><div i
|
|||
|
||||
export class Plugin {
|
||||
public start(core: Core, plugins: Plugins): void {
|
||||
const { http, routing, legacyHttp, chrome, documentation, docTitle } = core;
|
||||
const {
|
||||
http,
|
||||
routing,
|
||||
legacyHttp,
|
||||
chrome,
|
||||
documentation,
|
||||
docTitle,
|
||||
uiSettings,
|
||||
savedObjects,
|
||||
} = core;
|
||||
const { management, savedSearches: coreSavedSearches, uiMetric } = plugins;
|
||||
|
||||
// AppCore/AppPlugins to be passed on as React context
|
||||
const AppDependencies = {
|
||||
core: { chrome, http, i18n: core.i18n },
|
||||
core: { chrome, http, i18n: core.i18n, uiSettings, savedObjects },
|
||||
plugins: {
|
||||
management: { sections: management.sections },
|
||||
savedSearches: coreSavedSearches,
|
||||
|
|
|
@ -18,7 +18,7 @@ export type npCore = typeof npStart.core;
|
|||
|
||||
// AppCore/AppPlugins is the set of core features/plugins
|
||||
// we pass on via context/hooks to the app and its components.
|
||||
export type AppCore = Pick<npCore, 'chrome' | 'http' | 'i18n'>;
|
||||
export type AppCore = Pick<npCore, 'chrome' | 'http' | 'i18n' | 'savedObjects' | 'uiSettings'>;
|
||||
|
||||
export interface AppPlugins {
|
||||
management: {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue