feat: implement save mechanisim

Signed-off-by: Sebastian <krupinski01@gmail.com>
This commit is contained in:
2026-08-18 22:30:42 -04:00
parent 67024b5bfd
commit 684d50062c
8 changed files with 359 additions and 15 deletions
+62 -7
View File
@@ -8,6 +8,7 @@ import type {
CompositionAttachmentInterface,
CompositionAttachmentRemoveRequest,
CompositionPatchRequest,
CompositionSaveRequest,
CompositionStageRequest,
CompositionStageResponse,
} from '@/types/composition'
@@ -123,10 +124,6 @@ export const useMailCompositionStore = defineStore('mailCompositionStore', () =>
stageDraft()
}
function closeDraft() {
return discardDraft()
}
async function stageDraft() {
if (!activeDraft.value) {
return null
@@ -189,16 +186,73 @@ export const useMailCompositionStore = defineStore('mailCompositionStore', () =>
async function discardDraft() {
if (!activeDraft.value) {
return
return true
}
if (autoSaveTimer) {
clearTimeout(autoSaveTimer)
autoSaveTimer = null
}
const draftId = activeDraft.value.identifier
saving.value = true
try {
await compositionService.discard({ identifier: draftId })
const response = await compositionService.discard({ identifier: draftId })
if (response.disposition === 'error') {
mailUiStore.notify(`Failed to discard draft: ${response.error?.message || 'Unknown error'}`, 'error')
return false
}
activeDraft.value = null
return true
} catch (error) {
console.error('[Mail][Composer] Failed to discard staged draft:', error)
mailUiStore.notify('Failed to discard draft', 'error')
return false
} finally {
saving.value = false
}
}
async function saveDraft() {
if (!activeDraft.value) {
return true
}
if (autoSaveTimer) {
clearTimeout(autoSaveTimer)
autoSaveTimer = null
}
const draft = activeDraft.value
const request: CompositionSaveRequest = {
identifier: draft.identifier,
revision: draft.revision,
sender: {
provider: draft.sender.service.provider,
service: draft.sender.service.identifier,
address: draft.sender.address,
name: draft.sender.label || null,
},
message: draft.message,
}
saving.value = true
try {
const response = await compositionService.save(request)
if (response.disposition === 'error') {
mailUiStore.notify(`Failed to save draft: ${response.error?.message || 'Unknown error'}`, 'error')
return false
}
activeDraft.value = null
mailUiStore.notify('Draft saved', 'success')
return true
} catch (error) {
console.error('[Mail][Composer] Failed to save draft:', error)
mailUiStore.notify('Failed to save draft', 'error')
return false
} finally {
saving.value = false
}
}
@@ -479,7 +533,8 @@ export const useMailCompositionStore = defineStore('mailCompositionStore', () =>
stageStatus,
senderIdentities,
openDraft,
closeDraft,
saveDraft,
discardDraft,
sendDraft,
updateSender,
updateRecipients,