// src/stores/taskStore.js import { atom } from 'nanostores'; import { api } from '../services/apiClient'; import { showToast } from './toastStore'; export const $tasks = atom([]); export const $tasksLoading = atom(false); export const $taskTemplates = atom([]); export const $taskTemplatesLoading = atom(false); const STATUS_LABELS = { aktivan: 'Aktivan', servis: 'U tijeku', zavrsen: 'Završen', neaktivan: 'Otkazano', }; export function getStatusLabel(status) { return STATUS_LABELS[status] ?? status; } export function isTaskActive(task) { const status = String(task?.status || '').toLowerCase(); return status === 'aktivan' || status === 'servis'; } export async function fetchTasks() { $tasksLoading.set(true); try { const data = await api.get('tasks/tasks/'); $tasks.set(Array.isArray(data) ? data : (data?.results ?? [])); } catch (error) { if (error?.status !== 401) { showToast('Greška pri dohvatu zadataka.', 'error'); } } finally { $tasksLoading.set(false); } } export async function fetchTaskTemplates() { $taskTemplatesLoading.set(true); try { const data = await api.get('tasks/tasks/templates/'); const templates = Array.isArray(data) ? data : (data?.results ?? []); $taskTemplates.set(templates); return templates; } catch (error) { if (error?.status !== 401) { showToast('Greška pri dohvatu predložaka zadataka.', 'error'); } throw error; } finally { $taskTemplatesLoading.set(false); } } export async function createTask(data) { const response = await api.post('tasks/tasks/', data); $tasks.set([response, ...$tasks.get()]); showToast('Zadatak je uspješno kreiran.', 'success'); return response; } export async function updateTaskStatus(taskId, status) { const response = await api.patch(`tasks/tasks/${taskId}/`, { status }); $tasks.set($tasks.get().map((t) => (String(t.id) === String(taskId) ? response : t))); showToast(`Status zadatka promijenjen u: ${getStatusLabel(status)}`, 'success'); return response; } export async function updateTask(taskId, changes) { const response = await api.patch(`tasks/tasks/${taskId}/`, changes); $tasks.set($tasks.get().map((t) => (String(t.id) === String(taskId) ? response : t))); showToast('Task je uspješno ažuriran.', 'success'); return response; } export async function deleteTask(taskId) { await api.delete(`tasks/tasks/${taskId}/`); $tasks.set($tasks.get().filter((t) => String(t.id) !== String(taskId))); showToast('Zadatak je deaktiviran.', 'success'); }