From a818cd980ba965c673cebfb11452e252dc0b083e Mon Sep 17 00:00:00 2001 From: dominik-korsa <29484605+dominik-korsa@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:58:47 +0200 Subject: [PATCH 1/5] Use instead of a @click handler in TrainTable --- src/components/TrainsView/TrainTable.vue | 23 ++++++++++++++--------- src/styles/global.scss | 9 ++++++++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/components/TrainsView/TrainTable.vue b/src/components/TrainsView/TrainTable.vue index e7de17b..505361a 100644 --- a/src/components/TrainsView/TrainTable.vue +++ b/src/components/TrainsView/TrainTable.vue @@ -17,11 +17,10 @@ class="train-row" v-for="train in trains" :key="train.id" - tabindex="0" - @click.stop="driverMixin_showDriverView(train.id)" - @keydown.enter="driverMixin_showDriverView(train.id)" > - + + + @@ -35,13 +34,10 @@ import Loading from '../Global/Loading.vue'; import TrainInfo from './TrainInfo.vue'; import { Status, Train } from '../../typings/common'; import { useApiStore } from '../../store/apiStore'; -import driverViewMixin from '../../mixins/driverViewMixin'; export default defineComponent({ components: { Loading, TrainInfo }, - mixins: [driverViewMixin], - props: { trains: { type: Array as PropType, @@ -68,6 +64,17 @@ export default defineComponent({ }; }, + methods: { + getTrainRoute(trainId: string) { + return { + name: 'DriverView', + query: { + trainId, + } + } + } + }, + computed: { dataStatus() { if (this.store.isOffline) return Status.Data.Offline; @@ -107,7 +114,5 @@ li.train-row { background-color: var(--clr-secondary); margin-bottom: 1em; width: 100%; - - cursor: pointer; } diff --git a/src/styles/global.scss b/src/styles/global.scss index 4307443..3abd59a 100644 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -123,7 +123,7 @@ input { border-radius: 50%; } -a { +a:not(.block-link) { display: inline-block; color: white; @@ -138,6 +138,13 @@ a { } } +a.block-link { + display: block; + + color: inherit; + text-decoration: none; +} + ul { padding: 0; list-style: none; From 9837ae97e1e09723d26b201dc55be5373459e8d1 Mon Sep 17 00:00:00 2001 From: dominik-korsa <29484605+dominik-korsa@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:29:53 +0200 Subject: [PATCH 2/5] Use instead of a @click handler in SceneryTimetable --- src/components/SceneryView/SceneryTimetable.vue | 12 +++++------- src/components/TrainsView/TrainTable.vue | 13 +------------ src/router/index.ts | 4 ++-- src/store/mainStore.ts | 7 +++++++ src/typings/common.ts | 4 ++++ 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/components/SceneryView/SceneryTimetable.vue b/src/components/SceneryView/SceneryTimetable.vue index acd0c9e..c61c7e4 100644 --- a/src/components/SceneryView/SceneryTimetable.vue +++ b/src/components/SceneryView/SceneryTimetable.vue @@ -63,14 +63,13 @@ {{ $t('scenery.no-timetables') }} -
@@ -169,7 +168,7 @@ -
+
@@ -196,7 +195,7 @@ export default defineComponent({ components: { Loading, ScheduledTrainStatus }, - mixins: [dateMixin, routerMixin, trainCategoryMixin, driverViewMixin], + mixins: [dateMixin, routerMixin, trainCategoryMixin], props: { station: { @@ -391,7 +390,6 @@ export default defineComponent({ background: #353535; - cursor: pointer; z-index: 10; &.empty { diff --git a/src/components/TrainsView/TrainTable.vue b/src/components/TrainsView/TrainTable.vue index 505361a..2be3642 100644 --- a/src/components/TrainsView/TrainTable.vue +++ b/src/components/TrainsView/TrainTable.vue @@ -18,7 +18,7 @@ v-for="train in trains" :key="train.id" > - + @@ -64,17 +64,6 @@ export default defineComponent({ }; }, - methods: { - getTrainRoute(trainId: string) { - return { - name: 'DriverView', - query: { - trainId, - } - } - } - }, - computed: { dataStatus() { if (this.store.isOffline) return Status.Data.Offline; diff --git a/src/router/index.ts b/src/router/index.ts index 49cd8e1..524bc0b 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -7,7 +7,7 @@ const routes: Array = [ component: () => import('../views/StationsView.vue'), props: (route) => ({ region: route.query.region - }) + }), }, { path: '/trains', @@ -55,7 +55,7 @@ const routes: Array = [ component: () => import('../views/JournalDispatchers.vue'), props: (route) => ({ region: route.query.region - }) + }), }, { path: '/:catchAll(.*)', diff --git a/src/store/mainStore.ts b/src/store/mainStore.ts index 129e5bb..1434165 100644 --- a/src/store/mainStore.ts +++ b/src/store/mainStore.ts @@ -86,6 +86,13 @@ export const useMainStore = defineStore('mainStore', { isSupporter: train.driverIsSupporter, driverLevel: train.driverLevel, + driverRouteLocation: { + name: 'DriverView', + query: { + trainId: train.id + } + }, + timetableData: timetable ? { timetableId: timetable.timetableId, diff --git a/src/typings/common.ts b/src/typings/common.ts index a8e049a..97f7ad4 100644 --- a/src/typings/common.ts +++ b/src/typings/common.ts @@ -1,3 +1,5 @@ +import { RouteLocationRaw } from 'vue-router'; + export type Availability = 'default' | 'unavailable' | 'nonPublic' | 'abandoned' | 'nonDefault'; export type ScenerySpawnType = 'passenger' | 'freight' | 'loco' | 'all'; @@ -70,6 +72,8 @@ export interface Train { isTimeout: boolean; isSupporter: boolean; + driverRouteLocation: RouteLocationRaw, + timetableData?: { timetableId: number; category: string; From 462dd7dd7a35acd0fa89c681d98cbd575753b8b2 Mon Sep 17 00:00:00 2001 From: dominik-korsa <29484605+dominik-korsa@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:49:31 +0200 Subject: [PATCH 3/5] Replace all remaining uses of driverViewMixin with --- .../JournalTimetables/TimetableDetails.vue | 29 ++++++++++--------- .../SceneryInfo/SceneryInfoUserList.vue | 13 ++++----- .../SceneryView/SceneryTimetable.vue | 1 - src/mixins/driverViewMixin.ts | 14 --------- src/styles/global.scss | 3 +- 5 files changed, 23 insertions(+), 37 deletions(-) delete mode 100644 src/mixins/driverViewMixin.ts diff --git a/src/components/JournalView/JournalTimetables/TimetableDetails.vue b/src/components/JournalView/JournalTimetables/TimetableDetails.vue index 86687bd..a81f12b 100644 --- a/src/components/JournalView/JournalTimetables/TimetableDetails.vue +++ b/src/components/JournalView/JournalTimetables/TimetableDetails.vue @@ -6,14 +6,14 @@ Arrow icon - +
@@ -86,13 +86,11 @@ import { PropType, defineComponent } from 'vue'; import StockList from '../../Global/StockList.vue'; import { API } from '../../../typings/api'; -import driverViewMixin from '../../../mixins/driverViewMixin'; +import { RouteLocationRaw } from 'vue-router'; export default defineComponent({ components: { StockList }, - mixins: [driverViewMixin], - emits: ['toggleExtraInfo'], props: { @@ -127,6 +125,15 @@ export default defineComponent({ stockLength: Number(historyData[3]) || undefined }; }); + }, + driverRouteLocation(): RouteLocationRaw | null { + if (this.timetable.terminated) return null; + return { + name: 'DriverView', + query: { + trainId: `${this.timetable.driverId}|${this.timetable.trainNo}|eu` + } + } } }, methods: { @@ -135,12 +142,6 @@ export default defineComponent({ imageEl.src = '/images/icon-unknown.png'; }, - showTimetable(timetable: API.TimetableHistory.Data, target: EventTarget | null) { - if (timetable?.terminated) return; - - this.driverMixin_showDriverView(`${timetable.driverId}|${timetable.trainNo}|eu`); - }, - toggleExtraInfo() { this.$emit('toggleExtraInfo', this.timetable.id); } diff --git a/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue b/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue index 4e9ffd0..c4a377c 100644 --- a/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue +++ b/src/components/SceneryView/SceneryInfo/SceneryInfoUserList.vue @@ -18,11 +18,11 @@ tabindex="0" :key="train.id" :data-status="status" - @click.prevent="driverMixin_showDriverView(train.id)" - @keydown.enter="driverMixin_showDriverView(train.id)" > - {{ train.trainNo }} - {{ train.driverName }} + + {{ train.trainNo }} + {{ train.driverName }} + @@ -31,13 +31,12 @@