Add authentication #17
1 changed files with 79 additions and 51 deletions
|
@ -2180,15 +2180,14 @@ declare global {
|
||||||
has_food: formData.get("editEventHasFood") === "on",
|
has_food: formData.get("editEventHasFood") === "on",
|
||||||
};
|
};
|
||||||
|
|
||||||
let updatedEvent;
|
const pb = auth.getPocketBase();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (eventId) {
|
if (eventId) {
|
||||||
// Update existing event
|
// Update existing event
|
||||||
submitButton.innerHTML = `<span class="loading loading-spinner"></span>`;
|
submitButton.innerHTML = `<span class="loading loading-spinner"></span>`;
|
||||||
|
|
||||||
// Get current event data to process file changes
|
// Get current event data
|
||||||
const pb = auth.getPocketBase();
|
|
||||||
const currentEvent = await pb
|
const currentEvent = await pb
|
||||||
.collection("events")
|
.collection("events")
|
||||||
.getOne(eventId);
|
.getOne(eventId);
|
||||||
|
@ -2199,65 +2198,94 @@ declare global {
|
||||||
(filename: string) => !filesToDelete.has(filename)
|
(filename: string) => !filesToDelete.has(filename)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Update event with remaining files
|
// Create a single FormData instance for the entire update
|
||||||
const eventDataWithFiles = {
|
const updateFormData = new FormData();
|
||||||
...eventData,
|
|
||||||
files: remainingFiles,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Update the event data first
|
// Add all event data fields
|
||||||
updatedEvent = await update.updateFields(
|
Object.entries(eventData).forEach(([key, value]) => {
|
||||||
"events",
|
updateFormData.append(key, String(value));
|
||||||
eventId,
|
});
|
||||||
eventDataWithFiles
|
|
||||||
|
// Handle files
|
||||||
|
// First, fetch all remaining files as blobs
|
||||||
|
const filePromises = remainingFiles.map(
|
||||||
|
async (filename: string) => {
|
||||||
|
try {
|
||||||
|
const response = await fetch(
|
||||||
|
fileManager.getFileUrl(
|
||||||
|
"events",
|
||||||
|
eventId,
|
||||||
|
filename
|
||||||
|
)
|
||||||
|
);
|
||||||
|
const blob = await response.blob();
|
||||||
|
return new File([blob], filename, {
|
||||||
|
type: blob.type,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
`Failed to fetch file ${filename}:`,
|
||||||
|
error
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// Process file deletions
|
try {
|
||||||
for (const filename of filesToDelete) {
|
const existingFiles = (
|
||||||
await fileManager.deleteFile(
|
await Promise.all(filePromises)
|
||||||
"events",
|
).filter((file): file is File => file !== null);
|
||||||
eventId,
|
|
||||||
filename
|
// Add all files (both existing and new) to FormData
|
||||||
|
[...existingFiles, ...selectedFiles].forEach(
|
||||||
|
(file: File) => {
|
||||||
|
updateFormData.append("files", file);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Perform single update operation
|
||||||
|
const updatedEvent = await pb
|
||||||
|
.collection("events")
|
||||||
|
.update(eventId, updateFormData);
|
||||||
|
|
||||||
|
// Log the update
|
||||||
await sendLog.send(
|
await sendLog.send(
|
||||||
"delete",
|
"update",
|
||||||
"event_file",
|
"event",
|
||||||
`Deleted file ${filename} from event ${eventData.event_name}`
|
`Updated event: ${eventData.event_name}`
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
// Then handle new file uploads if any
|
// Log file deletions
|
||||||
if (selectedFiles.length > 0) {
|
for (const filename of filesToDelete) {
|
||||||
await fileManager.appendFiles(
|
await sendLog.send(
|
||||||
"events",
|
"delete",
|
||||||
eventId,
|
"event_file",
|
||||||
"files",
|
`Deleted file ${filename} from event ${eventData.event_name}`
|
||||||
selectedFiles
|
);
|
||||||
);
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to process files:", error);
|
||||||
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
await sendLog.send(
|
|
||||||
"update",
|
|
||||||
"event",
|
|
||||||
`Updated event: ${eventData.event_name}`
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
// Create new event
|
// Create new event with files in a single operation
|
||||||
submitButton.innerHTML = `<span class="loading loading-spinner"></span>`;
|
const createFormData = new FormData();
|
||||||
const pb = auth.getPocketBase();
|
|
||||||
|
// Add all event data fields
|
||||||
|
Object.entries(eventData).forEach(([key, value]) => {
|
||||||
|
createFormData.append(key, String(value));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add new files
|
||||||
|
selectedFiles.forEach((file: File) => {
|
||||||
|
createFormData.append("files", file);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Create event with files in a single operation
|
||||||
const newEvent = await pb
|
const newEvent = await pb
|
||||||
.collection("events")
|
.collection("events")
|
||||||
.create(eventData);
|
.create(createFormData);
|
||||||
|
|
||||||
// Handle file uploads if any
|
|
||||||
if (selectedFiles.length > 0) {
|
|
||||||
await fileManager.uploadFiles(
|
|
||||||
"events",
|
|
||||||
newEvent.id,
|
|
||||||
"files",
|
|
||||||
selectedFiles
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
await sendLog.send(
|
await sendLog.send(
|
||||||
"create",
|
"create",
|
||||||
|
|
Loading…
Reference in a new issue