diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js index 990302ec95700..236970cf3c3f3 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js @@ -20,7 +20,7 @@ import React from 'react'; import { shallowWithIntl } from 'test_utils/enzyme_helpers'; -import { ObjectsTable } from '../objects_table'; +import { ObjectsTable, POSSIBLE_TYPES } from '../objects_table'; import { Flyout } from '../components/flyout/'; import { Relationships } from '../components/relationships/'; import { findObjects } from '../../../lib'; @@ -57,6 +57,10 @@ jest.mock('../../../lib/fetch_export_objects', () => ({ fetchExportObjects: jest.fn(), })); +jest.mock('../../../lib/fetch_export_by_type', () => ({ + fetchExportByType: jest.fn(), +})); + jest.mock('../../../lib/get_saved_object_counts', () => ({ getSavedObjectCounts: jest.fn().mockImplementation(() => { return { @@ -316,7 +320,7 @@ describe('ObjectsTable', () => { }); it('should export all', async () => { - const { fetchExportObjects } = require('../../../lib/fetch_export_objects'); + const { fetchExportByType } = require('../../../lib/fetch_export_by_type'); const { saveAs } = require('@elastic/filesaver'); const component = shallowWithIntl( { // Set up mocks const blob = new Blob([JSON.stringify(allSavedObjects)], { type: 'application/ndjson' }); - fetchExportObjects.mockImplementation(() => blob); + fetchExportByType.mockImplementation(() => blob); await component.instance().onExportAll(); - expect(fetchExportObjects).toHaveBeenCalledWith(allSavedObjects.map(so => ({ type: so.type, id: so.id })), true); + expect(fetchExportByType).toHaveBeenCalledWith(POSSIBLE_TYPES, true); expect(saveAs).toHaveBeenCalledWith(blob, 'export.ndjson'); expect(addSuccessMock).toHaveBeenCalledWith({ title: 'Your file is downloading in the background' }); }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/relationships.test.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/relationships.test.js index abb4df74275b2..9ad6190bc30d5 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/relationships.test.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/relationships.test.js @@ -39,6 +39,10 @@ jest.mock('ui/chrome', () => ({ addBasePath: () => '' })); +jest.mock('../../../../../lib/fetch_export_by_type', () => ({ + fetchExportByType: jest.fn(), +})); + jest.mock('../../../../../lib/fetch_export_objects', () => ({ fetchExportObjects: jest.fn(), })); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/objects_table.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/objects_table.js index b04a9eb9d3bc2..9c1f1a84e1bb6 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/objects_table.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/objects_table.js @@ -58,6 +58,7 @@ import { getRelationships, getSavedObjectLabel, fetchExportObjects, + fetchExportByType, findObjects, } from '../../lib'; import { FormattedMessage, injectI18n } from '@kbn/i18n/react'; @@ -302,14 +303,20 @@ class ObjectsTableUI extends Component { onExportAll = async () => { const { intl } = this.props; - - const { exportAllSelectedOptions, isIncludeReferencesDeepChecked, savedObjects } = this.state; - - const exportObjects = savedObjects.filter(so => exportAllSelectedOptions[so.type]).map(so => ({ type: so.type, id: so.id })); + const { exportAllSelectedOptions, isIncludeReferencesDeepChecked } = this.state; + const exportTypes = Object.entries(exportAllSelectedOptions).reduce( + (accum, [id, selected]) => { + if (selected) { + accum.push(id); + } + return accum; + }, + [] + ); let blob; try { - blob = await fetchExportObjects(exportObjects, isIncludeReferencesDeepChecked); + blob = await fetchExportByType(exportTypes, isIncludeReferencesDeepChecked); } catch (e) { toastNotifications.addDanger({ title: intl.formatMessage({ diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/fetch_export_by_type.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/fetch_export_by_type.js new file mode 100644 index 0000000000000..71c022b9d3998 --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/fetch_export_by_type.js @@ -0,0 +1,31 @@ +/* + * 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 { kfetch } from 'ui/kfetch'; + +export async function fetchExportByType(types, includeReferencesDeep = false) { + return await kfetch({ + method: 'POST', + pathname: '/api/saved_objects/_export', + body: JSON.stringify({ + type: types, + includeReferencesDeep, + }), + }); +} diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/index.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/index.js index d79467f8d6dfa..2818f0d8a6cb4 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/index.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/index.js @@ -17,6 +17,7 @@ * under the License. */ +export * from './fetch_export_by_type'; export * from './fetch_export_objects'; export * from './in_app_url'; export * from './get_relationships';