feat: auto-odabir i datum u dropdownu putnih naloga za taskove

- TaskCreateModal: auto-pretselektira jedini otvoreni nalog za danas pri otvaranju modala
- Dropdown labele prikazuju datum naloga i oznacavaju danasnji nalog sa zvjezdicom (★)
- Dodana napomena da vise taskova moze dijeliti isti putni nalog
- TaskServiceRecordsModal: danasnji nalozi sortirani na vrh liste
- Datum prikazan u dropdownu i u prikazu trenutno odabranog naloga

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
mariomitte
2026-08-01 07:15:39 +02:00
parent 6470a2996c
commit 06321fc3d1
3 changed files with 276 additions and 17 deletions

View File

@@ -13,6 +13,17 @@ const INITIAL_FORM = {
scheduled_date: '',
};
function todayIso() {
return new Date().toISOString().slice(0, 10);
}
function formatWODate(dateStr) {
if (!dateStr) return '';
const d = new Date(dateStr);
if (Number.isNaN(d.getTime())) return '';
return d.toLocaleDateString('hr-HR');
}
export default function TaskCreateModal({ open, workOrders = [], contextCrane = null, onClose, onSuccess }) {
const [form, setForm] = useState(INITIAL_FORM);
const [submitting, setSubmitting] = useState(false);
@@ -40,8 +51,18 @@ export default function TaskCreateModal({ open, workOrders = [], contextCrane =
setTemplateId('');
setTemplates([]);
setTemplateLoading(false);
return;
}
}, [open]);
// Auto-pre-select today's open work order if exactly one exists for this crane
const today = todayIso();
const todayOpen = workOrders.filter(
(wo) => String(wo?.status || '').toLowerCase() !== 'closed'
&& String(wo?.date || '').slice(0, 10) === today
);
if (todayOpen.length === 1) {
setForm((prev) => ({ ...prev, work_order: String(todayOpen[0].id) }));
}
}, [open]); // eslint-disable-line react-hooks/exhaustive-deps
useEffect(() => {
if (!selectedTemplate) return;
@@ -254,12 +275,18 @@ export default function TaskCreateModal({ open, workOrders = [], contextCrane =
className="rounded-lg border border-border-hairline bg-canvas-base px-3 py-2 text-text-main disabled:opacity-50"
>
<option value=""> Bez povezanog naloga </option>
{availableWorkOrders.map((workOrder) => (
<option key={workOrder.id} value={String(workOrder.id)}>
{formatWorkOrderDisplayCode(workOrder)} {workOrder.craneLabel || workOrder.craneInfo?.registration_number || '-'} {formatPurposeLabel(workOrder.purpose) || '-'}
</option>
))}
{availableWorkOrders.map((workOrder) => {
const isToday = String(workOrder.date || '').slice(0, 10) === todayIso();
return (
<option key={workOrder.id} value={String(workOrder.id)}>
{isToday ? '★ ' : ''}{formatWorkOrderDisplayCode(workOrder)} {formatWODate(workOrder.date)} {workOrder.craneLabel || workOrder.craneInfo?.registration_number || '-'} {formatPurposeLabel(workOrder.purpose) || '-'}
</option>
);
})}
</select>
<span className="text-[11px] text-text-muted">
Više zadataka može dijeliti isti putni nalog. Danas kreiran nalog označen je s .
</span>
{templateMode && (
<span className="text-[11px] text-text-muted">
Kod template unosa nalog nije obavezan i backend ga neće automatski povezati.