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); }