diff --git a/src/automats/deliveryEditorAutomat.js b/src/automats/deliveryEditorAutomat.js index 1f92a8a..3f91fb9 100644 --- a/src/automats/deliveryEditorAutomat.js +++ b/src/automats/deliveryEditorAutomat.js @@ -746,6 +746,42 @@ export function createDeliveryEditorAutomat(options = {}) { }) ); + // Preserve already attached files in the editor so loading a draft manifest does not wipe them out. + const currentAttachments = + automat.state.attachments?.length > 0 + ? automat.state.attachments + : (Array.isArray(automat.state.files) && automat.state.files.length > 0 ? automat.state.files : []); + + const rawManifestAttachments = + data.attachments ?? + data.files ?? + basedata.attachments ?? + basedata.files ?? + null; + const manifestAttachments = Array.isArray(rawManifestAttachments) ? rawManifestAttachments : []; + + let attachments = currentAttachments; + if (currentAttachments.length === 0) { + attachments = manifestAttachments; + } else if (manifestAttachments.length > 0) { + const existingKeys = new Set( + currentAttachments.flatMap((a) => [ + a.id != null ? String(a.id) : null, + a.name ? String(a.name).trim().toLowerCase() : null, + ]).filter(Boolean) + ); + const newAttachments = manifestAttachments.filter((a) => { + const idKey = a.id != null ? String(a.id) : null; + const nameKey = a.name ? String(a.name).trim().toLowerCase() : null; + if (idKey && existingKeys.has(idKey)) return false; + if (nameKey && existingKeys.has(nameKey)) return false; + return true; + }); + if (newAttachments.length > 0) { + attachments = [...currentAttachments, ...newAttachments]; + } + } + automat.actions.setDelivery({ id: null, deliveryId: null, @@ -758,6 +794,8 @@ export function createDeliveryEditorAutomat(options = {}) { type, lines, lineitems: lines, + attachments, + files: attachments, }); }, diff --git a/src/components/chat/ChatDrawer.jsx b/src/components/chat/ChatDrawer.jsx index fc59abd..604b845 100644 --- a/src/components/chat/ChatDrawer.jsx +++ b/src/components/chat/ChatDrawer.jsx @@ -156,13 +156,13 @@ export default class ChatDrawer extends PureComponent { stagedReferences: [], stagedExtractions: s.pendingExtraction ? [ - { - id: `ext-${Date.now()}`, - text: s.pendingExtraction.text, - label: s.pendingExtraction.label || 'parsed invoice', - instruction: s.pendingExtraction.instruction || EXTRACTION_MODEL_INSTRUCTION, - }, - ] + { + id: `ext-${Date.now()}`, + text: s.pendingExtraction.text, + label: s.pendingExtraction.label || 'parsed invoice', + instruction: s.pendingExtraction.instruction || EXTRACTION_MODEL_INSTRUCTION, + }, + ] : [], previewExtraction: null, isProcessingFiles: false, @@ -839,7 +839,7 @@ export default class ChatDrawer extends PureComponent { try { inputEl.selectionStart = newCursorPos; inputEl.selectionEnd = newCursorPos; - } catch {} + } catch { } } } ); @@ -1949,11 +1949,6 @@ export default class ChatDrawer extends PureComponent { type="submit" color="primary" disabled={!canSend} - title={ - isWorking - ? 'Modell antwortet gerade…' - : 'Senden (Enter)' - } sx={{ bgcolor: isWorking ? 'action.hover' : 'primary.main', color: isWorking ? 'warning.main' : 'primary.contrastText',