diff --git a/changelogs/fragments/8907.yml b/changelogs/fragments/8907.yml
new file mode 100644
index 000000000000..c797c5a557c2
--- /dev/null
+++ b/changelogs/fragments/8907.yml
@@ -0,0 +1,2 @@
+feat:
+- Add privacy levels to the workspace ([#8907](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/8907))
\ No newline at end of file
diff --git a/src/core/public/doc_links/doc_links_service.ts b/src/core/public/doc_links/doc_links_service.ts
index 7994ce0212b6..ac299977d911 100644
--- a/src/core/public/doc_links/doc_links_service.ts
+++ b/src/core/public/doc_links/doc_links_service.ts
@@ -436,6 +436,10 @@ export class DocLinksService {
// https://opensearch.org/docs/latest/dashboards/management/advanced-settings/
advancedSettings: `${OPENSEARCH_DASHBOARDS_VERSIONED_DOCS}management/advanced-settings/`,
},
+ workspace: {
+ // https://opensearch.org/docs/latest/dashboards/workspace/workspace-acl/
+ acl: `${OPENSEARCH_DASHBOARDS_VERSIONED_DOCS}workspace/workspace-acl/`,
+ },
},
noDocumentation: {
auditbeat: `${OPENSEARCH_WEBSITE_DOCS}tools/index/#downloads`,
diff --git a/src/plugins/advanced_settings/public/management_app/__snapshots__/advanced_settings.test.tsx.snap b/src/plugins/advanced_settings/public/management_app/__snapshots__/advanced_settings.test.tsx.snap
index 62701d05d2c8..2bfa367a4bff 100644
--- a/src/plugins/advanced_settings/public/management_app/__snapshots__/advanced_settings.test.tsx.snap
+++ b/src/plugins/advanced_settings/public/management_app/__snapshots__/advanced_settings.test.tsx.snap
@@ -418,6 +418,9 @@ exports[`AdvancedSettings should render normally when use updated UX 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
}
}
@@ -1073,6 +1076,9 @@ exports[`AdvancedSettings should render normally when use updated UX 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
}
}
@@ -2007,6 +2013,9 @@ exports[`AdvancedSettings should render normally when use updated UX 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
}
}
@@ -2419,6 +2428,9 @@ exports[`AdvancedSettings should render normally when use updated UX 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
}
}
@@ -2831,6 +2843,9 @@ exports[`AdvancedSettings should render normally when use updated UX 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
}
}
@@ -3243,6 +3258,9 @@ exports[`AdvancedSettings should render normally when use updated UX 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
}
}
@@ -3710,6 +3728,9 @@ exports[`AdvancedSettings should render normally when use updated UX 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
}
}
@@ -4124,6 +4145,9 @@ exports[`AdvancedSettings should render normally when use updated UX 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
}
}
diff --git a/src/plugins/dashboard/public/application/components/dashboard_top_nav/__snapshots__/dashboard_top_nav.test.tsx.snap b/src/plugins/dashboard/public/application/components/dashboard_top_nav/__snapshots__/dashboard_top_nav.test.tsx.snap
index 362c190ec6af..3bf47018e304 100644
--- a/src/plugins/dashboard/public/application/components/dashboard_top_nav/__snapshots__/dashboard_top_nav.test.tsx.snap
+++ b/src/plugins/dashboard/public/application/components/dashboard_top_nav/__snapshots__/dashboard_top_nav.test.tsx.snap
@@ -795,6 +795,9 @@ exports[`Dashboard top nav render in embed mode 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
},
},
@@ -1877,6 +1880,9 @@ exports[`Dashboard top nav render in embed mode, and force hide filter bar 1`] =
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
},
},
@@ -2959,6 +2965,9 @@ exports[`Dashboard top nav render in embed mode, components can be forced show b
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
},
},
@@ -4041,6 +4050,9 @@ exports[`Dashboard top nav render in full screen mode with appended URL param bu
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
},
},
@@ -5123,6 +5135,9 @@ exports[`Dashboard top nav render in full screen mode, no componenets should be
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
},
},
@@ -6205,6 +6220,9 @@ exports[`Dashboard top nav render with all components 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
},
},
diff --git a/src/plugins/data/public/ui/query_editor/__snapshots__/language_selector.test.tsx.snap b/src/plugins/data/public/ui/query_editor/__snapshots__/language_selector.test.tsx.snap
index b80a10c1fb85..be80b5be7182 100644
--- a/src/plugins/data/public/ui/query_editor/__snapshots__/language_selector.test.tsx.snap
+++ b/src/plugins/data/public/ui/query_editor/__snapshots__/language_selector.test.tsx.snap
@@ -561,6 +561,9 @@ exports[`LanguageSelector should select DQL if language is kuery 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
},
},
@@ -1231,6 +1234,9 @@ exports[`LanguageSelector should select lucene if language is lucene 1`] = `
"visualize": Object {
"guide": "https://opensearch.org/docs/mocked-test-branch/dashboards/visualize/viz-index/",
},
+ "workspace": Object {
+ "acl": "https://opensearch.org/docs/mocked-test-branch/dashboards/workspace/workspace-acl/",
+ },
},
},
},
diff --git a/src/plugins/workspace/public/components/add_collaborators_modal/add_collaborators_modal.test.tsx b/src/plugins/workspace/public/components/add_collaborators_modal/add_collaborators_modal.test.tsx
index fdc56756dcf2..21ba92fa011e 100644
--- a/src/plugins/workspace/public/components/add_collaborators_modal/add_collaborators_modal.test.tsx
+++ b/src/plugins/workspace/public/components/add_collaborators_modal/add_collaborators_modal.test.tsx
@@ -125,4 +125,14 @@ describe('AddCollaboratorsModal', () => {
expect(addCollaboratorsButton).not.toBeDisabled();
});
});
+
+ it('should show "Invalid Collaborator ID format" for "*" collaborator id', async () => {
+ render();
+ const collaboratorInput = screen.getByLabelText(defaultProps.inputLabel);
+ fireEvent.change(collaboratorInput, { target: { value: '*' } });
+
+ expect(screen.queryByText('Invalid Collaborator ID format')).toBeNull();
+ fireEvent.click(screen.getByRole('button', { name: 'Add collaborators' }));
+ expect(screen.getByText('Invalid Collaborator ID format')).toBeInTheDocument();
+ });
});
diff --git a/src/plugins/workspace/public/components/add_collaborators_modal/add_collaborators_modal.tsx b/src/plugins/workspace/public/components/add_collaborators_modal/add_collaborators_modal.tsx
index 07d2d8a90054..86125bec76cd 100644
--- a/src/plugins/workspace/public/components/add_collaborators_modal/add_collaborators_modal.tsx
+++ b/src/plugins/workspace/public/components/add_collaborators_modal/add_collaborators_modal.tsx
@@ -84,6 +84,26 @@ export const AddCollaboratorsModal = ({
const [isAdding, setIsAdding] = useState(false);
const handleAddCollaborators = async () => {
+ const singleStarIds = validInnerCollaborators.flatMap(({ id, collaboratorId }) =>
+ collaboratorId.trim() === '*' ? id : []
+ );
+ if (singleStarIds.length > 0) {
+ setErrors(
+ singleStarIds.reduce(
+ (previousErrors, id) => ({
+ ...previousErrors,
+ [id]: i18n.translate('workspace.addCollaboratorsModal.errors.invalidUserFormat', {
+ defaultMessage: 'Invalid {inputLabel} format',
+ values: {
+ inputLabel,
+ },
+ }),
+ }),
+ {}
+ )
+ );
+ return;
+ }
const collaboratorId2IdsMap = validInnerCollaborators.reduce<{
[key: string]: number[];
}>((previousValue, collaborator) => {
diff --git a/src/plugins/workspace/public/components/workspace_collaborators/__snapshots__/workspace_collaborators.test.tsx.snap b/src/plugins/workspace/public/components/workspace_collaborators/__snapshots__/workspace_collaborators.test.tsx.snap
index ee482aebbac2..0dee2f423b84 100644
--- a/src/plugins/workspace/public/components/workspace_collaborators/__snapshots__/workspace_collaborators.test.tsx.snap
+++ b/src/plugins/workspace/public/components/workspace_collaborators/__snapshots__/workspace_collaborators.test.tsx.snap
@@ -9,713 +9,764 @@ Object {
class="euiPage euiPage--paddingMedium euiPage--grow"
data-test-subj="workspace-collaborators-panel"
>
-
-
+
+
+
+ Workspace privacy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -733,713 +784,764 @@ Object {
class="euiPage euiPage--paddingMedium euiPage--grow"
data-test-subj="workspace-collaborators-panel"
>
-
-
+
+
+
+
+
+
+ Workspace privacy
+
+
+
+
+
+
+
+
+ Private to collaborators (Only collaborators can access the workspace.)
+
+
+
+
+
-
-
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
+
-
-
-
+
+
+
+
+
+
diff --git a/src/plugins/workspace/public/components/workspace_collaborators/workspace_collaborators.tsx b/src/plugins/workspace/public/components/workspace_collaborators/workspace_collaborators.tsx
index 399127a594c8..7c06ae1a654d 100644
--- a/src/plugins/workspace/public/components/workspace_collaborators/workspace_collaborators.tsx
+++ b/src/plugins/workspace/public/components/workspace_collaborators/workspace_collaborators.tsx
@@ -4,7 +4,7 @@
*/
import React from 'react';
-import { EuiPage, EuiPanel } from '@elastic/eui';
+import { EuiPage, EuiPanel, EuiSpacer } from '@elastic/eui';
import { i18n } from '@osd/i18n';
import { useObservable } from 'react-use';
@@ -25,6 +25,7 @@ import {
} from '../workspace_form';
import { WorkspaceAttributeWithPermission } from '../../../../../core/types';
import { WorkspaceClient } from '../../workspace_client';
+import { WorkspaceCollaboratorPrivacySettingPanel } from '../workspace_form/workspace_collaborator_privacy_setting_panel';
export const WorkspaceCollaborators = () => {
const {
@@ -42,7 +43,6 @@ export const WorkspaceCollaborators = () => {
collaboratorTypes: WorkspaceCollaboratorTypesService;
workspaceClient: WorkspaceClient;
}>();
-
const displayedCollaboratorTypes = useObservable(collaboratorTypes.getTypes$()) ?? [];
const currentWorkspace = useObservable(
@@ -116,13 +116,20 @@ export const WorkspaceCollaborators = () => {
]}
setMountPoint={application?.setAppRightControls}
/>
-
-
+
-
+
+
+
+
+
);
};
diff --git a/src/plugins/workspace/public/components/workspace_creator/utils.ts b/src/plugins/workspace/public/components/workspace_creator/utils.ts
index a88076aa8aee..675895b32c9f 100644
--- a/src/plugins/workspace/public/components/workspace_creator/utils.ts
+++ b/src/plugins/workspace/public/components/workspace_creator/utils.ts
@@ -12,6 +12,7 @@ export enum RightSidebarScrollField {
UseCase = 'useCase',
DataSource = 'dataSource',
Collaborators = 'collaborators',
+ PrivacyType = 'privacyType',
}
export const generateRightSidebarScrollProps = (key: RightSidebarScrollField) => {
diff --git a/src/plugins/workspace/public/components/workspace_creator/workspace_creator.test.tsx b/src/plugins/workspace/public/components/workspace_creator/workspace_creator.test.tsx
index 9f6dc00ec9a7..97f273279879 100644
--- a/src/plugins/workspace/public/components/workspace_creator/workspace_creator.test.tsx
+++ b/src/plugins/workspace/public/components/workspace_creator/workspace_creator.test.tsx
@@ -521,8 +521,8 @@ describe('WorkspaceCreator', () => {
jest.useRealTimers();
});
- it('should redirect to workspace setting collaborators page if permission enabled', async () => {
- const { getByTestId } = render(
);
+ it('should redirect to workspace setting collaborators page if jump to collaborators checked', async () => {
+ const { getByTestId } = render(
);
const navigateToCollaboratorsMock = jest.fn();
jest
.spyOn(workspaceUtilsExports, 'navigateToAppWithinWorkspace')
@@ -536,6 +536,7 @@ describe('WorkspaceCreator', () => {
fireEvent.input(nameInput, {
target: { value: 'test workspace name' },
});
+ fireEvent.click(getByTestId('jumpToCollaboratorsCheckbox'));
fireEvent.click(getByTestId('workspaceForm-bottomBar-createButton'));
jest.useFakeTimers();
jest.runAllTimers();
@@ -548,4 +549,24 @@ describe('WorkspaceCreator', () => {
});
jest.useRealTimers();
});
+
+ it('should redirect to workspace use case landing page if jump to collaborators not checked', async () => {
+ const { getByTestId } = render(
);
+
+ // Ensure workspace create form rendered
+ await waitFor(() => {
+ expect(getByTestId('workspaceForm-bottomBar-createButton')).toBeInTheDocument();
+ });
+ const nameInput = getByTestId('workspaceForm-workspaceDetails-nameInputText');
+ fireEvent.input(nameInput, {
+ target: { value: 'test workspace name' },
+ });
+ fireEvent.click(getByTestId('workspaceForm-bottomBar-createButton'));
+ jest.useFakeTimers();
+ jest.runAllTimers();
+ await waitFor(() => {
+ expect(setHrefSpy).toHaveBeenCalledWith(expect.stringContaining('/app/discover'));
+ });
+ jest.useRealTimers();
+ });
});
diff --git a/src/plugins/workspace/public/components/workspace_creator/workspace_creator.tsx b/src/plugins/workspace/public/components/workspace_creator/workspace_creator.tsx
index b2b219ac7864..551563f4e04b 100644
--- a/src/plugins/workspace/public/components/workspace_creator/workspace_creator.tsx
+++ b/src/plugins/workspace/public/components/workspace_creator/workspace_creator.tsx
@@ -58,6 +58,7 @@ export const WorkspaceCreator = (props: WorkspaceCreatorProps) => {
navigationUI: NavigationPublicPluginStart['ui'];
}>();
const [isFormSubmitting, setIsFormSubmitting] = useState(false);
+ const [goToCollaborators, setGoToCollaborators] = useState(false);
const isPermissionEnabled = application?.capabilities.workspaces.permissionEnabled;
const { isOnlyAllowEssential, availableUseCases } = useFormAvailableUseCases({
@@ -145,7 +146,7 @@ export const WorkspaceCreator = (props: WorkspaceCreatorProps) => {
?.features[0].id;
// Redirect page after one second, leave one second time to show create successful toast.
window.setTimeout(() => {
- if (isPermissionEnabled) {
+ if (isPermissionEnabled && goToCollaborators) {
navigateToAppWithinWorkspace(
{ application, http },
newWorkspaceId,
@@ -186,6 +187,7 @@ export const WorkspaceCreator = (props: WorkspaceCreatorProps) => {
isFormSubmitting,
availableUseCases,
isPermissionEnabled,
+ goToCollaborators,
]
);
@@ -225,6 +227,8 @@ export const WorkspaceCreator = (props: WorkspaceCreatorProps) => {
availableUseCases={availableUseCases}
defaultValues={defaultWorkspaceFormValues}
isSubmitting={isFormSubmitting}
+ goToCollaborators={goToCollaborators}
+ onGoToCollaboratorsChange={setGoToCollaborators}
/>
)}
diff --git a/src/plugins/workspace/public/components/workspace_creator/workspace_creator_form.tsx b/src/plugins/workspace/public/components/workspace_creator/workspace_creator_form.tsx
index c6c044f37289..6e92f40fca26 100644
--- a/src/plugins/workspace/public/components/workspace_creator/workspace_creator_form.tsx
+++ b/src/plugins/workspace/public/components/workspace_creator/workspace_creator_form.tsx
@@ -19,9 +19,12 @@ import { generateRightSidebarScrollProps, RightSidebarScrollField } from './util
import { CreatorDetailsPanel } from './creator_details_panel';
import './workspace_creator_form.scss';
+import { WorkspacePrivacySettingPanel } from '../workspace_form/workspace_privacy_setting_panel';
interface WorkspaceCreatorFormProps extends WorkspaceFormProps {
isSubmitting: boolean;
+ goToCollaborators: boolean;
+ onGoToCollaboratorsChange: (value: boolean) => void;
}
export const WorkspaceCreatorForm = (props: WorkspaceCreatorFormProps) => {
@@ -42,9 +45,12 @@ export const WorkspaceCreatorForm = (props: WorkspaceCreatorFormProps) => {
handleColorChange,
handleUseCaseChange,
setSelectedDataSourceConnections,
+ privacyType,
+ setPrivacyType,
} = useWorkspaceForm(props);
const isDashboardAdmin = application?.capabilities?.dashboards?.isDashboardAdmin ?? false;
+ const isPermissionEnabled = !!application?.capabilities.workspaces.permissionEnabled;
return (
@@ -110,6 +116,15 @@ export const WorkspaceCreatorForm = (props: WorkspaceCreatorFormProps) => {
>
)}
+
+ {isDashboardAdmin && isPermissionEnabled && (
+
+ )}
@@ -122,6 +137,7 @@ export const WorkspaceCreatorForm = (props: WorkspaceCreatorFormProps) => {
application={application}
isSubmitting={props.isSubmitting}
dataSourceEnabled={!!isDataSourceEnabled}
+ privacyType={privacyType}
/>
diff --git a/src/plugins/workspace/public/components/workspace_creator/workspace_form_summary_panel.tsx b/src/plugins/workspace/public/components/workspace_creator/workspace_form_summary_panel.tsx
index 2caad01a77f0..83781c183f9c 100644
--- a/src/plugins/workspace/public/components/workspace_creator/workspace_form_summary_panel.tsx
+++ b/src/plugins/workspace/public/components/workspace_creator/workspace_form_summary_panel.tsx
@@ -21,6 +21,7 @@ import { WorkspaceFormDataState } from '../workspace_form';
import { WorkspaceUseCase } from '../../types';
import { RightSidebarScrollField, RIGHT_SIDEBAR_SCROLL_KEY } from './utils';
import { WorkspaceCreateActionPanel } from './workspace_create_action_panel';
+import { privacyType2TextMap, WorkspacePrivacyItemType } from '../workspace_form/constants';
const SCROLL_FIELDS = {
[RightSidebarScrollField.Name]: i18n.translate('workspace.form.summary.panel.name.title', {
@@ -50,6 +51,12 @@ const SCROLL_FIELDS = {
defaultMessage: 'Collaborators',
}
),
+ [RightSidebarScrollField.PrivacyType]: i18n.translate(
+ 'workspace.form.summary.panel.privacyType.title',
+ {
+ defaultMessage: 'Workspace privacy',
+ }
+ ),
};
export const FieldSummaryItem = ({
@@ -138,6 +145,7 @@ interface WorkspaceFormSummaryPanelProps {
application: ApplicationStart;
isSubmitting: boolean;
dataSourceEnabled: boolean;
+ privacyType: WorkspacePrivacyItemType;
}
export const WorkspaceFormSummaryPanel = ({
@@ -147,9 +155,11 @@ export const WorkspaceFormSummaryPanel = ({
application,
isSubmitting,
dataSourceEnabled,
+ privacyType,
}: WorkspaceFormSummaryPanelProps) => {
const useCase = availableUseCases.find((item) => item.id === formData.useCase);
const useCaseIcon = useCase?.icon || 'logoOpenSearch';
+ const isPermissionEnabled = application?.capabilities.workspaces.permissionEnabled;
return (
)}
+ {isPermissionEnabled && (
+
+ {privacyType && {privacyType2TextMap[privacyType].title}}
+
+ )}
+
+
diff --git a/src/plugins/workspace/public/components/workspace_detail/workspace_detail.test.tsx b/src/plugins/workspace/public/components/workspace_detail/workspace_detail.test.tsx
index be98fd944939..053812e82282 100644
--- a/src/plugins/workspace/public/components/workspace_detail/workspace_detail.test.tsx
+++ b/src/plugins/workspace/public/components/workspace_detail/workspace_detail.test.tsx
@@ -81,6 +81,7 @@ const deleteFn = jest.fn().mockReturnValue({
const submitFn = jest.fn();
const onAppLeaveFn = jest.fn();
+const navigateToAppFn = jest.fn();
const WorkspaceDetailPage = (props: any) => {
const values = props.defaultValues || defaultValues;
@@ -97,9 +98,13 @@ const WorkspaceDetailPage = (props: any) => {
application: {
...mockCoreStart.application,
// applications$: new BehaviorSubject