Users management enhancements and fixestags/v16.0.0alpha1
}, | }, | ||||
"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": { |
* 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) { |
--> | --> | ||||
<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); |