diff --git a/frontend/src/components/dashboard/FleetDashboardShell.jsx b/frontend/src/components/dashboard/FleetDashboardShell.jsx index a9f2562..8ade344 100644 --- a/frontend/src/components/dashboard/FleetDashboardShell.jsx +++ b/frontend/src/components/dashboard/FleetDashboardShell.jsx @@ -130,8 +130,8 @@ function SortableCodeLabel({ title, direction, onToggle }) { title="Sortiraj po datumu iz koda (godina, mjesec, dan)" > {title} - ↑ - ↓ + + ); } @@ -276,7 +276,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { if (targetWorkOrder) { openWorkOrderDetails(targetWorkOrder); } else { - showToast('TraĹľeni putni nalog nije pronaÄ‘en u trenutnom prikazu.', 'warning'); + showToast('Traženi putni nalog nije pronađen u trenutnom prikazu.', 'warning'); } return; } @@ -293,7 +293,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { setServiceRecordBackTask(null); setSelectedServiceRecord(targetServiceRecord); } else { - showToast('TraĹľeni servisni zapis nije pronaÄ‘en u trenutnom prikazu.', 'warning'); + showToast('Traženi servisni zapis nije pronađen u trenutnom prikazu.', 'warning'); } return; } @@ -445,7 +445,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { } // 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. + // 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) @@ -463,7 +463,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { [scopedWorkOrders, currentPage] ); - // Map: workOrderId → array of unique crane objects (own + cross-crane task links) + // Map: workOrderId → array of unique crane objects (own + cross-crane task links) const workOrderSharedCranes = useMemo(() => { const craneById = new Map(cranes.map((c) => [String(c.id), c])); const map = new Map(); @@ -658,11 +658,11 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { async function handleUpdateWorkOrder(workOrder, changes) { try { await updateWorkOrder(workOrder.id, changes); - showToast('Nalog je uspješno aĹľuriran.', 'success'); + showToast('Nalog je uspješno ažuriran.', 'success'); await fetchFleetDashboardData({ silent: true }); await fetchTasks({ force: true }); } catch (error) { - showToast(error?.message || 'AĹľuriranje naloga nije uspjelo.', 'error'); + showToast(error?.message || 'Ažuriranje naloga nije uspjelo.', 'error'); } } @@ -674,7 +674,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { async function handleSetServiceContext() { if (!selectedCraneRowId) { - showToast('Prvo oznaÄŤite redak dizalice.', 'warning'); + showToast('Prvo označite redak dizalice.', 'warning'); return; } const selectedCrane = cranes.find((item) => String(item.id) === String(selectedCraneRowId)); @@ -688,7 +688,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { function handleSetServiceContextForCrane(selectedCrane) { if (!selectedCrane) { - showToast('Odabrana dizalica više nije dostupna.', 'warning'); + showToast('Odabrana dizalica više nije dostupna.', 'warning'); return; } setSelectedCraneRowId(selectedCrane.id); @@ -711,7 +711,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { return; } } catch { - showToast('Ne mogu dohvatiti dizalice. Provjerite mreĹľu ili prijavu.', 'error'); + showToast('Ne mogu dohvatiti dizalice. Provjerite mrežu ili prijavu.', 'error'); return; } setIsTaskModalOpen(true); @@ -741,7 +741,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { { key: 'serialNumber', label: 'SN', className: 'px-4 py-3' }, { key: 'model', label: 'Marka / Model', className: 'px-4 py-3' }, { key: 'client', label: 'Kupac', className: 'px-4 py-3' }, - { key: 'mileage', label: 'KilometraĹľa', className: 'px-4 py-3' }, + { key: 'mileage', label: 'Kilometraža', className: 'px-4 py-3' }, { key: 'status', label: 'Status', className: 'px-4 py-3' }, ]; const taskColumns = [ @@ -784,7 +784,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { return; } } catch { - showToast('Ne mogu dohvatiti dizalice. Provjerite mreĹľu ili prijavu.', 'error'); + showToast('Ne mogu dohvatiti dizalice. Provjerite mrežu ili prijavu.', 'error'); return; } setIsWorkOrderModalOpen(true); @@ -839,9 +839,9 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) {

aktivnih zadataka

- {/* Dovršeni nalozi */} + {/* Dovršeni nalozi */}
-

Dovršeni nalozi

+

Dovršeni nalozi

{stats.closedWorkOrders}

