diff --git a/src/core/public/index.ts b/src/core/public/index.ts index 1c0658a27b85..6dd5c4dc0796 100644 --- a/src/core/public/index.ts +++ b/src/core/public/index.ts @@ -354,4 +354,4 @@ export { __osdBootstrap__ } from './osd_bootstrap'; export { WorkspacesStart, WorkspacesSetup, WorkspacesService } from './workspace'; -export { WORKSPACE_TYPE } from '../utils'; +export { WORKSPACE_TYPE, DEFAULT_WORKSPACE_ID } from '../utils'; diff --git a/src/core/server/index.ts b/src/core/server/index.ts index f3edadf21895..c926320ce0d7 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -360,6 +360,7 @@ export { MANAGEMENT_WORKSPACE_ID, WORKSPACE_TYPE, PERSONAL_WORKSPACE_ID_PREFIX, + DEFAULT_WORKSPACE_ID, } from '../utils'; export { diff --git a/src/core/utils/constants.ts b/src/core/utils/constants.ts index 0993f0587e28..193414a59037 100644 --- a/src/core/utils/constants.ts +++ b/src/core/utils/constants.ts @@ -9,6 +9,12 @@ export const WORKSPACE_PATH_PREFIX = '/w'; export const PUBLIC_WORKSPACE_ID = 'public'; +/** + * default workspace is virtual workspace, + * saved objects that don't have workspaces/permissions field are belongs to default workspace + */ +export const DEFAULT_WORKSPACE_ID = 'default'; + export const MANAGEMENT_WORKSPACE_ID = 'management'; export const PERSONAL_WORKSPACE_ID_PREFIX = 'personal'; diff --git a/src/core/utils/index.ts b/src/core/utils/index.ts index a4b6cd4a922b..190754b73312 100644 --- a/src/core/utils/index.ts +++ b/src/core/utils/index.ts @@ -44,4 +44,5 @@ export { MANAGEMENT_WORKSPACE_ID, WORKSPACE_TYPE, PERSONAL_WORKSPACE_ID_PREFIX, + DEFAULT_WORKSPACE_ID, } from './constants'; diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx index ac992397fe21..a4de34356e2a 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx @@ -69,6 +69,7 @@ import { WorkspaceAttribute, } from 'src/core/public'; import { Subscription } from 'rxjs'; +import { DEFAULT_WORKSPACE_ID } from '../../../../../core/public'; import { RedirectAppLinks } from '../../../../opensearch_dashboards_react/public'; import { IndexPatternsContract } from '../../../../data/public'; import { @@ -192,7 +193,7 @@ export class SavedObjectsTable extends Component ws.id); + return availableWorkspaces?.map((ws) => ws.id).concat(DEFAULT_WORKSPACE_ID); } else { return [currentWorkspaceId]; } @@ -201,10 +202,13 @@ export class SavedObjectsTable extends Component(); + workspaceNameIdMap.set(DEFAULT_WORKSPACE_ID, DEFAULT_WORKSPACE_ID); // Assumption: workspace name is unique across the system - return availableWorkspaces?.reduce((map, ws) => { + availableWorkspaces?.reduce((map, ws) => { return map.set(ws.name, ws.id); - }, new Map()); + }, workspaceNameIdMap); + return workspaceNameIdMap; } private formatWorkspaceIdParams( @@ -352,6 +356,13 @@ export class SavedObjectsTable extends Component 1) { findOptions.sortField = 'type'; } @@ -962,6 +973,14 @@ export class SavedObjectsTable extends Component { @@ -69,6 +70,10 @@ export const registerScrollForCountRoute = (router: IRouter) => { if (requestHasWorkspaces) { counts.workspaces = {}; findOptions.workspaces = req.body.workspaces; + if (findOptions.workspaces.indexOf(DEFAULT_WORKSPACE_ID) !== -1) { + // search both saved objects with workspace and without workspace + findOptions.workspacesSearchOperator = 'OR'; + } } if (req.body.searchString) { @@ -91,7 +96,7 @@ export const registerScrollForCountRoute = (router: IRouter) => { }); } if (requestHasWorkspaces) { - const resultWorkspaces = result.workspaces || []; + const resultWorkspaces = result.workspaces || [DEFAULT_WORKSPACE_ID]; resultWorkspaces.forEach((ws) => { counts.workspaces[ws] = counts.workspaces[ws] || 0; counts.workspaces[ws]++;