docling-studio/frontend/src/features/document/store.js
2026-03-21 15:03:10 +01:00

56 lines
1.5 KiB
JavaScript

import { defineStore } from 'pinia'
import { ref } from 'vue'
import * as api from './api.js'
export const useDocumentStore = defineStore('document', () => {
const documents = ref([])
const selectedId = ref(null)
const uploading = ref(false)
const error = ref(null)
function clearError() { error.value = null }
async function load() {
try {
error.value = null
documents.value = await api.fetchDocuments()
} catch (e) {
error.value = e.message || 'Failed to load documents'
console.error('Failed to load documents', e)
}
}
async function upload(file) {
uploading.value = true
error.value = null
try {
const doc = await api.uploadDocument(file)
documents.value.unshift(doc)
selectedId.value = doc.id
return doc
} catch (e) {
error.value = e.message || 'Failed to upload document'
console.error('Failed to upload document', e)
throw e
} finally {
uploading.value = false
}
}
async function remove(id) {
try {
await api.deleteDocument(id)
documents.value = documents.value.filter(d => d.id !== id)
if (selectedId.value === id) selectedId.value = null
} catch (e) {
error.value = e.message || 'Failed to delete document'
console.error('Failed to delete document', e)
}
}
function select(id) {
selectedId.value = id
}
return { documents, selectedId, uploading, error, clearError, load, upload, remove, select }
})