diff --git a/changelog/unreleased/enhancement-create-spaces-via-admin-settings b/changelog/unreleased/enhancement-create-spaces-via-admin-settings
new file mode 100644
index 00000000000..e78a7c6d16f
--- /dev/null
+++ b/changelog/unreleased/enhancement-create-spaces-via-admin-settings
@@ -0,0 +1,6 @@
+Enhancement: Create spaces via admin settings
+
+We've added a new feature that allows you to create spaces via the admin settings.
+
+https://github.com/owncloud/web/pull/11849
+https://github.com/owncloud/web/issues/11771
\ No newline at end of file
diff --git a/packages/web-app-admin-settings/src/views/Spaces.vue b/packages/web-app-admin-settings/src/views/Spaces.vue
index 2e9a3ae793e..f1e78ce6f91 100644
--- a/packages/web-app-admin-settings/src/views/Spaces.vue
+++ b/packages/web-app-admin-settings/src/views/Spaces.vue
@@ -13,6 +13,13 @@
:batch-action-items="selectedSpaces"
:show-view-options="true"
>
+
+ spaceSettingsStore.upsertSpace(space)"
+ />
+
can('create-all', 'Drive'))
+
const loadResourcesTask = useTask(function* (signal) {
const drives = yield* call(
clientService.graphAuthenticated.drives.listAllDrives(
@@ -267,7 +280,9 @@ export default defineComponent({
sideBarAvailablePanels,
sideBarPanelContext,
isLoading,
- template
+ template,
+ hasCreatePermission,
+ spaceSettingsStore
}
}
})
diff --git a/packages/web-app-files/src/views/spaces/Projects.vue b/packages/web-app-files/src/views/spaces/Projects.vue
index 9df9ae72081..552b275a97e 100644
--- a/packages/web-app-files/src/views/spaces/Projects.vue
+++ b/packages/web-app-files/src/views/spaces/Projects.vue
@@ -181,8 +181,7 @@ import {
useLoadPreview
} from '@ownclouders/web-pkg'
-import { AppBar } from '@ownclouders/web-pkg'
-import CreateSpace from '../../components/AppBar/CreateSpace.vue'
+import { AppBar, CreateSpace } from '@ownclouders/web-pkg'
import {
useAbility,
useClientService,
diff --git a/packages/web-app-files/tests/unit/components/AppBar/__snapshots__/CreateSpace.spec.ts.snap b/packages/web-app-files/tests/unit/components/AppBar/__snapshots__/CreateSpace.spec.ts.snap
deleted file mode 100644
index 0bcfbab9ab2..00000000000
--- a/packages/web-app-files/tests/unit/components/AppBar/__snapshots__/CreateSpace.spec.ts.snap
+++ /dev/null
@@ -1,8 +0,0 @@
-// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-
-exports[`CreateSpace component > should show the "New Space" button 1`] = `
-""
-`;
diff --git a/packages/web-app-files/src/components/AppBar/CreateSpace.vue b/packages/web-pkg/src/components/AppBar/CreateSpace.vue
similarity index 81%
rename from packages/web-app-files/src/components/AppBar/CreateSpace.vue
rename to packages/web-pkg/src/components/AppBar/CreateSpace.vue
index ff7c6bbb550..1747d8e7b99 100644
--- a/packages/web-app-files/src/components/AppBar/CreateSpace.vue
+++ b/packages/web-pkg/src/components/AppBar/CreateSpace.vue
@@ -2,14 +2,14 @@
@@ -23,10 +23,17 @@ import {
useMessages,
useSpacesStore,
useResourcesStore
-} from '@ownclouders/web-pkg'
+} from '../../composables'
export default defineComponent({
- setup() {
+ props: {
+ showLabel: {
+ type: Boolean,
+ default: true
+ }
+ },
+ emits: ['spaceCreated'],
+ setup(props, { emit }) {
const { showMessage, showErrorMessage } = useMessages()
const { $gettext } = useGettext()
const { createSpace } = useCreateSpace()
@@ -40,6 +47,7 @@ export default defineComponent({
const createdSpace = await createSpace(name)
upsertResource(createdSpace)
spacesStore.upsertSpace(createdSpace)
+ emit('spaceCreated', createdSpace)
showMessage({ title: $gettext('Space was created successfully') })
} catch (error) {
console.error(error)
diff --git a/packages/web-pkg/src/components/AppBar/index.ts b/packages/web-pkg/src/components/AppBar/index.ts
index 2396937c9e9..a4e3507e459 100644
--- a/packages/web-pkg/src/components/AppBar/index.ts
+++ b/packages/web-pkg/src/components/AppBar/index.ts
@@ -1 +1,2 @@
export { default as AppBar } from './AppBar.vue'
+export { default as CreateSpace } from './CreateSpace.vue'
diff --git a/packages/web-app-files/tests/unit/components/AppBar/CreateSpace.spec.ts b/packages/web-pkg/tests/unit/components/AppBar/CreateSpace.spec.ts
similarity index 94%
rename from packages/web-app-files/tests/unit/components/AppBar/CreateSpace.spec.ts
rename to packages/web-pkg/tests/unit/components/AppBar/CreateSpace.spec.ts
index cbc471e55a3..0624a278669 100644
--- a/packages/web-app-files/tests/unit/components/AppBar/CreateSpace.spec.ts
+++ b/packages/web-pkg/tests/unit/components/AppBar/CreateSpace.spec.ts
@@ -2,7 +2,7 @@ import CreateSpace from '../../../../src/components/AppBar/CreateSpace.vue'
import { mockDeep } from 'vitest-mock-extended'
import { Resource, SpaceResource } from '@ownclouders/web-client'
import { defaultPlugins, mount, defaultComponentMocks } from '@ownclouders/web-test-helpers'
-import { useMessages, useModals, useSpacesStore } from '@ownclouders/web-pkg'
+import { useMessages, useModals, useSpacesStore } from '../../../../src/composables'
import { unref } from 'vue'
const selectors = {
@@ -36,6 +36,7 @@ describe('CreateSpace component', () => {
const spacesStore = useSpacesStore()
expect(spacesStore.upsertSpace).toHaveBeenCalled()
+ expect(wrapper.emitted('spaceCreated')).toBeTruthy()
})
it('shows a message when an error occurred', async () => {
vi.spyOn(console, 'error').mockImplementation(() => undefined)
diff --git a/packages/web-pkg/tests/unit/components/AppBar/__snapshots__/CreateSpace.spec.ts.snap b/packages/web-pkg/tests/unit/components/AppBar/__snapshots__/CreateSpace.spec.ts.snap
new file mode 100644
index 00000000000..414552d61ba
--- /dev/null
+++ b/packages/web-pkg/tests/unit/components/AppBar/__snapshots__/CreateSpace.spec.ts.snap
@@ -0,0 +1,8 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`CreateSpace component > should show the "New Space" button 1`] = `
+""
+`;
diff --git a/tests/e2e/cucumber/features/admin-settings/spaces.feature b/tests/e2e/cucumber/features/admin-settings/spaces.feature
index eacbef8ccff..d3e1ba0c5c6 100644
--- a/tests/e2e/cucumber/features/admin-settings/spaces.feature
+++ b/tests/e2e/cucumber/features/admin-settings/spaces.feature
@@ -1,5 +1,27 @@
Feature: spaces management
+ Scenario: spaces can be created
+ Given "Admin" creates following users using API
+ | id |
+ | Alice |
+ And "Admin" assigns following roles to the users using API
+ | id | role |
+ | Alice | Space Admin |
+ And "Admin" creates the following project spaces using API
+ | name | id |
+ | team A | team.a |
+ When "Alice" logs in
+ And "Alice" opens the "admin-settings" app
+ And "Alice" navigates to the project spaces management page
+ And "Alice" creates the following project spaces
+ | name | id |
+ | team | team.b |
+ Then "Alice" should see the following spaces
+ | id |
+ | team.a |
+ | team.b |
+ And "Alice" logs out
+
Scenario: spaces can be managed in the admin settings via the context menu
Given "Admin" creates following users using API
| id |