diff --git a/src/ControlPanel.ts b/src/ControlPanel.ts
index aa54edb..3c46976 100644
--- a/src/ControlPanel.ts
+++ b/src/ControlPanel.ts
@@ -11,6 +11,7 @@ import {
showResourceSlotIds,
} from './Page/SlotBlock';
import Vue from 'vue';
+import Vuex from 'vuex';
import DashboardApp from './DashboardView/Dashboard.vue';
import { ResourcesToLevel } from './Task/ResourcesToLevel';
import { ConsoleLogger, Logger } from './Logger';
@@ -20,6 +21,9 @@ import { ExecutionStorage } from './Storage/ExecutionStorage';
import { VillageState, VillageStateRepository } from './VillageState';
import { Task } from './Queue/TaskProvider';
import { Action } from './Queue/ActionQueue';
+import { createStore } from './DashboardView/Store';
+
+Vue.use(Vuex);
interface QuickAction {
label: string;
@@ -160,6 +164,7 @@ export class ControlPanel {
new Vue({
el: `#${appId}`,
data: gameState,
+ store: createStore(),
render: h => h(DashboardApp),
});
}
diff --git a/src/DashboardView/Dashboard.vue b/src/DashboardView/Dashboard.vue
index 6aae325..ce0cf9d 100644
--- a/src/DashboardView/Dashboard.vue
+++ b/src/DashboardView/Dashboard.vue
@@ -1,13 +1,16 @@
-
+
+
+
+
@@ -16,39 +19,56 @@ import Header from './Header';
import TaskList from './TaskList';
import QuickActions from './QuickActions';
import VillageStateList from './VillageStateList';
+import LogList from './LogList';
+import { mapState } from 'vuex';
export default {
components: {
'hdr': Header,
'task-list': TaskList,
'quick-actions': QuickActions,
'village-state-list': VillageStateList,
+ 'log-list': LogList,
},
data() {
return {
shared: this.$root.$data,
};
},
+ computed: mapState({
+ isLogsVisible: state => state.views.logs,
+ }),
};
diff --git a/src/DashboardView/Store.ts b/src/DashboardView/Store.ts
new file mode 100644
index 0000000..dc77502
--- /dev/null
+++ b/src/DashboardView/Store.ts
@@ -0,0 +1,44 @@
+import Vuex from 'vuex';
+import { StorageLogRecord } from '../Logger';
+import { LogStorage } from '../Storage/LogStorage';
+
+export enum Mutations {
+ showLogs = 'showLogs',
+ hideLogs = 'hideLogs',
+ updateLogs = 'updateLogs',
+}
+
+export function createStore() {
+ const store = new Vuex.Store({
+ state: {
+ views: {
+ logs: false,
+ },
+ logs: [],
+ },
+ mutations: {
+ [Mutations.showLogs](state) {
+ state.views.logs = true;
+ },
+ [Mutations.hideLogs](state) {
+ state.views.logs = false;
+ },
+ [Mutations.updateLogs](state, { logs }) {
+ state.logs = logs;
+ },
+ },
+ getters: {
+ reverseLogs: state => {
+ return state.logs.slice().reverse();
+ },
+ },
+ });
+
+ setInterval(() => {
+ const logStorage = new LogStorage();
+ const logs = logStorage.getRecords();
+ store.commit(Mutations.updateLogs, { logs });
+ }, 1000);
+
+ return store;
+}
diff --git a/src/DashboardView/TaskList.vue b/src/DashboardView/TaskList.vue
index 4cd7140..3ddc29c 100644
--- a/src/DashboardView/TaskList.vue
+++ b/src/DashboardView/TaskList.vue
@@ -69,9 +69,7 @@ export default {
margin-bottom: 0;
}
.container {
- overflow-y: scroll;
overflow-x: hidden;
- max-height: 300px;
}
.task-table {
width: 100%;