Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[full-ci] Spaces/User admin list edit quota batch actions #8387

Merged
merged 15 commits into from
Feb 14, 2023
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Enhancement: Batch edit quota in admin panel

We've added the batch edit quota functionality to the admin panel for users personal space and in the spaces list

https://github.com/owncloud/web/pull/8387
https://github.com/owncloud/web/issues/8417
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,10 @@ import { useStore } from 'web-pkg'

export default defineComponent({
name: 'AppearanceSection',
mixins: [UploadLogo, ResetLogo],
components: {
ContextActionMenu
},
mixins: [UploadLogo, ResetLogo],
setup() {
const store = useStore()
const instance = getCurrentInstance().proxy as any
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<quota-modal
v-if="quotaModalIsOpen"
:cancel="closeQuotaModal"
:space="quotaModalSelectedSpace"
:spaces="items"
lookacat marked this conversation as resolved.
Show resolved Hide resolved
@space-quota-updated="spaceQuotaUpdated"
/>
</div>
Expand Down Expand Up @@ -77,8 +77,6 @@ export default defineComponent({
}
return sections
})

const quotaModalSelectedSpace = computed(() => instance.$data.$_editQuota_selectedSpace)
const quotaModalIsOpen = computed(() => instance.$data.$_editQuota_modalOpen)
const closeQuotaModal = () => {
instance.$_editQuota_closeModal()
Expand All @@ -88,7 +86,6 @@ export default defineComponent({
}
return {
menuSections,
quotaModalSelectedSpace,
quotaModalIsOpen,
closeQuotaModal,
spaceQuotaUpdated
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<quota-modal
v-if="quotaModalIsOpen"
:cancel="closeQuotaModal"
:space="resources[0]"
:spaces="[resources[0]]"
lookacat marked this conversation as resolved.
Show resolved Hide resolved
@space-quota-updated="spaceQuotaUpdated"
/>
<oc-list id="oc-spaces-actions-sidebar" class-name="oc-mt-s">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,40 @@
<template>
<div>
<context-action-menu :menu-sections="menuSections" :items="items" />
<quota-modal
v-if="quotaModalIsOpen"
:cancel="closeQuotaModal"
:spaces="selectedPersonalDrives"
@space-quota-updated="spaceQuotaUpdated"
/>
</div>
</template>

<script lang="ts">
import ShowDetails from '../../mixins/showDetails'
import Delete from '../../mixins/users/delete'
import Edit from '../../mixins/users/edit'
import { computed, defineComponent, getCurrentInstance, PropType, unref } from 'vue'
import {
computed,
defineComponent,
getCurrentInstance,
PropType,
unref,
watch,
toRaw,
ref
} from 'vue'
import ContextActionMenu from 'web-pkg/src/components/ContextActions/ContextActionMenu.vue'
import { User } from 'web-client/src/generated'
import QuotaModal from 'web-pkg/src/components/Spaces/QuotaModal.vue'
import EditQuota from 'web-pkg/src/mixins/spaces/editQuota'
import { SpaceResource } from 'web-client/src'
import { useGettext } from 'vue3-gettext'

export default defineComponent({
name: 'ContextActions',
components: { ContextActionMenu },
mixins: [Delete, Edit, ShowDetails],
components: { ContextActionMenu, QuotaModal },
mixins: [Delete, Edit, ShowDetails, EditQuota],
props: {
items: {
type: Array as PropType<User[]>,
Expand All @@ -24,13 +43,36 @@ export default defineComponent({
},
setup(props) {
const instance = getCurrentInstance().proxy as any

const { $gettext } = useGettext()
const filterParams = computed(() => ({ resources: props.items }))
const selectedPersonalDrives = ref([])
watch(
lookacat marked this conversation as resolved.
Show resolved Hide resolved
() => props.items,
async () => {
selectedPersonalDrives.value.splice(0, unref(selectedPersonalDrives).length)
props.items.forEach((user) => {
const drive = toRaw(user.drive)
if (drive === undefined || drive.id === undefined) {
return
}
const spaceResource = {
id: drive.id,
name: $gettext(' of %{name}', { name: user.displayName }),
spaceQuota: drive.quota
} as SpaceResource
selectedPersonalDrives.value.push(spaceResource)
})
},
{ deep: true, immediate: true }
)
const menuItemsPrimaryActions = computed(() =>
[...instance.$_edit_items, ...instance.$_delete_items].filter((item) =>
item.isEnabled(unref(filterParams))
)
)
const menuItemsSecondaryActions = computed(() =>
[...instance.$_editQuota_items].filter((item) => item.isEnabled(unref(filterParams)))
)

const menuItemsSidebar = computed(() =>
[...instance.$_showDetails_items].filter((item) => item.isEnabled(unref(filterParams)))
Expand All @@ -45,6 +87,12 @@ export default defineComponent({
items: unref(menuItemsPrimaryActions)
})
}
if (unref(menuItemsSecondaryActions).length) {
sections.push({
name: 'secondaryActions',
items: unref(menuItemsSecondaryActions)
})
}
if (unref(menuItemsSidebar).length) {
sections.push({
name: 'sidebar',
Expand All @@ -54,8 +102,20 @@ export default defineComponent({
return sections
})

const quotaModalIsOpen = computed(() => instance.$data.$_editQuota_modalOpen)
const closeQuotaModal = () => {
instance.$_editQuota_closeModal()
}
const spaceQuotaUpdated = (quota) => {
instance.$data.$_editQuota_selectedSpace.spaceQuota = quota
}

return {
menuSections
menuSections,
quotaModalIsOpen,
closeQuotaModal,
spaceQuotaUpdated,
selectedPersonalDrives
}
}
})
Expand Down
42 changes: 39 additions & 3 deletions packages/web-app-admin-settings/src/views/Spaces.vue
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@
</div>
</template>
<template #mainContent>
<quota-modal
v-if="quotaModalIsOpen"
:cancel="closeQuotaModal"
:spaces="selectedSpaces"
@space-quota-updated="spaceQuotaUpdated"
/>
<no-content-message
v-if="!spaces.length"
id="admin-settings-spaces-empty"
Expand Down Expand Up @@ -97,6 +103,8 @@ import ActionsPanel from '../components/Spaces/SideBar/ActionsPanel.vue'
import Delete from 'web-pkg/src/mixins/spaces/delete'
import Disable from 'web-pkg/src/mixins/spaces/disable'
import Restore from 'web-pkg/src/mixins/spaces/restore'
import EditQuota from 'web-pkg/src/mixins/spaces/editQuota'
import QuotaModal from 'web-pkg/src/components/Spaces/QuotaModal.vue'
import { useSideBar } from 'web-pkg/src/composables/sideBar'
import { useGettext } from 'vue3-gettext'

Expand All @@ -108,9 +116,10 @@ export default defineComponent({
NoContentMessage,
ContextActions,
SpaceInfo,
BatchActions
BatchActions,
QuotaModal
},
mixins: [Delete, Disable, Restore],
mixins: [Delete, Disable, Restore, EditQuota],
provide() {
return {
resource: computed(() => this.selectedSpaces[0])
Expand All @@ -126,6 +135,7 @@ export default defineComponent({
const { sideBarOpen, sideBarActivePanel } = useSideBar()

const loadResourcesEventToken = ref(null)
const updateQuotaForSpaceEventToken = ref(null)
lookacat marked this conversation as resolved.
Show resolved Hide resolved
const template = ref(null)
const listHeaderPosition = ref(0)
const selectedSpaces = ref([])
Expand Down Expand Up @@ -176,6 +186,7 @@ export default defineComponent({

const batchActions = computed(() => {
return [
...instance.$_editQuota_items,
...instance.$_restore_items,
...instance.$_delete_items,
...instance.$_disable_items
Expand Down Expand Up @@ -253,13 +264,35 @@ export default defineComponent({
calculateListHeaderPosition()
window.addEventListener('resize', calculateListHeaderPosition)
resizeObserver.observe(unref(appBarActionsRef))

updateQuotaForSpaceEventToken.value = eventBus.subscribe(
'app.admin-settings.spaces.space.quota.updated',
({ spaceId, quota }) => {
const space = unref(spaces).find((s) => s.id === spaceId)
if (space) {
space.spaceQuota = quota
}
}
)
})

onBeforeUnmount(() => {
eventBus.unsubscribe('app.admin-settings.list.load', unref(loadResourcesEventToken))
eventBus.unsubscribe(
'app.admin-settings.spaces.space.quota.updated',
unref(updateQuotaForSpaceEventToken)
)
resizeObserver.unobserve(unref(appBarActionsRef))
})

const quotaModalIsOpen = computed(() => instance.$data.$_editQuota_modalOpen)
const closeQuotaModal = () => {
instance.$_editQuota_closeModal()
}
const spaceQuotaUpdated = (quota) => {
instance.$data.$_editQuota_selectedSpace.spaceQuota = quota
}

return {
sideBarOpen,
sideBarActivePanel,
Expand All @@ -278,7 +311,10 @@ export default defineComponent({
unselectAllSpaces,
limitedScreenSpace,
appBarActionsRef,
onResize
onResize,
quotaModalIsOpen,
closeQuotaModal,
spaceQuotaUpdated
}
}
})
Expand Down
Loading