/
Users.svelte
96 lines (84 loc) · 2.48 KB
/
Users.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<script>
import {onMount} from "svelte";
import {getGroups, getRoles, getUsers} from "../../../utils/dataFetchingAdmin.js";
import UserTile from "./UserTile.svelte";
import {globalGroups, globalGroupsNames, globalRoles, globalRolesNames,} from "../../../stores/admin.js";
import UserTileAddNew from "./UserTileAddNew.svelte";
import OrderSearchBar from "$lib/search/OrderSearchBar.svelte";
let msg = '';
let users = [];
let resUsers = [];
let searchOptions = [
{
label: 'E-Mail',
callback: (item, search) => item.email.toLowerCase().includes(search.toLowerCase()),
},
{
label: 'ID',
callback: (item, search) => item.id.toLowerCase().includes(search.toLowerCase()),
},
];
let orderOptions = [
{
label: 'E-Mail',
callback: (a, b) => a.email.localeCompare(b.email),
},
{
label: 'ID',
callback: (a, b) => a.id.localeCompare(b.id),
},
];
onMount(async () => {
fetchUsers();
fetchRoles();
fetchGroups();
})
async function fetchUsers() {
let res = await getUsers();
if (!res.ok) {
msg = 'Error fetching users: ' + res.body.message;
} else {
let u = await res.json();
users = [...u];
resUsers = [...u];
}
}
async function fetchRoles() {
let res = await getRoles();
if (!res.ok) {
msg = 'Error fetching roles: ' + res.body.message;
} else {
let roles = await res.json();
globalRoles.set(roles);
globalRolesNames.set(roles.map(r => r.name));
}
}
async function fetchGroups() {
let res = await getGroups();
if (!res.ok) {
msg = 'Error fetching groups: ' + res.body.message;
} else {
let groups = await res.json();
globalGroups.set(groups);
globalGroupsNames.set(groups.map(g => g.name));
}
}
function onSave() {
fetchUsers();
fetchRoles();
fetchGroups();
}
</script>
{msg}
<div class="content">
<OrderSearchBar
items={users}
bind:resItems={resUsers}
bind:searchOptions
bind:orderOptions
/>
<UserTileAddNew onSave={onSave}/>
{#each resUsers as user, i (user.id)}
<UserTile idx={i} bind:user onSave={onSave}/>
{/each}
</div>