Files
004.erp.generic/frontend/src/stores/taskStore.js
mariomitte 3ad536a23e
Some checks failed
ERP CI/CD Pipeline / test (push) Has been cancelled
ERP CI/CD Pipeline / Deploy (server git pull + compose) (push) Has been cancelled
interaktivna Tablica radnih sati, db
2026-07-13 00:36:28 +02:00

84 lines
2.6 KiB
JavaScript

// 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');
}