even more frontend stuff

This commit is contained in:
sam 2024-11-25 17:35:24 +01:00
parent 8bba5f6137
commit c0bb76580d
Signed by: sam
GPG key ID: B4EF20DDE721CAA1
33 changed files with 796 additions and 178 deletions

View file

@ -0,0 +1,34 @@
import { apiRequest } from "$api";
import ApiError, { ErrorCode, type RawApiError } from "$api/error";
import type { Member } from "$api/models/member";
import log from "$lib/log.js";
import { isRedirect, redirect } from "@sveltejs/kit";
export const actions = {
default: async ({ request, fetch, cookies }) => {
const body = await request.formData();
const name = body.get("name") as string | null;
if (!name)
return {
error: {
message: "No name supplied.",
status: 403,
code: ErrorCode.BadRequest,
} as RawApiError,
};
try {
const member = await apiRequest<Member>("POST", "/users/@me/members", {
body: { name },
fetch,
cookies,
});
redirect(303, `/settings/members/${member.id}`);
} catch (e) {
if (isRedirect(e)) throw e;
if (e instanceof ApiError) return { error: e.obj };
log.error("Could not create member:", e);
throw e;
}
},
};

View file

@ -0,0 +1,22 @@
<script lang="ts">
import ErrorAlert from "$components/ErrorAlert.svelte";
import { t } from "$lib/i18n";
import type { ActionData } from "./$types";
type Props = { form: ActionData };
let { form }: Props = $props();
</script>
<h3>{$t("settings.create-member-title")}</h3>
{#if form?.error}
<ErrorAlert error={form.error} />
{/if}
<form method="POST">
<div class="my-3">
<label class="form-label" for="name">{$t("settings.create-member-name-label")}</label>
<input class="form-control" type="text" id="name" name="name" required />
</div>
<button class="btn btn-primary" type="submit">{$t("profile.create-member-button")}</button>
</form>