🙋‍♂️ UserDetails - group updating

ref #12
This commit is contained in:
Philipp Dormann 2021-01-13 21:05:03 +01:00
parent 39a3baa00b
commit 041c24a837

View File

@ -19,55 +19,52 @@
$: allpermissions = []; $: allpermissions = [];
$: allgroups = []; $: allgroups = [];
$: allgroups_ids = []; $: allgroups_ids = [];
$: usergroups_array_objects = [];
$: usergroups_array = []; $: usergroups_array = [];
let usergroups_array_original = [];
user_promise.then((data) => { user_promise.then((data) => {
console.log(data);
data_loaded = true; data_loaded = true;
original_data = Object.assign(original_data, data); original_data = Object.assign(original_data, data);
editable_userdata = data; editable_userdata = data;
usergroups_array = [];
data.groups.forEach((g) => { data.groups.forEach((g) => {
usergroups_array.push(g.id); usergroups_array=usergroups_array.concat([g.id]);
}); });
usergroups_array_original = usergroups_array;
allgroups.forEach((g) => { allgroups.forEach((g) => {
allgroups_ids.push(g.id); allgroups_ids.push(g.id);
}); });
}); });
UserGroupService.userGroupControllerGetAll().then((data) => { UserGroupService.userGroupControllerGetAll().then((data) => {
console.log(data);
allgroups = data; allgroups = data;
}); });
const permissions_promise = PermissionService.permissionControllerGetAll(); const permissions_promise = PermissionService.permissionControllerGetAll();
permissions_promise.then((data) => { permissions_promise.then((data) => {
data.forEach((p) => { data.forEach((p) => {
allpermissions.push(p.target + ":" + p.action); allpermissions=allpermissions.concat([p.target + ":" + p.action])
}); });
allpermissions=allpermissions;
}); });
$: changes_performed = !lodashIsEqual(original_data, editable_userdata); $: changes_performed = !lodashIsEqual(original_data, editable_userdata);
function updateGroups() { $: groups_changed = JSON.stringify(usergroups_array)===JSON.stringify(usergroups_array_original);
usergroups_array.forEach((id) => { $: save_enabled = changes_performed||!groups_changed;
const group = allgroups.find((e) => e.id === id);
editable_userdata.groups.push(group);
});
editable_userdata.groups = editable_userdata.groups;
}
function submit() { function submit() {
if ( if (
!lodashIsEqual(original_data.permissions, editable_userdata.permissions) !lodashIsEqual(original_data.permissions, editable_userdata.permissions)
) { ) {
// TODO: add+delete permissions // TODO: add+delete permissions
} }
if (data_loaded === true && changes_performed === true) { if (data_loaded === true && save_enabled) {
console.log("ok, submitting..."); let tmp=[];
console.log(editable_userdata); usergroups_array.forEach(g => {
const group=allgroups.find(obj=>obj.id===g);
tmp.push(group);
});
editable_userdata.groups=tmp;
Toastify({ Toastify({
text: $_("updating-user"), text: $_("updating-user"),
duration: 2500, duration: 2500,
}).showToast(); }).showToast();
UserService.userControllerPut(original_data.id, editable_userdata) UserService.userControllerPut(original_data.id, editable_userdata)
.then((resp) => { .then((resp) => {
console.log(resp);
Object.assign(original_data, editable_userdata); Object.assign(original_data, editable_userdata);
original_data = editable_userdata; original_data = editable_userdata;
Object.assign(original_data, editable_userdata); Object.assign(original_data, editable_userdata);
@ -79,20 +76,16 @@
}).showToast(); }).showToast();
}) })
.catch((err) => { .catch((err) => {
console.log(err);
}); });
} else { } else {
console.log("no changes performed");
} }
} }
function deleteUser() { function deleteUser() {
UserService.userControllerRemove(original_data.id, true) UserService.userControllerRemove(original_data.id, true)
.then((resp) => { .then((resp) => {
console.log(resp);
location.replace("./"); location.replace("./");
}) })
.catch((err) => { .catch((err) => {
console.log(err);
}); });
} }
</script> </script>
@ -170,27 +163,19 @@
{/if} {/if}
{#if !delete_triggered} {#if !delete_triggered}
<button <button
disabled={!changes_performed} disabled={!save_enabled}
class:opacity-50={!changes_performed} class:opacity-50={!save_enabled}
type="button" type="button"
on:click={submit} on:click={submit}
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">{$_('save-changes')}</button> class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">{$_('save-changes')}</button>
{/if} {/if}
</span> </span>
</div> </div>
<!-- -->
<div class="mt-2 flex items-center"> <div class="mt-2 flex items-center">
<img <img
alt={$_('profile-picture')} alt={$_('profile-picture')}
class="inline-block h-20 w-20 rounded-full overflow-hidden bg-gray-100" class="inline-block h-20 w-20 rounded-full overflow-hidden bg-gray-100"
src={editable_userdata.profilePic} /> src={editable_userdata.profilePic} />
<!-- <span
class="inline-block h-12 w-12 rounded-full overflow-hidden bg-gray-100"><svg
class="h-full w-full text-gray-300"
fill="currentColor"
viewBox="0 0 24 24"><path
d="M24 20.993V24H0v-2.996A14.977 14.977 0 0112.004 15c4.904 0 9.26 2.354 11.996 5.993zM16.002 8.999a4 4 0 11-8 0 4 4 0 018 0z" /></svg></span> -->
<button <button
type="button" type="button"
class="ml-5 bg-white py-2 px-3 border border-gray-300 rounded-md shadow-sm text-sm leading-4 font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">Change</button> class="ml-5 bg-white py-2 px-3 border border-gray-300 rounded-md shadow-sm text-sm leading-4 font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">Change</button>
@ -276,7 +261,6 @@
<span class="font-medium">{$_('groups')}</span> <span class="font-medium">{$_('groups')}</span>
<!-- svelte-ignore a11y-no-onchange --> <!-- svelte-ignore a11y-no-onchange -->
<select <select
on:change={updateGroups}
bind:value={usergroups_array} bind:value={usergroups_array}
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 dark:bg-gray-900 dark:text-gray-100 rounded-md p-2" class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 dark:bg-gray-900 dark:text-gray-100 rounded-md p-2"
multiple> multiple>