108 lines
3.3 KiB
TypeScript
108 lines
3.3 KiB
TypeScript
import Vue from 'vue'
|
|
import store from '../store'
|
|
import { Component, Watch } from "vue-property-decorator";
|
|
import { Action, Mutation } from 'vuex-class'
|
|
import { Stop } from "../model";
|
|
import { DeparturesSettingsState } from "../store/settings/departures";
|
|
import { MessagesSettingsState } from "../store/settings/messages";
|
|
|
|
@Component({ store })
|
|
export class Application extends Vue {
|
|
private sections = {
|
|
messages: true
|
|
};
|
|
|
|
private visibility = {
|
|
messages: false,
|
|
departures: false,
|
|
save: false,
|
|
picker: 'search'
|
|
};
|
|
|
|
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');
|
|
}
|
|
|
|
created() {
|
|
this.$store.dispatch('messages/update');
|
|
this.$store.dispatch('load', window['app'].state);
|
|
|
|
this.initDeparturesRefreshInterval();
|
|
this.initMessagesRefreshInterval();
|
|
}
|
|
|
|
private initDeparturesRefreshInterval() {
|
|
const departuresAutorefreshCallback = () => {
|
|
const {autorefresh, autorefreshInterval} = this.$store.state['departures-settings'] as DeparturesSettingsState;
|
|
|
|
if (this.intervals.departures) {
|
|
clearInterval(this.intervals.departures);
|
|
}
|
|
|
|
if (autorefresh) {
|
|
this.intervals.departures = setInterval(() => this.updateDepartures(), Math.max(5, autorefreshInterval) * 1000)
|
|
}
|
|
};
|
|
|
|
this.$store.watch(({"departures-settings": state}) => state.autorefresh, departuresAutorefreshCallback);
|
|
this.$store.watch(({"departures-settings": state}) => state.autorefreshInterval, departuresAutorefreshCallback);
|
|
|
|
departuresAutorefreshCallback();
|
|
}
|
|
|
|
private initMessagesRefreshInterval() {
|
|
const messagesAutorefreshCallback = () => {
|
|
const {autorefresh, autorefreshInterval} = this.$store.state['messages-settings'] as MessagesSettingsState;
|
|
|
|
if (this.intervals.messages) {
|
|
clearInterval(this.intervals.messages);
|
|
}
|
|
|
|
if (autorefresh) {
|
|
this.intervals.messages = setInterval(() => this.updateMessages(), Math.max(5, autorefreshInterval) * 1000)
|
|
}
|
|
};
|
|
|
|
this.$store.watch(({"messages-settings": state}) => state.autorefresh, messagesAutorefreshCallback);
|
|
this.$store.watch(({"messages-settings": state}) => state.autorefreshInterval, messagesAutorefreshCallback);
|
|
|
|
messagesAutorefreshCallback();
|
|
}
|
|
|
|
@Action('messages/update') updateMessages: () => void;
|
|
@Action('departures/update') updateDepartures: () => void;
|
|
|
|
@Mutation add: (stops: Stop[]) => void;
|
|
@Mutation remove: (stop: Stop) => void;
|
|
@Mutation clear: () => void;
|
|
|
|
@Watch('stops')
|
|
onStopUpdate() {
|
|
this.updateDepartures();
|
|
}
|
|
}
|