diff --git a/src/App.scss b/src/App.scss
index 5e03370..dac7414 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -69,7 +69,7 @@
padding: 0.5em 0.4em;
max-width: 1100px;
margin: 0 auto;
-
+
border-radius: 0 0 1em 1em;
}
@@ -180,7 +180,7 @@
@include smallScreen() {
flex-direction: column;
-
+
a {
margin: 0.25em 0;
}
@@ -201,8 +201,9 @@
width: 1.35em;
}
- & > .region {
+ .region {
color: paleturquoise;
+ font-weight: bold;
}
}
diff --git a/src/App.vue b/src/App.vue
index 179853c..3e3ffdb 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -33,13 +33,13 @@
@@ -99,8 +99,6 @@ export default defineComponent({
const store = useStore();
store.connectToAPI();
- const currentRegion = store.region;
-
// const sceneryDataStatus = computed(() => data.value.sceneryDataStatus);
const isFilterCardVisible = ref(false);
@@ -108,18 +106,13 @@ export default defineComponent({
provide('isFilterCardVisible', isFilterCardVisible);
return {
- currentRegion,
+ store,
isFilterCardVisible,
+ onlineDispatchers: computed(() =>
+ store.stationList.filter((station) => station.onlineInfo && station.onlineInfo.region == store.region.id)
+ ),
dispatcherDataStatus: store.dataStatuses.dispatchers,
-
- trainCount: store.trainCount,
-
- dispatcherCount: store.stationList.filter((station) => station.onlineInfo).length,
-
- openFilterCard() {
- isFilterCardVisible.value = true;
- },
};
},
@@ -163,6 +156,10 @@ export default defineComponent({
StorageManager.setBooleanValue('version_notes_read', true);
},
+ changeRegion() {
+ this.store.changeRegion({ id: 'cae', value: 'PL2' });
+ },
+
changeLang(lang: string) {
this.$i18n.locale = lang;
this.currentLang = lang;
diff --git a/src/components/StationsView/StationFilterCard.vue b/src/components/StationsView/StationFilterCard.vue
index 3dcf206..931ce08 100644
--- a/src/components/StationsView/StationFilterCard.vue
+++ b/src/components/StationsView/StationFilterCard.vue
@@ -13,7 +13,7 @@
{{ $t('filters.title') }}
-
+
({
+ apiData: {} as unknown,
+
stationList: [],
trainList: [],
@@ -47,7 +49,9 @@ export const useStore = defineStore('store', {
} as StoreState),
actions: {
- setTrainsOnlineData(trains?: TrainAPIData[]) {
+ setTrainsOnlineData() {
+ const { trains } = this.apiData;
+
if (!trains) return [];
this.trainList = trains
@@ -93,15 +97,17 @@ export const useStore = defineStore('store', {
}) as Train[];
},
- getDispatcherStatus(dispatchers: any[][] | undefined, stationAPIData: StationAPIData) {
+ getDispatcherStatus(onlineStationData: StationAPIData) {
+ const { dispatchers } = this.apiData;
+
const prevDispatcherStatus = this.lastDispatcherStatuses.find(
- (dispatcher) => dispatcher.hash === stationAPIData.stationHash
+ (dispatcher) => dispatcher.hash === onlineStationData.stationHash
);
const stationStatus = !dispatchers
? undefined
: dispatchers.find(
- (status: string[]) => status[0] == stationAPIData.stationHash && status[1] == this.region.id
+ (status: string[]) => status[0] == onlineStationData.stationHash && status[1] == this.region.id
) || -1;
const statusTimestamp =
@@ -110,7 +116,7 @@ export const useStore = defineStore('store', {
prevDispatcherStatus && !dispatchers ? prevDispatcherStatus.statusID : getStatusID(stationStatus);
return {
- hash: stationAPIData.stationHash,
+ hash: onlineStationData.stationHash,
statusID,
statusTimestamp,
};
@@ -188,17 +194,17 @@ export const useStore = defineStore('store', {
.map((train) => ({ driverName: train.driverName, driverId: train.driverId, trainNo: train.trainNo }));
},
- setStationsOnlineInfo(data: APIData) {
+ setStationsOnlineInfo() {
const onlineStationNames: string[] = [];
- const prevDispatcherStatuses: StoreState['lastDispatcherStatuses'] = [];
+ const prevDispatcherStatuses: StoreState['lastDispatcherStatuses'] = [];
- data.stations?.forEach((stationAPIData) => {
+ this.apiData.stations?.forEach((stationAPIData) => {
if (stationAPIData.region !== this.region.id || !stationAPIData.isOnline) return;
const station = this.stationList.find((s) => s.name === stationAPIData.stationName);
onlineStationNames.push(stationAPIData.stationName);
- const dispatcherStatus = this.getDispatcherStatus(data.dispatchers, stationAPIData);
+ const dispatcherStatus = this.getDispatcherStatus(stationAPIData);
prevDispatcherStatuses.push(dispatcherStatus);
const stationTrains = this.getStationTrains(stationAPIData);
@@ -207,6 +213,7 @@ export const useStore = defineStore('store', {
const onlineInfo = {
name: stationAPIData.stationName,
hash: stationAPIData.stationHash,
+ region: stationAPIData.region,
maxUsers: stationAPIData.maxUsers,
currentUsers: stationAPIData.currentUsers,
spawns: parseSpawns(stationAPIData.spawnString),
@@ -239,7 +246,7 @@ export const useStore = defineStore('store', {
});
});
- if (data.dispatchers != null) this.lastDispatcherStatuses = prevDispatcherStatuses;
+ if (this.apiData.dispatchers != null) this.lastDispatcherStatuses = prevDispatcherStatuses;
},
async fetchStationsGeneralInfo() {
@@ -324,7 +331,9 @@ export const useStore = defineStore('store', {
);
socket.on('UPDATE', (data: APIData) => {
- this.fetchOnlineData(data);
+ this.apiData = data;
+
+ this.setOnlineData();
});
socket.emit('connection');
@@ -337,8 +346,14 @@ export const useStore = defineStore('store', {
this.connectToWebsocket();
},
- async fetchOnlineData(data: APIData) {
- if (!data.stations) {
+ async changeRegion(region: StoreState['region']) {
+ this.region = region;
+
+ await this.setOnlineData();
+ },
+
+ async setOnlineData() {
+ if (!this.apiData.stations) {
this.dataStatuses.sceneries = DataStatus.Error;
this.dataStatuses.trains = DataStatus.Error;
this.dataStatuses.dispatchers = DataStatus.Error;
@@ -347,11 +362,14 @@ export const useStore = defineStore('store', {
}
this.dataStatuses.sceneries = DataStatus.Loaded;
- this.dataStatuses.trains = !data.trains ? DataStatus.Warning : DataStatus.Loaded;
- this.dataStatuses.dispatchers = !data.dispatchers ? DataStatus.Warning : DataStatus.Loaded;
+ this.dataStatuses.trains = !this.apiData.trains ? DataStatus.Warning : DataStatus.Loaded;
+ this.dataStatuses.dispatchers = !this.apiData.dispatchers ? DataStatus.Warning : DataStatus.Loaded;
- this.setStationsOnlineInfo(data);
- this.setTrainsOnlineData(data.trains);
+ this.setTrainsOnlineData();
+ this.setStationsOnlineInfo();
+
+ console.log("Loading");
+
},
},
});
diff --git a/src/store/storeTypes.ts b/src/store/storeTypes.ts
index 62fef76..a9255e1 100644
--- a/src/store/storeTypes.ts
+++ b/src/store/storeTypes.ts
@@ -10,6 +10,7 @@ export type Availability = 'default' | 'unavailable' | 'nonPublic' | 'abandoned'
export interface StoreState {
stationList: Station[];
trainList: Train[];
+ apiData: APIData;
lastDispatcherStatuses: { hash: string; statusTimestamp: number; statusID: string }[];
diff --git a/src/views/StationsView.vue b/src/views/StationsView.vue
index 0a3f257..bf87a7a 100644
--- a/src/views/StationsView.vue
+++ b/src/views/StationsView.vue
@@ -71,19 +71,16 @@ export default defineComponent({
const filterManager = reactive(new StationFilterManager());
const focusedStationName = '';
- const computedStations: ComputedRef = computed(() => {
- return filterManager.getFilteredStationList(store.stationList);
- });
-
- const focusedStationInfo = computed(() =>
- computedStations.value.find((station) => station.name === focusedStationName)
+ const computedStations: ComputedRef = computed(() =>
+ filterManager
+ .getFilteredStationList(store.stationList)
+ .filter((station) => !station.onlineInfo || station.onlineInfo.region == store.region.id)
);
return {
computedStations,
filterManager,
focusedStationName,
- focusedStationInfo,
};
},
mounted() {
diff --git a/src/views/TrainsView.vue b/src/views/TrainsView.vue
index 13f367f..e21b57f 100644
--- a/src/views/TrainsView.vue
+++ b/src/views/TrainsView.vue
@@ -2,8 +2,6 @@
-
-
@@ -51,8 +49,6 @@ export default defineComponent({
setup() {
const store = useStore();
- const trainList = store.trainList;
-
const sorterActive = ref({ id: 'distance', dir: -1 });
const filterList = reactive([...trainFilters]) as TrainFilter[];
const isTrainOptionsCardVisible = ref(false);
@@ -67,11 +63,16 @@ export default defineComponent({
provide('isTrainOptionsCardVisible', isTrainOptionsCardVisible);
const computedTrains: ComputedRef
= computed(() => {
- return filteredTrainList(trainList, searchedTrain.value, searchedDriver.value, sorterActive.value, filterList);
+ return filteredTrainList(
+ store.trainList,
+ searchedTrain.value,
+ searchedDriver.value,
+ sorterActive.value,
+ filterList
+ );
});
return {
- trainList,
computedTrains,
searchedTrain,
searchedDriver,