From 35453ba3c2965c9640618e2c6303887035fc62f2 Mon Sep 17 00:00:00 2001 From: Spythere Date: Tue, 24 May 2022 18:50:43 +0200 Subject: [PATCH] Przekierowanie do aktywnego RJ --- .../JournalView/JournalTimetables.vue | 22 ++++---- .../SceneryInfo/SceneryInfoUserList.vue | 28 ++++------ .../SceneryView/SceneryTimetable.vue | 25 ++++----- src/components/TrainsView/TrainOptions.vue | 2 + src/components/TrainsView/TrainTable.vue | 56 ++++++++++++------- src/mixins/routerMixin.ts | 12 ++++ src/router/index.ts | 2 +- src/scripts/interfaces/Station.ts | 1 + src/store/index.ts | 2 +- src/views/TrainsView.vue | 29 ++++++---- 10 files changed, 103 insertions(+), 76 deletions(-) create mode 100644 src/mixins/routerMixin.ts diff --git a/src/components/JournalView/JournalTimetables.vue b/src/components/JournalView/JournalTimetables.vue index 49d6d80..98d826c 100644 --- a/src/components/JournalView/JournalTimetables.vue +++ b/src/components/JournalView/JournalTimetables.vue @@ -37,8 +37,8 @@ {{ item.trainCategoryCode }}  @@ -157,6 +157,7 @@ import JournalOptions from '@/components/JournalView/JournalOptions.vue'; import { URLs } from '@/scripts/utils/apiURLs'; import { journalTimetableFilters } from '@/data/journalFilters'; import { JournalFilterType } from '@/scripts/enums/JournalFilterType'; +import routerMixin from '@/mixins/routerMixin'; const PROD_MODE = process.env.VUE_APP_JOURNAL_TIMETABLES_DEV != "1" || process.env.NODE_ENV === "production"; @@ -199,7 +200,7 @@ interface TimetableHistory { export default defineComponent({ components: { SearchBox, ActionButton, JournalOptions }, - mixins: [dateMixin], + mixins: [dateMixin, routerMixin], data: () => ({ icons: { @@ -268,21 +269,18 @@ export default defineComponent({ }, methods: { + navigateToTimetable(historyItem: TimetableHistory) { + if(historyItem.terminated) return; + + this.navigateToTrain(historyItem.trainNo, historyItem.driverName); + }, + getSceneryList(historyItem: TimetableHistory) { return historyItem.sceneriesString .split('%') .map((name, i) => ({ name, confirmed: i < historyItem.confirmedStopsCount })); }, - navigateToTrain(trainNo: number | null) { - if (!trainNo) return; - - this.$router.push({ - name: 'TrainsView', - query: { train: trainNo.toString() }, - }); - }, - handleScroll() { this.showReturnButton = window.scrollY > window.innerHeight; diff --git a/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue b/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue index 1a2e038..949d4fa 100644 --- a/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue +++ b/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue @@ -12,8 +12,8 @@ :class="train.stopStatus" :key="train.trainNo + i" tabindex="0" - @click="() => navigateToTrain(train.trainNo)" - @keydown.enter="navigateToTrain(train.trainNo)" + @click="() => navigateToTrain(train.trainNo, train.driverName)" + @keydown.enter="navigateToTrain(train.trainNo, train.driverName)" > {{ train.trainNo }} {{ train.driverName }} @@ -26,10 +26,13 @@ diff --git a/src/components/SceneryView/SceneryTimetable.vue b/src/components/SceneryView/SceneryTimetable.vue index 89a705d..ed86e84 100644 --- a/src/components/SceneryView/SceneryTimetable.vue +++ b/src/components/SceneryView/SceneryTimetable.vue @@ -44,8 +44,8 @@ v-for="(scheduledTrain, i) in computedScheduledTrains" :key="i + 1" tabindex="0" - @click="navigateToTrain(scheduledTrain.trainNo)" - @keydown.enter="navigateToTrain(scheduledTrain.trainNo)" + @click="navigateToTrain(scheduledTrain.trainNo, scheduledTrain.driverName)" + @keydown.enter="navigateToTrain(scheduledTrain.trainNo, scheduledTrain.driverName)" > @@ -90,7 +90,7 @@ {{ timestampToString(scheduledTrain.stopInfo.arrivalTimestamp) }}
- {{ + {{ timestampToString(scheduledTrain.stopInfo.arrivalTimestamp) }} @@ -120,7 +120,7 @@ {{ timestampToString(scheduledTrain.stopInfo.departureTimestamp) }}
- {{ + {{ timestampToString(scheduledTrain.stopInfo.departureTimestamp) }} @@ -149,12 +149,12 @@ import { GETTERS } from '@/constants/storeConstants'; import { DataStatus } from '@/scripts/enums/DataStatus'; import { ComputedRef } from 'vue'; import dateMixin from '@/mixins/dateMixin'; -import TrainStop from '@/scripts/interfaces/TrainStop'; +import routerMixin from '@/mixins/routerMixin'; export default defineComponent({ components: { SelectBox }, - mixins: [dateMixin], + mixins: [dateMixin, routerMixin], props: { station: { @@ -192,10 +192,12 @@ export default defineComponent({ const computedScheduledTrains = computed(() => { if (!props.station) return []; + const station = props.station as Station; + let scheduledTrains = - props.station.generalInfo?.checkpoints.find((cp) => cp.checkpointName === selectedCheckpoint.value) + station.generalInfo?.checkpoints.find((cp) => cp.checkpointName === selectedCheckpoint.value) ?.scheduledTrains || - props.station.onlineInfo?.scheduledTrains || + station.onlineInfo?.scheduledTrains || []; return ( @@ -234,13 +236,6 @@ export default defineComponent({ selectCheckpoint(cp: { checkpointName: string }) { this.selectedCheckpoint = cp.checkpointName; }, - - navigateToTrain(trainNo: number) { - this.$router.push({ - name: 'TrainsView', - query: { train: trainNo.toString() }, - }); - }, }, mounted() { diff --git a/src/components/TrainsView/TrainOptions.vue b/src/components/TrainsView/TrainOptions.vue index 8e1ec52..7f70fbd 100644 --- a/src/components/TrainsView/TrainOptions.vue +++ b/src/components/TrainsView/TrainOptions.vue @@ -132,6 +132,8 @@ export default defineComponent({ resetFilters() { this.filterList.forEach((f) => (f.isActive = true)); + this.searchedDriver = ""; + this.searchedTrain = ""; }, }, }); diff --git a/src/components/TrainsView/TrainTable.vue b/src/components/TrainsView/TrainTable.vue index 6b88b33..0b21579 100644 --- a/src/components/TrainsView/TrainTable.vue +++ b/src/components/TrainsView/TrainTable.vue @@ -24,12 +24,7 @@ > - +
@@ -38,7 +33,7 @@ diff --git a/src/mixins/routerMixin.ts b/src/mixins/routerMixin.ts new file mode 100644 index 0000000..99c514b --- /dev/null +++ b/src/mixins/routerMixin.ts @@ -0,0 +1,12 @@ +import { defineComponent } from "vue"; + +export default defineComponent({ + methods: { + navigateToTrain(trainNo: number, driverName: string) { + this.$router.push({ + name: 'TrainsView', + query: { trainNo, driverName }, + }); + } + } +}) \ No newline at end of file diff --git a/src/router/index.ts b/src/router/index.ts index 273301c..9aec819 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -10,7 +10,7 @@ const routes: Array = [ path: "/trains", name: "TrainsView", component: () => import("@/views/TrainsView.vue"), - props: route => ({ train: route.query.train }) + props: route => ({ train: route.query.train, driver: route.query.driver }) }, { path: "/scenery", diff --git a/src/scripts/interfaces/Station.ts b/src/scripts/interfaces/Station.ts index e4bdbce..e804bc6 100644 --- a/src/scripts/interfaces/Station.ts +++ b/src/scripts/interfaces/Station.ts @@ -52,6 +52,7 @@ export default interface Station { stationTrains?: { driverName: string; + driverId: number; trainNo: number; stopStatus?: string; }[]; diff --git a/src/store/index.ts b/src/store/index.ts index 8bd0f1e..fd88748 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -180,7 +180,7 @@ export const store = createStore({ const stationTrains = data.trains ?.filter(train => train?.region === this.state.region.id && train.online && train.currentStationName === stationAPI.stationName) - .map(train => ({ driverName: train.driverName, trainNo: train.trainNo })); + .map(train => ({ driverName: train.driverName, driverId: train.driverId, trainNo: train.trainNo })); station?.generalInfo?.checkpoints.forEach(cp => cp.scheduledTrains.length = 0); diff --git a/src/views/TrainsView.vue b/src/views/TrainsView.vue index 085f910..10cface 100644 --- a/src/views/TrainsView.vue +++ b/src/views/TrainsView.vue @@ -13,7 +13,7 @@