diff --git a/resources/components/messages.html b/resources/components/messages.html
index d6cda3b..3ee5353 100644
--- a/resources/components/messages.html
+++ b/resources/components/messages.html
@@ -1,15 +1,29 @@
-
- -
-
- {{ message.message }}
+
+
+ -
+
+ {{ message.message }}
-
-
- Komunikat ważny od
- {{ message.validFrom.format('HH:mm') }}
- do
- {{ message.validTo.format('HH:mm') }}
-
+
+
+ Komunikat ważny od
+ {{ message.validFrom.format('HH:mm') }}
+ do
+ {{ message.validTo.format('HH:mm') }}
+
+
+
+
+
+
+
-
-
+
+
diff --git a/resources/components/settings/messages.html b/resources/components/settings/messages.html
new file mode 100644
index 0000000..f185340
--- /dev/null
+++ b/resources/components/settings/messages.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
diff --git a/resources/ts/components/app.ts b/resources/ts/components/app.ts
index 0d06caa..8949603 100644
--- a/resources/ts/components/app.ts
+++ b/resources/ts/components/app.ts
@@ -4,6 +4,7 @@ import { Component, Watch } from "vue-property-decorator";
import { Mutation, Action } 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 {
@@ -18,13 +19,6 @@ export class Application extends Vue {
picker: 'search'
};
- private autorefresh = {
- messages: {
- active: true,
- interval: 60
- }
- };
-
private intervals = { messages: null, departures: null };
get messages() {
@@ -55,6 +49,7 @@ export class Application extends Vue {
created() {
this.initDeparturesRefreshInterval();
+ this.initMessagesRefreshInterval();
}
private initDeparturesRefreshInterval() {
@@ -76,6 +71,25 @@ export class Application extends Vue {
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;
@@ -87,16 +101,4 @@ export class Application extends Vue {
onStopUpdate() {
this.updateDepartures();
}
-
- @Watch('autorefresh', { immediate: true, deep: true })
- onAutorefreshUpdate(settings) {
- if (this.intervals.messages) {
- clearInterval(this.intervals.messages);
- this.intervals.messages = null;
- }
-
- if (settings.messages.active) {
- this.intervals.messages = setInterval(() => this.updateMessages(), Math.max(5, settings.messages.interval) * 1000);
- }
- }
}
diff --git a/resources/ts/components/index.ts b/resources/ts/components/index.ts
index 337f4e2..1e7038d 100644
--- a/resources/ts/components/index.ts
+++ b/resources/ts/components/index.ts
@@ -12,3 +12,4 @@ export * from './trip'
export * from './ui'
export * from './settings'
export { Departures } from "../store";
+export { Messages } from "../store";
diff --git a/resources/ts/components/messages.ts b/resources/ts/components/messages.ts
index 50b8140..e9f054c 100644
--- a/resources/ts/components/messages.ts
+++ b/resources/ts/components/messages.ts
@@ -1,18 +1,26 @@
import Vue from 'vue';
import { Component } from "vue-property-decorator";
import { Message } from "../model/message";
-import { namespace } from 'vuex-class';
-import store from '../store'
-
-const { State } = namespace('messages');
+import store, { Messages, MessagesSettings } from '../store'
@Component({ template: require("../../components/messages.html"), store })
export class MessagesComponent extends Vue {
- @State messages: Message[];
+ @Messages.State('messages')
+ public allMessages: Message[];
- public icon(message: Message) {
- switch (message.type) {
- }
+ @MessagesSettings.State
+ public displayedEntriesCount: number;
+
+ public showAll: boolean = false;
+
+ get messages() {
+ return this.showAll
+ ? this.allMessages
+ : this.allMessages.slice(0, this.displayedEntriesCount);
+ }
+
+ get nonDisplayedCount(): number {
+ return Math.max(this.allMessages.length - this.displayedEntriesCount, 0);
}
public type(message: Message) {
diff --git a/resources/ts/components/settings/index.ts b/resources/ts/components/settings/index.ts
index 10d35a6..21e734c 100644
--- a/resources/ts/components/settings/index.ts
+++ b/resources/ts/components/settings/index.ts
@@ -1 +1,2 @@
export * from "./departures"
+export * from "./messages"
diff --git a/resources/ts/components/settings/messages.ts b/resources/ts/components/settings/messages.ts
new file mode 100644
index 0000000..4f66700
--- /dev/null
+++ b/resources/ts/components/settings/messages.ts
@@ -0,0 +1,21 @@
+import { Component } from "vue-property-decorator";
+import store, { MessagesSettings } from "../../store";
+import Vue from "vue";
+import { MessagesSettingsState } from "../../store/settings/messages";
+
+@Component({template: require("../../../components/settings/messages.html"), store})
+export class SettingsMessages extends Vue {
+ @MessagesSettings.State
+ public autorefresh: boolean;
+
+ @MessagesSettings.State
+ public autorefreshInterval: number;
+
+ @MessagesSettings.State
+ public displayedEntriesCount: number;
+
+ @MessagesSettings.Mutation
+ public update: (state: Partial) => void;
+}
+
+Vue.component('SettingsMessages', SettingsMessages);
diff --git a/resources/ts/store/favourites.ts b/resources/ts/store/favourites.ts
index 0ba6343..0f61f68 100644
--- a/resources/ts/store/favourites.ts
+++ b/resources/ts/store/favourites.ts
@@ -1,11 +1,10 @@
-import { RootState, SavedState } from "./root";
-import { Module, Plugin, Store } from "vuex";
-import * as utils from "../utils";
+import { RootState } from "./root";
+import { Module } from "vuex";
import { Stop } from "../model";
export interface Favourite {
id: string;
- name: string;
+ name: string;
stops: Stop[];
}
@@ -28,12 +27,4 @@ const favourites: Module = {
}
};
-export const localStorageSaver = (path: string, key: string): Plugin => (store: Store) => {
- utils.set(store.state, path, JSON.parse(window.localStorage.getItem(key) || '[]'));
-
- store.subscribe((mutation, state) => {
- window.localStorage.setItem(key, JSON.stringify(utils.get(state, path)));
- })
-};
-
export default favourites;
diff --git a/resources/ts/store/index.ts b/resources/ts/store/index.ts
index 0feca3b..bd4e43a 100644
--- a/resources/ts/store/index.ts
+++ b/resources/ts/store/index.ts
@@ -2,21 +2,24 @@ import Vuex from 'vuex';
import messages, { MessagesState } from './messages';
import departures, { DeparturesState } from './departures'
-import favourites, { FavouritesState, localStorageSaver } from './favourites'
+import favourites, { FavouritesState } from './favourites'
+import departureSettings, { DeparturesSettingsState } from "./settings/departures";
+import messagesSettings, { MessagesSettingsState } from "./settings/messages";
import { actions, mutations, RootState, state } from "./root";
import VuexPersistence from "vuex-persist";
import { namespace } from "vuex-class";
-import departureSettings from "./settings/departures";
export type State = {
messages: MessagesState;
departures: DeparturesState;
favourites: FavouritesState;
+ "departures-settings": DeparturesSettingsState,
+ "messages-settings": MessagesSettingsState,
} & RootState;
const localStoragePersist = new VuexPersistence({
- modules: ['favourites', 'departures-settings'],
+ modules: ['favourites', 'departures-settings', 'messages-settings'],
});
const sessionStoragePersist = new VuexPersistence({
@@ -24,17 +27,16 @@ const sessionStoragePersist = new VuexPersistence({
storage: window.sessionStorage
});
-const store = new Vuex.Store({
+const store = new Vuex.Store({
state, mutations, actions,
modules: {
messages,
departures,
favourites,
- 'departures-settings': departureSettings
+ 'departures-settings': departureSettings,
+ 'messages-settings': messagesSettings,
},
plugins: [
- // todo: remove after some time
- localStorageSaver('favourites.favourites', 'favourites'),
localStoragePersist.plugin,
sessionStoragePersist.plugin,
]
@@ -44,4 +46,6 @@ export default store;
export const Favourites = namespace('favourites');
export const DeparturesSettings = namespace('departures-settings');
+export const MessagesSettings = namespace('messages-settings');
export const Departures = namespace('departures');
+export const Messages = namespace('messages');
diff --git a/resources/ts/store/settings/messages.ts b/resources/ts/store/settings/messages.ts
new file mode 100644
index 0000000..116a499
--- /dev/null
+++ b/resources/ts/store/settings/messages.ts
@@ -0,0 +1,24 @@
+import { Module } from "vuex";
+import { RootState } from "../root";
+
+export type MessagesSettingsState = {
+ autorefresh: boolean;
+ autorefreshInterval?: number;
+ displayedEntriesCount?: number;
+}
+
+const messagesSettings: Module = {
+ namespaced: true,
+ state: {
+ autorefresh: true,
+ autorefreshInterval: 60,
+ displayedEntriesCount: 2
+ },
+ mutations: {
+ update(state: MessagesSettingsState, patch: Partial) {
+ Object.assign(state, patch);
+ }
+ }
+};
+
+export default messagesSettings;
diff --git a/templates/app.html.twig b/templates/app.html.twig
index d3b9f5f..467ab65 100644
--- a/templates/app.html.twig
+++ b/templates/app.html.twig
@@ -29,25 +29,7 @@
-
-
-
-
-
-
-
-
+