feat: entry templates pinia store

This commit is contained in:
Your Name
2026-02-20 15:07:18 +02:00
parent 2b47f3412a
commit 2292e4ff9e

View File

@@ -0,0 +1,53 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
import { invoke } from '@tauri-apps/api/core'
import { handleInvokeError } from '../utils/errorHandler'
export interface EntryTemplate {
id?: number
name: string
project_id: number
task_id?: number
description?: string
duration: number
billable: number
created_at?: string
}
export const useEntryTemplatesStore = defineStore('entryTemplates', () => {
const templates = ref<EntryTemplate[]>([])
const loading = ref(false)
async function fetchTemplates() {
loading.value = true
try {
templates.value = await invoke<EntryTemplate[]>('get_entry_templates')
} catch (error) {
handleInvokeError(error, 'Failed to fetch entry templates', () => fetchTemplates())
} finally {
loading.value = false
}
}
async function createTemplate(template: Omit<EntryTemplate, 'id' | 'created_at'>): Promise<number | null> {
try {
const id = await invoke<number>('create_entry_template', { template })
templates.value.push({ ...template, id: Number(id) })
return Number(id)
} catch (error) {
handleInvokeError(error, 'Failed to create template')
return null
}
}
async function deleteTemplate(id: number) {
try {
await invoke('delete_entry_template', { id })
templates.value = templates.value.filter(t => t.id !== id)
} catch (error) {
handleInvokeError(error, 'Failed to delete template')
}
}
return { templates, loading, fetchTemplates, createTemplate, deleteTemplate }
})