From 08bbf84e26c6743ff9985e19e6938fc2b8ac6fbd Mon Sep 17 00:00:00 2001 From: Hailong Cui Date: Wed, 12 Jul 2023 14:09:44 +0800 Subject: [PATCH] Add workspace column into saved objects table Signed-off-by: Hailong Cui --- .../workspace/opensearch_dashboards.json | 1 + .../components/utils/workspace_column.tsx | 45 +++++++++++++++++++ src/plugins/workspace/public/plugin.ts | 13 +++++- 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/plugins/workspace/public/components/utils/workspace_column.tsx diff --git a/src/plugins/workspace/opensearch_dashboards.json b/src/plugins/workspace/opensearch_dashboards.json index 0273a579bfcb..0efc89373a94 100644 --- a/src/plugins/workspace/opensearch_dashboards.json +++ b/src/plugins/workspace/opensearch_dashboards.json @@ -4,6 +4,7 @@ "server": false, "ui": true, "requiredPlugins": ["savedObjects"], + "optionalPlugins": ["savedObjectsManagement"], "requiredBundles": [ "opensearchDashboardsReact" ] diff --git a/src/plugins/workspace/public/components/utils/workspace_column.tsx b/src/plugins/workspace/public/components/utils/workspace_column.tsx new file mode 100644 index 000000000000..8c4c86627989 --- /dev/null +++ b/src/plugins/workspace/public/components/utils/workspace_column.tsx @@ -0,0 +1,45 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import React from 'react'; +import { EuiText } from '@elastic/eui'; +import { CoreSetup } from 'opensearch-dashboards/public'; +import useObservable from 'react-use/lib/useObservable'; +import { i18n } from '@osd/i18n'; +import { SavedObjectsManagementColumn } from '../../../../saved_objects_management/public'; + +interface Props { + core: CoreSetup; + workspaces?: string[]; +} + +function WorkspaceColumn(props: Props) { + const { core, workspaces } = props; + const workspaceList = useObservable(core.workspaces.client.workspaceList$); + + const wsLookup = workspaceList?.reduce((map, ws) => { + return map.set(ws.id, ws.name); + }, new Map()); + + const wsNameList = workspaces?.map((wsId) => wsLookup?.get(wsId)); + + return {wsNameList?.join(' | ')}; +} + +export const getWorkspaceColumn = (core: CoreSetup): SavedObjectsManagementColumn => { + return { + id: 'workspace_column', + euiColumn: { + field: 'workspaces', + name: i18n.translate('savedObjectsManagement.objectsTable.table.columnWorkspacesName', { + defaultMessage: 'Workspaces', + }), + render: (workspaces?: string[]) => { + return ; + }, + }, + loadData: () => Promise.resolve(''), + }; +}; diff --git a/src/plugins/workspace/public/plugin.ts b/src/plugins/workspace/public/plugin.ts index 31d996f3b341..7eddaa5f4506 100644 --- a/src/plugins/workspace/public/plugin.ts +++ b/src/plugins/workspace/public/plugin.ts @@ -14,8 +14,14 @@ import { import { WORKSPACE_APP_ID } from '../common/constants'; import { mountDropdownList } from './mount'; import { getWorkspaceIdFromUrl } from '../../../core/public/utils'; +import { SavedObjectsManagementPluginSetup } from '../../saved_objects_management/public'; +import { getWorkspaceColumn } from './components/utils/workspace_column'; -export class WorkspacesPlugin implements Plugin<{}, {}> { +interface WorkspacesPluginSetupDeps { + savedObjectsManagement?: SavedObjectsManagementPluginSetup; +} + +export class WorkspacesPlugin implements Plugin<{}, {}, WorkspacesPluginSetupDeps> { private core?: CoreSetup; private getWorkspaceIdFromURL(): string | null { return getWorkspaceIdFromUrl(window.location.href); @@ -36,7 +42,7 @@ export class WorkspacesPlugin implements Plugin<{}, {}> { return newUrl.toString(); }; - public async setup(core: CoreSetup) { + public async setup(core: CoreSetup, { savedObjectsManagement }: WorkspacesPluginSetupDeps) { this.core = core; this.core?.workspaces.setFormatUrlWithWorkspaceId((url, id) => this.getPatchedUrl(url, id)); /** @@ -56,6 +62,9 @@ export class WorkspacesPlugin implements Plugin<{}, {}> { } } + /* register workspace column into saved objects table */ + savedObjectsManagement?.columns.register(getWorkspaceColumn(core)); + core.application.register({ id: WORKSPACE_APP_ID, title: i18n.translate('workspace.settings.title', {