adds photo upload for summit logs

This commit is contained in:
Christian Beutel
2024-11-30 18:34:48 +01:00
parent 8f8d28ef7a
commit 1ad7fb3820
20 changed files with 314 additions and 366 deletions

View File

@@ -37,7 +37,7 @@ export async function summit_logs_index(author: string, filter?: SummitLogFilter
}
summitLogs.set(fetchedSummitLogs);
return fetchedSummitLogs;
}
@@ -53,8 +53,9 @@ export async function summit_logs_create(summitLog: SummitLog, f: (url: RequestI
throw new ClientResponseError(await r.json())
}
let model: SummitLog = await r.json();
if (summitLog._gpx && summitLog._gpx instanceof File) {
let model: SummitLog = await r.json();
const formData = new FormData()
@@ -66,6 +67,20 @@ export async function summit_logs_create(summitLog: SummitLog, f: (url: RequestI
})
}
if (summitLog._photos && summitLog._photos.length) {
const formData = new FormData()
for (const photo of summitLog._photos) {
formData.append("photos", photo)
}
r = await fetch(`/api/v1/summit-log/${model.id!}/file`, {
method: 'POST',
body: formData,
})
}
if (r.ok) {
return await r.json();
} else {
@@ -73,29 +88,39 @@ export async function summit_logs_create(summitLog: SummitLog, f: (url: RequestI
}
}
export async function summit_logs_update(summitLog: SummitLog) {
summitLog.author = pb.authStore.model!.id
export async function summit_logs_update(oldSummitLog: SummitLog, newSummitLog: SummitLog) {
newSummitLog.author = pb.authStore.model!.id
let r = await fetch('/api/v1/summit-log/' + summitLog.id, {
let r = await fetch('/api/v1/summit-log/' + newSummitLog.id, {
method: 'POST',
body: JSON.stringify(summitLog),
body: JSON.stringify(newSummitLog),
})
if (!r.ok) {
throw new ClientResponseError(await r.json())
}
const formData = new FormData()
if (summitLog._gpx) {
const formData = new FormData()
formData.append("gpx", summitLog._gpx);
r = await fetch(`/api/v1/summit-log/${summitLog.id!}/file`, {
method: 'POST',
body: formData,
})
for (const photo of newSummitLog._photos ?? []) {
formData.append("photos", photo)
}
const deletedPhotos = oldSummitLog.photos.filter(oldPhoto => !newSummitLog.photos.find(newPhoto => newPhoto === oldPhoto));
for (const deletedPhoto of deletedPhotos) {
formData.append("photos-", deletedPhoto.replace(/^.*[\\/]/, ''));
}
if (newSummitLog._gpx) {
formData.append("gpx", newSummitLog._gpx);
}
r = await fetch(`/api/v1/summit-log/${newSummitLog.id!}/file`, {
method: 'POST',
body: formData,
})
if (r.ok) {
return await r.json();
} else {

View File

@@ -261,7 +261,9 @@ export async function trails_update(oldTrail: Trail, newTrail: Trail, photos?: F
}
for (const updatedSummitLog of summitLogUpdates.updated) {
const model = await summit_logs_update(updatedSummitLog);
const oldSummitLog = oldTrail.expand.summit_logs.find(w => w.id == updatedSummitLog.id);
const model = await summit_logs_update(oldSummitLog!, updatedSummitLog);
}
for (const deletedSummitLog of summitLogUpdates.deleted) {