bytedream 45f984e4da
All checks were successful
deploy / build-and-deploy (push) Successful in 21s
add delete to admin panel
2025-05-21 20:53:53 +02:00

53 lines
1.4 KiB
TypeScript

import { type ActionReturnType, actions } from 'astro:actions';
import { writable } from 'svelte/store';
import { actionErrorPopup } from '@util/action.ts';
import { addToWritableArray, deleteFromWritableArray, updateWritableArray } from '@util/state.ts';
// types
export type Admins = Exclude<ActionReturnType<typeof actions.admin.admins>['data'], undefined>['admins'];
export type Admin = Admins[0];
// state
export const admins = writable<Admin[]>([]);
// actions
export async function fetchAdmins() {
const { data, error } = await actions.admin.admins();
if (error) {
actionErrorPopup(error);
return;
}
admins.set(data.admins);
}
export async function addAdmin(admin: Admin & { password: string }) {
const { data, error } = await actions.admin.addAdmin(admin);
if (error) {
actionErrorPopup(error);
return;
}
addToWritableArray(admins, Object.assign(admin, { id: data.id }));
}
export async function editAdmin(admin: Admin & { password: string }) {
const { error } = await actions.admin.editAdmin(admin);
if (error) {
actionErrorPopup(error);
return;
}
updateWritableArray(admins, admin, (t) => t.id == admin.id);
}
export async function deleteAdmin(admin: Admin) {
const { error } = await actions.admin.deleteAdmin(admin);
if (error) {
actionErrorPopup(error);
return;
}
deleteFromWritableArray(admins, (t) => t.id == admin.id);
}