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

@@ -6,6 +6,10 @@ import { getTaskCraneDisplay, getTaskCraneOwner } from '../../lib/taskCraneDispl
const STATUS_OPTIONS = ['aktivan', 'servis', 'spreman_za_zavrsetak', 'zavrsen', 'neaktivan'];
function todayIso() {
return new Date().toISOString().slice(0, 10);
}
function formatDate(value) {
if (!value) return '-';
const parsed = new Date(value);
@@ -79,10 +83,15 @@ export default function TaskServiceRecordsModal({
[workOrders, task?.work_order, selectedWorkOrderId]
);
const sortedWorkOrders = useMemo(
() => [...workOrders].sort((a, b) => String(b.date || '').localeCompare(String(a.date || ''))),
[workOrders]
);
const sortedWorkOrders = useMemo(() => {
const today = todayIso();
return [...workOrders].sort((a, b) => {
const aToday = String(a.date || '').slice(0, 10) === today ? 1 : 0;
const bToday = String(b.date || '').slice(0, 10) === today ? 1 : 0;
if (bToday !== aToday) return bToday - aToday;
return String(b.date || '').localeCompare(String(a.date || ''));
});
}, [workOrders]);
const effectiveWorkOrderId = task?.work_order ? String(task.work_order) : String(selectedWorkOrderId || '');
@@ -355,7 +364,7 @@ export default function TaskServiceRecordsModal({
{currentWorkOrder && !showWorkOrderEditor ? (
<div className="flex flex-wrap items-center justify-between gap-2 rounded border border-border-hairline bg-canvas-elevated px-3 py-2">
<p className="text-sm text-text-main">
{formatWorkOrderDisplayCode(currentWorkOrder)} {currentWorkOrder.craneLabel || currentWorkOrder.craneInfo?.registration_number || '-'} {currentWorkOrder.status || '-'}
{formatWorkOrderDisplayCode(currentWorkOrder)} {formatDate(currentWorkOrder.date)} {currentWorkOrder.craneLabel || currentWorkOrder.craneInfo?.registration_number || '-'} {currentWorkOrder.status || '-'}
</p>
<button
type="button"
@@ -374,14 +383,19 @@ export default function TaskServiceRecordsModal({
className="w-full rounded-lg border border-border-hairline bg-canvas-elevated px-3 py-2 text-sm text-text-main disabled:opacity-60"
>
<option value=""> Odaberi putni nalog </option>
{sortedWorkOrders.map((workOrder) => (
<option key={workOrder.id} value={String(workOrder.id)}>
{formatWorkOrderDisplayCode(workOrder)} {workOrder.craneLabel || workOrder.craneInfo?.registration_number || '-'} {workOrder.status || '-'}
</option>
))}
{sortedWorkOrders.map((workOrder) => {
const isToday = String(workOrder.date || '').slice(0, 10) === todayIso();
return (
<option key={workOrder.id} value={String(workOrder.id)}>
{isToday ? '★ ' : ''}{formatWorkOrderDisplayCode(workOrder)} {formatDate(workOrder.date)} {workOrder.craneLabel || workOrder.craneInfo?.registration_number || '-'} {workOrder.status || '-'}
</option>
);
})}
</select>
<p className="text-xs text-text-muted">
{assigningWorkOrder ? 'Spremanje odabira putnog naloga...' : 'Odabir se automatski sprema u bazu.'}
{assigningWorkOrder
? 'Spremanje odabira putnog naloga...'
: 'Isti putni nalog možete dodijeliti više zadataka. Danas (★) su prikazani prvo.'}
</p>
</div>
)}