shared state reactivity - AddUserModal-Users-UsersOverview

ref #12
This commit is contained in:
Philipp Dormann 2021-01-13 17:49:01 +01:00
parent e6fbf7aa5b
commit f7acbb1eaa
3 changed files with 23 additions and 25 deletions

View File

@ -2,11 +2,11 @@
import { _ } from "svelte-i18n"; import { _ } from "svelte-i18n";
import { clickOutside } from "./outsideclick"; import { clickOutside } from "./outsideclick";
import { focusTrap } from "svelte-focus-trap"; import { focusTrap } from "svelte-focus-trap";
import { tracks as usersstore } from "../store.js";
import { UserService } from "@odit/lfk-client-js"; import { UserService } from "@odit/lfk-client-js";
import isEmail from "validator/es/lib/isEmail"; import isEmail from "validator/es/lib/isEmail";
import Toastify from "toastify-js"; import Toastify from "toastify-js";
export let modal_open; export let modal_open;
export let current_users;
let firstname_input; let firstname_input;
let lastname_input; let lastname_input;
let middlename_input; let middlename_input;
@ -50,14 +50,19 @@
text: "User is being added...", text: "User is being added...",
duration: -1, duration: -1,
}).showToast(); }).showToast();
UserService.userControllerPost({ let postdata={
firstname: firstname_input_value, firstname: firstname_input_value,
lastname: lastname_input_value, lastname: lastname_input_value,
middlename: middlename_input_value, middlename: middlename_input_value,
email: email_input_value, password: password_input_value
password: password_input_value, };
username: username_input_value, if(email_input_value!==""){
}) postdata.email=email_input_value;
}
if(username_input_value!==""){
postdata.username=username_input_value;
}
UserService.userControllerPost(postdata)
.then((result) => { .then((result) => {
firstname_input_value = ""; firstname_input_value = "";
lastname_input_value = ""; lastname_input_value = "";
@ -71,12 +76,8 @@
duration: 500, duration: 500,
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)", backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
}).showToast(); }).showToast();
let storeval = []; current_users.push(result);
usersstore.subscribe((val) => { current_users=current_users;
storeval = val;
});
storeval.push(result);
usersstore.set(storeval);
}) })
.catch((err) => { .catch((err) => {
// //

View File

@ -5,6 +5,7 @@
export let modal_open = false; export let modal_open = false;
import UsersOverview from "./UsersOverview.svelte"; import UsersOverview from "./UsersOverview.svelte";
console.log(store.state.jwtinfo.userdetails.permissions); console.log(store.state.jwtinfo.userdetails.permissions);
let current_users=[];
</script> </script>
<section class="container p-5"> <section class="container p-5">
@ -22,9 +23,9 @@
{/if} {/if}
</span> </span>
<p class="mb-8 text-lg text-gray-500">{$_('manage-admin-users')}</p> <p class="mb-8 text-lg text-gray-500">{$_('manage-admin-users')}</p>
<UsersOverview /> <UsersOverview bind:current_users />
</section> </section>
{#if store.state.jwtinfo.userdetails.permissions.includes('USER:CREATE')} {#if store.state.jwtinfo.userdetails.permissions.includes('USER:CREATE')}
<AddUserModal bind:modal_open /> <AddUserModal bind:current_users bind:modal_open />
{/if} {/if}

View File

@ -9,13 +9,14 @@
import UsersEmptyState from "./UsersEmptyState.svelte"; import UsersEmptyState from "./UsersEmptyState.svelte";
$: searchvalue = ""; $: searchvalue = "";
$: active_deletes = []; $: active_deletes = [];
export let current_users=[];
$: userscache = []; $: userscache = [];
$: advanced_search = false; $: advanced_search = false;
usersstore.subscribe((val) => { usersstore.subscribe((val) => {
userscache = val; userscache = val;
current_users=val;
}); });
users_promise.then((data) => { users_promise.then((data) => {
console.log(data);
usersstore.set(data); usersstore.set(data);
}); });
</script> </script>
@ -28,8 +29,8 @@
<p class="font-bold">users are being loaded...</p> <p class="font-bold">users are being loaded...</p>
<p class="text-sm">{$_('this-might-take-a-moment')}</p> <p class="text-sm">{$_('this-might-take-a-moment')}</p>
</div> </div>
{:then users} {:then}
{#if userscache.length === 0} {#if current_users.length === 0}
<UsersEmptyState /> <UsersEmptyState />
{:else} {:else}
{#if advanced_search} {#if advanced_search}
@ -78,12 +79,12 @@
</tr> </tr>
</thead> </thead>
<tbody class="divide-y divide-gray-200"> <tbody class="divide-y divide-gray-200">
{#each users as u} {#each current_users as u}
{#if Object.values(u) {#if Object.values(u)
.toString() .toString()
.toLowerCase() .toLowerCase()
.includes(searchvalue)} .includes(searchvalue)}
<tr> <tr data-rowid="user_{u.id}">
<td class="px-6 py-4 whitespace-nowrap"> <td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center"> <div class="flex items-center">
{#if u.profilePic} {#if u.profilePic}
@ -137,12 +138,7 @@
on:click={() => { on:click={() => {
UserService.userControllerRemove(u.id, true) UserService.userControllerRemove(u.id, true)
.then((resp) => { .then((resp) => {
console.log(resp); current_users=current_users.filter(obj=>obj.id!==u.id);
// user deleted
users_promise.then((data) => {
console.log(data);
usersstore.set(data);
});
}) })
.catch((err) => { .catch((err) => {
// error deleting user // error deleting user