czydojade/resources/ts/components/app.ts
2018-10-07 20:18:14 +02:00

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);
}
}
}