aboutsummaryrefslogtreecommitdiffstats
path: root/apps/settings/src
diff options
context:
space:
mode:
authorChristopher Ng <chrng8@gmail.com>2025-03-25 14:31:44 -0700
committerChristopher Ng <chrng8@gmail.com>2025-03-28 14:12:52 -0700
commitbf01685f3cf106085c2e8f1ce5c5018ec3b24e92 (patch)
treea27467b92e85bb757ae4bdf4ff94ac579a3d700f /apps/settings/src
parenta1bf497b220ffec26f009aa9a4f59ddf058ce60d (diff)
downloadnextcloud-server-bf01685f3cf106085c2e8f1ce5c5018ec3b24e92.tar.gz
nextcloud-server-bf01685f3cf106085c2e8f1ce5c5018ec3b24e92.zip
refactor(settings): Consolidate group formatting
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Diffstat (limited to 'apps/settings/src')
-rw-r--r--apps/settings/src/components/AppNavigationGroupList.vue13
-rw-r--r--apps/settings/src/components/Users/NewUserDialog.vue5
-rw-r--r--apps/settings/src/components/Users/UserRow.vue5
-rw-r--r--apps/settings/src/service/groups.ts28
-rw-r--r--apps/settings/src/utils/groups.ts22
5 files changed, 30 insertions, 43 deletions
diff --git a/apps/settings/src/components/AppNavigationGroupList.vue b/apps/settings/src/components/AppNavigationGroupList.vue
index ea5be964c31..b32a07bc9b8 100644
--- a/apps/settings/src/components/AppNavigationGroupList.vue
+++ b/apps/settings/src/components/AppNavigationGroupList.vue
@@ -57,8 +57,6 @@
</template>
<script setup lang="ts">
-import type { Group } from '../utils/groups.ts'
-
import { computed, ref, watch, onBeforeMount } from 'vue'
import { Fragment } from 'vue-frag'
import { useRoute, useRouter } from 'vue-router/composables'
@@ -155,19 +153,12 @@ async function loadGroups() {
offset: offset.value,
limit: 25,
})
- const groups: Group[] = (await promise.value).data.ocs?.data?.groups ?? []
+ const groups = await promise.value
if (groups.length > 0) {
offset.value += 25
}
for (const group of groups) {
- store.commit('addGroup', {
- id: group.id,
- name: group.displayname,
- usercount: group.usercount,
- disabled: group.disabled,
- canAdd: group.canAdd,
- canRemove: group.canRemove,
- })
+ store.commit('addGroup', group)
}
} catch (error) {
logger.error(t('settings', 'Failed to load groups'), { error })
diff --git a/apps/settings/src/components/Users/NewUserDialog.vue b/apps/settings/src/components/Users/NewUserDialog.vue
index 7cd836b6c29..0e940c296f7 100644
--- a/apps/settings/src/components/Users/NewUserDialog.vue
+++ b/apps/settings/src/components/Users/NewUserDialog.vue
@@ -146,7 +146,6 @@ import NcSelect from '@nextcloud/vue/components/NcSelect'
import NcTextField from '@nextcloud/vue/components/NcTextField'
import { searchGroups } from '../../service/groups.ts'
-import { formatGroup } from '../../utils/groups.ts'
export default {
name: 'NewUserDialog',
@@ -292,8 +291,8 @@ export default {
offset: 0,
limit: 25,
})
- const groups = (await this.promise).data.ocs?.data?.groups ?? []
- this.availableGroups = groups.map(formatGroup)
+ const groups = await this.promise
+ this.availableGroups = groups
} catch (error) {
logger.error(t('settings', 'Failed to search groups'), { error })
}
diff --git a/apps/settings/src/components/Users/UserRow.vue b/apps/settings/src/components/Users/UserRow.vue
index 02badf79736..830a688ccfc 100644
--- a/apps/settings/src/components/Users/UserRow.vue
+++ b/apps/settings/src/components/Users/UserRow.vue
@@ -300,7 +300,6 @@ import UserRowActions from './UserRowActions.vue'
import UserRowMixin from '../../mixins/UserRowMixin.js'
import { isObfuscated, unlimitedQuota } from '../../utils/userUtils.ts'
-import { formatGroup } from '../../utils/groups.ts'
import logger from '../../logger.ts'
export default {
@@ -584,8 +583,8 @@ export default {
offset: 0,
limit: 25,
})
- const groups = (await this.promise).data.ocs?.data?.groups ?? []
- this.availableGroups = groups.map(formatGroup)
+ const groups = await this.promise
+ this.availableGroups = groups
} catch (error) {
logger.error(t('settings', 'Failed to search groups'), { error })
}
diff --git a/apps/settings/src/service/groups.ts b/apps/settings/src/service/groups.ts
index 87b83a91140..fa8d1a46e4a 100644
--- a/apps/settings/src/service/groups.ts
+++ b/apps/settings/src/service/groups.ts
@@ -3,12 +3,30 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-import type { AxiosResponse } from '@nextcloud/axios'
+import type { IGroup } from '../views/user-types.d.ts'
import axios from '@nextcloud/axios'
import { generateOcsUrl } from '@nextcloud/router'
import { CancelablePromise } from 'cancelable-promise'
+interface Group {
+ id: string
+ displayname: string
+ usercount: number
+ disabled: number
+ canAdd: boolean
+ canRemove: boolean
+}
+
+const formatGroup = (group: Group): Required<IGroup> => ({
+ id: group.id,
+ name: group.displayname,
+ usercount: group.usercount,
+ disabled: group.disabled,
+ canAdd: group.canAdd,
+ canRemove: group.canRemove,
+})
+
/**
* Search groups
*
@@ -17,17 +35,19 @@ import { CancelablePromise } from 'cancelable-promise'
* @param {number} options.offset Offset
* @param {number} options.limit Limit
*/
-export const searchGroups = ({ search, offset, limit }): CancelablePromise<AxiosResponse> => {
+export const searchGroups = ({ search, offset, limit }): CancelablePromise<Required<IGroup>[]> => {
const controller = new AbortController()
return new CancelablePromise(async (resolve, reject, onCancel) => {
onCancel(() => controller.abort())
try {
- const response = await axios.get(
+ const { data } = await axios.get(
generateOcsUrl('/cloud/groups/details?search={search}&offset={offset}&limit={limit}', { search, offset, limit }), {
signal: controller.signal,
},
)
- resolve(response)
+ const groups: Group[] = data.ocs?.data?.groups ?? []
+ const formattedGroups = groups.map(formatGroup)
+ resolve(formattedGroups)
} catch (error) {
reject(error)
}
diff --git a/apps/settings/src/utils/groups.ts b/apps/settings/src/utils/groups.ts
deleted file mode 100644
index bc2c789ec35..00000000000
--- a/apps/settings/src/utils/groups.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
-
-export interface Group {
- id: string
- displayname: string
- usercount: number
- disabled: number
- canAdd: boolean
- canRemove: boolean
-}
-
-export const formatGroup = (group: Group) => ({
- id: group.id,
- name: group.displayname,
- usercount: group.usercount,
- disabled: group.disabled,
- canAdd: group.canAdd,
- canRemove: group.canRemove,
-})