From 80160cbf8fe21b904fe109470ae96e1dc5d42052 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Thu, 12 Dec 2024 13:34:44 -0700 Subject: [PATCH] Preparation for High Contrast Mode, ResponseOps domains (#202610) ## Summary **Reviewers: Please test the code paths affected by this PR. See the "Risks" section below.** Part of work for enabling "high contrast mode" in Kibana. See https://github.com/elastic/kibana/issues/176219. **Background:** Kibana will soon have a user profile setting to allow users to enable "high contrast mode." This setting will activate a flag with `` that causes EUI components to render with higher contrast visual elements. Consumer plugins and packages need to be updated selected places where `` is wrapped, to pass the `UserProfileService` service dependency from the CoreStart contract. **NOTE:** **EUI currently does not yet support the high-contrast mode flag**, but support for that is expected to come in around 2 weeks. These first PRs are simply preparing the code by wiring up the `UserProvideService`. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [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 - [X] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) ### Risks Does this PR introduce any risks? For example, consider risks like hard to test bugs, performance regression, potential of data loss. Describe the risk, its severity, and mitigation for each identified risk. Invite stakeholders and evaluate how to proceed before merging. - [ ] [medium/high] The implementor of this change did not manually test the affected code paths and relied on type-checking and functional tests to drive the changes. Code owners for this PR need to manually test the affected code paths. - [ ] [medium] The `UserProfileService` dependency comes from the CoreStart contract. If acquiring the service causes synchronous code to become asynchronous, check for race conditions or errors in rendering React components. Code owners for this PR need to manually test the affected code paths. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-alerts-ui-shared/tsconfig.json | 2 +- .../rule_form/src/create_rule_form.tsx | 4 +- .../rule_form/src/edit_rule_form.tsx | 4 +- .../response-ops/rule_form/src/rule_form.tsx | 56 ++++++++++++++++++- packages/response-ops/rule_form/src/types.ts | 2 + packages/response-ops/rule_form/tsconfig.json | 1 + .../public/application.tsx | 19 ++----- .../application/maintenance_windows.tsx | 3 +- .../public/common/lib/kibana/services.ts | 6 +- .../public/common/mock/test_providers.tsx | 4 +- .../cases/public/common/use_cases_toast.tsx | 8 +-- .../visualizations/actions/action_wrapper.tsx | 4 +- .../visualizations/actions/open_modal.tsx | 2 +- .../.storybook/decorator.tsx | 4 +- .../public/application/alerts_app.tsx | 4 +- .../public/application/connectors_app.tsx | 4 +- .../hooks/use_bulk_edit_response.tsx | 11 +++- .../hooks/use_bulk_operation_toast.tsx | 7 ++- .../public/application/rules_app.tsx | 4 +- .../connectors_selection.test.tsx | 4 +- .../toolbar/components/inspect/modal.test.tsx | 6 +- .../rule_details/components/rule_details.tsx | 4 +- .../sections/rule_form/rule_add.tsx | 5 +- .../sections/rule_form/rule_edit.tsx | 5 +- .../sections/rule_form/rule_form_route.tsx | 6 +- .../components/rule_status_dropdown.tsx | 5 +- .../rules_list/components/rules_list.tsx | 5 +- .../plugins/triggers_actions_ui/tsconfig.json | 3 +- 28 files changed, 124 insertions(+), 68 deletions(-) diff --git a/packages/kbn-alerts-ui-shared/tsconfig.json b/packages/kbn-alerts-ui-shared/tsconfig.json index 07a52c9d9c1b9..30be2e17af3ea 100644 --- a/packages/kbn-alerts-ui-shared/tsconfig.json +++ b/packages/kbn-alerts-ui-shared/tsconfig.json @@ -34,6 +34,6 @@ "@kbn/alerts-as-data-utils", "@kbn/core-http-browser-mocks", "@kbn/core-notifications-browser-mocks", - "@kbn/shared-ux-table-persist" + "@kbn/shared-ux-table-persist", ] } diff --git a/packages/response-ops/rule_form/src/create_rule_form.tsx b/packages/response-ops/rule_form/src/create_rule_form.tsx index d7ba545935495..2f5e0472dcd50 100644 --- a/packages/response-ops/rule_form/src/create_rule_form.tsx +++ b/packages/response-ops/rule_form/src/create_rule_form.tsx @@ -64,7 +64,7 @@ export const CreateRuleForm = (props: CreateRuleFormProps) => { onSubmit, } = props; - const { http, docLinks, notifications, ruleTypeRegistry, i18n, theme } = plugins; + const { http, docLinks, notifications, ruleTypeRegistry, ...deps } = plugins; const { toasts } = notifications; const { mutate, isLoading: isSaving } = useCreateRule({ @@ -82,7 +82,7 @@ export const CreateRuleForm = (props: CreateRuleFormProps) => { ...(message.details && { text: toMountPoint( {message.details}, - { i18n, theme } + deps ), }), }); diff --git a/packages/response-ops/rule_form/src/edit_rule_form.tsx b/packages/response-ops/rule_form/src/edit_rule_form.tsx index 7350a42475b69..392447114edd4 100644 --- a/packages/response-ops/rule_form/src/edit_rule_form.tsx +++ b/packages/response-ops/rule_form/src/edit_rule_form.tsx @@ -45,7 +45,7 @@ export const EditRuleForm = (props: EditRuleFormProps) => { onCancel, onSubmit, } = props; - const { http, notifications, docLinks, ruleTypeRegistry, i18n, theme, application } = plugins; + const { http, notifications, docLinks, ruleTypeRegistry, application, ...deps } = plugins; const { toasts } = notifications; const { mutate, isLoading: isSaving } = useUpdateRule({ @@ -63,7 +63,7 @@ export const EditRuleForm = (props: EditRuleFormProps) => { ...(message.details && { text: toMountPoint( {message.details}, - { i18n, theme } + deps ), }), }); diff --git a/packages/response-ops/rule_form/src/rule_form.tsx b/packages/response-ops/rule_form/src/rule_form.tsx index c09add5ae1c06..f34f811a7b488 100644 --- a/packages/response-ops/rule_form/src/rule_form.tsx +++ b/packages/response-ops/rule_form/src/rule_form.tsx @@ -28,13 +28,46 @@ export interface RuleFormProps { } export const RuleForm = (props: RuleFormProps) => { - const { plugins, onCancel, onSubmit } = props; + const { plugins: _plugins, onCancel, onSubmit } = props; const { id, ruleTypeId } = useParams<{ id?: string; ruleTypeId?: string; }>(); + const { + http, + i18n, + theme, + userProfile, + application, + notifications, + charts, + settings, + data, + dataViews, + unifiedSearch, + docLinks, + ruleTypeRegistry, + actionTypeRegistry, + } = _plugins; + const ruleFormComponent = useMemo(() => { + const plugins = { + http, + i18n, + theme, + userProfile, + application, + notifications, + charts, + settings, + data, + dataViews, + unifiedSearch, + docLinks, + ruleTypeRegistry, + actionTypeRegistry, + }; if (id) { return ; } @@ -60,7 +93,26 @@ export const RuleForm = (props: RuleFormProps) => { } /> ); - }, [id, ruleTypeId, plugins, onCancel, onSubmit]); + }, [ + http, + i18n, + theme, + userProfile, + application, + notifications, + charts, + settings, + data, + dataViews, + unifiedSearch, + docLinks, + ruleTypeRegistry, + actionTypeRegistry, + id, + ruleTypeId, + onCancel, + onSubmit, + ]); return {ruleFormComponent}; }; diff --git a/packages/response-ops/rule_form/src/types.ts b/packages/response-ops/rule_form/src/types.ts index 48ba6952b47f8..07f34e4c59026 100644 --- a/packages/response-ops/rule_form/src/types.ts +++ b/packages/response-ops/rule_form/src/types.ts @@ -16,6 +16,7 @@ import type { HttpStart } from '@kbn/core-http-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { NotificationsStart } from '@kbn/core-notifications-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { SettingsStart } from '@kbn/core-ui-settings-browser'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; @@ -54,6 +55,7 @@ export interface RuleFormPlugins { http: HttpStart; i18n: I18nStart; theme: ThemeServiceStart; + userProfile: UserProfileService; application: ApplicationStart; notifications: NotificationsStart; charts: ChartsPluginSetup; diff --git a/packages/response-ops/rule_form/tsconfig.json b/packages/response-ops/rule_form/tsconfig.json index 3f39fc766bd10..cea1478df1ef8 100644 --- a/packages/response-ops/rule_form/tsconfig.json +++ b/packages/response-ops/rule_form/tsconfig.json @@ -39,5 +39,6 @@ "@kbn/kibana-react-plugin", "@kbn/core-i18n-browser", "@kbn/core-theme-browser", + "@kbn/core-user-profile-browser", ] } diff --git a/x-pack/examples/triggers_actions_ui_example/public/application.tsx b/x-pack/examples/triggers_actions_ui_example/public/application.tsx index 74b99fc2dece3..638233dd47a88 100644 --- a/x-pack/examples/triggers_actions_ui_example/public/application.tsx +++ b/x-pack/examples/triggers_actions_ui_example/public/application.tsx @@ -45,6 +45,7 @@ export interface TriggersActionsUiExampleComponentParams { docLinks: CoreStart['docLinks']; i18n: CoreStart['i18n']; theme: CoreStart['theme']; + userProfile: CoreStart['userProfile']; settings: CoreStart['settings']; history: ScopedHistory; triggersActionsUi: TriggersAndActionsUIPublicPluginStart; @@ -63,12 +64,11 @@ const TriggersActionsUiExampleApp = ({ notifications, settings, docLinks, - i18n, - theme, data, charts, dataViews, unifiedSearch, + ...startServices }: TriggersActionsUiExampleComponentParams) => { return ( @@ -193,8 +193,6 @@ const TriggersActionsUiExampleApp = ({ application, notifications, docLinks, - i18n, - theme, charts, data, dataViews, @@ -202,6 +200,7 @@ const TriggersActionsUiExampleApp = ({ settings, ruleTypeRegistry: triggersActionsUi.ruleTypeRegistry, actionTypeRegistry: triggersActionsUi.actionTypeRegistry, + ...startServices, }} /> @@ -218,8 +217,6 @@ const TriggersActionsUiExampleApp = ({ application, notifications, docLinks, - theme, - i18n, charts, data, dataViews, @@ -227,6 +224,7 @@ const TriggersActionsUiExampleApp = ({ settings, ruleTypeRegistry: triggersActionsUi.ruleTypeRegistry, actionTypeRegistry: triggersActionsUi.actionTypeRegistry, + ...startServices, }} /> @@ -245,7 +243,6 @@ export const renderApp = ( deps: TriggersActionsUiExamplePublicStartDeps, { appBasePath, element, history }: AppMountParameters ) => { - const { http, notifications, docLinks, application, i18n, theme, settings } = core; const { triggersActionsUi } = deps; const { ruleTypeRegistry, actionTypeRegistry } = triggersActionsUi; @@ -263,19 +260,13 @@ export const renderApp = ( diff --git a/x-pack/plugins/alerting/public/application/maintenance_windows.tsx b/x-pack/plugins/alerting/public/application/maintenance_windows.tsx index 5f4b81bb716f7..9ac8245cd8288 100644 --- a/x-pack/plugins/alerting/public/application/maintenance_windows.tsx +++ b/x-pack/plugins/alerting/public/application/maintenance_windows.tsx @@ -78,12 +78,11 @@ export const renderApp = ({ kibanaVersion: string; }) => { const { element, history } = mountParams; - const { i18n, theme } = core; const queryClient = new QueryClient(); ReactDOM.render( - + & +type GlobalServices = Pick & Pick; export class KibanaServices { @@ -23,12 +23,12 @@ export class KibanaServices { http, serverless, kibanaVersion, - theme, + ...startServices }: GlobalServices & { kibanaVersion: string; config: CasesUiConfigType; }) { - this.services = { application, http, theme, serverless }; + this.services = { application, http, serverless, ...startServices }; this.kibanaVersion = kibanaVersion; this.config = config; } diff --git a/x-pack/plugins/cases/public/common/mock/test_providers.tsx b/x-pack/plugins/cases/public/common/mock/test_providers.tsx index 257ac4b1f8293..2e96f1e3633cb 100644 --- a/x-pack/plugins/cases/public/common/mock/test_providers.tsx +++ b/x-pack/plugins/cases/public/common/mock/test_providers.tsx @@ -99,7 +99,7 @@ const TestProvidersComponent: React.FC = ({ }; return ( - + @@ -178,7 +178,7 @@ export const createAppMockRenderer = ({ getFilesClient, }; const AppWrapper: React.FC<{ children: React.ReactNode }> = ({ children }) => ( - + diff --git a/x-pack/plugins/cases/public/common/use_cases_toast.tsx b/x-pack/plugins/cases/public/common/use_cases_toast.tsx index 71a9e3add1ae4..05c8e2f186a8b 100644 --- a/x-pack/plugins/cases/public/common/use_cases_toast.tsx +++ b/x-pack/plugins/cases/public/common/use_cases_toast.tsx @@ -106,7 +106,7 @@ const getErrorMessage = (error: Error | ServerError): string => { export const useCasesToast = () => { const { appId } = useApplication(); - const { application, i18n, theme } = useKibana().services; + const { application, i18n, theme, userProfile } = useKibana().services; const { getUrlForApp, navigateToUrl } = application; const toasts = useToasts(); @@ -148,13 +148,13 @@ export const useCasesToast = () => { return toasts.addSuccess({ color: 'success', iconType: 'check', - title: toMountPoint(, { i18n, theme }), + title: toMountPoint(, { i18n, theme, userProfile }), text: toMountPoint( , - { i18n, theme } + { i18n, theme, userProfile } ), }); }, @@ -177,7 +177,7 @@ export const useCasesToast = () => { }); }, }), - [i18n, theme, appId, getUrlForApp, navigateToUrl, toasts] + [i18n, theme, userProfile, appId, getUrlForApp, navigateToUrl, toasts] ); }; diff --git a/x-pack/plugins/cases/public/components/visualizations/actions/action_wrapper.tsx b/x-pack/plugins/cases/public/components/visualizations/actions/action_wrapper.tsx index add06a7badb22..e5f931492dabd 100644 --- a/x-pack/plugins/cases/public/components/visualizations/actions/action_wrapper.tsx +++ b/x-pack/plugins/cases/public/components/visualizations/actions/action_wrapper.tsx @@ -29,7 +29,7 @@ const ActionWrapperWithContext: React.FC> = ({ casesActionContextProps, currentAppId, }) => { - const { application, i18n, theme } = useKibana().services; + const { application, ...startServices } = useKibana().services; const owner = getCaseOwnerByAppId(currentAppId); const casePermissions = canUseCases(application.capabilities)(owner ? [owner] : undefined); @@ -37,7 +37,7 @@ const ActionWrapperWithContext: React.FC> = ({ const syncAlerts = owner === SECURITY_SOLUTION_OWNER; return ( - + , - { i18n: services.core.i18n, theme: services.core.theme } + services.core ); mount(targetDomElement); diff --git a/x-pack/plugins/triggers_actions_ui/.storybook/decorator.tsx b/x-pack/plugins/triggers_actions_ui/.storybook/decorator.tsx index 233b673353929..8947cf9f6bbe8 100644 --- a/x-pack/plugins/triggers_actions_ui/.storybook/decorator.tsx +++ b/x-pack/plugins/triggers_actions_ui/.storybook/decorator.tsx @@ -50,6 +50,8 @@ const notifications: NotificationsStart = { showErrorDialog: () => {}, }; +const userProfile = { getUserProfile$: () => of(null) }; + export const StorybookContextDecorator: FC> = ( props ) => { @@ -75,7 +77,7 @@ export const StorybookContextDecorator: FC - + { }; export const App = ({ deps }: { deps: TriggersAndActionsUiServices }) => { - const { dataViews, i18n, theme } = deps; + const { dataViews } = deps; setDataViewsService(dataViews); return ( - + diff --git a/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx b/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx index 8fe0d9745d1c2..f00db5879120b 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/connectors_app.tsx @@ -73,13 +73,13 @@ export const renderApp = (deps: TriggersAndActionsUiServices) => { }; export const App = ({ deps }: { deps: TriggersAndActionsUiServices }) => { - const { dataViews, i18n, theme } = deps; + const { dataViews } = deps; const sections: Section[] = ['connectors', 'logs']; const sectionsRegex = sections.join('|'); setDataViewsService(dataViews); return ( - + diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx index b1d69c89094e9..c07cc9ac770d2 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_edit_response.tsx @@ -65,6 +65,7 @@ export function useBulkEditResponse(props: UseBulkEditResponseProps) { const { i18n: i18nStart, theme, + userProfile, notifications: { toasts }, } = useKibana().services; @@ -124,7 +125,11 @@ export function useBulkEditResponse(props: UseBulkEditResponseProps) { if (numberOfErrors === total) { toasts.addDanger({ title: failureMessage(numberOfErrors, translationMap[property]), - text: toMountPoint(renderToastErrorBody(response), { i18n: i18nStart, theme }), + text: toMountPoint(renderToastErrorBody(response), { + i18n: i18nStart, + theme, + userProfile, + }), }); return; } @@ -132,10 +137,10 @@ export function useBulkEditResponse(props: UseBulkEditResponseProps) { // Some failure toasts.addWarning({ title: someSuccessMessage(numberOfSuccess, numberOfErrors, translationMap[property]), - text: toMountPoint(renderToastErrorBody(response), { i18n: i18nStart, theme }), + text: toMountPoint(renderToastErrorBody(response), { i18n: i18nStart, theme, userProfile }), }); }, - [i18nStart, theme, toasts, renderToastErrorBody] + [i18nStart, theme, userProfile, toasts, renderToastErrorBody] ); return useMemo(() => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx index 88ad5c8f52958..8d2d8d98b1155 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_bulk_operation_toast.tsx @@ -50,6 +50,7 @@ export const useBulkOperationToast = ({ const { i18n, theme, + userProfile, notifications: { toasts }, } = useKibana().services; @@ -122,7 +123,7 @@ export const useBulkOperationToast = ({ SINGLE_RULE_TITLE, MULTIPLE_RULE_TITLE ), - text: toMountPoint(renderToastErrorBody(errors, 'danger'), { i18n, theme }), + text: toMountPoint(renderToastErrorBody(errors, 'danger'), { i18n, theme, userProfile }), }); return; } @@ -135,10 +136,10 @@ export const useBulkOperationToast = ({ SINGLE_RULE_TITLE, MULTIPLE_RULE_TITLE ), - text: toMountPoint(renderToastErrorBody(errors, 'warning'), { i18n, theme }), + text: toMountPoint(renderToastErrorBody(errors, 'warning'), { i18n, theme, userProfile }), }); }, - [i18n, theme, toasts, renderToastErrorBody] + [i18n, theme, userProfile, toasts, renderToastErrorBody] ); return useMemo(() => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx b/x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx index 8550518edb457..2477d9d95c4b4 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/rules_app.tsx @@ -101,13 +101,13 @@ export const renderApp = (deps: TriggersAndActionsUiServices) => { }; export const App = ({ deps }: { deps: TriggersAndActionsUiServices }) => { - const { dataViews, i18n, theme } = deps; + const { dataViews } = deps; const sections: Section[] = ['rules', 'logs']; const sectionsRegex = sections.join('|'); setDataViewsService(dataViews); return ( - + diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connectors_selection.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connectors_selection.test.tsx index afb483b70f007..5fdd96611d718 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connectors_selection.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connectors_selection.test.tsx @@ -94,7 +94,7 @@ describe('connectors_selection', () => { it('renders a selector', () => { const wrapper = mountWithIntl( - + { it('renders the title of the connector', () => { render( - + { const renderModalInspectQuery = () => { const theme = { theme$: of({ darkMode: false, name: 'amsterdam' }) }; + const userProfile = userProfileServiceMock.createStart(); return render(, { wrapper: ({ children }) => ( - {children} + + {children} + ), }); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx index da1bd753af9b2..767b7cf70b9bb 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx @@ -108,6 +108,7 @@ export const RuleDetails: React.FunctionComponent = ({ http, i18n: i18nStart, theme, + userProfile, notifications: { toasts }, } = useKibana().services; @@ -223,7 +224,7 @@ export const RuleDetails: React.FunctionComponent = ({ )} , - { i18n: i18nStart, theme } + { i18n: i18nStart, theme, userProfile } ), }); } @@ -232,6 +233,7 @@ export const RuleDetails: React.FunctionComponent = ({ }, [ i18nStart, theme, + userProfile, rule.schedule.interval, config.minimumScheduleInterval, toasts, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx index 99a9e0761eb9e..419f4c7696379 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx @@ -132,9 +132,8 @@ const RuleAdd = < http, notifications: { toasts }, application: { capabilities }, - i18n: i18nStart, - theme, isServerless, + ...startServices } = useKibana().services; const canShowActions = hasShowActionsCapability(capabilities); @@ -284,7 +283,7 @@ const RuleAdd = < ...(message.details && { text: toMountPoint( {message.details}, - { i18n: i18nStart, theme } + startServices ), }), }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx index 3400f8c5270f6..5d1337063948d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx @@ -140,9 +140,8 @@ export const RuleEdit = < const { http, notifications: { toasts }, - i18n: i18nStart, - theme, isServerless, + ...startServices } = useKibana().services; const setRule = (value: Rule) => { @@ -238,7 +237,7 @@ export const RuleEdit = < ...(message.details && { text: toMountPoint( {message.details}, - { i18n: i18nStart, theme } + startServices ), }), }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_route.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_route.tsx index f0ecb56d0bc87..bfa4bccd49405 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_route.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_route.tsx @@ -17,8 +17,6 @@ import { getCurrentDocTitle } from '../../lib/doc_title'; export const RuleFormRoute = () => { const { http, - i18n, - theme, application, notifications, charts, @@ -31,6 +29,7 @@ export const RuleFormRoute = () => { actionTypeRegistry, chrome, setBreadcrumbs, + ...startServices } = useKibana().services; const location = useLocation<{ returnApp?: string; returnPath?: string }>(); @@ -64,8 +63,6 @@ export const RuleFormRoute = () => { { docLinks, ruleTypeRegistry, actionTypeRegistry, + ...startServices, }} onCancel={() => { if (returnApp && returnPath) { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx index 6ad7d525c3507..27f05487fb6e6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rule_status_dropdown.tsx @@ -63,6 +63,7 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ notifications: { toasts }, i18n: i18nStart, theme, + userProfile, } = useKibana().services; const [isUpdating, setIsUpdating] = useState(false); @@ -86,12 +87,12 @@ export const RuleStatusDropdown: React.FunctionComponent = ({ ...(message.details && { text: toMountPoint( {message.details}, - { i18n: i18nStart, theme } + { i18n: i18nStart, theme, userProfile } ), }), }); throw new Error(); - }, [i18nStart, theme, enableRule, toasts]); + }, [i18nStart, theme, userProfile, enableRule, toasts]); const onEnable = useCallback(async () => { setIsUpdating(true); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx index d1d1ce4fe6a3b..b827307cecdf6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx @@ -196,8 +196,7 @@ export const RulesList = ({ kibanaFeatures, notifications: { toasts }, ruleTypeRegistry, - i18n: i18nStart, - theme, + ...startServices } = kibanaServices; const canExecuteActions = hasExecuteActionsCapability(capabilities); @@ -715,7 +714,7 @@ export const RulesList = ({ title: parsedError.summary, text: toMountPoint( {parsedError.details}, - { theme, i18n: i18nStart } + startServices ), }); } else { diff --git a/x-pack/plugins/triggers_actions_ui/tsconfig.json b/x-pack/plugins/triggers_actions_ui/tsconfig.json index 7b947f560db85..7004ad1b1b08c 100644 --- a/x-pack/plugins/triggers_actions_ui/tsconfig.json +++ b/x-pack/plugins/triggers_actions_ui/tsconfig.json @@ -73,7 +73,8 @@ "@kbn/observability-alerting-rule-utils", "@kbn/core-application-browser", "@kbn/cloud-plugin", - "@kbn/response-ops-rule-form" + "@kbn/response-ops-rule-form", + "@kbn/core-user-profile-browser-mocks" ], "exclude": ["target/**/*"] }