idconvert/frontend/app/stores/upload.js

47 lines
1.2 KiB
JavaScript

import { defineStore } from 'pinia'
import { uploadService } from '../../services/uploadService.js'
export const useUploadStore = defineStore('upload', {
state: () => ({
file: null,
scanReport: null,
conversionResult: null,
status: 'idle', // idle | scanning | scanned | converting | complete | error
error: null,
}),
actions: {
async scan(file) {
this.file = file
this.status = 'scanning'
this.error = null
this.scanReport = null
this.conversionResult = null
try {
this.scanReport = await uploadService.scan(file)
this.status = 'scanned'
} catch (e) {
this.error = e.message
this.status = 'error'
}
},
async convert() {
this.status = 'converting'
this.error = null
try {
this.conversionResult = await uploadService.convert(this.scanReport.sessionId, this.file?.name)
this.status = 'complete'
} catch (e) {
this.error = e.message === 'INSUFFICIENT_CREDITS' ? 'INSUFFICIENT_CREDITS' : e.message
this.status = 'error'
}
},
reset() {
this.file = null
this.scanReport = null
this.conversionResult = null
this.status = 'idle'
this.error = null
},
},
})