Skip to content

Commit

Permalink
refactor(settings): Remove usage of jQuery
Browse files Browse the repository at this point in the history
Signed-off-by: provokateurin <[email protected]>
  • Loading branch information
provokateurin committed Sep 10, 2024
1 parent 91c7662 commit 8d94e5f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 65 deletions.
72 changes: 39 additions & 33 deletions src/settings/Api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,23 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { generateUrl, generateOcsUrl } from '@nextcloud/router'
import { OCSResult, AxiosOCSResult } from 'NC'
import axios from '@nextcloud/axios'

interface AxiosOCSResult<T> {
data: {
ocs: {
data: T;
meta: {
status: 'ok' | 'failure';
message: string;
statuscode: number;
totalitems: number;
itemsperpage: number;
}
}
}
}

export interface Group {
gid: string;
displayName: string;
Expand Down Expand Up @@ -50,29 +64,28 @@ export class Api {
}

async listFolders(): Promise<Folder[]> {
return $.getJSON(this.getUrl('folders'))
.then((data: OCSResult<Folder[]>) => Object.keys(data.ocs.data).map(id => data.ocs.data[id]))
return axios.get(this.getUrl('folders'))
.then((response: AxiosOCSResult<Folder[]>) => Object.keys(response.data.ocs.data).map(id => response.data.ocs.data[id]))
}

// Returns all NC groups
async listGroups(): Promise<Group[]> {
return $.getJSON(this.getUrl('delegation/groups'))
.then((data: OCSResult<Group[]>) => data.ocs.data)
return axios.get(this.getUrl('delegation/groups'))
.then((response: AxiosOCSResult<Group[]>) => response.data.ocs.data)
}

// Returns all visible NC circles
async listCircles(): Promise<Circle[]> {
return $.getJSON(this.getUrl('delegation/circles'))
.then((data: OCSResult<Circle[]>) => data.ocs.data)
return axios.get(this.getUrl('delegation/circles'))
.then((response: AxiosOCSResult<Circle[]>) => response.data.ocs.data)
}

// Returns all groups that have been granted delegated admin or subadmin rights on groupfolders
async listDelegatedGroups(classname: string): Promise<Group[]> {
return axios.get(this.getUrl('/delegation/authorized-groups'), { params: { classname } })
.then((data: AxiosOCSResult<Group[]>) => {
.then((response: AxiosOCSResult<Group[]>) => {
// The admin group is always there. We don't want the user to remove it
const groups = data.data.ocs.data.filter(g => g.gid !== 'admin')
return groups
return response.data.ocs.data.filter(g => g.gid !== 'admin')
})
}

Expand All @@ -81,79 +94,72 @@ export class Api {
return axios.post(generateUrl('/apps/settings/') + '/settings/authorizedgroups/saveSettings', {
newGroups,
class: classname,
}).then((data) => data.data)
})
}

async createFolder(mountPoint: string): Promise<Folder> {
return $.post(this.getUrl('folders'), {
mountpoint: mountPoint
}, null, 'json').then((data: OCSResult<Folder>) => data.ocs.data)
return axios.post(this.getUrl('folders'), { mountpoint: mountPoint })
.then((response: AxiosOCSResult<Folder>) => response.data.ocs.data)
}

async deleteFolder(id: number): Promise<void> {
return $.ajax({
url: this.getUrl(`folders/${id}`),
type: 'DELETE'
})
return axios.delete(this.getUrl(`folders/${id}`))
}

async addGroup(folderId: number, group: string): Promise<void> {
return $.post(this.getUrl(`folders/${folderId}/groups`), {
group
return axios.post(this.getUrl(`folders/${folderId}/groups`), {
group
})
}

async removeGroup(folderId: number, group: string): Promise<void> {
return $.ajax({
url: this.getUrl(`folders/${folderId}/groups/${group}`),
type: 'DELETE'
})
return axios.delete(this.getUrl(`folders/${folderId}/groups/${group}`))
}

async setPermissions(folderId: number, group: string, permissions: number): Promise<void> {
return $.post(this.getUrl(`folders/${folderId}/groups/${group}`), {
return axios.post(this.getUrl(`folders/${folderId}/groups/${group}`), {
permissions
})
}

async setManageACL(folderId: number, type: string, id: string, manageACL: boolean): Promise<void> {
return $.post(this.getUrl(`folders/${folderId}/manageACL`), {
return axios.post(this.getUrl(`folders/${folderId}/manageACL`), {
mappingType: type,
mappingId: id,
manageAcl: manageACL ? 1 : 0
})
}

async setQuota(folderId: number, quota: number): Promise<void> {
return $.post(this.getUrl(`folders/${folderId}/quota`), {
return axios.post(this.getUrl(`folders/${folderId}/quota`), {
quota
})
}

async setACL(folderId: number, acl: boolean): Promise<void> {
return $.post(this.getUrl(`folders/${folderId}/acl`), {
return axios.post(this.getUrl(`folders/${folderId}/acl`), {
acl: acl ? 1 : 0
})
}

async renameFolder(folderId: number, mountpoint: string): Promise<void> {
return $.post(this.getUrl(`folders/${folderId}/mountpoint`), {
return axios.post(this.getUrl(`folders/${folderId}/mountpoint`), {
mountpoint
})
}

async aclMappingSearch(folderId: number, search: string): Promise<{groups: ManageRuleProps[], users: ManageRuleProps[]}> {
return $.getJSON(this.getUrl(`folders/${folderId}/search?format=json&search=${search}`))
.then((data: OCSResult<{ groups: OCSGroup[]; users: OCSUser[]; }>) => {
return axios.get(this.getUrl(`folders/${folderId}/search`), { params: { search } })
.then((response: AxiosOCSResult<{ groups: OCSGroup[]; users: OCSUser[]; }>) => {
return {
groups: Object.values(data.ocs.data.groups).map((item) => {
groups: Object.values(response.data.ocs.data.groups).map((item) => {
return {
type: 'group',
id: item.gid,
displayname: item.displayname
}
}),
users: Object.values(data.ocs.data.users).map((item) => {
users: Object.values(response.data.ocs.data.users).map((item) => {
return {
type: 'user',
id: item.uid,
Expand Down
32 changes: 0 additions & 32 deletions src/settings/Nextcloud.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,35 +74,3 @@ declare namespace OC {
}

declare function t(app: string, string: string, vars?: { [key: string]: string }, count?: number, options?: EscapeOptions): string;

declare module 'NC' {
export interface OCSResult<T> {
ocs: {
data: T;
meta: {
status: 'ok' | 'failure';
message: string;
statuscode: number;
totalitems: number;
itemsperpage: number;
}
}
}
}

declare module 'NC' {
export interface AxiosOCSResult<T> {
data: {
ocs: {
data: T;
meta: {
status: 'ok' | 'failure';
message: string;
statuscode: number;
totalitems: number;
itemsperpage: number;
}
}
}
}
}

0 comments on commit 8d94e5f

Please sign in to comment.