Browse Source

refactor(settings): Consolidate group formatting

Signed-off-by: Christopher Ng <chrng8@gmail.com>
pull/51336/head
Christopher Ng 8 months ago
parent
commit
bf01685f3c
  1. 13
      apps/settings/src/components/AppNavigationGroupList.vue
  2. 5
      apps/settings/src/components/Users/NewUserDialog.vue
  3. 5
      apps/settings/src/components/Users/UserRow.vue
  4. 28
      apps/settings/src/service/groups.ts
  5. 22
      apps/settings/src/utils/groups.ts

13
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 })

5
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 })
}

5
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 })
}

28
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)
}

22
apps/settings/src/utils/groups.ts

@ -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,
})
Loading…
Cancel
Save