Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Dashboard] Remove mSearch from content management #210709

Merged
merged 9 commits into from
Mar 3, 2025
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ export const MSearchTable = () => {
},
contentTypes: [
{ contentTypeId: 'map' },
{ contentTypeId: 'dashboard' },
{ contentTypeId: 'visualization' },
{ contentTypeId: 'lens' },
{ contentTypeId: 'search' },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@

import Boom from '@hapi/boom';
import { tagsToFindOptions } from '@kbn/content-management-utils';
import {
SavedObjectsFindOptions,
SavedObjectsFindResult,
} from '@kbn/core-saved-objects-api-server';
import { SavedObjectsFindOptions } from '@kbn/core-saved-objects-api-server';
import type { Logger } from '@kbn/logging';

import { CreateResult, DeleteResult, SearchQuery } from '@kbn/content-management-plugin/common';
Expand Down Expand Up @@ -68,57 +65,11 @@ export class DashboardStorage {
}) {
this.logger = logger;
this.throwOnResultValidationError = throwOnResultValidationError ?? false;
this.mSearch = {
savedObjectType: DASHBOARD_SAVED_OBJECT_TYPE,
additionalSearchFields: [],
toItemResult: (ctx: StorageContext, savedObject: SavedObjectsFindResult): DashboardItem => {
const transforms = ctx.utils.getTransforms(cmServicesDefinition);

const { item, error: itemError } = savedObjectToItem(
savedObject as SavedObjectsFindResult<DashboardSavedObjectAttributes>,
false
);
if (itemError) {
throw Boom.badRequest(`Invalid response. ${itemError.message}`);
}

const validationError = transforms.mSearch.out.result.validate(item);
if (validationError) {
if (this.throwOnResultValidationError) {
throw Boom.badRequest(`Invalid response. ${validationError.message}`);
} else {
this.logger.warn(`Invalid response. ${validationError.message}`);
}
}

// Validate DB response and DOWN transform to the request version
const { value, error: resultError } = transforms.mSearch.out.result.down<
DashboardItem,
DashboardItem
>(
item,
undefined, // do not override version
{ validate: false } // validation is done above
);

if (resultError) {
throw Boom.badRequest(`Invalid response. ${resultError.message}`);
}

return value;
},
};
}

private logger: Logger;
private throwOnResultValidationError: boolean;

mSearch: {
savedObjectType: string;
toItemResult: (ctx: StorageContext, savedObject: SavedObjectsFindResult) => DashboardItem;
additionalSearchFields?: string[];
};

async get(ctx: StorageContext, id: string): Promise<DashboardGetOut> {
const transforms = ctx.utils.getTransforms(cmServicesDefinition);
const soClient = await savedObjectClientFromRequest(ctx);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import {
import { i18n } from '@kbn/i18n';
import { ToolbarButton } from '@kbn/shared-ux-button-toolbar';
import { SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common';
import type { SearchIn, SearchResult } from '@kbn/content-management-plugin/common';

import { contentManagementService } from '../../services/kibana_services';

Expand Down Expand Up @@ -73,8 +74,11 @@ export function DashboardPicker({ isDisabled, onChange, idsToOmit }: DashboardPi
(async () => {
setIsLoading(true);

const response = await contentManagementService.client.mSearch<DashboardHit>({
contentTypes: [{ contentTypeId: 'dashboard' }],
const response = await contentManagementService.client.search<
SearchIn<'dashboard'>,
SearchResult<DashboardHit>
>({
contentTypeId: 'dashboard',
query: {
text: debouncedQuery ? `${debouncedQuery}*` : undefined,
limit: 30,
Expand Down