106 lines
4.1 KiB
TypeScript
106 lines
4.1 KiB
TypeScript
import Vuex from 'vuex';
|
|
import { LogStorage } from '../Storage/LogStorage';
|
|
import { VillageStateRepository } from '../VillageState';
|
|
import { VillageSettings, VillageSettingsDefaults } from '../Core/Village';
|
|
import { getNumber, notify } from '../utils';
|
|
import { VillageStorage } from '../Storage/VillageStorage';
|
|
|
|
export enum Mutations {
|
|
showLogs = 'showLogs',
|
|
hideLogs = 'hideLogs',
|
|
toggleLogs = 'toggleLogs',
|
|
updateLogs = 'updateLogs',
|
|
ToggleVillageEditor = 'toggle_village_editor',
|
|
SetVillageSettings = 'set_village_settings',
|
|
UpdateVillageSendResourceThreshold = 'UpdateVillageSendResourceThreshold',
|
|
UpdateVillageSendResourceTimeout = 'UpdateVillageSendResourceTimeout',
|
|
}
|
|
|
|
export enum Actions {
|
|
OpenVillageEditor = 'open_village_editor',
|
|
SaveVillageSettings = 'save_village_settings',
|
|
}
|
|
|
|
export function createStore(villageStateRepository: VillageStateRepository) {
|
|
const store = new Vuex.Store({
|
|
state: {
|
|
views: {
|
|
villageEditor: false,
|
|
logs: false,
|
|
},
|
|
logs: [],
|
|
villageSettings: {
|
|
villageId: 0,
|
|
villageName: '',
|
|
sendResourcesThreshold: 0,
|
|
sendResourcesTimeout: 0,
|
|
},
|
|
},
|
|
getters: {
|
|
reverseLogs: state => {
|
|
return state.logs.slice().reverse();
|
|
},
|
|
},
|
|
mutations: {
|
|
[Mutations.showLogs](state) {
|
|
state.views.logs = true;
|
|
},
|
|
[Mutations.hideLogs](state) {
|
|
state.views.logs = false;
|
|
},
|
|
[Mutations.toggleLogs](state) {
|
|
state.views.logs = !state.views.logs;
|
|
},
|
|
[Mutations.updateLogs](state, { logs }) {
|
|
state.logs = logs;
|
|
},
|
|
[Mutations.ToggleVillageEditor](state, visible?: any) {
|
|
state.views.villageEditor = visible === undefined ? !state.views.villageEditor : !!visible;
|
|
},
|
|
[Mutations.SetVillageSettings](state, settings) {
|
|
state.villageSettings = settings;
|
|
},
|
|
[Mutations.UpdateVillageSendResourceThreshold](state, value) {
|
|
state.villageSettings.sendResourcesThreshold = getNumber(value);
|
|
},
|
|
[Mutations.UpdateVillageSendResourceTimeout](state, value) {
|
|
state.villageSettings.sendResourcesTimeout = getNumber(value);
|
|
},
|
|
},
|
|
actions: {
|
|
[Actions.OpenVillageEditor]({ commit }, { villageId }) {
|
|
const state = villageStateRepository.getVillageState(villageId);
|
|
const settings = state.settings;
|
|
commit(Mutations.SetVillageSettings, {
|
|
villageId: state.id,
|
|
villageName: state.village.name,
|
|
sendResourcesThreshold: settings.sendResourcesThreshold,
|
|
sendResourcesTimeout: settings.sendResourcesTimeout,
|
|
});
|
|
commit(Mutations.ToggleVillageEditor, true);
|
|
},
|
|
[Actions.SaveVillageSettings]({ state }) {
|
|
const villageId = state.villageSettings.villageId;
|
|
const villageName = state.villageSettings.villageName;
|
|
const newSettings: VillageSettings = {
|
|
sendResourcesThreshold:
|
|
state.villageSettings.sendResourcesThreshold || VillageSettingsDefaults.sendResourcesThreshold,
|
|
sendResourcesTimeout:
|
|
state.villageSettings.sendResourcesTimeout || VillageSettingsDefaults.sendResourcesTimeout,
|
|
};
|
|
const storage = new VillageStorage(villageId);
|
|
storage.storeSettings(newSettings);
|
|
notify(`Настройки для ${villageName} сохранены`);
|
|
},
|
|
},
|
|
});
|
|
|
|
setInterval(() => {
|
|
const logStorage = new LogStorage();
|
|
const logs = logStorage.getRecords();
|
|
store.commit(Mutations.updateLogs, { logs });
|
|
}, 1000);
|
|
|
|
return store;
|
|
}
|