Files
scrypted/plugins/core/ui/src/store.ts
2021-10-04 01:38:42 -07:00

87 lines
2.0 KiB
TypeScript

import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
version: undefined,
menu: undefined,
systemState: {},
scrypted: {
devices: [],
alerts: []
},
username: undefined,
isLoggedIn: undefined,
isLoggedIntoCloud: undefined,
isConnected: undefined,
hasLogin: undefined
},
mutations: {
setSystemState: function (store, systemState) {
store.systemState = systemState;
},
setDevices(store, devices) {
store.scrypted.devices = devices;
},
setAlerts(store, alerts) {
store.scrypted.alerts = alerts;
},
removeAlert(store, alertId) {
store.scrypted.alerts = store.scrypted.alerts.filter(
alert => alert._id != alertId
);
},
addAlert(store, alert) {
const alerts = store.scrypted.alerts.filter(
existing => existing.id != alert.id
);
alerts.push(alert);
store.scrypted.alerts = alerts;
},
addDevice(store, id) {
var devices = store.scrypted.devices.filter(device => device !== id);
devices.push(id);
store.scrypted.devices = devices;
},
removeDevice(store, id) {
store.scrypted.devices = store.scrypted.devices.filter(
device => device !== id
);
},
setIsLoggedIntoCloud(store, isLoggedIntoCloud) {
store.isLoggedIntoCloud = isLoggedIntoCloud;
},
setIsLoggedIn(store, isLoggedIn) {
store.isLoggedIn = isLoggedIn;
},
setUsername(store, username) {
store.username = username;
},
setIsConnected(store, isConnected) {
store.isConnected = isConnected;
},
setHasLogin(store, hasLogin) {
store.hasLogin = hasLogin;
},
setVersion(store, version) {
store.version = version;
},
setMenu(store, menu) {
Vue.set(store, 'menu', menu);
},
clearMenu(store) {
Vue.delete(store, 'menu');
}
}
});
export interface Menu {
title: string;
subtitle?: string;
icon?: string;
click: Function;
}
export default store;