Chat-Baustein: Option requestHeaders fuer Hochladen und Entfernen (Ticketsystem mit JWT)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-01 23:30:29 +00:00
1 parent 48dd19b75a
commit a6ac4510cd
2 files changed
+111 -2

No files matched your search

+27 -2
View File
@@ -535,7 +535,9 @@
/**
* Eingabezeile mit Anhaengen und Sprachaufnahme.
* options: root, dropZone, uploadUrl (POST roh, DELETE uploadUrl/id), send({ text, attachmentIds }) -> message,
* onSent(message), placeholder, placeholderShort (schmale Bildschirme), disabled, disabledText
* onSent(message), placeholder, placeholderShort (schmale Bildschirme), disabled, disabledText,
* requestHeaders() -> Objekt oder Promise (zusaetzliche Header fuer Hochladen und Entfernen, z. B. das
* Bearer-JWT des Ticketsystems; ohne die Option wie bisher nur das Cookie)
*/
function create(options) {
const opts = { placeholder: 'Nachricht schreiben…', disabled: false, disabledText: '', onSent() {}, ...options }
@@ -708,9 +710,15 @@
return item
}
function extraHeaders() {
return Promise.resolve(opts.requestHeaders ? opts.requestHeaders() : {}).then((headers) => headers || {})
}
function deleteOnServer(item) {
if (!item.meta || !item.meta.id) return
fetch(`${opts.uploadUrl}/${encodeURIComponent(item.meta.id)}`, { method: 'DELETE', credentials: 'same-origin' }).catch(() => {})
extraHeaders()
.then((headers) => fetch(`${opts.uploadUrl}/${encodeURIComponent(item.meta.id)}`, { method: 'DELETE', credentials: 'same-origin', headers }))
.catch(() => {})
}
function dropItem(item) {
@@ -743,9 +751,26 @@
item.status = 'uploading'
item.progress = 0
item.error = ''
renderTray()
extraHeaders().then(
(headers) => {
// Waehrend des Wartens entfernt oder Eingabezeile weg: nicht mehr hochladen
if (destroyed || !items.includes(item)) return
sendUpload(item, headers)
},
(err) => {
item.status = 'error'
item.error = (err && err.message) || 'Anmeldung abgelaufen. Bitte Seite neu laden.'
afterUpload(item)
}
)
}
function sendUpload(item, headers) {
const xhr = new XMLHttpRequest()
item.xhr = xhr
xhr.open('POST', opts.uploadUrl)
for (const [name, value] of Object.entries(headers)) xhr.setRequestHeader(name, value)
xhr.setRequestHeader('Content-Type', 'application/octet-stream')
xhr.setRequestHeader('X-File-Name', encodeURIComponent(item.name))
if (item.hint) xhr.setRequestHeader('X-Attachment-Kind', item.hint)