diff --git a/src/components/JournalView/JournalTimetables/TimetableGeneral.vue b/src/components/JournalView/JournalTimetables/TimetableGeneral.vue index ed12ae9..a8c6d45 100644 --- a/src/components/JournalView/JournalTimetables/TimetableGeneral.vue +++ b/src/components/JournalView/JournalTimetables/TimetableGeneral.vue @@ -103,7 +103,7 @@ export default defineComponent({ showTimetable(timetable: API.TimetableHistory.Data, target: EventTarget | null) { if (timetable?.terminated) return; - this.selectModalTrain(timetable.driverName + timetable.trainNo.toString(), target); + this.selectModalTrainById(`${timetable.driverName}${timetable.trainNo}`, target); } } }); diff --git a/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue b/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue index 3f2ab4d..d9d06ad 100644 --- a/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue +++ b/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue @@ -18,8 +18,8 @@ tabindex="0" :key="train.id" :data-status="status" - @click.prevent="selectModalTrain(train.id, $event.currentTarget)" - @keydown.enter="selectModalTrain(train.id, $event.currentTarget)" + @click.prevent="selectModalTrain(train, $event.currentTarget)" + @keydown.enter="selectModalTrain(train, $event.currentTarget)" > {{ train.trainNo }} {{ train.driverName }} diff --git a/src/components/SceneryView/SceneryTimetable.vue b/src/components/SceneryView/SceneryTimetable.vue index c6d0788..c18dcd5 100644 --- a/src/components/SceneryView/SceneryTimetable.vue +++ b/src/components/SceneryView/SceneryTimetable.vue @@ -39,8 +39,8 @@
@@ -65,11 +65,11 @@
@@ -236,8 +236,6 @@ export default defineComponent({ if (!this.station) return []; if (!this.onlineScenery) return []; - console.log(this.onlineScenery.scheduledTrains, this.chosenCheckpoint); - return this.onlineScenery.scheduledTrains .filter( (ct) => diff --git a/src/components/TrainsView/TrainModal.vue b/src/components/TrainsView/TrainModal.vue index f5d1570..4f1b186 100644 --- a/src/components/TrainsView/TrainModal.vue +++ b/src/components/TrainsView/TrainModal.vue @@ -21,7 +21,7 @@ export default defineComponent({ computed: { chosenTrain() { - return this.store.trainList.find((train) => train.id == this.store.chosenModalTrainId); + return this.store.trainList.find((train) => train.modalId == this.store.chosenModalTrainId); } }, diff --git a/src/components/TrainsView/TrainTable.vue b/src/components/TrainsView/TrainTable.vue index 03ea588..20d18e6 100644 --- a/src/components/TrainsView/TrainTable.vue +++ b/src/components/TrainsView/TrainTable.vue @@ -18,8 +18,8 @@ v-for="train in trains" :key="train.id" tabindex="0" - @click.stop="selectModalTrain(train.id, $event.currentTarget)" - @keydown.enter="selectModalTrain(train.id, $event.currentTarget)" + @click.stop="selectModalTrain(train, $event.currentTarget)" + @keydown.enter="selectModalTrain(train, $event.currentTarget)" > @@ -77,17 +77,6 @@ export default defineComponent({ return Status.Data.Loaded; } - }, - - activated() { - const query = this.$route.query; - if (query.trainNo && query.driverName) { - this.searchedDriver = query.driverName.toString(); - this.searchedTrain = query.trainNo.toString(); - setTimeout(() => { - this.selectModalTrain(query.driverName! + query.trainNo!.toString()); - }, 20); - } } }); diff --git a/src/mixins/modalTrainMixin.ts b/src/mixins/modalTrainMixin.ts index 5c80dc3..684eece 100644 --- a/src/mixins/modalTrainMixin.ts +++ b/src/mixins/modalTrainMixin.ts @@ -1,6 +1,7 @@ import { defineComponent } from 'vue'; import { useMainStore } from '../store/mainStore'; import { useTooltipStore } from '../store/tooltipStore'; +import { Train } from '../typings/common'; export default defineComponent({ data() { @@ -11,8 +12,14 @@ export default defineComponent({ }, methods: { - selectModalTrain(trainId: string, target?: EventTarget | null) { - this.store.chosenModalTrainId = trainId; + selectModalTrain(train: Train, target?: EventTarget | null) { + this.store.chosenModalTrainId = train.modalId; + document.body.classList.add('no-scroll'); + if (target) this.store.modalLastClickedTarget = target; + }, + + selectModalTrainById(modalId: string, target?: EventTarget | null) { + this.store.chosenModalTrainId = modalId; document.body.classList.add('no-scroll'); if (target) this.store.modalLastClickedTarget = target; }, diff --git a/src/store/apiStore.ts b/src/store/apiStore.ts index 17e49ef..990dd53 100644 --- a/src/store/apiStore.ts +++ b/src/store/apiStore.ts @@ -60,8 +60,6 @@ export const useApiStore = defineStore('apiStore', { if (!this.activeData) this.dataStatuses.connection = Status.Data.Loading; try { - console.log('Fetching active data at ' + new Date().toLocaleTimeString('pl-PL')); - const response = await this.client!.get('api/getActiveData'); this.activeData = response.data; diff --git a/src/store/mainStore.ts b/src/store/mainStore.ts index 1ac3b12..6db5296 100644 --- a/src/store/mainStore.ts +++ b/src/store/mainStore.ts @@ -36,17 +36,13 @@ export const useMainStore = defineStore('mainStore', { }) as MainStoreState, getters: { - checkpointsTrains() { - return checkpointsTrains; - }, - trainList(): Train[] { const apiStore = useApiStore(); checkpointsTrains.clear(); sceneriesTrains.clear(); - const x = (apiStore.activeData?.trains ?? []) + return (apiStore.activeData?.trains ?? []) .filter((train) => train.timetable || train.online) .map((train) => { const stock = train.stockString.split(';'); @@ -65,6 +61,7 @@ export const useMainStore = defineStore('mainStore', { const trainObj = { id: train.id, + modalId: `${train.driverName}${train.trainNo}`, // simplified id for train modal trainNo: train.trainNo, mass: train.mass, @@ -131,8 +128,6 @@ export const useMainStore = defineStore('mainStore', { return trainObj; }); - - return x; }, // computed active sceneries @@ -143,7 +138,6 @@ export const useMainStore = defineStore('mainStore', { if (!apiStore.activeData?.activeSceneries) return []; - console.time('activeSceneryList'); const offlineActiveSceneries = this.trainList.reduce((acc, train) => { if (!train.timetableData) return acc; @@ -238,9 +232,16 @@ export const useMainStore = defineStore('mainStore', { const station = this.stationList.find((s) => s.name === scenery.name); - const checkpoints = [scenery.name]; - if (station?.generalInfo?.checkpoints && station.generalInfo.checkpoints.length > 0) - checkpoints.push(...station.generalInfo.checkpoints.filter((cp) => cp !== station.name)); + let checkpointsSet: Set = new Set(); + + // Add checkpoints to active scenery data + checkpointsSet.add(scenery.name.toLowerCase()); + + station?.generalInfo?.checkpoints.forEach((cpName) => { + checkpointsSet.add(cpName.toLowerCase()); + }); + + const checkpoints = Array.from(checkpointsSet); scenery.stationTrains = sceneriesTrains.get(scenery.name)?.filter((sc) => sc.region == this.region.id) ?? []; @@ -266,8 +267,6 @@ export const useMainStore = defineStore('mainStore', { }); } - console.timeEnd('activeSceneryList'); - return allActiveSceneries; }, diff --git a/src/typings/common.ts b/src/typings/common.ts index 59c4a4b..0e5393f 100644 --- a/src/typings/common.ts +++ b/src/typings/common.ts @@ -41,6 +41,7 @@ export interface RegionCounters { export interface Train { id: string; + modalId: string; mass: number; length: number; speed: number; diff --git a/src/views/TrainsView.vue b/src/views/TrainsView.vue index 7e2283f..3b86937 100644 --- a/src/views/TrainsView.vue +++ b/src/views/TrainsView.vue @@ -109,7 +109,7 @@ export default defineComponent({ this.$nextTick(() => { if (this.trainId) { - this.selectModalTrain(this.trainId); + this.selectModalTrainById(this.trainId); } }); }