From 55a7862e660a9e44b3efe6f29fc5e2043de18a22 Mon Sep 17 00:00:00 2001 From: Spythere Date: Mon, 1 Dec 2025 16:36:18 +0100 Subject: [PATCH 1/7] chore: added props remembering from the last vehicle & vehicle group update --- src/stores/vehicles.store.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/stores/vehicles.store.ts b/src/stores/vehicles.store.ts index 9bfcfce..b50bedc 100644 --- a/src/stores/vehicles.store.ts +++ b/src/stores/vehicles.store.ts @@ -15,6 +15,7 @@ import { ICreateVehicleGroupBody, RemoveVehicleGroupAPIResponse, IVehicleGroupAPI, + IVehicleGroup, } from '../types/vehicles.types'; import { LoadingState } from '../types/common.types'; @@ -26,6 +27,9 @@ export const useVehiclesStore = defineStore('vehiclesStore', { selectedVehicleId: -1, selectedVehicleGroupId: -1, + lastVehicleUpdateProps: {} as Partial, + lastVehicleGroupUpdateProps: {} as Partial, + vehiclesTable: [] as IVehicleTableRow[], vehicleGroupsTable: [] as IVehicleGroupTableRow[], }), From 07ded5ef502dd1d514f785f5889048bbd3c6d4ae Mon Sep 17 00:00:00 2001 From: Spythere Date: Mon, 1 Dec 2025 16:36:55 +0100 Subject: [PATCH 2/7] fix: updating cargo types prop --- .../VehiclesManager/VehicleEditModal.vue | 16 ++++++++----- .../VehiclesManager/VehicleGroupEditModal.vue | 24 +++++++++++-------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/components/VehiclesManager/VehicleEditModal.vue b/src/components/VehiclesManager/VehicleEditModal.vue index 0d1d2b5..707bc2d 100644 --- a/src/components/VehiclesManager/VehicleEditModal.vue +++ b/src/components/VehiclesManager/VehicleEditModal.vue @@ -135,14 +135,16 @@ onMounted(() => { vehiclesStore.vehiclesTable.find((v) => v.vehicleRef.id == vehiclesStore.selectedVehicleId)?.vehicleRef ?? null; if (currentVehicleRef.value) { + const lastProps = vehiclesStore.lastVehicleUpdateProps; + vehicleValues.name = currentVehicleRef.value.name || ''; - vehicleValues.cabinName = currentVehicleRef.value.cabinName || ''; - vehicleValues.type = currentVehicleRef.value.type || ''; - vehicleValues.vehicleGroupsId = currentVehicleRef.value.vehicleGroupsId || 0; - vehicleValues.hidden = currentVehicleRef.value.hidden; + vehicleValues.cabinName = lastProps.cabinName || currentVehicleRef.value.cabinName; + vehicleValues.type = lastProps.type || currentVehicleRef.value.type || ''; + vehicleValues.vehicleGroupsId = lastProps.vehicleGroupsId || currentVehicleRef.value.vehicleGroupsId || 0; + vehicleValues.hidden = lastProps.hidden || currentVehicleRef.value.hidden; vehicleValues.restrictions = { - sponsorOnly: currentVehicleRef.value.restrictions?.sponsorOnly ?? null, - teamOnly: currentVehicleRef.value.restrictions?.teamOnly ?? false, + sponsorOnly: lastProps.restrictions?.sponsorOnly ?? currentVehicleRef.value.restrictions?.sponsorOnly ?? null, + teamOnly: lastProps.restrictions?.teamOnly ?? currentVehicleRef.value.restrictions?.teamOnly ?? false, }; } @@ -197,6 +199,8 @@ async function updateVehicle() { oldGroup._count.vehicles -= 1; newGroup._count.vehicles += 1; + vehiclesStore.lastVehicleUpdateProps = updatedData; + alert('Zaktualizowano pojazd: ' + updatedData.name); } catch (error) { alert(handleAPIErrors(error)); diff --git a/src/components/VehiclesManager/VehicleGroupEditModal.vue b/src/components/VehiclesManager/VehicleGroupEditModal.vue index 39fbefb..ebd94f8 100644 --- a/src/components/VehiclesManager/VehicleGroupEditModal.vue +++ b/src/components/VehiclesManager/VehicleGroupEditModal.vue @@ -72,7 +72,9 @@
- +
@@ -80,7 +82,7 @@ (JSON: {{ isMassSpeedsJsonValid ? 'poprawny' : 'niepoprawny' }})
-
@@ -171,16 +173,18 @@ watch(massSpeedsJsonString, (val) => { function populateVehicleGroupValues(vehicleGroup: IVehicleGroup) { if (!vehicleGroup.locoProps) currentVehicleGroupType.value = 'wagon'; - vehicleGroupValues.name = vehicleGroup.name || ''; - vehicleGroupValues.length = vehicleGroup.length || 0; - vehicleGroupValues.weight = vehicleGroup.weight || 0; - vehicleGroupValues.speed = vehicleGroup.speed || 0; - vehicleGroupValues.speedLoco = vehicleGroup.speedLoco || null; - vehicleGroupValues.speedLoaded = vehicleGroup.speedLoaded || null; + const lastProps = vehiclesStore.lastVehicleGroupUpdateProps; + + vehicleGroupValues.name = lastProps.name || vehicleGroup.name || ''; + vehicleGroupValues.length = lastProps.length || vehicleGroup.length || 0; + vehicleGroupValues.weight = lastProps.weight || vehicleGroup.weight || 0; + vehicleGroupValues.speed = lastProps.speed || vehicleGroup.speed || 0; + vehicleGroupValues.speedLoco = lastProps.speedLoco || vehicleGroup.speedLoco || null; + vehicleGroupValues.speedLoaded = lastProps.speedLoaded || vehicleGroup.speedLoaded || null; vehicleGroupValues.locoProps = { - coldStart: vehicleGroup.locoProps?.coldStart ?? false, - doubleManned: vehicleGroup.locoProps?.doubleManned ?? false, + coldStart: lastProps.locoProps?.coldStart ?? vehicleGroup.locoProps?.coldStart ?? false, + doubleManned: lastProps.locoProps?.doubleManned ?? vehicleGroup.locoProps?.doubleManned ?? false, }; vehicleGroupValues.cargoTypes = []; From a267dd703044090047eadb81ed88f5cb2d8263ed Mon Sep 17 00:00:00 2001 From: Spythere Date: Tue, 2 Dec 2025 01:49:35 +0100 Subject: [PATCH 3/7] chore: added bold font type, moved common table css to separate file --- .../fonts/inter-v20-latin_latin-ext-800.woff2 | Bin 0 -> 52608 bytes .../VehiclesManager/VehicleEditModal.vue | 2 +- .../VehiclesManager/VehicleGroupEditModal.vue | 4 +- .../VehiclesManager/VehicleGroupsTable.vue | 4 +- .../VehiclesManager/VehiclesTable.vue | 4 ++ src/styles/_fonts.scss | 8 +++ src/styles/_vehicle_tables.scss | 40 +++++++++++++++ src/views/VehiclesManagerView.vue | 48 ++---------------- 8 files changed, 63 insertions(+), 47 deletions(-) create mode 100644 public/fonts/inter-v20-latin_latin-ext-800.woff2 create mode 100644 src/styles/_vehicle_tables.scss diff --git a/public/fonts/inter-v20-latin_latin-ext-800.woff2 b/public/fonts/inter-v20-latin_latin-ext-800.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f89345a320d13b9d7b5696cb515440bf971dabb5 GIT binary patch literal 52608 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 - + diff --git a/src/components/VehiclesManager/VehicleGroupEditModal.vue b/src/components/VehiclesManager/VehicleGroupEditModal.vue index ebd94f8..c3ede1f 100644 --- a/src/components/VehiclesManager/VehicleGroupEditModal.vue +++ b/src/components/VehiclesManager/VehicleGroupEditModal.vue @@ -93,14 +93,14 @@ - + diff --git a/src/components/VehiclesManager/VehiclesTable.vue b/src/components/VehiclesManager/VehiclesTable.vue index a2e6b4a..40ae62d 100644 --- a/src/components/VehiclesManager/VehiclesTable.vue +++ b/src/components/VehiclesManager/VehiclesTable.vue @@ -183,3 +183,7 @@ async function addVehicleRow() { } } + + diff --git a/src/styles/_fonts.scss b/src/styles/_fonts.scss index 3b041f3..862c819 100644 --- a/src/styles/_fonts.scss +++ b/src/styles/_fonts.scss @@ -21,3 +21,11 @@ font-weight: 600; src: url('/fonts/inter-v19-latin_latin-ext-600.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ } + +@font-face { + font-display: swap; + font-family: 'Inter'; + font-style: normal; + font-weight: 800; + src: url('/fonts/inter-v20-latin_latin-ext-800.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} diff --git a/src/styles/_vehicle_tables.scss b/src/styles/_vehicle_tables.scss new file mode 100644 index 0000000..920c8bf --- /dev/null +++ b/src/styles/_vehicle_tables.scss @@ -0,0 +1,40 @@ +.table-search-box { + display: flex; + gap: 0.5em; + margin-top: 0.5em; +} + +.table-wrapper { + width: 100%; + overflow: auto; + margin-top: 1em; +} + +.table-wrapper table > thead > tr > td { + & > div { + display: flex; + justify-content: center; + align-items: center; + gap: 0.5em; + } + + &[data-sortable='true'] { + cursor: pointer; + } +} + +.table-wrapper table > tbody > tr { + cursor: pointer; + + &:hover { + background: #1a293b; + } +} + +.table-visible-results-box { + margin-top: 0.5em; +} + +.table-visible-results-box input { + max-width: 70px; +} diff --git a/src/views/VehiclesManagerView.vue b/src/views/VehiclesManagerView.vue index 0974b74..f20becc 100644 --- a/src/views/VehiclesManagerView.vue +++ b/src/views/VehiclesManagerView.vue @@ -9,8 +9,8 @@
- - + +
@@ -46,7 +46,7 @@ function changeTab(tabName: TableTabName) { } - From 6e5ace5361af98a65c7527c0407a9e3d981eab83 Mon Sep 17 00:00:00 2001 From: Spythere Date: Tue, 2 Dec 2025 01:51:30 +0100 Subject: [PATCH 4/7] chore: moved populating vehicle values to sepearate function --- .../VehiclesManager/VehicleEditModal.vue | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/components/VehiclesManager/VehicleEditModal.vue b/src/components/VehiclesManager/VehicleEditModal.vue index 1796b0b..2903d70 100644 --- a/src/components/VehiclesManager/VehicleEditModal.vue +++ b/src/components/VehiclesManager/VehicleEditModal.vue @@ -135,22 +135,26 @@ onMounted(() => { vehiclesStore.vehiclesTable.find((v) => v.vehicleRef.id == vehiclesStore.selectedVehicleId)?.vehicleRef ?? null; if (currentVehicleRef.value) { - const lastProps = vehiclesStore.lastVehicleUpdateProps; - - vehicleValues.name = currentVehicleRef.value.name || ''; - vehicleValues.cabinName = lastProps.cabinName || currentVehicleRef.value.cabinName; - vehicleValues.type = lastProps.type || currentVehicleRef.value.type || ''; - vehicleValues.vehicleGroupsId = lastProps.vehicleGroupsId || currentVehicleRef.value.vehicleGroupsId || 0; - vehicleValues.hidden = lastProps.hidden || currentVehicleRef.value.hidden; - vehicleValues.restrictions = { - sponsorOnly: lastProps.restrictions?.sponsorOnly ?? currentVehicleRef.value.restrictions?.sponsorOnly ?? null, - teamOnly: lastProps.restrictions?.teamOnly ?? currentVehicleRef.value.restrictions?.teamOnly ?? false, - }; + populateVehicleValues(currentVehicleRef.value); } modalElementRef.value?.focus(); }); +function populateVehicleValues(vehicle: IVehicle) { + const lastProps = vehiclesStore.lastVehicleUpdateProps; + + vehicleValues.name = vehicle.name || ''; + vehicleValues.cabinName = lastProps.cabinName || vehicle.cabinName; + vehicleValues.type = lastProps.type || vehicle.type || ''; + vehicleValues.vehicleGroupsId = lastProps.vehicleGroupsId || vehicle.vehicleGroupsId || 0; + vehicleValues.hidden = lastProps.hidden || vehicle.hidden; + vehicleValues.restrictions = { + sponsorOnly: lastProps.restrictions?.sponsorOnly ?? vehicle.restrictions?.sponsorOnly ?? null, + teamOnly: lastProps.restrictions?.teamOnly ?? vehicle.restrictions?.teamOnly ?? false, + }; +} + function closeModal() { vehiclesStore.selectedVehicleId = -1; } From cabb321262a603c93b7c2fef830e97720dc686d8 Mon Sep 17 00:00:00 2001 From: Spythere Date: Tue, 2 Dec 2025 02:09:04 +0100 Subject: [PATCH 5/7] chore: finished vehicle groups table filters, added default sorters dir on change --- .../VehiclesManager/VehicleGroupsTable.vue | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/src/components/VehiclesManager/VehicleGroupsTable.vue b/src/components/VehiclesManager/VehicleGroupsTable.vue index 4e08175..6b2f47b 100644 --- a/src/components/VehiclesManager/VehicleGroupsTable.vue +++ b/src/components/VehiclesManager/VehicleGroupsTable.vue @@ -24,12 +24,7 @@ - - - + + + + @@ -97,14 +96,14 @@ import { computed, onMounted, ref, watch } from 'vue'; import { useVehiclesStore } from '../../stores/vehicles.store'; import { LucideArrowDown, LucideArrowUp, LucidePlus, LucideX } from 'lucide-vue-next'; -import { IVehicleGroup, IVehicleGroupTableRow, VehicleGroupEditRowKey } from '../../types/vehicles.types'; +import { IVehicleGroup } from '../../types/vehicles.types'; import VehicleGroupEditModal from './VehicleGroupEditModal.vue'; interface TableHeader { id: string; elementWidth: number; title: string; - sortable: boolean; + defaultSorterDir: number; } const sorterFunctions: Record number> = { @@ -115,20 +114,28 @@ const sorterFunctions: Record speed: (v1, v2) => (v1.speed - v2.speed) * activeSortDir.value, speedLoco: (v1, v2) => ((v1.speedLoco || 0) - (v2.speedLoco || 0)) * activeSortDir.value, speedLoaded: (v1, v2) => ((v1.speedLoaded || 0) - (v2.speedLoaded || 0)) * activeSortDir.value, + coldStart: (v1, v2) => + ((v1.locoProps?.coldStart ? 1 : -1) - (v2.locoProps?.coldStart ? 1 : -1)) * activeSortDir.value, + doubleManned: (v1, v2) => + ((v1.locoProps?.doubleManned ? 1 : -1) - (v2.locoProps?.doubleManned ? 1 : -1)) * activeSortDir.value, + massSpeeds: (v1, v2) => ((v1.massSpeeds ? 1 : -1) - (v2.massSpeeds ? 1 : -1)) * activeSortDir.value, + cargoTypes: (v1, v2) => ((v1.cargoTypes?.length ?? 0) - (v2.cargoTypes?.length ?? 0)) * activeSortDir.value, + vehicles: (v1, v2) => (v1._count.vehicles - v2._count.vehicles) * activeSortDir.value, }; const headers: TableHeader[] = [ - { id: 'id', elementWidth: 50, title: '#', sortable: true }, - { id: 'name', elementWidth: 150, title: 'Nazwa', sortable: true }, - { id: 'length', elementWidth: 100, title: 'Długość', sortable: true }, - { id: 'weight', elementWidth: 100, title: 'Masa', sortable: true }, - { id: 'speed', elementWidth: 100, title: 'Prędkość', sortable: true }, - { id: 'speedLoco', elementWidth: 100, title: 'Prędkość (lok)', sortable: true }, - { id: 'speedLoaded', elementWidth: 100, title: 'Prędkość (ład.)', sortable: true }, - { id: 'vehicles', elementWidth: 80, title: 'Pojazdy', sortable: true }, - { id: 'coldStart', elementWidth: 75, title: 'Zimny start', sortable: true }, - { id: 'doubleManned', elementWidth: 75, title: 'Podwójna obsada', sortable: true }, - { id: 'massSpeeds', elementWidth: 100, title: 'Prędkości wg masy', sortable: false }, + { id: 'id', elementWidth: 50, title: '#', defaultSorterDir: 1 }, + { id: 'name', elementWidth: 150, title: 'Nazwa', defaultSorterDir: 1 }, + { id: 'length', elementWidth: 100, title: 'Długość', defaultSorterDir: -1 }, + { id: 'weight', elementWidth: 100, title: 'Masa', defaultSorterDir: -1 }, + { id: 'speed', elementWidth: 100, title: 'Prędkość', defaultSorterDir: -1 }, + { id: 'speedLoco', elementWidth: 100, title: 'Prędkość (lok)', defaultSorterDir: -1 }, + { id: 'speedLoaded', elementWidth: 100, title: 'Prędkość (ład.)', defaultSorterDir: -1 }, + { id: 'coldStart', elementWidth: 75, title: 'Zimny start', defaultSorterDir: -1 }, + { id: 'doubleManned', elementWidth: 75, title: 'Podwójna obsada', defaultSorterDir: -1 }, + { id: 'massSpeeds', elementWidth: 80, title: 'Prędkości wg masy', defaultSorterDir: -1 }, + { id: 'cargoTypes', elementWidth: 80, title: 'Ładunki', defaultSorterDir: -1 }, + { id: 'vehicles', elementWidth: 80, title: 'Pojazdy', defaultSorterDir: -1 }, ]; const vehiclesStore = useVehiclesStore(); @@ -164,7 +171,7 @@ function sortTableBy(id: string) { if (!(id in sorterFunctions)) return; if (activeSortKey.value == id) activeSortDir.value *= -1; - else activeSortDir.value = 1; + else activeSortDir.value = headers.find((h) => h.id == id)?.defaultSorterDir ?? 1; activeSortKey.value = id; } From be148c2aee4327c366ecd401620a269c20a313b5 Mon Sep 17 00:00:00 2001 From: Spythere Date: Tue, 2 Dec 2025 02:14:43 +0100 Subject: [PATCH 6/7] fix: bg color table flickering on sort --- src/styles/_global.scss | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/styles/_global.scss b/src/styles/_global.scss index fcb6c07..b7db71b 100644 --- a/src/styles/_global.scss +++ b/src/styles/_global.scss @@ -1,4 +1,4 @@ -@use "sass:color"; +@use 'sass:color'; @use 'fonts'; body, @@ -61,7 +61,6 @@ table thead tr td img { table tbody tr { background-color: #2c394b; - transition: background-color 100ms; text-overflow: ellipsis; } @@ -86,7 +85,7 @@ table tbody tr td img { vertical-align: middle; } -// Other +// Other button, select, input { From 7eeaeb28d446e0629f80d570344e3579448060b2 Mon Sep 17 00:00:00 2001 From: Spythere Date: Tue, 2 Dec 2025 02:18:59 +0100 Subject: [PATCH 7/7] chore: added cargo types json object validation & alert messages --- .../VehiclesManager/VehicleGroupEditModal.vue | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/components/VehiclesManager/VehicleGroupEditModal.vue b/src/components/VehiclesManager/VehicleGroupEditModal.vue index c3ede1f..2fb2cc8 100644 --- a/src/components/VehiclesManager/VehicleGroupEditModal.vue +++ b/src/components/VehiclesManager/VehicleGroupEditModal.vue @@ -71,6 +71,7 @@
+ (JSON: {{ isCargoTypesJsonValid ? 'poprawny' : 'niepoprawny' }})
+
{{ header.title }} @@ -65,15 +60,11 @@
- {{ row.vehicleGroupRef.speedLoco }} + {{ row.vehicleGroupRef.speedLoco ?? '-' }} - {{ row.vehicleGroupRef.speedLoaded }} - - {{ row.vehicleGroupRef._count.vehicles }} + {{ row.vehicleGroupRef.speedLoaded ?? '-' }} @@ -85,7 +76,15 @@ - {{ row.vehicleGroupRef.massSpeeds ? 'WPISANE' : 'BRAK' }} + {{ row.vehicleGroupRef.massSpeeds ? '✅' : '❌' }} + + {{ row.vehicleGroupRef.cargoTypes?.length ?? '-' }} + + {{ row.vehicleGroupRef._count.vehicles ?? '0' }}