feat: implement save mechanisim
Signed-off-by: Sebastian <krupinski01@gmail.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user