Files
kite/frontend/src/stores/topics.js
T
2026-05-22 08:53:28 +02:00

43 lines
1.1 KiB
JavaScript

import { defineStore } from 'pinia'
import { ref } from 'vue'
import * as api from '../api/client.js'
export const useTopicsStore = defineStore('topics', () => {
const topics = ref([])
const loading = ref(false)
const error = ref(null)
async function fetchTopics() {
loading.value = true
error.value = null
try {
const data = await api.listTopics()
topics.value = data.topics
} catch (e) {
error.value = e.message
} finally {
loading.value = false
}
}
async function addTopic(payload) {
const topic = await api.createTopic(payload)
topics.value.push(topic)
return topic
}
async function editTopic(id, patch) {
const updated = await api.updateTopic(id, patch)
const idx = topics.value.findIndex(t => t.id === id)
if (idx !== -1) topics.value[idx] = updated
return updated
}
async function removeTopic(id) {
await api.deleteTopic(id)
topics.value = topics.value.filter(t => t.id !== id)
}
return { topics, loading, error, fetchTopics, addTopic, editTopic, removeTopic }
})