mirror of
https://github.com/elastic/kibana.git
synced 2025-06-27 18:51:07 -04:00
## Summary This PR removes all imports of Route from react-router-dom and '@kbn/kibana-react-plugin/public' and instead imports Route from @kbn/shared-ux-router. ### Context Based on https://github.com/elastic/kibana/issues/132629#issue-1243243678 This PR executes steps 2 - 4: > 2. To make the transition easier, we want to re-export other react-router-dom exports alongside the modified' Route'. > 3. Solutions should start using that Route component in place of the one from react-router-dom. I.e. replace all occurrences of import { ... } from 'react-router-dom' with import { ... } from '@kbn/shared-ux-router'. > 4. All manual calls to useExecutionContext are not needed anymore and should be removed. ### Future PR Looks like this might be getting worked on in: https://github.com/elastic/kibana/pull/145863 (thanks!) > Introduce an ESlint rule that ensures that react-router-dom is not used directly in Kibana and that imports go through the new @kbn/shared-ux-router package. This is tangentially accomplished through https://github.com/elastic/kibana/pull/150340 but only addresses using Route through @kbn/kibana-react-plugin/public' ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Tiago Costa <tiagoffcc@hotmail.com>
90 lines
3 KiB
TypeScript
90 lines
3 KiB
TypeScript
/*
|
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
* or more contributor license agreements. Licensed under the Elastic License
|
|
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
* 2.0.
|
|
*/
|
|
|
|
import React from 'react';
|
|
import ReactDOM from 'react-dom';
|
|
import { Router } from 'react-router-dom';
|
|
|
|
import { I18nProvider } from '@kbn/i18n-react';
|
|
import { EuiErrorBoundary } from '@elastic/eui';
|
|
|
|
import {
|
|
KibanaContextProvider,
|
|
KibanaThemeProvider,
|
|
useUiSetting$,
|
|
} from '@kbn/kibana-react-plugin/public';
|
|
import { EuiThemeProvider as StyledComponentsThemeProvider } from '@kbn/kibana-react-plugin/common';
|
|
import type { RenderAppProps } from './types';
|
|
import { CasesApp } from './components/app';
|
|
import type { ExternalReferenceAttachmentTypeRegistry } from './client/attachment_framework/external_reference_registry';
|
|
import type { PersistableStateAttachmentTypeRegistry } from './client/attachment_framework/persistable_state_registry';
|
|
|
|
export const renderApp = (deps: RenderAppProps) => {
|
|
const { mountParams } = deps;
|
|
const { element } = mountParams;
|
|
|
|
ReactDOM.render(<App deps={deps} />, element);
|
|
|
|
return () => {
|
|
ReactDOM.unmountComponentAtNode(element);
|
|
};
|
|
};
|
|
|
|
interface CasesAppWithContextProps {
|
|
externalReferenceAttachmentTypeRegistry: ExternalReferenceAttachmentTypeRegistry;
|
|
persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry;
|
|
}
|
|
|
|
const CasesAppWithContext: React.FC<CasesAppWithContextProps> = React.memo(
|
|
({ externalReferenceAttachmentTypeRegistry, persistableStateAttachmentTypeRegistry }) => {
|
|
const [darkMode] = useUiSetting$<boolean>('theme:darkMode');
|
|
|
|
return (
|
|
<StyledComponentsThemeProvider darkMode={darkMode}>
|
|
<CasesApp
|
|
externalReferenceAttachmentTypeRegistry={externalReferenceAttachmentTypeRegistry}
|
|
persistableStateAttachmentTypeRegistry={persistableStateAttachmentTypeRegistry}
|
|
/>
|
|
</StyledComponentsThemeProvider>
|
|
);
|
|
}
|
|
);
|
|
|
|
CasesAppWithContext.displayName = 'CasesAppWithContext';
|
|
|
|
export const App: React.FC<{ deps: RenderAppProps }> = ({ deps }) => {
|
|
const { mountParams, coreStart, pluginsStart, storage, kibanaVersion } = deps;
|
|
const { history, theme$ } = mountParams;
|
|
|
|
return (
|
|
<EuiErrorBoundary>
|
|
<I18nProvider>
|
|
<KibanaThemeProvider theme$={theme$}>
|
|
<KibanaContextProvider
|
|
services={{
|
|
kibanaVersion,
|
|
...coreStart,
|
|
...pluginsStart,
|
|
storage,
|
|
}}
|
|
>
|
|
<Router history={history}>
|
|
<CasesAppWithContext
|
|
externalReferenceAttachmentTypeRegistry={
|
|
deps.externalReferenceAttachmentTypeRegistry
|
|
}
|
|
persistableStateAttachmentTypeRegistry={deps.persistableStateAttachmentTypeRegistry}
|
|
/>
|
|
</Router>
|
|
</KibanaContextProvider>
|
|
</KibanaThemeProvider>
|
|
</I18nProvider>
|
|
</EuiErrorBoundary>
|
|
);
|
|
};
|
|
|
|
App.displayName = 'App';
|