mirror of
https://github.com/Spythere/srjp-td2.git
synced 2026-05-03 13:38:12 +00:00
80 lines
2.8 KiB
TypeScript
80 lines
2.8 KiB
TypeScript
import { defineStore } from 'pinia';
|
|
import { useApiStore } from './api.store';
|
|
import type { ActiveTrain, TimetableData, ViewMode } from '../types/common.types';
|
|
import { unitNameCorrections } from '../utils/trainUtils';
|
|
|
|
export const useGlobalStore = defineStore('global', {
|
|
state: () => ({
|
|
darkMode: false,
|
|
viewMode: 'active' as ViewMode,
|
|
|
|
selectedActiveTrain: null as ActiveTrain | null,
|
|
selectedStorageTimetable: null as TimetableData | null,
|
|
storageTimetables: {} as Record<number, TimetableData>,
|
|
|
|
timetableWarnings: [] as string[],
|
|
|
|
generatedDate: null as Date | null,
|
|
generatedMs: 0,
|
|
|
|
timetableSearch: '',
|
|
|
|
showSettings: false,
|
|
}),
|
|
getters: {
|
|
activeTimetableTrains() {
|
|
const apiStore = useApiStore();
|
|
|
|
if (!apiStore.activeData) return [];
|
|
|
|
return apiStore.activeData.trains.filter((train) => train.timetable).sort((t1, t2) => t1.driverName.localeCompare(t2.driverName, 'pl-PL'));
|
|
},
|
|
|
|
currentTimetableData(): TimetableData | null {
|
|
if (this.viewMode == 'active') {
|
|
const selectedTrain = this.selectedActiveTrain;
|
|
|
|
if (!selectedTrain || !selectedTrain.timetable) return null;
|
|
|
|
return {
|
|
trainNo: selectedTrain.trainNo,
|
|
mass: selectedTrain.mass,
|
|
length: selectedTrain.length,
|
|
driverId: selectedTrain.driverId,
|
|
driverName: selectedTrain.driverName,
|
|
category: selectedTrain.timetable.category,
|
|
hasDangerousCargo: selectedTrain.timetable.hasDangerousCargo,
|
|
hasExtraDeliveries: selectedTrain.timetable.hasExtraDeliveries,
|
|
warningNotes: selectedTrain.timetable.warningNotes,
|
|
path: selectedTrain.timetable.path,
|
|
route: selectedTrain.timetable.route,
|
|
trainMaxSpeed: selectedTrain.timetable.trainMaxSpeed,
|
|
timetableId: selectedTrain.timetable.timetableId,
|
|
stopListString: selectedTrain.timetable.stopList
|
|
.filter((stop) => stop.mainStop || (/^podg|po|pe$/.test(stop.stopNameRAW)))
|
|
.map(
|
|
(stop) =>
|
|
`${stop.arrivalLine ?? ''};${stop.arrivalTimestamp};${stop.stopNameRAW};${stop.stopTime ? stop.stopTime + '_' + stop.stopType : ''};${
|
|
stop.mainStop
|
|
};${stop.stopDistance};${stop.departureTimestamp};${stop.departureLine ?? ''}`
|
|
)
|
|
.join('~~'),
|
|
headUnits: selectedTrain.stockString
|
|
.split(';')
|
|
.slice(0, 3)
|
|
.filter((s, i) => i == 0 || /-\d+$/.test(s))
|
|
.map((s) => {
|
|
const unitName = s.slice(0, s.indexOf('-'));
|
|
|
|
return unitNameCorrections[unitName] ?? unitName;
|
|
}),
|
|
};
|
|
} else {
|
|
const selectedStorageTimetable = this.selectedStorageTimetable;
|
|
return selectedStorageTimetable;
|
|
}
|
|
},
|
|
},
|
|
actions: {},
|
|
});
|