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%;