mirror of
https://github.com/nextcloud/server.git
synced 2026-06-10 17:23:59 -04:00
refactor(settings): Consolidate group formatting
Signed-off-by: Christopher Ng <chrng8@gmail.com>
This commit is contained in:
parent
4d0f2da3e0
commit
02ca811c9d
5 changed files with 30 additions and 43 deletions
|
|
@ -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 })
|
||||
|
|
|
|||
|
|
@ -146,7 +146,6 @@ import NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'
|
|||
import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
|
||||
|
||||
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 })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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…
Reference in a new issue