import { ref } from 'vue' import { defineStore } from 'pinia' import { projectsApiClient } from '@/stores/projectsApiClient' import type { Project } from '@/stores/project' export const useProjectStore = defineStore( 'projectStore', () => { const projects = ref([]) const isLoading = ref(false) const error = ref(null) isLoading.value = true error.value = null projectsApiClient .getProjects() .then(t => projects.value = t) .catch(e => error.value = (e as Error).message) .finally(isLoading.value = false) const fetchProjects = async () => { isLoading.value = true error.value = null try { projects.value = await projectsApiClient.getProjects() } catch (err) { error.value = (err as Error).message } finally { isLoading.value = false } } const addProject = async (project: project) => { isLoading.value = true error.value = null try { const newProject = await projectsApiClient.createProject(project) projects.value.push(newProject) } catch (err) { error.value = (err as Error).message } finally { isLoading.value = false } } const completeProject = async (project: Project) => { isLoading.value = true error.value = null try { if (project.completedOn) { await projectsApiClient.uncompleteProject(project.id) project.completedOn = null } else { project.completedOn = new Date().toISOString() await projectsApiClient.completeProject( { id: project.id, completedOn: project.completedOn }) } } catch (err) { error.value = (err as Error).message } finally { isLoading.value = false } } return { projects, isLoading, error, fetchProjects, addProject, completeProject } } )