= $props();
@@ -39,7 +40,7 @@
>{key.label}
{/each}
- {#if onEdit}
+ {#if onEdit || onDelete}
{/if}
@@ -59,11 +60,18 @@
{/if}
{/each}
- {#if onEdit}
+ {#if onEdit || onDelete}
-
+ {#if onEdit}
+
+ {/if}
+ {#if onDelete}
+
+ {/if}
|
{/if}
diff --git a/src/db/database.ts b/src/db/database.ts
index 78eda4f..7f01769 100644
--- a/src/db/database.ts
+++ b/src/db/database.ts
@@ -9,7 +9,9 @@ import {
type AddAdminReq,
addAdmin,
type EditAdminReq,
- editAdmin
+ editAdmin,
+ type DeleteAdminReq,
+ deleteAdmin
} from './schema/admin';
import {
addTeam,
@@ -114,7 +116,9 @@ import {
type GetBlockedUserByUuidReq,
getBlockedUserByUuid,
type EditBlockedUserReq,
- editBlockedUser
+ editBlockedUser,
+ type DeleteBlockedUserReq,
+ deleteBlockedUser
} from '@db/schema/blockedUser.ts';
export class Database {
@@ -173,6 +177,7 @@ export class Database {
/* admins */
addAdmin = (values: AddAdminReq) => addAdmin(this.db, values);
editAdmin = (values: EditAdminReq) => editAdmin(this.db, values);
+ deleteAdmin = (values: DeleteAdminReq) => deleteAdmin(this.db, values);
getAdmins = (values: GetAdminReq) => getAdmins(this.db, values);
existsAdmin = (values: ExistsAdminReq) => existsAdmin(this.db, values);
@@ -189,6 +194,7 @@ export class Database {
/* user blocks */
addBlockedUser = (values: AddBlockedUserReq) => addBlockedUser(this.db, values);
editBlockedUser = (values: EditBlockedUserReq) => editBlockedUser(this.db, values);
+ deleteBlockedUser = (values: DeleteBlockedUserReq) => deleteBlockedUser(this.db, values);
getBlockedUserByUuid = (values: GetBlockedUserByUuidReq) => getBlockedUserByUuid(this.db, values);
getBlockedUsers = (values: GetBlockedUsersReq) => getBlockedUsers(this.db, values);
diff --git a/src/db/schema/admin.ts b/src/db/schema/admin.ts
index ad5a946..f6ee9a9 100644
--- a/src/db/schema/admin.ts
+++ b/src/db/schema/admin.ts
@@ -22,6 +22,10 @@ export type EditAdminReq = {
permissions: number;
};
+export type DeleteAdminReq = {
+ id: number;
+};
+
export type GetAdminReq = {};
export type GetAdminRes = Omit[];
@@ -55,6 +59,10 @@ export async function editAdmin(db: Database, values: EditAdminReq) {
.where(eq(admin.id, values.id));
}
+export async function deleteAdmin(db: Database, values: DeleteAdminReq) {
+ return db.delete(admin).where(eq(admin.id, values.id));
+}
+
export async function getAdmins(db: Database, _values: GetAdminReq): Promise {
return db.select({ id: admin.id, username: admin.username, permissions: admin.permissions }).from(admin);
}
diff --git a/src/db/schema/blockedUser.ts b/src/db/schema/blockedUser.ts
index 19e51b7..5994182 100644
--- a/src/db/schema/blockedUser.ts
+++ b/src/db/schema/blockedUser.ts
@@ -21,6 +21,10 @@ export type EditBlockedUserReq = {
comment?: string | null;
};
+export type DeleteBlockedUserReq = {
+ id: number;
+};
+
export type GetBlockedUserByUuidReq = {
uuid: string;
};
@@ -37,6 +41,10 @@ export async function editBlockedUser(db: Database, values: EditBlockedUserReq)
await db.update(blockedUser).set(values).where(eq(blockedUser.id, values.id));
}
+export async function deleteBlockedUser(db: Database, values: DeleteBlockedUserReq) {
+ return db.delete(blockedUser).where(eq(blockedUser.id, values.id));
+}
+
export async function getBlockedUserByUuid(db: Database, values: GetBlockedUserByUuidReq) {
const bu = await db.query.blockedUser.findFirst({
where: eq(blockedUser.uuid, values.uuid)
diff --git a/src/util/state.ts b/src/util/state.ts
new file mode 100644
index 0000000..a709583
--- /dev/null
+++ b/src/util/state.ts
@@ -0,0 +1,24 @@
+import type { Writable } from 'svelte/store';
+
+export function addToWritableArray(writable: Writable, t: T) {
+ writable.update((old) => {
+ old.push(t);
+ return old;
+ });
+}
+
+export function updateWritableArray(writable: Writable, t: T, cmp: (t: T) => boolean) {
+ writable.update((old) => {
+ const index = old.findIndex(cmp);
+ old[index] = t;
+ return old;
+ });
+}
+
+export function deleteFromWritableArray(writable: Writable, cmp: (t: T) => boolean) {
+ writable.update((old) => {
+ const index = old.findIndex(cmp);
+ old.splice(index, 1);
+ return old;
+ });
+}