src/platform/plugins/shared/kibana_react/README.md
kibana-reactTools for building React applications in Kibana.
You can create React context that holds Core or plugin services that your plugin depends on.
import { createKibanaReactContext } from 'kibana-react';
class MyPlugin {
start(core, plugins) {
const context = createKibanaReactContext({ ...core, ...plugins });
}
}
You may also want to be explicit about services you depend on.
import { createKibanaReactContext } from 'kibana-react';
class MyPlugin {
start({ notifications, overlays }, { embeddable }) {
const context = createKibanaReactContext({ notifications, overlays, embeddable });
}
}
Wrap your React application in the created context.
<context.Provider>
<KibanaApplication />
</context.Provider>
Or use already pre-created <KibanaContextProvider> component.
import { KibanaContextProvider } from 'kibana-react';
<KibanaContextProvider services={{ ...core, ...plugins }}>
<KibanaApplication />
</KibanaContextProvider>
<KibanaContextProvider services={{ notifications, overlays, embeddable }}>
<KibanaApplication />
</KibanaContextProvider>
Using useKibana hook.
import { useKibana } from 'kibana-react';
const Demo = () => {
const kibana = useKibana();
return <div>{kibana.services.uiSettings.get('theme:darkMode') ? 'dark' : 'light'}</div>;
};
Using withKibana() higher order component.
import { withKibana } from 'kibana-react';
const Demo = ({ kibana }) => {
return <div>{kibana.services.uiSettings.get('theme:darkMode') ? 'dark' : 'light'}</div>;
};
export default withKibana(Demo);
uiSettings serviceWrappers around Core's uiSettings service.
useUiSetting hookuseUiSetting synchronously returns the latest setting from CoreStart['uiSettings'] service.
import { useUiSetting } from 'kibana-react';
const Demo = () => {
const darkMode = useUiSetting<boolean>('theme:darkMode');
return <div>{darkMode ? 'dark' : 'light'}</div>;
};
useUiSetting<T>(key: string, defaultValue: T): T;
useUiSetting$ hookuseUiSetting$ synchronously returns the latest setting from CoreStart['uiSettings'] service and
subscribes to changes, re-rendering your component with latest values.
import { useUiSetting$ } from 'kibana-react';
const Demo = () => {
const [darkMode] = useUiSetting$<boolean>('theme:darkMode');
return <div>{darkMode ? 'dark' : 'light'}</div>;
};
useUiSetting$<T>(key: string, defaultValue: T): [T, (newValue: T) => void];
overlays serviceWrapper around Core's overlays service, allows you to display React modals and flyouts
directly without having to use react-dom library to mount to DOM nodes.
import { createKibanaReactContext } from 'kibana-react';
class MyPlugin {
start(core) {
const {
value: { overlays },
} = createKibanaReactContext(core);
overlays.openModal(<div>Hello world!</div>);
}
}
overlays.openModal — opens modal window.overlays.openFlyout — opens right side panel.You can access overlays service through React context.
const Demo = () => {
const { overlays } = useKibana();
useEffect(() => {
overlays.openModal(<div>Oooops! {errorMessage}</div>);
}, [errorMessage]);
};