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