From 8de03b921021e16640e32a90b6fa3739bc120192 Mon Sep 17 00:00:00 2001 From: Spythere Date: Mon, 30 Oct 2023 23:19:17 +0100 Subject: [PATCH] =?UTF-8?q?rework=20reaktywno=C5=9Bci=20danych=20z=20API?= =?UTF-8?q?=20i=20WS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 38 +-- src/components/App/AppHeader.vue | 8 +- src/components/Global/SelectBox.vue | 13 + .../SceneryView/SceneryDispatchersHistory.vue | 5 + src/components/SceneryView/SceneryHeader.vue | 8 +- src/components/SceneryView/SceneryInfo.vue | 18 +- .../SceneryInfo/SceneryInfoDispatcher.vue | 35 +-- .../SceneryInfo/SceneryInfoSpawnList.vue | 22 +- .../SceneryInfo/SceneryInfoUserList.vue | 44 +-- .../SceneryView/SceneryTimetable.vue | 78 ++--- .../SceneryView/SceneryTimetablesHistory.vue | 5 + src/components/StationsView/FilterOption.vue | 4 +- src/components/StationsView/StationTable.vue | 31 +- src/main.ts | 4 + src/router/index.ts | 15 +- src/scripts/interfaces/ScheduledTrain.ts | 2 + src/scripts/interfaces/store/storeTypes.ts | 33 +- src/scripts/utils/storeUtils.ts | 139 +++++++- src/store/stationFiltersStore.ts | 28 +- src/store/store.ts | 297 +++++++----------- src/styles/global.scss | 4 - src/views/SceneryView.vue | 60 ++-- src/views/StationsView.vue | 12 +- vite.config.ts | 44 ++- 24 files changed, 501 insertions(+), 446 deletions(-) diff --git a/src/App.vue b/src/App.vue index 12b1547..4c460c1 100644 --- a/src/App.vue +++ b/src/App.vue @@ -32,20 +32,19 @@ diff --git a/src/components/SceneryView/SceneryInfo/SceneryInfoDispatcher.vue b/src/components/SceneryView/SceneryInfo/SceneryInfoDispatcher.vue index a834a1b..bfe9659 100644 --- a/src/components/SceneryView/SceneryInfo/SceneryInfoDispatcher.vue +++ b/src/components/SceneryView/SceneryInfo/SceneryInfoDispatcher.vue @@ -1,35 +1,30 @@ @@ -39,19 +34,15 @@ import { PropType, defineComponent } from 'vue'; import dateMixin from '../../../mixins/dateMixin'; import routerMixin from '../../../mixins/routerMixin'; import styleMixin from '../../../mixins/styleMixin'; -import Station from '../../../scripts/interfaces/Station'; import StationStatusBadge from '../../Global/StationStatusBadge.vue'; +import { OnlineScenery } from '../../../scripts/interfaces/store/storeTypes'; export default defineComponent({ mixins: [styleMixin, dateMixin, routerMixin], props: { - station: { - type: Object as PropType, - required: true - }, - onlineFrom: { - type: Number, - default: -1 + onlineScenery: { + type: Object as PropType, + required: false } }, components: { StationStatusBadge } diff --git a/src/components/SceneryView/SceneryInfo/SceneryInfoSpawnList.vue b/src/components/SceneryView/SceneryInfo/SceneryInfoSpawnList.vue index 0f0a245..885918d 100644 --- a/src/components/SceneryView/SceneryInfo/SceneryInfoSpawnList.vue +++ b/src/components/SceneryView/SceneryInfo/SceneryInfoSpawnList.vue @@ -3,14 +3,14 @@

Open spawns icon  {{ $t('scenery.spawns') }}   - {{ station.onlineInfo?.spawns.length || '0' }} + {{ onlineScenery?.spawns.length || '0' }}

- + {{ spawn.spawnName }} @@ -18,9 +18,7 @@ - {{ $t('scenery.no-spawns') }} @@ -28,21 +26,21 @@ diff --git a/src/components/SceneryView/SceneryTimetable.vue b/src/components/SceneryView/SceneryTimetable.vue index 3579f2d..4894c79 100644 --- a/src/components/SceneryView/SceneryTimetable.vue +++ b/src/components/SceneryView/SceneryTimetable.vue @@ -6,14 +6,12 @@ {{ $t('scenery.timetables') }} - {{ - station.onlineInfo?.scheduledTrains?.length || '0' - }} + {{ onlineScenery?.scheduledTrains?.length || '0' }} / {{ - station.onlineInfo?.scheduledTrains?.filter((train) => train.stopInfo.confirmed) - .length || '0' + onlineScenery?.scheduledTrains?.filter((train) => train.stopInfo.confirmed).length || + '0' }} @@ -59,7 +57,7 @@ {{ $t('scenery.offline') }} @@ -186,6 +184,7 @@ import Station from '../../scripts/interfaces/Station'; import { useStore } from '../../store/store'; import modalTrainMixin from '../../mixins/modalTrainMixin'; import ScheduledTrainStatus from './ScheduledTrainStatus.vue'; +import { OnlineScenery } from '../../scripts/interfaces/store/storeTypes'; export default defineComponent({ name: 'SceneryTimetable', @@ -199,9 +198,9 @@ export default defineComponent({ type: Object as PropType, required: true }, - - timetableOnly: { - type: Boolean + onlineScenery: { + type: Object as PropType, + required: false } }, @@ -229,36 +228,9 @@ export default defineComponent({ : props.station?.generalInfo?.checkpoints[0].checkpointName || null ); - const computedScheduledTrains = computed(() => { - if (!props.station) return []; - - const station = props.station as Station; - - let scheduledTrains = - station.generalInfo?.checkpoints.find((cp) => cp.checkpointName === chosenCheckpoint.value) - ?.scheduledTrains || - station.onlineInfo?.scheduledTrains || - []; - - if (!scheduledTrains) return []; - - return ( - scheduledTrains.sort((a, b) => { - if (a.stopStatusID > b.stopStatusID) return 1; - if (a.stopStatusID < b.stopStatusID) return -1; - - if (a.stopInfo.arrivalTimestamp > b.stopInfo.arrivalTimestamp) return 1; - if (a.stopInfo.arrivalTimestamp < b.stopInfo.arrivalTimestamp) return -1; - - return a.stopInfo.departureTimestamp > b.stopInfo.departureTimestamp ? 1 : -1; - }) || [] - ); - }); - return { currentURL, chosenCheckpoint, - computedScheduledTrains, store }; }, @@ -269,27 +241,37 @@ export default defineComponent({ if (this.chosenCheckpoint) url += `&checkpoint=${this.chosenCheckpoint}`; return url; + }, + + computedScheduledTrains() { + return ( + this.onlineScenery?.scheduledTrains + ?.filter( + (train) => + train.checkpointName.toLocaleLowerCase() == + (this.chosenCheckpoint || this.station.name).toLocaleLowerCase() + ) + .sort((a, b) => { + if (a.stopStatusID > b.stopStatusID) return 1; + if (a.stopStatusID < b.stopStatusID) return -1; + + if (a.stopInfo.arrivalTimestamp > b.stopInfo.arrivalTimestamp) return 1; + if (a.stopInfo.arrivalTimestamp < b.stopInfo.arrivalTimestamp) return -1; + + return a.stopInfo.departureTimestamp > b.stopInfo.departureTimestamp ? 1 : -1; + }) || [] + ); } }, methods: { loadSelectedOption() { - if (!this.station) return; - if (!this.station.generalInfo) return; - if (!this.station.generalInfo.checkpoints) return; - if (this.station.generalInfo.checkpoints.length == 0) return; - - if (this.chosenCheckpoint != '') return; - - this.chosenCheckpoint = this.station.generalInfo.checkpoints[0].checkpointName; + this.chosenCheckpoint = + this.station.generalInfo?.checkpoints[0]?.checkpointName || this.station.name; }, setCheckpoint(cp: { checkpointName: string }) { this.chosenCheckpoint = cp.checkpointName; - }, - - showTimetableOnlyView() { - this.$router.push(`${this.$route.fullPath}&timetableOnly=1`); } } }); diff --git a/src/components/SceneryView/SceneryTimetablesHistory.vue b/src/components/SceneryView/SceneryTimetablesHistory.vue index 14aff15..be45b1d 100644 --- a/src/components/SceneryView/SceneryTimetablesHistory.vue +++ b/src/components/SceneryView/SceneryTimetablesHistory.vue @@ -65,6 +65,7 @@ import Station from '../../scripts/interfaces/Station'; import { URLs } from '../../scripts/utils/apiURLs'; import Loading from '../Global/Loading.vue'; import listObserverMixin from '../../mixins/listObserverMixin'; +import { OnlineScenery } from '../../scripts/interfaces/store/storeTypes'; export default defineComponent({ name: 'SceneryTimetablesHistory', @@ -73,6 +74,10 @@ export default defineComponent({ station: { type: Object as PropType, required: true + }, + onlineScenery: { + type: Object as PropType, + required: false } }, diff --git a/src/components/StationsView/FilterOption.vue b/src/components/StationsView/FilterOption.vue index 7bfeb3e..5376db0 100644 --- a/src/components/StationsView/FilterOption.vue +++ b/src/components/StationsView/FilterOption.vue @@ -1,8 +1,8 @@