Selaa lähdekoodia

Merge pull request #14322 from nextcloud/users-management-enhancements

Users management enhancements and fixes
tags/v16.0.0alpha1
Roeland Jago Douma 5 vuotta sitten
vanhempi
commit
fc105d3bb0
No account linked to committer's email address

+ 13
- 13
package-lock.json Näytä tiedosto

}, },
"util": { "util": {
"version": "0.10.3", "version": "0.10.3",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
"resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
"integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
"dev": true, "dev": true,
"requires": { "requires": {
}, },
"async": { "async": {
"version": "1.5.2", "version": "1.5.2",
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
"resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz",
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
}, },
"async-each": { "async-each": {
"dependencies": { "dependencies": {
"jsesc": { "jsesc": {
"version": "0.5.0", "version": "0.5.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
"dev": true "dev": true
}, },
"regexpu-core": { "regexpu-core": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
"resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
"integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
"dev": true, "dev": true,
"requires": { "requires": {
}, },
"regjsgen": { "regjsgen": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
"resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
"integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
"dev": true "dev": true
}, },
"regjsparser": { "regjsparser": {
"version": "0.1.5", "version": "0.1.5",
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
"resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
"integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
"dev": true, "dev": true,
"requires": { "requires": {
"dependencies": { "dependencies": {
"source-map": { "source-map": {
"version": "0.5.0", "version": "0.5.0",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.0.tgz",
"resolved": "http://registry.npmjs.org/source-map/-/source-map-0.5.0.tgz",
"integrity": "sha1-D+llA6yGpa213mP05BKuSHLNvoY=", "integrity": "sha1-D+llA6yGpa213mP05BKuSHLNvoY=",
"dev": true "dev": true
} }
}, },
"handlebars": { "handlebars": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "http://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz",
"integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==",
"requires": { "requires": {
"async": "^2.5.0", "async": "^2.5.0",
"dependencies": { "dependencies": {
"async": { "async": {
"version": "2.6.1", "version": "2.6.1",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
"resolved": "http://registry.npmjs.org/async/-/async-2.6.1.tgz",
"integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
"requires": { "requires": {
"lodash": "^4.17.10" "lodash": "^4.17.10"
}, },
"json5": { "json5": {
"version": "0.5.1", "version": "0.5.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
"resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
"dev": true "dev": true
}, },
}, },
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
}, },
"mississippi": { "mississippi": {
"dependencies": { "dependencies": {
"jsesc": { "jsesc": {
"version": "0.5.0", "version": "0.5.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
"dev": true "dev": true
} }
}, },
"strip-ansi": { "strip-ansi": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true, "dev": true,
"requires": { "requires": {

+ 605
- 0
settings/js/vue-1.js
File diff suppressed because it is too large
Näytä tiedosto


+ 1
- 0
settings/js/vue-1.js.map
File diff suppressed because it is too large
Näytä tiedosto


+ 3418
- 0
settings/js/vue-2.js
File diff suppressed because it is too large
Näytä tiedosto


+ 1
- 0
settings/js/vue-2.js.map
File diff suppressed because it is too large
Näytä tiedosto


+ 1
- 1
settings/js/vue-6.js
File diff suppressed because it is too large
Näytä tiedosto


+ 1
- 1
settings/js/vue-6.js.map
File diff suppressed because it is too large
Näytä tiedosto


+ 26
- 5
settings/src/components/userList.vue Näytä tiedosto

* In case the user directly loaded the user list within a group * In case the user directly loaded the user list within a group
* the watch won't be triggered. We need to initialize it. * the watch won't be triggered. We need to initialize it.
*/ */
this.setNewUserDefaultGroup(this.$route.params.selectedGroup);
this.setNewUserDefaultGroup(this.selectedGroup);


/** /**
* Register search * Register search
if (disabledUsers.length===0 && this.$refs.infiniteLoading && this.$refs.infiniteLoading.isComplete) { if (disabledUsers.length===0 && this.$refs.infiniteLoading && this.$refs.infiniteLoading.isComplete) {
// disabled group is empty, redirection to all users // disabled group is empty, redirection to all users
this.$router.push({name: 'users'}); this.$router.push({name: 'users'});
this.$refs.infiniteLoading.$emit('$InfiniteLoading:reset');
this.$refs.infiniteLoading.stateChanger.reset()
} }
return disabledUsers; return disabledUsers;
} }
usersLimit() { usersLimit() {
return this.$store.getters.getUsersLimit; return this.$store.getters.getUsersLimit;
}, },
usersCount() {
return this.users.length
},


/* LANGUAGES */ /* LANGUAGES */
languages() { languages() {
// watch url change and group select // watch url change and group select
selectedGroup: function (val, old) { selectedGroup: function (val, old) {
this.$store.commit('resetUsers'); this.$store.commit('resetUsers');
this.$refs.infiniteLoading.$emit('$InfiniteLoading:reset');
this.$refs.infiniteLoading.stateChanger.reset()
this.setNewUserDefaultGroup(val); this.setNewUserDefaultGroup(val);
},

// make sure the infiniteLoading state is changed if we manually
// add/remove data from the store
usersCount: function(val, old) {
// deleting the last user, reset the list
if (val === 0 && old === 1) {
this.$refs.infiniteLoading.stateChanger.reset()
// adding the first user, warn the infiniteLoader that
// the list is not empty anymore (we don't fetch the newly
// added user as we already have all the info we need)
} else if (val === 1 && old === 0) {
this.$refs.infiniteLoading.stateChanger.loaded()
}
} }
}, },
methods: { methods: {
search(query) { search(query) {
this.searchQuery = query; this.searchQuery = query;
this.$store.commit('resetUsers'); this.$store.commit('resetUsers');
this.$refs.infiniteLoading.$emit('$InfiniteLoading:reset');
this.$refs.infiniteLoading.stateChanger.reset()
}, },
resetSearch() { resetSearch() {
this.search(''); this.search('');
resetForm() { resetForm() {
// revert form to original state // revert form to original state
Object.assign(this.newUser, this.$options.data.call(this).newUser); Object.assign(this.newUser, this.$options.data.call(this).newUser);
// reset group
this.setNewUserDefaultGroup(this.selectedGroup);
this.loading.all = false; this.loading.all = false;
}, },
createUser() { createUser() {
quota: this.newUser.quota.id, quota: this.newUser.quota.id,
language: this.newUser.language.code, language: this.newUser.language.code,
}) })
.then(() => this.resetForm())
.then(() => {
this.resetForm()
})
.catch((error) => { .catch((error) => {
this.loading.all = false; this.loading.all = false;
if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) { if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {

+ 11
- 4
settings/src/views/Users.vue Näytä tiedosto

--> -->


<template> <template>
<AppContent app-name="settings" :navigation-class="{ 'icon-loading': loading }">
<AppContent app-name="settings" :navigation-class="{ 'icon-loading': loadingAddGroup }">
<template #navigation> <template #navigation>
<AppNavigationNew button-id="new-user-button" :text="t('settings','New user')" button-class="icon-add" @click="toggleNewUserMenu" /> <AppNavigationNew button-id="new-user-button" :text="t('settings','New user')" button-class="icon-add" @click="toggleNewUserMenu" />
<ul id="usergrouplist"> <ul id="usergrouplist">
.then(() => { .then(() => {
this.showAddGroupEntry = false; this.showAddGroupEntry = false;
this.loadingAddGroup = false; this.loadingAddGroup = false;
this.$router.push({
name: 'group',
params: {
selectedGroup: gid
}
})
}) })
.catch(() => { .catch(() => {
this.loadingAddGroup = false; this.loadingAddGroup = false;
users() { users() {
return this.$store.getters.getUsers; return this.$store.getters.getUsers;
}, },
loading() {
return Object.keys(this.users).length === 0;
},
usersOffset() { usersOffset() {
return this.$store.getters.getUsersOffset; return this.$store.getters.getUsersOffset;
}, },
} else { } else {
Vue.set(addGroup, 'action', function() { Vue.set(addGroup, 'action', function() {
self.showAddGroupEntry = true self.showAddGroupEntry = true
// focus input
Vue.nextTick(() => {
window.addgroup.querySelector('form > input[type="text"]').focus()
})
}) })
} }
groups.unshift(addGroup); groups.unshift(addGroup);

Loading…
Peruuta
Tallenna