Skip to content

Commit

Permalink
Add workspace column into saved objects table
Browse files Browse the repository at this point in the history
Signed-off-by: Hailong Cui <ihailong@amazon.com>
  • Loading branch information
Hailong-am committed Jul 12, 2023
1 parent bfc5c8a commit 08bbf84
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/plugins/workspace/opensearch_dashboards.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"server": false,
"ui": true,
"requiredPlugins": ["savedObjects"],
"optionalPlugins": ["savedObjectsManagement"],
"requiredBundles": [
"opensearchDashboardsReact"
]
Expand Down
45 changes: 45 additions & 0 deletions src/plugins/workspace/public/components/utils/workspace_column.tsx
Original file line number Diff line number Diff line change
@@ -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<string, string>());

const wsNameList = workspaces?.map((wsId) => wsLookup?.get(wsId));

return <EuiText>{wsNameList?.join(' | ')}</EuiText>;
}

export const getWorkspaceColumn = (core: CoreSetup): SavedObjectsManagementColumn<string> => {
return {
id: 'workspace_column',
euiColumn: {
field: 'workspaces',
name: i18n.translate('savedObjectsManagement.objectsTable.table.columnWorkspacesName', {
defaultMessage: 'Workspaces',
}),
render: (workspaces?: string[]) => {
return <WorkspaceColumn core={core} workspaces={workspaces} />;
},
},
loadData: () => Promise.resolve(''),
};
};
13 changes: 11 additions & 2 deletions src/plugins/workspace/public/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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));
/**
Expand All @@ -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', {
Expand Down

0 comments on commit 08bbf84

Please sign in to comment.