diff options
author | Christopher Ng <chrng8@gmail.com> | 2025-03-25 14:31:44 -0700 |
---|---|---|
committer | Christopher Ng <chrng8@gmail.com> | 2025-03-28 14:12:52 -0700 |
commit | bf01685f3cf106085c2e8f1ce5c5018ec3b24e92 (patch) | |
tree | a27467b92e85bb757ae4bdf4ff94ac579a3d700f /apps/settings/src | |
parent | a1bf497b220ffec26f009aa9a4f59ddf058ce60d (diff) | |
download | nextcloud-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.vue | 13 | ||||
-rw-r--r-- | apps/settings/src/components/Users/NewUserDialog.vue | 5 | ||||
-rw-r--r-- | apps/settings/src/components/Users/UserRow.vue | 5 | ||||
-rw-r--r-- | apps/settings/src/service/groups.ts | 28 | ||||
-rw-r--r-- | apps/settings/src/utils/groups.ts | 22 |
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, -}) |