make some overall QoL improvements

This commit is contained in:
Frederik Spirgi
2026-09-30 10:06:29 +02:00
parent 7a1b152f20
commit d15f7867d5
9 changed files with 239 additions and 45 deletions
+22 -2
View File
@@ -27,6 +27,7 @@ export function createAttachmentComposer({onChange, onError}) {
const preview = document.getElementById("uploadPreviews");
const composer = document.querySelector(".input-container");
let items = [];
const drafts = new Map();
let busy = false;
let limits = {maxSizeMb: 10, maxFiles: 5};
fetch("/uploads/config").then(r => r.ok ? r.json() : limits).then(value => { limits = value; }).catch(() => {});
@@ -73,13 +74,13 @@ export function createAttachmentComposer({onChange, onError}) {
const result = await response.json();
if (!response.ok) throw new Error(result.error || "Upload failed");
item.metadata = result;
if (!items.includes(item)) void fetch(`/attachments/${result.id}`, {method: "DELETE"});
if (![items, ...drafts.values()].some(draft => draft.includes(item))) void fetch(`/attachments/${result.id}`, {method: "DELETE"});
} catch (error) {
if (error.name !== "AbortError") item.error = error.message || "Upload failed";
}
item.uploading = false;
item.controller = null;
render();
if (items.includes(item)) render();
};
const add = files => {
if (busy) return;
@@ -117,6 +118,25 @@ export function createAttachmentComposer({onChange, onError}) {
}
items = [];
render();
},
saveDraft(chatId) {
if (chatId != null) drafts.set(chatId, items);
items = [];
render();
},
restoreDraft(chatId) {
items = drafts.get(chatId) || [];
drafts.delete(chatId);
render();
},
discardDraft(chatId) {
const saved = drafts.get(chatId) || [];
drafts.delete(chatId);
for (const item of saved) {
item.controller?.abort();
URL.revokeObjectURL(item.preview);
if (item.metadata) void fetch(`/attachments/${item.metadata.id}`, {method: "DELETE"});
}
}
};
}