93 lines
2.5 KiB
TypeScript
93 lines
2.5 KiB
TypeScript
import Vue from 'vue'
|
|
import store from '../store'
|
|
import { Component, Watch } from "vue-property-decorator";
|
|
import { Mutation, Action } from 'vuex-class'
|
|
import { ObtainPayload } from "../store/departures";
|
|
import { Stop } from "../model";
|
|
import { PopperComponent } from "./utils";
|
|
|
|
@Component({ store })
|
|
export class Application extends Vue {
|
|
private sections = {
|
|
messages: true
|
|
};
|
|
|
|
private visibility = {
|
|
messages: false,
|
|
departures: false,
|
|
save: false,
|
|
picker: 'search'
|
|
};
|
|
|
|
private autorefresh = {
|
|
messages: {
|
|
active: true,
|
|
interval: 60
|
|
},
|
|
departures: {
|
|
active: true,
|
|
interval: 10
|
|
}
|
|
};
|
|
|
|
private intervals = { messages: null, departures: null };
|
|
|
|
get messages() {
|
|
return {
|
|
count: this.$store.getters['messages/count'],
|
|
counts: this.$store.getters['messages/counts'],
|
|
state: this.$store.state.messages.state
|
|
};
|
|
}
|
|
|
|
get departures() {
|
|
return {
|
|
state: this.$store.state.departures.state
|
|
};
|
|
}
|
|
|
|
get stops() {
|
|
return this.$store.state.stops;
|
|
}
|
|
|
|
set stops(value) {
|
|
this.$store.commit('updateStops', value);
|
|
}
|
|
|
|
mounted() {
|
|
this.$el.classList.remove('not-ready');
|
|
}
|
|
|
|
@Action('messages/update') updateMessages: () => void;
|
|
@Action('departures/update') updateDepartures: (payload: ObtainPayload) => void;
|
|
|
|
@Mutation add: (stops: Stop[]) => void;
|
|
@Mutation remove: (stop: Stop) => void;
|
|
@Mutation clear: () => void;
|
|
|
|
@Watch('stops')
|
|
onStopUpdate(this: any, stops) {
|
|
this.updateDepartures({ stops });
|
|
}
|
|
|
|
@Watch('autorefresh', { immediate: true, deep: true })
|
|
onAutorefreshUpdate(settings) {
|
|
if (this.intervals.messages) {
|
|
clearInterval(this.intervals.messages);
|
|
this.intervals.messages = null;
|
|
}
|
|
|
|
if (this.intervals.departures) {
|
|
clearInterval(this.intervals.departures);
|
|
this.intervals.messages = null;
|
|
}
|
|
|
|
if (settings.messages.active) {
|
|
this.intervals.messages = setInterval(() => this.updateMessages(), Math.max(5, settings.messages.interval) * 1000);
|
|
}
|
|
|
|
if (settings.departures.active) {
|
|
this.intervals.departures = setInterval(() => this.updateDepartures({ stops: this.stops }), Math.max(5, settings.departures.interval) * 1000);
|
|
}
|
|
}
|
|
} |