import { useEffect, useMemo, useState } from 'preact/hooks'; import { createTask, fetchTaskTemplates, getStatusLabel } from '../../stores/taskStore'; import { formatPurposeLabel, formatWorkOrderDisplayCode } from '../../lib/displayIds'; import ModalShell from '../ui/ModalShell'; const STATUS_OPTIONS = ['aktivan', 'servis', 'zavrsen', 'neaktivan']; const INITIAL_FORM = { title: '', description: '', status: 'aktivan', work_order: '', }; export default function TaskCreateModal({ open, workOrders = [], contextCrane = null, onClose, onSuccess }) { const [form, setForm] = useState(INITIAL_FORM); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(''); const [templateMode, setTemplateMode] = useState(false); const [templateLoading, setTemplateLoading] = useState(false); const [templateId, setTemplateId] = useState(''); const [templates, setTemplates] = useState([]); const selectedTemplate = useMemo( () => templates.find((template) => String(template.id) === String(templateId)) || null, [templates, templateId] ); const availableWorkOrders = useMemo( () => workOrders.filter((workOrder) => String(workOrder?.status || '').toLowerCase() !== 'closed'), [workOrders] ); useEffect(() => { if (!open) { setForm(INITIAL_FORM); setSubmitting(false); setError(''); setTemplateMode(false); setTemplateId(''); setTemplates([]); setTemplateLoading(false); } }, [open]); useEffect(() => { if (!selectedTemplate) return; setForm((prev) => ({ ...prev, title: selectedTemplate.title || '', description: selectedTemplate.description || '', status: 'aktivan', work_order: '', })); }, [selectedTemplate]); if (!open) return null; function setField(name, value) { setForm((prev) => ({ ...prev, [name]: value })); } async function enableTemplateMode() { if (templateMode) { setTemplateMode(false); setTemplateId(''); setForm(INITIAL_FORM); return; } setError(''); setTemplateLoading(true); try { const fetched = await fetchTaskTemplates(); setTemplates(fetched); setTemplateMode(true); } catch (err) { setError(err?.message || 'Neuspješno učitavanje templatea.'); } finally { setTemplateLoading(false); } } async function submit(event) { event.preventDefault(); setError(''); if (!contextCrane?.id) { setError('Odaberite dizalicu u Servisnom kontekstu prije kreiranja zadatka.'); return; } let payload; if (templateMode) { if (!templateId) { setError('Odaberite template za unos zadatka.'); return; } payload = { template_id: templateId, vehicle: contextCrane.id, work_order: null, }; } else { const title = String(form.title || '').trim(); if (!title) { setError('Naslov zadatka je obavezan.'); return; } if ((form.status === 'neaktivan' || form.status === 'zavrsen') && !form.work_order) { setError('Putni nalog je obavezan prije zatvaranja zadatka.'); return; } payload = { title, description: String(form.description || '').trim(), status: form.status || 'aktivan', vehicle: contextCrane.id, work_order: form.work_order || null, }; } setSubmitting(true); try { await createTask(payload); await onSuccess?.(); onClose?.(); } catch (err) { setError(err?.message || 'Neuspješno kreiranje zadatka.'); } finally { setSubmitting(false); } } return (

Novi radni zadatak

Kontekst dizalice: {contextCrane?.registration_number || 'Nije odabrana'}

{templateMode && ( )}