diff --git a/frontend/src/components/dashboard/FleetDashboardShell.jsx b/frontend/src/components/dashboard/FleetDashboardShell.jsx index 8a9253e..6b424a2 100644 --- a/frontend/src/components/dashboard/FleetDashboardShell.jsx +++ b/frontend/src/components/dashboard/FleetDashboardShell.jsx @@ -423,8 +423,19 @@ export default function FleetDashboardShell({ initialSection = 'dashboard', page if (!hydratedSelectedVehicleId) { return []; } - return codeSorted.filter((order) => String(order.vehicle) === String(hydratedSelectedVehicleId)); - }, [workOrders, workOrderScope, hydratedSelectedVehicleId, user?.id, user?.is_serviser, user?.is_team_member, workOrderCodeSortDirection]); + // Collect work order IDs that are directly assigned to tasks of the context crane. + // This covers cross-crane shared work orders: a WO created for crane A can be + // assigned to a task of crane B — it should still appear in crane B's context view. + const contextTaskWorkOrderIds = new Set( + tasks + .filter((t) => String(t.vehicle || '') === String(hydratedSelectedVehicleId) && t.work_order) + .map((t) => String(t.work_order)) + ); + return codeSorted.filter( + (order) => String(order.vehicle) === String(hydratedSelectedVehicleId) + || contextTaskWorkOrderIds.has(String(order.id)) + ); + }, [workOrders, tasks, workOrderScope, hydratedSelectedVehicleId, user?.id, user?.is_serviser, user?.is_team_member, workOrderCodeSortDirection]); const pageSize = 10; const totalPages = Math.max(1, Math.ceil(scopedWorkOrders.length / pageSize)); const latestWorkOrders = useMemo( @@ -541,8 +552,11 @@ export default function FleetDashboardShell({ initialSection = 'dashboard', page }, [serviceRecords, selectedTask?.id]); const selectedTaskWorkOrders = useMemo(() => { if (!selectedTask) return []; - // Show ALL work orders — cross-crane sharing is allowed so no vehicle filter. - return [...workOrders].sort((a, b) => String(b.date || '').localeCompare(String(a.date || ''))); + // Only open work orders in the dropdown — closed ones cannot receive new tasks. + // Cross-crane sharing allowed: no vehicle filter. + return [...workOrders] + .filter((order) => String(order.status || '').toLowerCase() !== 'closed') + .sort((a, b) => String(b.date || '').localeCompare(String(a.date || ''))); }, [selectedTask, workOrders]); useEffect(() => { @@ -945,7 +959,7 @@ export default function FleetDashboardShell({ initialSection = 'dashboard', page workOrderScope === 'context' ? (!hydratedSelectedVehicleId ? 'Odaberite dizalicu za prikaz putnih naloga iz servisnog konteksta.' - : 'Nema dostupnih putnih naloga za odabrani servisni kontekst.') + : 'Nema dostupnih putnih naloga za odabrani servisni kontekst. Možete prebaciti na prikaz svih naloga.') : 'Nema dostupnih putnih naloga.' } renderRow={(workOrder) => (