poprawki pobierania danych

This commit is contained in:
2023-06-11 21:47:50 +02:00
parent d9f5edb4fe
commit 4ffb79d62b
6 changed files with 128 additions and 120 deletions
+18 -4
View File
@@ -95,13 +95,18 @@
<script setup lang="ts">
import axios from 'axios';
import { computed, reactive, ref } from 'vue';
import { computed, onActivated, onDeactivated, onMounted, reactive, ref } from 'vue';
import { DataStatus } from '../../scripts/enums/DataStatus';
import { ITimetablesDailyStats, ITimetablesDailyStatsResponse } from '../../scripts/interfaces/api/StatsAPIData';
import { URLs } from '../../scripts/utils/apiURLs';
import StorageManager from '../../scripts/managers/storageManager';
const intervalId = ref(-1);
const emit = defineEmits<{
(e: 'toggleStatsOpen', value: boolean): void;
}>();
const data = reactive({
statsStatus: DataStatus.Loading,
@@ -158,17 +163,26 @@ async function fetchDailyTimetableStats() {
function startFetchingDailyStats() {
fetchDailyTimetableStats();
if (intervalId.value != -1) return;
intervalId.value = setInterval(fetchDailyTimetableStats, 60000);
}
function stopFetchingDailyStats() {
clearInterval(intervalId.value);
intervalId.value = -1;
}
defineExpose({
startFetchingDailyStats,
stopFetchingDailyStats,
onActivated(() => {
startFetchingDailyStats();
emit('toggleStatsOpen', true);
});
onDeactivated(() => {
stopFetchingDailyStats();
});
</script>
<style lang="scss" scoped>
+17 -23
View File
@@ -6,6 +6,8 @@
class="btn--filled"
:data-selected="tab.name == store.currentStatsTab && areStatsOpen"
:data-inactive="tab.inactive"
:data-disabled="tab.inactive"
:disabled="tab.inactive"
@click="onTabButtonClick(tab.name)"
>
{{ $t(tab.titlePath) }}
@@ -14,7 +16,7 @@
<div class="stats-tab" v-show="areStatsOpen">
<keep-alive>
<JournalDailyStats v-if="store.currentStatsTab == 'daily'" ref="dailyStatsComp" />
<JournalDailyStats v-if="store.currentStatsTab == 'daily'" @toggleStatsOpen="toggleStatsOpen" />
<JournalDriverStats v-else-if="store.currentStatsTab == 'driver'" />
</keep-alive>
</div>
@@ -22,19 +24,17 @@
</template>
<script setup lang="ts">
import { computed, KeepAlive, onActivated, onDeactivated, onMounted, reactive, Ref, ref, watch } from 'vue';
import { computed, KeepAlive, onMounted, reactive, ref, watch } from 'vue';
import { useStore } from '../../store/store';
import JournalDailyStats from './DailyStats.vue';
import JournalDriverStats from './JournalDriverStats.vue';
import StorageManager from '../../scripts/managers/storageManager';
import { DataStatus } from '../../scripts/enums/DataStatus';
// Types
type TStatTab = 'daily' | 'driver';
// Variables
const store = useStore();
const dailyStatsComp: Ref<InstanceType<typeof JournalDailyStats> | null> = ref(null);
const lastDailyStatsOpen = ref(false);
const areStatsOpen = ref(false);
@@ -59,32 +59,19 @@ function onTabButtonClick(tab: TStatTab) {
if (lastClickedTab.value == tab || !areStatsOpen.value) areStatsOpen.value = !areStatsOpen.value;
if (tab == 'daily') {
lastDailyStatsOpen.value = areStatsOpen.value;
StorageManager.setBooleanValue('dailyStatsOpen', areStatsOpen.value);
if (areStatsOpen.value) dailyStatsComp.value?.startFetchingDailyStats();
lastDailyStatsOpen.value = areStatsOpen.value;
}
store.currentStatsTab = tab;
lastClickedTab.value = tab;
if (areStatsOpen.value == false) store.currentStatsTab = null;
}
onMounted(() => {
if (StorageManager.getBooleanValue('dailyStatsOpen')) {
dailyStatsComp.value?.startFetchingDailyStats();
areStatsOpen.value = true;
}
}),
onActivated(async () => {
if (StorageManager.getBooleanValue('dailyStatsOpen')) {
dailyStatsComp.value?.startFetchingDailyStats();
areStatsOpen.value = true;
}
});
onDeactivated(() => {
dailyStatsComp.value?.stopFetchingDailyStats();
});
function toggleStatsOpen(open: boolean) {
areStatsOpen.value = open;
}
watch(
computed(() => store.driverStatsData),
@@ -96,6 +83,13 @@ watch(
if (!statsData) areStatsOpen.value = lastDailyStatsOpen.value;
}
);
onMounted(() => {
if (StorageManager.getBooleanValue('dailyStatsOpen')) {
areStatsOpen.value = true;
store.currentStatsTab = 'daily';
}
});
</script>
<style lang="scss" scoped>
+90 -90
View File
@@ -1,90 +1,90 @@
import { Socket } from 'socket.io-client';
import { DataStatus } from '../../enums/DataStatus';
import StationAPIData from '../api/StationAPIData';
import { TrainAPIData } from '../api/TrainAPIData';
import Station from '../Station';
import Train from '../Train';
import { DispatcherStatsAPIData } from '../api/DispatcherStatsAPIData';
import { DriverStatsAPIData } from '../api/DriverStatsAPIData';
export type Availability = 'default' | 'unavailable' | 'nonPublic' | 'abandoned' | 'nonDefault';
export interface StoreState {
stationList: Station[];
trainList: Train[];
apiData: APIData;
lastDispatcherStatuses: { hash: string; statusTimestamp: number; statusID: string }[];
sceneryData: any[][];
region: { id: string; value: string };
trainCount: number;
stationCount: number;
webSocket?: Socket;
isOffline: boolean;
dispatcherStatsName: string;
dispatcherStatsData?: DispatcherStatsAPIData;
driverStatsName: string;
driverStatsData?: DriverStatsAPIData;
driverStatsStatus: DataStatus;
chosenModalTrainId?: string;
currentStatsTab: 'daily' | 'driver';
dataStatuses: {
connection: DataStatus;
sceneries: DataStatus;
timetables: DataStatus;
dispatchers: DataStatus;
trains: DataStatus;
};
listenerLaunched: boolean;
blockScroll: boolean;
}
export interface APIData {
stations?: StationAPIData[];
dispatchers?: string[][];
trains?: TrainAPIData[];
connectedSocketCount: number;
}
export interface StationRoutesInfo {
routeName: string;
isElectric: boolean;
isInternal: boolean;
isRouteSBL: boolean;
routeLength: number;
routeSpeed: number;
routeTracks: number;
}
export interface StationJSONData {
name: string;
abbr: string;
url: string;
lines: string;
project: string;
projectUrl: string;
reqLevel: number;
signalType: string;
controlType: string;
SUP: boolean;
// routes: string;
routesInfo: StationRoutesInfo[];
checkpoints: string | null;
authors?: string;
availability: Availability;
}
import { Socket } from 'socket.io-client';
import { DataStatus } from '../../enums/DataStatus';
import StationAPIData from '../api/StationAPIData';
import { TrainAPIData } from '../api/TrainAPIData';
import Station from '../Station';
import Train from '../Train';
import { DispatcherStatsAPIData } from '../api/DispatcherStatsAPIData';
import { DriverStatsAPIData } from '../api/DriverStatsAPIData';
export type Availability = 'default' | 'unavailable' | 'nonPublic' | 'abandoned' | 'nonDefault';
export interface StoreState {
stationList: Station[];
trainList: Train[];
apiData: APIData;
lastDispatcherStatuses: { hash: string; statusTimestamp: number; statusID: string }[];
sceneryData: any[][];
region: { id: string; value: string };
trainCount: number;
stationCount: number;
webSocket?: Socket;
isOffline: boolean;
dispatcherStatsName: string;
dispatcherStatsData?: DispatcherStatsAPIData;
driverStatsName: string;
driverStatsData?: DriverStatsAPIData;
driverStatsStatus: DataStatus;
chosenModalTrainId?: string;
currentStatsTab: 'daily' | 'driver' | null;
dataStatuses: {
connection: DataStatus;
sceneries: DataStatus;
timetables: DataStatus;
dispatchers: DataStatus;
trains: DataStatus;
};
listenerLaunched: boolean;
blockScroll: boolean;
}
export interface APIData {
stations?: StationAPIData[];
dispatchers?: string[][];
trains?: TrainAPIData[];
connectedSocketCount: number;
}
export interface StationRoutesInfo {
routeName: string;
isElectric: boolean;
isInternal: boolean;
isRouteSBL: boolean;
routeLength: number;
routeSpeed: number;
routeTracks: number;
}
export interface StationJSONData {
name: string;
abbr: string;
url: string;
lines: string;
project: string;
projectUrl: string;
reqLevel: number;
signalType: string;
controlType: string;
SUP: boolean;
// routes: string;
routesInfo: StationRoutesInfo[];
checkpoints: string | null;
authors?: string;
availability: Availability;
}
+1 -1
View File
@@ -54,7 +54,7 @@ export const useStore = defineStore('store', {
trains: DataStatus.Loading,
},
currentStatsTab: 'daily',
currentStatsTab: null,
blockScroll: false,
listenerLaunched: false,
+1 -1
View File
@@ -134,6 +134,7 @@ export default defineComponent({
provide('sorterActive', sorterActive);
provide('journalFilterActive', journalFilterActive);
provide('searchersValues', searchersValues);
provide('filterList', reactive([]));
const scrollElement: Ref<HTMLElement | null> = ref(null);
@@ -287,4 +288,3 @@ export default defineComponent({
<style lang="scss" scoped>
@import '../styles/JournalSection.scss';
</style>
+1 -1
View File
@@ -14,7 +14,7 @@
optionsType="timetables"
/>
<JournalStats v-if="dataStatus == DataStatus.Loaded" />
<JournalStats />
<div class="list_wrapper" @scroll="handleScroll">
<transition name="status-anim" mode="out-in">