From 65b159f8fd6060d20cd7be7d5cfe6ba214ca2901 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 25 May 2024 16:02:20 +0200 Subject: [PATCH 1/9] fix: scenery timetable duplicates; fix: not opening train modal for queries --- .../JournalTimetables/TimetableGeneral.vue | 2 +- .../SceneryInfo/SceneryInfoUserList.vue | 4 +-- .../SceneryView/SceneryTimetable.vue | 12 ++++----- src/components/TrainsView/TrainModal.vue | 2 +- src/components/TrainsView/TrainTable.vue | 15 ++--------- src/mixins/modalTrainMixin.ts | 11 ++++++-- src/store/apiStore.ts | 2 -- src/store/mainStore.ts | 25 +++++++++---------- src/typings/common.ts | 1 + src/views/TrainsView.vue | 2 +- 10 files changed, 34 insertions(+), 42 deletions(-) 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); } }); } From 17d77a80d8edf6b467469ec5ccfee95dc19a37d2 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 25 May 2024 16:02:40 +0200 Subject: [PATCH 2/9] bump: 1.24.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 84ba1cf..93d28b9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "stacjownik", - "version": "1.24.2", + "version": "1.24.3", "private": true, "scripts": { "dev": "vite", From bcb9c63cb043162d31a65eab145efca5c712e286 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 25 May 2024 17:05:41 +0200 Subject: [PATCH 3/9] chore: reactive hiding body scroll on modal --- src/components/TrainsView/TrainModal.vue | 7 +++++++ src/mixins/modalTrainMixin.ts | 7 ------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/TrainsView/TrainModal.vue b/src/components/TrainsView/TrainModal.vue index 4f1b186..b971a2c 100644 --- a/src/components/TrainsView/TrainModal.vue +++ b/src/components/TrainsView/TrainModal.vue @@ -29,8 +29,15 @@ export default defineComponent({ chosenTrain(train: Train | undefined) { this.$nextTick(() => { if (train) { + document.body.classList.add('no-scroll'); const contentEl = this.$refs['content'] as HTMLElement; contentEl.focus(); + } else { + (this.store.modalLastClickedTarget as any)?.focus(); + + setTimeout(() => { + document.body.classList.remove('no-scroll'); + }, 90); } }); } diff --git a/src/mixins/modalTrainMixin.ts b/src/mixins/modalTrainMixin.ts index 684eece..390fdea 100644 --- a/src/mixins/modalTrainMixin.ts +++ b/src/mixins/modalTrainMixin.ts @@ -14,24 +14,17 @@ export default defineComponent({ methods: { 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; }, closeModal() { this.store.chosenModalTrainId = undefined; this.tooltipStore.hide(); - - setTimeout(() => { - (this.store.modalLastClickedTarget as any)?.focus(); - document.body.classList.remove('no-scroll'); - }, 150); } } }); From 33b98ca313edbf9bf3ada71c7f821e348b4c6a88 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 25 May 2024 17:11:28 +0200 Subject: [PATCH 4/9] chore: added text color for active filters info --- src/components/StationsView/StationFilterCard.vue | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/StationsView/StationFilterCard.vue b/src/components/StationsView/StationFilterCard.vue index 2a6d822..00663cb 100644 --- a/src/components/StationsView/StationFilterCard.vue +++ b/src/components/StationsView/StationFilterCard.vue @@ -33,12 +33,13 @@
{{ $t('filters.title') }}

-
- {{ $t('filters.changed-filters-count') }} {{ changedFilters.length }} +
+ +
-
{{ $t('filters.no-changed-filters') }}
-
Date: Sat, 25 May 2024 17:12:19 +0200 Subject: [PATCH 5/9] chore: locale update --- src/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 2e3d8eb..465e467 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -112,8 +112,8 @@ "filters": "FILTERS", "donate": "DONATE", - "search-button": "Search", - "reset-button": "Reset", + "search-button": "SEARCH", + "reset-button": "RESET", "sort-title": "SORT BY:", "filter-title": "FILTER BY:", From 834b14da69c69f3eb6b116307143b9d23e91a095 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 25 May 2024 17:26:27 +0200 Subject: [PATCH 6/9] fix: card dvh --- src/components/Global/Card.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Global/Card.vue b/src/components/Global/Card.vue index 06e9eed..709edea 100644 --- a/src/components/Global/Card.vue +++ b/src/components/Global/Card.vue @@ -76,6 +76,7 @@ export default defineComponent({ z-index: 210; overflow: auto; max-height: 95vh; + max-height: 95dvh; box-shadow: 0 0 15px 10px #0e0e0e; From 813b55745523dd3a983db8d7e36230662ef05b6e Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 25 May 2024 17:55:18 +0200 Subject: [PATCH 7/9] chore: improved card positioning --- src/components/Global/Card.vue | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/components/Global/Card.vue b/src/components/Global/Card.vue index 709edea..b7023d6 100644 --- a/src/components/Global/Card.vue +++ b/src/components/Global/Card.vue @@ -2,10 +2,9 @@
-
+
-
@@ -52,8 +51,12 @@ export default defineComponent({ left: 0; width: 100%; - height: 100vh; + height: 100%; z-index: 200; + + display: flex; + justify-content: center; + align-items: center; } .card-background { @@ -69,20 +72,16 @@ export default defineComponent({ } .card-body { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 210; - overflow: auto; + position: relative; + + margin: 1em; + + background-color: #1a1a1a; + box-shadow: 0 0 15px 10px #0e0e0e; + max-height: 95vh; max-height: 95dvh; - box-shadow: 0 0 15px 10px #0e0e0e; - - & > :slotted(div) { - background-color: #1a1a1a; - width: 95vw; - } + overflow: auto; } From 6ea1e91d1d705d831e1a3dfc55b43020f64edd2a Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 25 May 2024 17:57:25 +0200 Subject: [PATCH 8/9] hotfix: card positioning --- src/components/Global/Card.vue | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/Global/Card.vue b/src/components/Global/Card.vue index b7023d6..a6457f6 100644 --- a/src/components/Global/Card.vue +++ b/src/components/Global/Card.vue @@ -76,12 +76,18 @@ export default defineComponent({ margin: 1em; + max-height: 90vh; + max-height: 95dvh; + background-color: #1a1a1a; box-shadow: 0 0 15px 10px #0e0e0e; - max-height: 95vh; - max-height: 95dvh; - overflow: auto; } + +@include smallScreen { + .card { + align-items: flex-start; + } +} From bf8d4a9ef4e80b05571207a944e45b3ab483e0cd Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 25 May 2024 18:06:01 +0200 Subject: [PATCH 9/9] chore: global font sizing; chore: train modal dvh --- src/App.vue | 2 +- src/components/Global/Card.vue | 2 +- src/components/TrainsView/TrainModal.vue | 12 ++++-------- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/App.vue b/src/App.vue index a2c9683..36cf3e5 100644 --- a/src/App.vue +++ b/src/App.vue @@ -210,7 +210,7 @@ export default defineComponent({ overflow-x: hidden; @include smallScreen() { - font-size: calc(0.65rem + 0.8vw); + font-size: calc(0.65rem + 0.85vw); } @include screenLandscape() { diff --git a/src/components/Global/Card.vue b/src/components/Global/Card.vue index a6457f6..25fff68 100644 --- a/src/components/Global/Card.vue +++ b/src/components/Global/Card.vue @@ -76,7 +76,7 @@ export default defineComponent({ margin: 1em; - max-height: 90vh; + max-height: 95vh; max-height: 95dvh; background-color: #1a1a1a; diff --git a/src/components/TrainsView/TrainModal.vue b/src/components/TrainsView/TrainModal.vue index b971a2c..c2e0f71 100644 --- a/src/components/TrainsView/TrainModal.vue +++ b/src/components/TrainsView/TrainModal.vue @@ -54,12 +54,14 @@ export default defineComponent({ left: 0; width: 100%; + height: 100%; color: white; z-index: 200; display: flex; justify-content: center; + align-items: flex-start; text-align: left; } @@ -80,10 +82,10 @@ export default defineComponent({ position: relative; overflow-y: scroll; - margin-top: 1em; - width: 95vw; max-height: 95vh; + max-height: 95dvh; + margin-top: 1em; background-color: #1a1a1a; box-shadow: 0 0 15px 10px #0e0e0e; @@ -98,10 +100,4 @@ export default defineComponent({ } } } - -@include smallScreen { - .modal_content { - max-height: 85vh; - } -}