From c5580f6ffd7a166921fe7d584f12f80f8d3490f7 Mon Sep 17 00:00:00 2001 From: Joe Portner Date: Mon, 31 Jan 2022 10:21:23 -0500 Subject: [PATCH] Replace deprecated index patterns API usage with data views API --- .../roles/edit_role/edit_role_page.test.tsx | 12 ++++++------ .../roles/edit_role/edit_role_page.tsx | 16 +++++++++------- .../management/roles/roles_management_app.tsx | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx index f621ca0eddb0f..a99e08fd5a8a6 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx @@ -139,9 +139,9 @@ function getProps({ const rolesAPIClient = rolesAPIClientMock.create(); rolesAPIClient.getRole.mockResolvedValue(role); - const indexPatterns = dataPluginMock.createStartContract().indexPatterns; + const dataViews = dataPluginMock.createStartContract().dataViews; // `undefined` titles can technically happen via import/export or other manual manipulation - indexPatterns.getTitles = jest.fn().mockResolvedValue(['foo*', 'bar*', undefined]); + dataViews.getTitles = jest.fn().mockResolvedValue(['foo*', 'bar*', undefined]); const indicesAPIClient = indicesAPIClientMock.create(); @@ -171,7 +171,7 @@ function getProps({ roleName: role?.name, license, http, - indexPatterns, + dataViews, indicesAPIClient, privilegesAPIClient, rolesAPIClient, @@ -352,11 +352,11 @@ describe('', () => { }); it('can render if index patterns are not available', async () => { - const indexPatterns = dataPluginMock.createStartContract().indexPatterns; - indexPatterns.getTitles = jest.fn().mockRejectedValue({ response: { status: 403 } }); + const dataViews = dataPluginMock.createStartContract().dataViews; + dataViews.getTitles = jest.fn().mockRejectedValue({ response: { status: 403 } }); const wrapper = mountWithIntl( - + ); await waitForRender(wrapper); diff --git a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx index 2bfc23b446966..2e9b5f126f6db 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx @@ -34,7 +34,7 @@ import type { NotificationsStart, ScopedHistory, } from 'src/core/public'; -import type { IndexPatternsContract } from 'src/plugins/data/public'; +import type { DataViewsContract } from 'src/plugins/data/public'; import { reactRouterNavigate } from '../../../../../../../src/plugins/kibana_react/public'; import type { KibanaFeature } from '../../../../../features/common'; @@ -69,7 +69,7 @@ import { RoleValidator } from './validate_role'; interface Props { action: 'edit' | 'clone'; roleName?: string; - indexPatterns: IndexPatternsContract; + dataViews: DataViewsContract; userAPIClient: PublicMethodsOf; indicesAPIClient: PublicMethodsOf; rolesAPIClient: PublicMethodsOf; @@ -101,13 +101,13 @@ function useRunAsUsers( } function useIndexPatternsTitles( - indexPatterns: IndexPatternsContract, + dataViews: DataViewsContract, fatalErrors: FatalErrorsSetup, notifications: NotificationsStart ) { const [indexPatternsTitles, setIndexPatternsTitles] = useState(null); useEffect(() => { - indexPatterns + dataViews .getTitles() .catch((err: IHttpFetchError) => { // If user doesn't have access to the index patterns they still should be able to create new @@ -115,6 +115,8 @@ function useIndexPatternsTitles( if (err.response?.status === 403) { notifications.toasts.addDanger({ title: i18n.translate('xpack.security.management.roles.noIndexPatternsPermission', { + // Note: we are attempting to fetch data views (a Kibana construct), but we are using those to render a list of usable index + // patterns (an Elasticsearch construct) for the user. This error message reflects what is shown on the UI. defaultMessage: 'You need permission to access the list of available index patterns.', }), }); @@ -125,7 +127,7 @@ function useIndexPatternsTitles( throw err; }) .then((titles) => setIndexPatternsTitles(titles.filter(Boolean))); - }, [fatalErrors, indexPatterns, notifications]); + }, [fatalErrors, dataViews, notifications]); return indexPatternsTitles; } @@ -271,7 +273,7 @@ function useFeatures( export const EditRolePage: FunctionComponent = ({ userAPIClient, - indexPatterns, + dataViews, rolesAPIClient, indicesAPIClient, privilegesAPIClient, @@ -294,7 +296,7 @@ export const EditRolePage: FunctionComponent = ({ const { current: validator } = useRef(new RoleValidator({ shouldValidate: false })); const [formError, setFormError] = useState(null); const runAsUsers = useRunAsUsers(userAPIClient, fatalErrors); - const indexPatternsTitles = useIndexPatternsTitles(indexPatterns, fatalErrors, notifications); + const indexPatternsTitles = useIndexPatternsTitles(dataViews, fatalErrors, notifications); const privileges = usePrivileges(privilegesAPIClient, fatalErrors); const spaces = useSpaces(http, fatalErrors); const features = useFeatures(getFeatures, fatalErrors); diff --git a/x-pack/plugins/security/public/management/roles/roles_management_app.tsx b/x-pack/plugins/security/public/management/roles/roles_management_app.tsx index fb68fa7857668..3c723bdfcc988 100644 --- a/x-pack/plugins/security/public/management/roles/roles_management_app.tsx +++ b/x-pack/plugins/security/public/management/roles/roles_management_app.tsx @@ -108,7 +108,7 @@ export const rolesManagementApp = Object.freeze({ license={license} docLinks={docLinks} uiCapabilities={application.capabilities} - indexPatterns={data.indexPatterns} + dataViews={data.dataViews} history={history} spacesApiUi={spacesApiUi} />