diff --git a/opensearch_dashboards.json b/opensearch_dashboards.json index 37dedd3a..b4bcd3a1 100644 --- a/opensearch_dashboards.json +++ b/opensearch_dashboards.json @@ -11,7 +11,8 @@ ], "optionalPlugins": [ "dataSource", - "dataSourceManagement" + "dataSourceManagement", + "contentManagement" ], "supportedOSDataSourceVersions": ">=2.17.0 <4.0.0", "requiredOSDataSourcePlugins": [ diff --git a/public/general_components/service_card/icon.svg b/public/general_components/service_card/icon.svg new file mode 100644 index 00000000..ded630d3 --- /dev/null +++ b/public/general_components/service_card/icon.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/general_components/service_card/search_studio_card.tsx b/public/general_components/service_card/search_studio_card.tsx new file mode 100644 index 00000000..14506d53 --- /dev/null +++ b/public/general_components/service_card/search_studio_card.tsx @@ -0,0 +1,67 @@ +/* + * 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 searchStudioIcon from './icon.svg'; + +export const registerSearchStudioCard = ( + contentManagement: ContentManagementPluginStart, + core: CoreStart +) => { + const icon = ( + + ); + + const footer = ( + + + { + core.application.navigateToApp(PLUGIN_ID); + }} + > + {i18n.translate('flowFrameworkDashboards.searchStudioCard.footer', { + defaultMessage: 'Try OpenSearch Studio', + })} + + + + ); + + contentManagement.registerContentProvider({ + id: 'search_studio_card', + getContent: () => ({ + id: 'search_studio', + kind: 'card', + order: 20, + title: i18n.translate('flowFrameworkDashboards.searchStudioCard.title', { + defaultMessage: 'Design and test your search solutions with ease', + }), + description: i18n.translate( + 'flowFrameworkDashboards.searchStudioCard.description', + { + defaultMessage: + 'OpenSearch Studio is a visual editor for creating search AI flows to power advanced search and generative AI solutions.', + } + ), + getIcon: () => icon, + cardProps: { + children: footer, + layout: 'horizontal', + }, + }), + getTargetArea: () => 'search_overview/config_evaluate_search', + }); +}; diff --git a/public/plugin.ts b/public/plugin.ts index 7a6daad4..a5560066 100644 --- a/public/plugin.ts +++ b/public/plugin.ts @@ -16,6 +16,7 @@ import { FlowFrameworkDashboardsPluginSetup, AppPluginStartDependencies, } from './types'; +import { registerSearchStudioCard } from './general_components/service_card/search_studio_card'; import { PLUGIN_ID, PLUGIN_NAME } from '../common'; import { setCore, @@ -84,12 +85,15 @@ export class FlowFrameworkDashboardsPlugin public start( core: CoreStart, - { navigation }: AppPluginStartDependencies + { navigation, contentManagement }: AppPluginStartDependencies, ): FlowFrameworkDashboardsPluginStart { setNotifications(core.notifications); setSavedObjectsClient(core.savedObjects.client); setNavigationUI(navigation.ui); setApplication(core.application); + if (contentManagement) { + registerSearchStudioCard(contentManagement, core); + } return {}; } diff --git a/public/types.ts b/public/types.ts index d46b8319..ebb52d32 100644 --- a/public/types.ts +++ b/public/types.ts @@ -6,14 +6,17 @@ import { NavigationPublicPluginStart } from '../../../src/plugins/navigation/public'; import { DataSourceManagementPluginSetup } from '../../../src/plugins/data_source_management/public'; import { DataSourcePluginSetup } from '../../../src/plugins/data_source/public'; +import { ContentManagementPluginStart } from '../../../src/plugins/content_management/public'; export interface FlowFrameworkDashboardsPluginSetup { dataSourceManagement: DataSourceManagementPluginSetup; dataSource: DataSourcePluginSetup; } -export interface FlowFrameworkDashboardsPluginStart {} +export interface FlowFrameworkDashboardsPluginStart { +} export interface AppPluginStartDependencies { navigation: NavigationPublicPluginStart; + contentManagement?: ContentManagementPluginStart; }