@axium/sysadmin 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +157 -0
- package/README.md +3 -0
- package/db.json +77 -0
- package/dist/_probe.d.ts +1 -0
- package/dist/_probe.js +4 -0
- package/dist/client/.info.js +38 -0
- package/dist/client/cli.d.ts +1 -0
- package/dist/client/cli.js +109 -0
- package/dist/client/hooks.d.ts +1 -0
- package/dist/client/hooks.js +1 -0
- package/dist/client/info.d.ts +2 -0
- package/dist/client/info.js +171 -0
- package/dist/client/socket.d.ts +1 -0
- package/dist/client/socket.js +9 -0
- package/dist/common.d.ts +371 -0
- package/dist/common.js +65 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/info.d.ts +95 -0
- package/dist/info.js +58 -0
- package/dist/server/api.d.ts +1 -0
- package/dist/server/api.js +136 -0
- package/dist/server/db.d.ts +7 -0
- package/dist/server/db.js +1 -0
- package/dist/server/hooks.d.ts +3 -0
- package/dist/server/hooks.js +3 -0
- package/dist/server/socket.d.ts +1 -0
- package/dist/server/socket.js +9 -0
- package/dist/web_hook.d.ts +8 -0
- package/dist/web_hook.js +4 -0
- package/lib/SystemCard.svelte +133 -0
- package/lib/SystemInitDialog.svelte +59 -0
- package/lib/UserCard.svelte +108 -0
- package/lib/UserInitDialog.svelte +49 -0
- package/lib/index.ts +4 -0
- package/lib/tsconfig.json +12 -0
- package/locales/en.json +79 -0
- package/package.json +71 -0
- package/routes/sysadmin/+layout.ts +22 -0
- package/routes/sysadmin/+page.svelte +115 -0
- package/routes/sysadmin/+page.ts +14 -0
- package/routes/sysadmin/systems/+page.svelte +92 -0
- package/routes/sysadmin/systems/+page.ts +11 -0
- package/routes/sysadmin/systems/[id]/+page.svelte +290 -0
- package/routes/sysadmin/systems/[id]/+page.ts +11 -0
- package/routes/sysadmin/users/+page.svelte +85 -0
- package/routes/sysadmin/users/+page.ts +11 -0
- package/routes/sysadmin/users/[id]/+page.svelte +82 -0
- package/routes/sysadmin/users/[id]/+page.ts +11 -0
- package/routes/tsconfig.json +12 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { text } from '@axium/client';
|
|
3
|
+
import { Icon } from '@axium/client/components';
|
|
4
|
+
import { UserCard, UserInitDialog } from '@axium/sysadmin/components';
|
|
5
|
+
|
|
6
|
+
const { data } = $props();
|
|
7
|
+
|
|
8
|
+
let users = $state(data.users);
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<svelte:head>
|
|
12
|
+
<title>{text('sysadmin.system_users')}</title>
|
|
13
|
+
</svelte:head>
|
|
14
|
+
|
|
15
|
+
<div class="users">
|
|
16
|
+
<p>
|
|
17
|
+
<a class="subtle icon-text back" href="/sysadmin">
|
|
18
|
+
<Icon i="arrow-left" />
|
|
19
|
+
<span>{text('sysadmin.back_to_main')}</span>
|
|
20
|
+
</a>
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
<div class="users-header">
|
|
24
|
+
<h1>{text('sysadmin.system_users')}</h1>
|
|
25
|
+
<button class="icon-text" command="show-modal" commandfor="system-user-init">
|
|
26
|
+
<Icon i="plus" />
|
|
27
|
+
<span>{text('sysadmin.new_system_user')}</span>
|
|
28
|
+
</button>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
{#if users.length}
|
|
32
|
+
<div class="cards">
|
|
33
|
+
{#each users as user, i (user.id)}
|
|
34
|
+
<UserCard bind:user={users[i]} deleted={() => users.splice(i, 1)} />
|
|
35
|
+
{/each}
|
|
36
|
+
</div>
|
|
37
|
+
{:else}
|
|
38
|
+
<p class="subtle">{text('sysadmin.no_system_users')}</p>
|
|
39
|
+
{/if}
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<UserInitDialog userId={data.session.userId} created={user => users.push(user)} />
|
|
43
|
+
|
|
44
|
+
<style>
|
|
45
|
+
.users {
|
|
46
|
+
padding: 2em;
|
|
47
|
+
display: flex;
|
|
48
|
+
flex-direction: column;
|
|
49
|
+
gap: 1em;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.back {
|
|
53
|
+
width: fit-content;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.users-header {
|
|
57
|
+
display: flex;
|
|
58
|
+
gap: 1em;
|
|
59
|
+
|
|
60
|
+
h1 {
|
|
61
|
+
margin: 0;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
button {
|
|
65
|
+
margin-left: auto;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.cards {
|
|
70
|
+
display: grid;
|
|
71
|
+
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
72
|
+
gap: 1em;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@media (width < 700px) {
|
|
76
|
+
.users {
|
|
77
|
+
padding: 1em;
|
|
78
|
+
padding-bottom: 5em;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.cards {
|
|
82
|
+
grid-template-columns: 1fr;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { fetchAPI } from '@axium/client/requests';
|
|
2
|
+
|
|
3
|
+
export const ssr = false;
|
|
4
|
+
|
|
5
|
+
export async function load({ parent }) {
|
|
6
|
+
const { session } = await parent();
|
|
7
|
+
|
|
8
|
+
const users = await fetchAPI('GET', 'users/:id/sysadmin/users', {}, session.userId);
|
|
9
|
+
|
|
10
|
+
return { session, users };
|
|
11
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fetchAPI, text } from '@axium/client';
|
|
3
|
+
import { Icon } from '@axium/client/components';
|
|
4
|
+
import { UserInitDialog } from '@axium/sysadmin/components';
|
|
5
|
+
import { toastStatus } from '@axium/client/toast';
|
|
6
|
+
import { goto } from '$app/navigation';
|
|
7
|
+
|
|
8
|
+
const { data } = $props();
|
|
9
|
+
|
|
10
|
+
let user = $state(data.user);
|
|
11
|
+
let editDialog = $state<HTMLDialogElement>();
|
|
12
|
+
|
|
13
|
+
function remove() {
|
|
14
|
+
toastStatus(
|
|
15
|
+
fetchAPI('DELETE', 'sysadmin/users/:id', {}, user.id).then(() => goto('/sysadmin/users')),
|
|
16
|
+
text('sysadmin.UserCard.toast_deleted')
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<svelte:head>
|
|
22
|
+
<title>{text('sysadmin.user.page_title', user)}</title>
|
|
23
|
+
</svelte:head>
|
|
24
|
+
|
|
25
|
+
<div class="user-page">
|
|
26
|
+
<a class="subtle icon-text back" href="/sysadmin/users">
|
|
27
|
+
<Icon i="arrow-left" />
|
|
28
|
+
<span>{text('sysadmin.back_to_users')}</span>
|
|
29
|
+
</a>
|
|
30
|
+
|
|
31
|
+
<div class="user-header">
|
|
32
|
+
<Icon i="user" --size="3em" />
|
|
33
|
+
<div>
|
|
34
|
+
<h1>{user.name}</h1>
|
|
35
|
+
<span class="subtle">{user.username}</span>
|
|
36
|
+
</div>
|
|
37
|
+
<button class="icon-text" onclick={() => editDialog!.showModal()}>
|
|
38
|
+
<Icon i="pen" />
|
|
39
|
+
<span>{text('sysadmin.UserCard.edit')}</span>
|
|
40
|
+
</button>
|
|
41
|
+
<button class="icon-text danger" onclick={remove}>
|
|
42
|
+
<Icon i="trash" />
|
|
43
|
+
<span>{text('generic.delete')}</span>
|
|
44
|
+
</button>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<UserInitDialog bind:dialog={editDialog} {user} edited={updated => (user = updated)} />
|
|
49
|
+
|
|
50
|
+
<style>
|
|
51
|
+
.user-page {
|
|
52
|
+
padding: 2em;
|
|
53
|
+
display: flex;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
gap: 1.5em;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.back {
|
|
59
|
+
width: fit-content;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.user-header {
|
|
63
|
+
display: flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
gap: 1em;
|
|
66
|
+
|
|
67
|
+
:global(.Icon) {
|
|
68
|
+
flex-shrink: 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
h1 {
|
|
72
|
+
margin: 0;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@media (width < 700px) {
|
|
77
|
+
.user-page {
|
|
78
|
+
padding: 1em;
|
|
79
|
+
padding-bottom: 5em;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { fetchAPI } from '@axium/client/requests';
|
|
2
|
+
|
|
3
|
+
export const ssr = false;
|
|
4
|
+
|
|
5
|
+
export async function load({ parent, params }) {
|
|
6
|
+
const { session } = await parent();
|
|
7
|
+
|
|
8
|
+
const user = await fetchAPI('GET', 'sysadmin/users/:id', {}, params.id);
|
|
9
|
+
|
|
10
|
+
return { session, user };
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": ["../tsconfig.json", "../.svelte-kit/tsconfig.json"],
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"moduleResolution": "bundler",
|
|
5
|
+
"module": "esnext",
|
|
6
|
+
"noEmit": true,
|
|
7
|
+
"target": "esnext",
|
|
8
|
+
"rootDir": ".."
|
|
9
|
+
},
|
|
10
|
+
"include": ["**/*", "../lib/*"],
|
|
11
|
+
"references": [{ "path": ".." }]
|
|
12
|
+
}
|