filtrowanie ukrytych szlaków

This commit is contained in:
2024-01-06 14:47:20 +01:00
parent 2348277b95
commit bc1c1bd3d2
5 changed files with 73 additions and 75 deletions
@@ -1,41 +1,49 @@
<template>
<section class="info-routes" v-if="station.generalInfo">
<div class="routes one-way" v-if="station.generalInfo.routes.oneWay.length > 0">
<div class="routes one-way" v-if="filteredOneWayRoutes.length > 0">
<b>{{ $t('scenery.one-way-routes') }}</b>
<ul class="routes-list">
<li
v-for="route in station.generalInfo.routes.oneWay"
:key="route.name"
@click="setActiveShowLength(route.name)"
v-for="route in filteredOneWayRoutes"
:key="route.routeName"
@click="setActiveShowLength(route.routeName)"
>
<span :class="{ 'no-catenary': !route.catenary, internal: route.isInternal }">
{{ route.name }}</span
<span :class="{ 'no-catenary': !route.isElectric, internal: route.isInternal }">
{{ route.routeName }}</span
>
<span v-if="route.speed" class="speed">
{{ activeShowLength.includes(route.name) ? route.length + 'm' : route.speed }}
<span v-if="route.routeSpeed" class="speed">
{{
activeShowLength.includes(route.routeName)
? route.routeLength + 'm'
: route.routeSpeed
}}
</span>
<span v-if="route.SBL" class="sbl">SBL</span>
<span v-if="route.isRouteSBL" class="sbl">SBL</span>
</li>
</ul>
</div>
<div class="routes two-way" v-if="station.generalInfo.routes.twoWay.length > 0">
<div class="routes two-way" v-if="filteredTwoWayRoutes.length > 0">
<b>{{ $t('scenery.two-way-routes') }}</b>
<ul class="routes-list">
<li
v-for="route in station.generalInfo.routes.twoWay"
:key="route.name"
@click="setActiveShowLength(route.name)"
v-for="route in filteredTwoWayRoutes"
:key="route.routeName"
@click="setActiveShowLength(route.routeName)"
>
<span :class="{ 'no-catenary': !route.catenary, internal: route.isInternal }">{{
route.name
<span :class="{ 'no-catenary': !route.isElectric, internal: route.isInternal }">{{
route.routeName
}}</span>
<span v-if="route.speed" class="speed">
{{ activeShowLength.includes(route.name) ? route.length + 'm' : route.speed }}
<span v-if="route.routeSpeed" class="speed">
{{
activeShowLength.includes(route.routeName)
? route.routeLength + 'm'
: route.routeSpeed
}}
</span>
<span v-if="route.SBL" class="sbl">SBL</span>
<span v-if="route.isRouteSBL" class="sbl">SBL</span>
</li>
</ul>
</div>
@@ -45,6 +53,9 @@
<script lang="ts">
import { PropType, defineComponent } from 'vue';
import Station from '../../../scripts/interfaces/Station';
import { StationRoutesInfo } from '../../../store/typings';
const routeFilter = (route: StationRoutesInfo) => !route.hidden;
export default defineComponent({
props: {
@@ -66,6 +77,16 @@ export default defineComponent({
return {
activeShowLength: [] as string[]
};
},
computed: {
filteredOneWayRoutes() {
return this.station.generalInfo?.routes.oneWay.filter(routeFilter) || [];
},
filteredTwoWayRoutes() {
return this.station.generalInfo?.routes.twoWay.filter(routeFilter) || [];
}
}
});
</script>
+1 -1
View File
@@ -1,5 +1,5 @@
import { Availability, OnlineScenery, ScheduledTrain } from '../../store/typings';
import StationRoutes from './StationRoutes';
import { StationRoutes } from './StationRoutes';
export default interface Station {
name: string;
+4 -21
View File
@@ -1,25 +1,8 @@
export default interface StationRoutes {
oneWay: {
name: string;
catenary: boolean;
SBL: boolean;
TWB: boolean;
isInternal: boolean;
tracks: number;
speed: number;
length: number;
}[];
import { StationRoutesInfo } from '../../store/typings';
twoWay: {
name: string;
catenary: boolean;
SBL: boolean;
TWB: boolean;
isInternal: boolean;
tracks: number;
speed: number;
length: number;
}[];
export interface StationRoutes {
oneWay: StationRoutesInfo[];
twoWay: StationRoutesInfo[];
/* [catenary, noCatenary] */
oneWayCatenaryRouteNames: string[];
+28 -35
View File
@@ -1,5 +1,4 @@
import { defineStore } from 'pinia';
import StationRoutes from '../scripts/interfaces/StationRoutes';
import Train from '../scripts/interfaces/Train';
import { parseSpawns, getScheduledTrains, getStationTrains } from './utils';
@@ -9,6 +8,7 @@ import { Status } from '../typings/common';
import Station from '../scripts/interfaces/Station';
import { useApiStore } from './apiStore';
import { API } from '../typings/api';
import { StationRoutes } from '../scripts/interfaces/StationRoutes';
export const useMainStore = defineStore('store', {
state: () =>
@@ -155,46 +155,39 @@ export const useMainStore = defineStore('store', {
const apiStore = useApiStore();
return apiStore.sceneryData.map((scenery) => {
const routes = scenery.routesInfo.reduce(
(acc, route) => {
const tracksKey = route.routeTracks == 2 ? 'twoWay' : 'oneWay';
const isElectric = route.isElectric;
const routesKey: keyof StationRoutes = `${tracksKey}${
!isElectric ? 'No' : ''
}CatenaryRouteNames`;
if (!route.isInternal) acc[routesKey].push(route.routeName);
if (route.isRouteSBL) acc['sblRouteNames'].push(route.routeName);
acc[tracksKey].push(route);
return acc;
},
{
oneWay: [],
oneWayCatenaryRouteNames: [],
oneWayNoCatenaryRouteNames: [],
twoWay: [],
twoWayCatenaryRouteNames: [],
twoWayNoCatenaryRouteNames: [],
sblRouteNames: []
} as StationRoutes
);
return {
name: scenery.name,
generalInfo: {
...scenery,
authors: scenery.authors?.split(',').map((a) => a.trim()),
routes:
scenery.routesInfo.reduce(
(acc, route) => {
const propName: keyof StationRoutes = `${
route.routeTracks == 2 ? 'twoWay' : 'oneWay'
}${route.isElectric ? '' : 'No'}CatenaryRouteNames`;
acc[route.routeTracks == 2 ? 'twoWay' : 'oneWay'].push({
name: route.routeName,
SBL: route.isRouteSBL,
TWB: false,
catenary: route.isElectric,
isInternal: route.isInternal,
tracks: route.routeTracks,
length: route.routeLength,
speed: route.routeSpeed
});
if (!route.isInternal) acc[propName].push(route.routeName);
if (route.isRouteSBL) acc['sblRouteNames'].push(route.routeName);
return acc;
},
{
oneWay: [],
twoWay: [],
sblRouteNames: [],
oneWayCatenaryRouteNames: [],
oneWayNoCatenaryRouteNames: [],
twoWayCatenaryRouteNames: [],
twoWayNoCatenaryRouteNames: []
} as StationRoutes
) || {},
routes: routes,
checkpoints: scenery.checkpoints
? scenery.checkpoints
.split(';')
+1
View File
@@ -35,6 +35,7 @@ export interface StationRoutesInfo {
routeLength: number;
routeSpeed: number;
routeTracks: number;
hidden?: boolean;
}
export interface StationJSONData {