diff --git a/src/settings/AdminGroupSelect.tsx b/src/settings/AdminGroupSelect.tsx
index 6a8292fa4..d68cae4bf 100644
--- a/src/settings/AdminGroupSelect.tsx
+++ b/src/settings/AdminGroupSelect.tsx
@@ -21,14 +21,13 @@
*
*/
-import * as React from 'react';
-import Select from 'react-select';
+import * as React from 'react'
+import Select from 'react-select'
import { CLASS_NAME_ADMIN_DELEGATION } from '../Constants.js'
-import { Component } from 'react';
-import { getCurrentUser } from '@nextcloud/auth';
-import { Group, Api, Circle } from './Api';
-import { loadState } from '@nextcloud/initial-state';
+import { Component } from 'react'
+import { getCurrentUser } from '@nextcloud/auth'
+import { Group, Api } from './Api'
interface AdminGroupSelectProps {
groups: Group[],
@@ -44,7 +43,7 @@ class AdminGroupSelect extends Component {
delegatedAdminGroups: [],
}
- constructor (props) {
+ constructor(props) {
super(props)
this.state.groups = props.groups
this.state.allGroups = props.allGroups
@@ -55,32 +54,33 @@ class AdminGroupSelect extends Component {
componentDidMount() {
this.api.listGroups().then((groups) => {
- this.setState({groups});
- });
+ this.setState({ groups })
+ })
this.api.listDelegatedGroups(CLASS_NAME_ADMIN_DELEGATION).then((groups) => {
- this.setState({delegatedAdminGroups: groups});
- });
+ this.setState({ delegatedAdminGroups: groups })
+ })
}
updateDelegatedAdminGroups(options: {value: string, label: string}[]): void {
if (this.state.groups !== undefined) {
const groups = options.map(option => {
- return this.state.groups.filter(g => g.gid === option.value)[0];
- });
- this.setState({delegatedAdminGroups: groups}, () => {
- this.api.updateDelegatedGroups(this.state.delegatedAdminGroups, CLASS_NAME_ADMIN_DELEGATION);
- });
+ return this.state.groups.filter(g => g.gid === option.value)[0]
+ })
+ this.setState({ delegatedAdminGroups: groups }, () => {
+ this.api.updateDelegatedGroups(this.state.delegatedAdminGroups, CLASS_NAME_ADMIN_DELEGATION)
+ })
}
}
- render () {
+ render() {
const options = this.state.groups.map(group => {
return {
value: group.gid,
- label: group.displayName
- };
- });
+ label: group.displayName,
+ }
+ })
+ /* @ts-expect-error Typescript error due to async react component */
return
{ t('groupfolders', 'Specify below the groups that will be allowed to manage group folders and use its API/REST.') }
{ t('groupfolders', 'They will have access to all Groupfolders.') }
+ {/* @ts-expect-error Typescript error due to async react component */}
{ t('groupfolders', 'Specify below the groups that will be allowed to manage group folders and use its API/REST only.') }
{ t('groupfolders', 'They will only have access to group folders for which they have advanced permissions.') }
+ {/* @ts-expect-error Typescript error due to async react component */}
implements OC.Plugin {
if (this.state.filter === '') {
- return true;
+ return true
}
- return folder.mount_point.toLowerCase().indexOf(this.state.filter.toLowerCase()) !== -1;
+ return folder.mount_point.toLowerCase().indexOf(this.state.filter.toLowerCase()) !== -1
})
.sort((a, b) => {
switch (this.state.sort) {
- case "mount_point":
- return a.mount_point.localeCompare(b.mount_point) * this.state.sortOrder;
- case "quota":
- if (a.quota < 0 && b.quota >= 0) {
- return this.state.sortOrder;
- }
- if (b.quota < 0 && a.quota >= 0) {
- return -this.state.sortOrder;
- }
- return (a.quota - b.quota) * this.state.sortOrder;
- case "groups":
- return (Object.keys(a.groups).length - Object.keys(b.groups).length) * this.state.sortOrder;
- case "acl":
- if (a.acl && !b.acl) {
- return this.state.sortOrder;
- }
- if (!a.acl && b.acl) {
- return -this.state.sortOrder;
- }
- return 0;
+ case 'mount_point':
+ return a.mount_point.localeCompare(b.mount_point) * this.state.sortOrder
+ case 'quota':
+ if (a.quota < 0 && b.quota >= 0) {
+ return this.state.sortOrder
+ }
+ if (b.quota < 0 && a.quota >= 0) {
+ return -this.state.sortOrder
+ }
+ return (a.quota - b.quota) * this.state.sortOrder
+ case 'groups':
+ return (Object.keys(a.groups).length - Object.keys(b.groups).length) * this.state.sortOrder
+ case 'acl':
+ if (a.acl && !b.acl) {
+ return this.state.sortOrder
+ }
+ if (!a.acl && b.acl) {
+ return -this.state.sortOrder
+ }
+ return 0
}
})
.map(folder => {
- const id = folder.id;
+ const id = folder.id
return
- {this.state.editingMountPoint === id ?
- {
- event.stopPropagation();
+ event.stopPropagation()
}}
initialValue={folder.mount_point}
- /> :
-
+ : {
- event.stopPropagation();
- this.setState({editingMountPoint: id})
+ event.stopPropagation()
+ this.setState({ editingMountPoint: id })
}}
>
{folder.mount_point}
@@ -267,8 +271,8 @@ export class App extends Component<{}, AppState> implements OC.Plugin {
- event.stopPropagation();
- this.setState({editingGroup: id})
+ event.stopPropagation()
+ this.setState({ editingGroup: id })
}}
groups={folder.groups}
allCircles={this.state.circles}
@@ -279,6 +283,7 @@ export class App extends Component<{}, AppState> implements OC.Plugin
|
+ {/* @ts-expect-error Typescript error due to async react component */}
implements OC.Plugin
this.setAcl(folder, event.target.checked)}
+ title={
+ App.supportACL()
+ ? t('groupfolders', 'Advanced permissions allows setting permissions on a per-file basis but comes with a performance overhead')
+ : t('groupfolders', 'Advanced permissions are only supported with Nextcloud 16 and up')
+ }
+ onChange={(event) => this.setAcl(folder, event.target.checked)}
/>
- {folder.acl &&
- implements OC.Plugin
|
|
- });
+ })
return {
- this.setState({editingGroup: 0, editingMountPoint: 0})
- }}>
+ onClick={() => {
+ this.setState({ editingGroup: 0, editingMountPoint: 0 })
+ }}>
{this.showAdminDelegationForms()}
-
- this.onSortClick('mount_point')}>
- {t('groupfolders', 'Folder name')}
-
+ this.onSortClick('mount_point')}>
+ {t('groupfolders', 'Folder name')}
+
- |
- this.onSortClick('groups')}>
- {groupHeader}
-
+ this.onSortClick('groups')}>
+ {groupHeader}
+
- |
- this.onSortClick('quota')}>
- {t('groupfolders', 'Quota')}
-
+ this.onSortClick('quota')}>
+ {t('groupfolders', 'Quota')}
+
- |
- this.onSortClick('acl')}>
- {t('groupfolders', 'Advanced Permissions')}
-
+ this.onSortClick('acl')}>
+ {t('groupfolders', 'Advanced Permissions')}
+
- |
- |
- | | | |
+
+ |
+
+ {/* @ts-expect-error Typescript error due to async react component */}
{rows}
@@ -350,7 +357,7 @@ export class App extends Component<{}, AppState> implements OC.Plugin {
- this.setState({newMountPoint: event.target.value})
+ this.setState({ newMountPoint: event.target.value })
}}/>
@@ -360,20 +367,25 @@ export class App extends Component<{}, AppState> implements OC.Plugin
-
;
+
}
-}
+}
interface ManageAclSelectProps {
folder: Folder;
onChange: (type: string, id: string, manageAcl: boolean) => void;
- onSearch: (name: string) => Thenable<{ groups: OCSGroup[]; users: OCSUser[]; }>;
-};
-
-
+ onSearch: (name: string) => Thenable<{ groups: OCSGroup[]; users: OCSUser[]; }>;
+}
-function ManageAclSelect({onChange, onSearch, folder}: ManageAclSelectProps) {
+/**
+ *
+ * @param root0
+ * @param root0.onChange
+ * @param root0.onSearch
+ * @param root0.folder
+ */
+function ManageAclSelect({ onChange, onSearch, folder }: ManageAclSelectProps) {
const handleSearch = (inputValue: string) => {
return new Promise(resolve => {
onSearch(inputValue).then((result) => {
@@ -385,6 +397,8 @@ function ManageAclSelect({onChange, onSearch, folder}: ManageAclSelectProps) {
const typeLabel = (item) => {
return item.type === 'user' ? t('groupfolders', 'User') : t('groupfolders', 'Group')
}
+
+ /* @ts-expect-error Typescript error due to async react component */
return ({
...base,
- backgroundColor: state.isFocused ? 'var(--color-background-dark)' : 'transparent'
+ backgroundColor: state.isFocused ? 'var(--color-background-dark)' : 'transparent',
}),
dropdownIndicator: base => ({
...base,
- padding: 4
+ padding: 4,
}),
clearIndicator: base => ({
...base,
- padding: 4
+ padding: 4,
}),
multiValue: base => ({
...base,
backgroundColor: 'var(--color-background-dark)',
- color: 'var(--color-main-text)'
+ color: 'var(--color-main-text)',
}),
multiValueLabel: base => ({
...base,
- color: 'var(--color-main-text)'
+ color: 'var(--color-main-text)',
}),
valueContainer: base => ({
...base,
- padding: '0px 6px'
+ padding: '0px 6px',
}),
input: base => ({
...base,
margin: 0,
- padding: 0
+ padding: 0,
}),
menu: (provided) => ({
...provided,
backgroundColor: 'var(--color-main-background)',
borderColor: 'var(--color-border)',
- })
+ }),
}}
/>
}
diff --git a/src/settings/FolderGroups.tsx b/src/settings/FolderGroups.tsx
index 77b082e30..b2da8e6fd 100644
--- a/src/settings/FolderGroups.tsx
+++ b/src/settings/FolderGroups.tsx
@@ -140,6 +140,7 @@ function AdminGroupSelect({allGroups, allCircles, onChange}: CircleGroupSelectPr
? t('groupfolders', 'Add group or circle')
: t('groupfolders', 'Add group')
+ /* @ts-expect-error Typescript error due to async react component */
return