47 lines
1.2 KiB
JavaScript
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
|
|
},
|
|
},
|
|
})
|