From 56ae593d5e2877de496ca2c84b143df22a6b8031 Mon Sep 17 00:00:00 2001 From: Spythere Date: Fri, 29 Nov 2024 01:30:12 +0100 Subject: [PATCH 1/5] chore: added new wiki list filters --- src/components/tabs/WikiListTab.vue | 49 +++++++++++++++++++++++------ src/locales/en.json | 22 ++++++++----- src/locales/pl.json | 10 ++++-- 3 files changed, 61 insertions(+), 20 deletions(-) diff --git a/src/components/tabs/WikiListTab.vue b/src/components/tabs/WikiListTab.vue index 010243a..2ca7612 100644 --- a/src/components/tabs/WikiListTab.vue +++ b/src/components/tabs/WikiListTab.vue @@ -104,13 +104,22 @@ import stockMixin from '../../mixins/stockMixin'; import imageMixin from '../../mixins/imageMixin'; const sorters = ['type', 'group', 'length', 'weight', 'maxSpeed'] as const; -const filters = ['vehicles-all', 'vehicles-traction', 'vehicles-wagon'] as const; + +enum VehicleFilter { + AllVehicles = 'vehicles-all', + AllTractions = 'vehicles-tractions-all', + ElectricTraction = 'vehicles-tractions-electric', + DieselTraction = 'vehicles-tractions-diesel', + EmuTraction = 'vehicles-tractions-emu', + DmuTraction = 'vehicles-tractions-dmu', + AllWagons = 'vehicles-wagons-all', + PassengerWagons = 'vehicles-wagons-passenger', + FreightWagons = 'vehicles-wagons-freight', +} type SorterType = (typeof sorters)[number]; type SorterDirection = 'asc' | 'desc'; -type FilterType = (typeof filters)[number]; - export default defineComponent({ mixins: [stockPreviewMixin, stockMixin, imageMixin], @@ -120,14 +129,14 @@ export default defineComponent({ observer: null as IntersectionObserver | null, sorters: sorters, - filters: filters, + filters: Object.values(VehicleFilter), searchedVehicleTypeName: '', sorterType: 'type' as SorterType, sorterDirection: 'asc' as SorterDirection, - filterType: 'vehicles-all' as FilterType, + filterType: VehicleFilter.AllVehicles, lastScrollTop: 0, }; @@ -170,11 +179,31 @@ export default defineComponent({ ) return false; - if ( - (this.filterType == 'vehicles-traction' && !isTractionUnit(v)) || - (this.filterType == 'vehicles-wagon' && isTractionUnit(v)) - ) - return false; + switch (this.filterType) { + case VehicleFilter.AllTractions: + return isTractionUnit(v); + + case VehicleFilter.ElectricTraction: + return isTractionUnit(v) && v.group == 'loco-electric'; + + case VehicleFilter.DieselTraction: + return isTractionUnit(v) && v.group == 'loco-diesel'; + + case VehicleFilter.EmuTraction: + return isTractionUnit(v) && v.group == 'unit-electric'; + + case VehicleFilter.DmuTraction: + return isTractionUnit(v) && v.group == 'unit-diesel'; + + case VehicleFilter.AllWagons: + return !isTractionUnit(v); + + case VehicleFilter.PassengerWagons: + return !isTractionUnit(v) && v.group == 'wagon-passenger'; + + case VehicleFilter.FreightWagons: + return !isTractionUnit(v) && v.group == 'wagon-freight'; + } return true; }, diff --git a/src/locales/en.json b/src/locales/en.json index a8acb06..b4a3af8 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -128,20 +128,20 @@ "EI": "EI - domestic express", "EC": "EC - international express", "EN": "EN - domestic night express", - + "MP": "MP - intervoivodeship bullet", "MO": "MO - intervoivodeship regio", "MM": "MM - international bullet", "MH": "MH - intervoivodeship night bullet", - + "RP": "RP - voivodeship bullet", "RM": "RM - international voivodeship regio", "RO": "RO - voivodeship regio", "RA": "RA - voivodeship regio (urban)", - + "PW": "PW - empty passenger", "PX": "PX - empty passenger test drive", - + "TC": "TC - international freight (intermodal)", "TG": "TG - international freight (organized cargo)", "TR": "TR - international freight (unorganized cargo)", @@ -151,12 +151,12 @@ "TK": "TK - freight (for stations & sidings)", "TS": "TS - empty freight test drive", "TH": "TH - locomotive rolling stock (over 3 vehicles)", - + "LT": "LT - freight locomotive only", "LP": "LP - passenger locomotive only", "LS": "LS - shunting locomotive only", "LZ": "LS - shunting locomotive only", - + "ZN": "ZN - inspection / diagnostic type", "ZU": "ZU - other maintenance type" } @@ -173,8 +173,14 @@ }, "filters": { "vehicles-all": "all", - "vehicles-traction": "traction units", - "vehicles-wagon": "wagons" + "vehicles-tractions-all": "traction units - all", + "vehicles-tractions-electric": "electric locomotives", + "vehicles-tractions-diesel": "diesel locomotives", + "vehicles-tractions-emu": "electric units", + "vehicles-tractions-dmu": "diesel units", + "vehicles-wagons-all": "wagons - all", + "vehicles-wagons-passenger": "wagons - passenger", + "vehicles-wagons-freight": "wagons - freight" }, "sort-by": { "type": "name", diff --git a/src/locales/pl.json b/src/locales/pl.json index a7990a5..136ae01 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -173,8 +173,14 @@ }, "filters": { "vehicles-all": "wszystkie", - "vehicles-traction": "trakcyjne", - "vehicles-wagon": "wagony" + "vehicles-tractions-all": "trakcyjne - wszystkie", + "vehicles-tractions-electric": "elektrowozy", + "vehicles-tractions-diesel": "spalinowozy", + "vehicles-tractions-emu": "EZT", + "vehicles-tractions-dmu": "SZT", + "vehicles-wagons-all": "wagony - wszystkie", + "vehicles-wagons-passenger": "wagony pasażerskie", + "vehicles-wagons-freight": "wagony towarowe" }, "sort-by": { "type": "nazwa", From 346d20fc081bf15bd757f859b2b2352851887abb Mon Sep 17 00:00:00 2001 From: Spythere Date: Mon, 2 Dec 2024 17:03:33 +0100 Subject: [PATCH 2/5] restruct: types organization --- src/components/cards/RealStockCard.vue | 2 +- src/components/sections/InputsSection.vue | 2 +- src/components/tabs/StockGeneratorTab.vue | 2 +- src/components/tabs/WikiListTab.vue | 2 +- src/managers/apiStockManager.ts | 3 + src/mixins/stockMixin.ts | 2 +- src/mixins/stockPreviewMixin.ts | 2 +- src/store.ts | 2 +- src/types/api.types.ts | 87 +++++++++++++++++++++++ src/{types.ts => types/common.types.ts} | 0 src/utils/vehicleUtils.ts | 2 +- 11 files changed, 98 insertions(+), 8 deletions(-) create mode 100644 src/managers/apiStockManager.ts create mode 100644 src/types/api.types.ts rename src/{types.ts => types/common.types.ts} (100%) diff --git a/src/components/cards/RealStockCard.vue b/src/components/cards/RealStockCard.vue index d939637..f5ddad6 100644 --- a/src/components/cards/RealStockCard.vue +++ b/src/components/cards/RealStockCard.vue @@ -100,7 +100,7 @@ import { useStore } from '../../store'; import imageMixin from '../../mixins/imageMixin'; import stockMixin from '../../mixins/stockMixin'; -import { IRealComposition, VehicleGroupType } from '../../types'; +import { IRealComposition, VehicleGroupType } from '../../types/common.types'; function getVehicleType(stockType: string): VehicleGroupType { if (/^E/.test(stockType)) return 'loco-electric'; diff --git a/src/components/sections/InputsSection.vue b/src/components/sections/InputsSection.vue index 5d7d6b8..a66f89a 100644 --- a/src/components/sections/InputsSection.vue +++ b/src/components/sections/InputsSection.vue @@ -126,7 +126,7 @@ import imageMixin from '../../mixins/imageMixin'; import { useStore } from '../../store'; import stockPreviewMixin from '../../mixins/stockPreviewMixin'; import stockMixin from '../../mixins/stockMixin'; -import { LocoGroupType, WagonGroupType } from '../../types'; +import { LocoGroupType, WagonGroupType } from '../../types/common.types'; export default defineComponent({ mixins: [imageMixin, stockPreviewMixin, stockMixin], diff --git a/src/components/tabs/StockGeneratorTab.vue b/src/components/tabs/StockGeneratorTab.vue index c40323d..066433e 100644 --- a/src/components/tabs/StockGeneratorTab.vue +++ b/src/components/tabs/StockGeneratorTab.vue @@ -118,7 +118,7 @@ import { defineComponent } from 'vue'; import { useStore } from '../../store'; import stockMixin from '../../mixins/stockMixin'; -import { ICargo, ICarWagon, IStock } from '../../types'; +import { ICargo, ICarWagon, IStock } from '../../types/common.types'; import { isTractionUnit } from '../../utils/vehicleUtils'; import generatorDataJSON from '../../data/generatorData.json'; diff --git a/src/components/tabs/WikiListTab.vue b/src/components/tabs/WikiListTab.vue index 2ca7612..f4150c7 100644 --- a/src/components/tabs/WikiListTab.vue +++ b/src/components/tabs/WikiListTab.vue @@ -98,7 +98,7 @@ import { defineComponent } from 'vue'; import { useStore } from '../../store'; import stockPreviewMixin from '../../mixins/stockPreviewMixin'; -import { IVehicle } from '../../types'; +import { IVehicle } from '../../types/common.types'; import { isTractionUnit } from '../../utils/vehicleUtils'; import stockMixin from '../../mixins/stockMixin'; import imageMixin from '../../mixins/imageMixin'; diff --git a/src/managers/apiStockManager.ts b/src/managers/apiStockManager.ts new file mode 100644 index 0000000..91b0a3f --- /dev/null +++ b/src/managers/apiStockManager.ts @@ -0,0 +1,3 @@ +class ApiStockManager { + +} \ No newline at end of file diff --git a/src/mixins/stockMixin.ts b/src/mixins/stockMixin.ts index 21c1d51..31333fa 100644 --- a/src/mixins/stockMixin.ts +++ b/src/mixins/stockMixin.ts @@ -1,6 +1,6 @@ import { defineComponent } from 'vue'; import { useStore } from '../store'; -import { ICarWagon, ILocomotive, IStock, ICargo, IVehicle } from '../types'; +import { ICarWagon, ILocomotive, IStock, ICargo, IVehicle } from '../types/common.types'; import { isTractionUnit } from '../utils/vehicleUtils'; export default defineComponent({ diff --git a/src/mixins/stockPreviewMixin.ts b/src/mixins/stockPreviewMixin.ts index 0af938a..1d2ac6a 100644 --- a/src/mixins/stockPreviewMixin.ts +++ b/src/mixins/stockPreviewMixin.ts @@ -1,6 +1,6 @@ import { defineComponent } from 'vue'; import { useStore } from '../store'; -import { ICarWagon, ILocomotive, IStock, IVehicle, LocoGroupType, WagonGroupType } from '../types'; +import { ICarWagon, ILocomotive, IStock, IVehicle, LocoGroupType, WagonGroupType } from '../types/common.types'; import { isTractionUnit } from '../utils/vehicleUtils'; export default defineComponent({ diff --git a/src/store.ts b/src/store.ts index f844e26..140b129 100644 --- a/src/store.ts +++ b/src/store.ts @@ -9,7 +9,7 @@ import { LocoGroupType, WagonGroupType, IVehicleData, -} from './types'; +} from './types/common.types'; import { defineStore } from 'pinia'; import { acceptableWeight, diff --git a/src/types/api.types.ts b/src/types/api.types.ts new file mode 100644 index 0000000..8d474df --- /dev/null +++ b/src/types/api.types.ts @@ -0,0 +1,87 @@ +// API namespace +export namespace API { + export interface ActiveData { + trains: Train[]; + activeSceneries: ActiveScenery[]; + } +} + +export interface ActiveScenery { + dispatcherId: number; + dispatcherName: string; + dispatcherIsSupporter: boolean; + stationName: string; + stationHash: string; + region: string; + maxUsers: number; + currentUsers: number; + spawn: number; + lastSeen: number; + dispatcherExp: number; + nameFromHeader: string; + spawnString?: string; + networkConnectionString: string; + isOnline: number; + dispatcherRate: number; + dispatcherStatus: number; +} + +export interface Train { + id: string; + trainNo: number; + mass: number; + speed: number; + length: number; + distance: number; + stockString: string; + driverName: string; + driverId: number; + driverIsSupporter: boolean; + driverLevel: number; + currentStationHash: string; + currentStationName: string; + signal: string; + connectedTrack: string; + online: number; + lastSeen: number; + region: string; + isTimeout: boolean; + timetable?: Timetable; +} + +export interface Timetable { + SKR: boolean; + TWR: boolean; + hasDangerousCargo: boolean; + hasExtraDeliveries: boolean; + warningNotes: string; + category: string; + stopList: TimetableStop[]; + route: string; + timetableId: number; + sceneries: string[]; + path: string; +} + +export interface TimetableStop { + stopName: string; + stopNameRAW: string; + stopType: string; + stopDistance: number; + pointId: string; + comments?: (null | string)[]; + mainStop: boolean; + arrivalLine?: string; + arrivalTimestamp: number; + arrivalRealTimestamp: number; + arrivalDelay: number; + departureLine?: string; + departureTimestamp: number; + departureRealTimestamp: number; + departureDelay: number; + beginsHere: boolean; + terminatesHere: boolean; + confirmed: number; + stopped: number; + stopTime?: number; +} diff --git a/src/types.ts b/src/types/common.types.ts similarity index 100% rename from src/types.ts rename to src/types/common.types.ts diff --git a/src/utils/vehicleUtils.ts b/src/utils/vehicleUtils.ts index f4c62d4..51717ee 100644 --- a/src/utils/vehicleUtils.ts +++ b/src/utils/vehicleUtils.ts @@ -6,7 +6,7 @@ import { IVehiclesAPIResponse, LocoGroupType, WagonGroupType, -} from '../types'; +} from '../types/common.types'; import { MassLimitLocoType, SpeedLimitLocoType, From b602819179bf60f6d5261c1a85f1d1d956b6fdb5 Mon Sep 17 00:00:00 2001 From: Spythere Date: Mon, 2 Dec 2024 17:54:46 +0100 Subject: [PATCH 3/5] chore: added more advanced routing to elements --- package.json | 3 +- src/App.vue | 3 +- src/components/sections/StockSection.vue | 87 ++++------------------- src/components/tabs/StockGeneratorTab.vue | 5 +- src/locales/en.json | 8 +-- src/locales/pl.json | 8 +-- src/main.ts | 3 +- src/managers/apiManager.ts | 16 +++++ src/managers/apiStockManager.ts | 3 - src/router.ts | 53 ++++++++++++++ src/store.ts | 16 +---- src/styles/global.scss | 7 +- src/types/common.types.ts | 1 - yarn.lock | 12 ++++ 14 files changed, 120 insertions(+), 105 deletions(-) create mode 100644 src/managers/apiManager.ts delete mode 100644 src/managers/apiStockManager.ts create mode 100644 src/router.ts diff --git a/package.json b/package.json index 6f8b309..74b2e8d 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "pinia": "^2.0.17", "prettier": "^3.0.3", "vue": "^3.2.37", - "vue-i18n": "9.11.0" + "vue-i18n": "9.11.0", + "vue-router": "4" }, "devDependencies": { "@rushstack/eslint-patch": "^1.3.3", diff --git a/src/App.vue b/src/App.vue index e97941b..8307304 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,7 +1,8 @@