{stats.totalWorkOrders > 0 && (

@@ -854,7 +854,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) {

Moji danas

0 ? 'text-indigo-600' : 'text-text-main'}`}> - {hasMounted ? myTasksToday : '—'} + {hasMounted ? myTasksToday : '—'}

planirani na mene

@@ -964,7 +964,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { rows={dashboardTasks} rowKey={(task) => task.id} loading={loading} - loadingMessage="UÄŤitavanje radnih zadataka..." + loadingMessage="Učitavanje radnih zadataka..." emptyMessage="Nema radnih zadataka za odabrani filter." rowClassName={(task) => { const status = String(task?.status || '').toLowerCase(); @@ -1018,7 +1018,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) {
Sync log - â–Ľ +
@@ -1070,7 +1070,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { onClick={() => fetchFleetDashboardData()} className="text-sm font-medium text-indigo-600 hover:text-indigo-800" > - OsvjeĹľi + Osvježi
@@ -1079,12 +1079,12 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { rows={latestWorkOrders} rowKey={(workOrder) => workOrder.id} loading={loading} - loadingMessage="UÄŤitavanje..." + loadingMessage="Učitavanje..." emptyMessage={ workOrderScope === 'context' ? (!hydratedSelectedVehicleId ? 'Odaberite dizalicu za prikaz putnih naloga iz servisnog konteksta.' - : 'Nema dostupnih putnih naloga za odabrani servisni kontekst. MoĹľete prebaciti na prikaz svih naloga.') + : 'Nema dostupnih putnih naloga za odabrani servisni kontekst. Možete prebaciti na prikaz svih naloga.') : 'Nema dostupnih putnih naloga.' } renderRow={(workOrder) => ( @@ -1166,7 +1166,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { className="rounded px-2 py-1 text-xs font-medium text-text-muted hover:bg-canvas-deep hover:text-text-main" title="Upload fotografija putnog naloga" > - đź“· + Foto @@ -1196,7 +1196,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { disabled={currentPage >= totalPages} className="rounded border border-border-hairline px-2 py-1 text-text-main hover:bg-canvas-deep disabled:opacity-50" > - Sljedeća + Sljedeća @@ -1230,7 +1230,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { onClick={() => fetchFleetDashboardData()} className="text-sm font-medium text-indigo-600 hover:text-indigo-800" > - OsvjeĹľi + Osvježi @@ -1249,7 +1249,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { { key: 'date', label: 'Datum', className: 'px-4 py-3' }, { key: 'crane', label: 'Dizalica', className: 'px-4 py-3' }, { key: 'description', label: 'Opis', className: 'px-4 py-3' }, - { key: 'cost', label: 'Trošak', className: 'px-4 py-3' }, + { key: 'cost', label: 'Trošak', className: 'px-4 py-3' }, { key: 'actions', label: 'Akcije', className: 'px-4 py-3' }, ]} rows={paginatedRecentServiceRecords} @@ -1302,7 +1302,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { disabled={serviceRecordsPage >= serviceRecordsTotalPages} className="rounded border border-border-hairline px-2 py-1 text-text-main hover:bg-canvas-deep disabled:opacity-50" > - Sljedeća + Sljedeća @@ -1312,7 +1312,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { )} {hydratedSelectedVehicleId && loading && (

- UÄŤitavanje... + Učitavanje...

)} {hydratedSelectedVehicleId && !loading && serviceTaskGroups.length === 0 && ( @@ -1365,7 +1365,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { { key: 'date', label: 'Datum', className: 'px-4 py-3' }, { key: 'crane', label: 'DIZALICA', className: 'px-4 py-3' }, { key: 'description', label: 'Opis', className: 'px-4 py-3' }, - { key: 'cost', label: 'Trošak', className: 'px-4 py-3' }, + { key: 'cost', label: 'Trošak', className: 'px-4 py-3' }, { key: 'files', label: 'Datoteke', className: 'px-4 py-3' }, { key: 'actions', label: 'Akcije', className: 'px-4 py-3' }, ]} @@ -1400,7 +1400,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { onClick={() => setPhotoUpload({ open: true, serviceRecordId: record.id })} className="rounded border border-border-hairline px-2 py-1 text-xs text-text-main hover:bg-canvas-base" > - 📎 Dodaj datoteke + Dodaj datoteke @@ -1419,7 +1419,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { {showClients && ( <> - {/* ── Tablica klijenata i njihovih dizalica ───────── */} + {/* Tablica klijenata i njihovih dizalica */}
fetchFleetDashboardData()} className="text-sm font-medium text-indigo-600 hover:text-indigo-800" > - OsvjeĹľi + Osvježi
@@ -1457,7 +1457,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { rowClassName="hover:bg-canvas-deep" isRowSelected={(vehicle) => String(vehicle.id) === String(selectedCraneRowId)} loading={loading} - loadingMessage="UÄŤitavanje vozila..." + loadingMessage="Učitavanje vozila..." emptyMessage="Nema dostupnih vozila." renderRow={(vehicle) => ( <> @@ -1529,7 +1529,7 @@ export default function FleetDashboardShell({ pageMode = 'dashboard' }) { onSubmit={handleUpdateWorkOrder} /> - {/* Modali su na root razini div-a — van
i
— + {/* Modali su na root razini div-a — van
i
— kako bi fixed pozicioniranje i z-index radili ispravno */} ); } -