Skip to content

Commit

Permalink
Add compare queries card to search use case overview page (#427)
Browse files Browse the repository at this point in the history
* add query compare card

Signed-off-by: Hailong Cui <[email protected]>

* add comments

Signed-off-by: Hailong Cui <[email protected]>

---------

Signed-off-by: Hailong Cui <[email protected]>
  • Loading branch information
Hailong-am authored Sep 3, 2024
1 parent e061e66 commit 924b570
Show file tree
Hide file tree
Showing 6 changed files with 351 additions and 6 deletions.
2 changes: 1 addition & 1 deletion opensearch_dashboards.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
"requiredPlugins": [
"navigation"
],
"optionalPlugins": ["dataSource","dataSourceManagement"],
"optionalPlugins": ["dataSource","dataSourceManagement","contentManagement"],
"supportedOSDataSourceVersions": ">=2.8.0"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { registerCompareQueryCard } from '../compare_query_card';

describe('CompareQueryCard', () => {
const registerContentProviderMock = jest.fn();

const contentManagement = {
registerContentProvider: registerContentProviderMock,
updatePageSection: jest.fn(),
renderPage: jest.fn(),
};

it('registerCompareQueryCard', () => {
registerCompareQueryCard(contentManagement, {});
const call = registerContentProviderMock.mock.calls[0];
expect(call[0].getTargetArea()).toEqual('search_overview/config_evaluate_search');
expect(call[0].getContent()).toMatchInlineSnapshot(`
Object {
"cardProps": Object {
"children": <EuiFlexGroup
justifyContent="flexEnd"
>
<EuiFlexItem
grow={false}
>
<EuiButton
onClick={[Function]}
size="s"
>
Compare search results
</EuiButton>
</EuiFlexItem>
</EuiFlexGroup>,
"layout": "horizontal",
},
"description": "The search comparison tool lets you compare the results of two different DSL queries applied to the same user query.",
"getIcon": [Function],
"id": "compare_query",
"kind": "card",
"order": 20,
"title": "Compare queries",
}
`);
});
});
60 changes: 60 additions & 0 deletions public/components/service_card/compare_query_card.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import React from 'react';
import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiIcon } from '@elastic/eui';
import { i18n } from '@osd/i18n';
import { PLUGIN_ID } from '../../../common';
import { ContentManagementPluginStart } from '../../../../../src/plugins/content_management/public';
import { CoreStart } from '../../../../../src/core/public';
import compareQueriesIcon from './icon.svg';

export const registerCompareQueryCard = (
contentManagement: ContentManagementPluginStart,
core: CoreStart
) => {
const icon = (
<EuiIcon size="original" aria-label="compare search queries" type={compareQueriesIcon} />
);

const footer = (
<EuiFlexGroup justifyContent="flexEnd">
<EuiFlexItem grow={false}>
<EuiButton
size="s"
onClick={() => {
core.application.navigateToApp(PLUGIN_ID);
}}
>
{i18n.translate('searchRelevanceDashboards.compareQueryCard.footer', {
defaultMessage: 'Compare search results',
})}
</EuiButton>
</EuiFlexItem>
</EuiFlexGroup>
);

contentManagement.registerContentProvider({
id: 'compare_query_card',
getContent: () => ({
id: 'compare_query',
kind: 'card',
order: 20,
title: i18n.translate('searchRelevanceDashboards.compareQueryCard.title', {
defaultMessage: 'Compare queries',
}),
description: i18n.translate('searchRelevanceDashboards.compareQueryCard.description', {
defaultMessage:
'The search comparison tool lets you compare the results of two different DSL queries applied to the same user query.',
}),
getIcon: () => icon,
cardProps: {
children: footer,
layout: 'horizontal',
},
}),
getTargetArea: () => 'search_overview/config_evaluate_search',
});
};
209 changes: 209 additions & 0 deletions public/components/service_card/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 25 additions & 5 deletions public/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@

import { i18n } from '@osd/i18n';
import { AppMountParameters, CoreSetup, CoreStart, Plugin } from '../../../src/core/public';
import { DataSourcePluginSetup, DataSourcePluginStart } from '../../../src/plugins/data_source/public';
import {
DataSourcePluginSetup,
DataSourcePluginStart,
} from '../../../src/plugins/data_source/public';
import { DataSourceManagementPluginSetup } from '../../../src/plugins/data_source_management/public';
import { PLUGIN_ID, PLUGIN_NAME } from '../common';
import {
Expand All @@ -14,19 +17,25 @@ import {
SearchRelevancePluginStart,
} from './types';
import { registerAllPluginNavGroups } from './plugin_nav';
import { ContentManagementPluginStart } from '../../../src/plugins/content_management/public';
import { registerCompareQueryCard } from './components/service_card/compare_query_card';

export interface SearchRelevancePluginSetupDependencies {
dataSource: DataSourcePluginSetup;
dataSourceManagement: DataSourceManagementPluginSetup
dataSourceManagement: DataSourceManagementPluginSetup;
}

export interface SearchRelevanceStartDependencies {
dataSource: DataSourcePluginStart;
contentManagement?: ContentManagementPluginStart;
}

export class SearchRelevancePlugin
implements Plugin<SearchRelevancePluginSetup, SearchRelevancePluginStart> {
public setup(core: CoreSetup, {dataSource, dataSourceManagement} : SearchRelevancePluginSetupDependencies): SearchRelevancePluginSetup {
public setup(
core: CoreSetup,
{ dataSource, dataSourceManagement }: SearchRelevancePluginSetupDependencies
): SearchRelevancePluginSetup {
// Register an application into the side navigation menu
core.application.register({
id: PLUGIN_ID,
Expand All @@ -42,7 +51,12 @@ export class SearchRelevancePlugin
// Get start services as specified in opensearch_dashboards.json
const [coreStart, depsStart] = await core.getStartServices();
// Render the application
return renderApp(coreStart, depsStart as AppPluginStartDependencies, params, dataSourceManagement);
return renderApp(
coreStart,
depsStart as AppPluginStartDependencies,
params,
dataSourceManagement
);
},
});
registerAllPluginNavGroups(core);
Expand All @@ -59,7 +73,13 @@ export class SearchRelevancePlugin
};
}

public start(core: CoreStart, {dataSource}: SearchRelevanceStartDependencies): SearchRelevancePluginStart {
public start(
core: CoreStart,
{ dataSource, contentManagement }: SearchRelevanceStartDependencies
): SearchRelevancePluginStart {
if (contentManagement) {
registerCompareQueryCard(contentManagement, core);
}
return {};
}

Expand Down
Loading

0 comments on commit 924b570

Please sign in to comment.