fixes profile avatar upload
This commit is contained in:
@@ -48,18 +48,34 @@ export async function logout() {
|
|||||||
pb.authStore.clear();
|
pb.authStore.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function users_update(id: string, user: User | { [K in keyof User]?: User[K] } | FormData) {
|
export async function users_update(user: User | { [K in keyof User]?: User[K] }, avatar?: File) {
|
||||||
const r = await fetch('/api/v1/user/' + id, {
|
let r = await fetch('/api/v1/user/' + user.id, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify(user)
|
body: JSON.stringify(user)
|
||||||
})
|
})
|
||||||
|
|
||||||
if (r.ok) {
|
if (!r.ok) {
|
||||||
const model = await r.json();
|
|
||||||
currentUser.set(model);
|
|
||||||
} else {
|
|
||||||
throw new ClientResponseError(await r.json())
|
throw new ClientResponseError(await r.json())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
|
||||||
|
if (avatar) {
|
||||||
|
formData.append("avatar", avatar);
|
||||||
|
}
|
||||||
|
|
||||||
|
r = await fetch(`/api/v1/user/${user.id!}/file`, {
|
||||||
|
method: 'POST',
|
||||||
|
body: formData,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!r.ok) {
|
||||||
|
throw new ClientResponseError(await r.json())
|
||||||
|
}
|
||||||
|
|
||||||
|
const model: User = await r.json();
|
||||||
|
currentUser.set(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function users_delete(user: User) {
|
export async function users_delete(user: User) {
|
||||||
|
|||||||
13
web/src/routes/api/v1/user/[id]/file/+server.ts
Normal file
13
web/src/routes/api/v1/user/[id]/file/+server.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { pb } from "$lib/pocketbase";
|
||||||
|
import type { User } from "$lib/stores/user_store";
|
||||||
|
import { error, json, type RequestEvent } from "@sveltejs/kit";
|
||||||
|
|
||||||
|
export async function POST(event: RequestEvent) {
|
||||||
|
const data = await event.request.formData()
|
||||||
|
try {
|
||||||
|
const r = await pb.collection("users").update<User>(event.params.id as string, data,);
|
||||||
|
return json(r);
|
||||||
|
} catch (e: any) {
|
||||||
|
throw error(e.status, e)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -60,7 +60,8 @@
|
|||||||
|
|
||||||
async function handleSearchClick(item: SearchItem) {
|
async function handleSearchClick(item: SearchItem) {
|
||||||
citySearchQuery = item.text;
|
citySearchQuery = item.text;
|
||||||
await users_update($currentUser!.id, {
|
await users_update({
|
||||||
|
id: $currentUser!.id,
|
||||||
location: {
|
location: {
|
||||||
name: item.value.name,
|
name: item.value.name,
|
||||||
lat: item.value.lat,
|
lat: item.value.lat,
|
||||||
@@ -74,25 +75,24 @@
|
|||||||
document.getElementById("avatarInput") as HTMLInputElement
|
document.getElementById("avatarInput") as HTMLInputElement
|
||||||
).files;
|
).files;
|
||||||
|
|
||||||
if (!files) {
|
if (!files || files.length == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const formData = new FormData();
|
await users_update($currentUser!, files[0]);
|
||||||
formData.append("avatar", files[0]);
|
|
||||||
|
|
||||||
await users_update($currentUser!.id, formData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleUnitSelection(e: RadioItem) {
|
async function handleUnitSelection(e: RadioItem) {
|
||||||
await users_update($currentUser!.id, {
|
await users_update({
|
||||||
|
id: $currentUser!.id,
|
||||||
unit: e.value as "imperial" | "metric",
|
unit: e.value as "imperial" | "metric",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleLanguageSelection(value: "en" | "de") {
|
async function handleLanguageSelection(value: "en" | "de") {
|
||||||
locale.set(value);
|
locale.set(value);
|
||||||
await users_update($currentUser!.id, {
|
await users_update({
|
||||||
|
id: $currentUser!.id,
|
||||||
language: value,
|
language: value,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user