diff --git a/web/src/main.js b/web/src/main.js
index cb1f72a..68dfa0f 100644
--- a/web/src/main.js
+++ b/web/src/main.js
@@ -12,3 +12,12 @@ app.use(router)
app.use(store)
app.use(vuetify)
app.mount('#app')
+
+router.beforeEach(async (to, from, next) => {
+ await store.dispatch("setCurrentBudget", to.params.budgetid);
+ await store.dispatch("setCurrentAccount", {
+ accountid: to.params.accountid,
+ budgetid: to.params.budgetid
+ });
+ next();
+})
diff --git a/web/src/pages/Account.vue b/web/src/pages/Account.vue
index b166ca6..88890cb 100644
--- a/web/src/pages/Account.vue
+++ b/web/src/pages/Account.vue
@@ -1,13 +1,5 @@
@@ -21,9 +13,6 @@ export default {
{{transaction.Date.substring(0, 10)}} |
-
{{transaction.Payee}}
|
diff --git a/web/src/pages/BudgetSidebar.vue b/web/src/pages/BudgetSidebar.vue
index 3ef8ea9..2b934c7 100644
--- a/web/src/pages/BudgetSidebar.vue
+++ b/web/src/pages/BudgetSidebar.vue
@@ -1,11 +1,7 @@
@@ -14,14 +10,14 @@ export default {
{{$store.getters.CurrentBudget.Name}}
- - Budget
+ - Budget
- Reports (Coming Soon)
-
On-Budget Accounts
-
- {{account.Name}}
+ {{account.Name}}
{{account.Balance.Int / 100}}
@@ -30,7 +26,7 @@ export default {
Off-Budget Accounts
-
- {{account.Name}}
+ {{account.Name}}
{{account.Balance.Int / 100}}
diff --git a/web/src/pages/Dashboard.vue b/web/src/pages/Dashboard.vue
index 2ba6cc0..26e44db 100644
--- a/web/src/pages/Dashboard.vue
+++ b/web/src/pages/Dashboard.vue
@@ -3,14 +3,6 @@ import NewBudget from '@/dialogs/NewBudget.vue';
export default {
props: ["budgetid"],
- mounted() {
- //this.$store.dispatch("fetchDashboard");
- },
- watch: {
- budgetid () {
- this.$store.dispatch("setCurrentBudget", this.budgetid)
- }
- },
components: { NewBudget }
}
diff --git a/web/src/store/index.js b/web/src/store/index.js
index 5b35fa8..8acb129 100644
--- a/web/src/store/index.js
+++ b/web/src/store/index.js
@@ -1,5 +1,4 @@
import { createStore, createLogger } from 'vuex'
-import dashboard from './modules/dashboard'
import { LOGIN, LOGIN_SUCCESS, LOGOUT, TITLE } from './mutation-types'
const store = createStore({
@@ -10,6 +9,12 @@ const store = createStore({
User: null
},
Budgets: {},
+ CurrentBudgetID: null,
+ Accounts: [],
+ CurrentAccountID: null,
+ Categories: [],
+ Transactions: [],
+ Assignments: []
}
},
mutations: {
@@ -41,6 +46,18 @@ const store = createStore({
},
[LOGOUT](state, token) {
state.Session = { Token: null, User: null }
+ },
+ setCurrentBudgetID(state, budgetid) {
+ state.CurrentBudgetID = budgetid;
+ },
+ setCurrentAccountID(state, accountid) {
+ state.CurrentAccountID = accountid;
+ },
+ setAccounts (state, accounts) {
+ state.Accounts = accounts;
+ },
+ setTransactions(state, transactions){
+ state.Transactions = transactions;
}
},
actions: {
@@ -66,6 +83,56 @@ const store = createStore({
headers: getters.AuthHeaders,
body: body,
})
+ },
+ /*async fetchDashboard ({state, commit, rootState}) {
+ const response = await fetch("/api/v1/dashboard", {
+ headers: {
+ 'Authorization': 'Bearer ' + rootState.Session.Token
+ }
+ })
+ const data = await response.json();
+ commit("setBudgets", data.Budgets);
+ },*/
+ async newBudget ({state, commit, dispatch, rootState}, budgetName) {
+ const result = await dispatch("POST", {
+ path: "/budget/new",
+ body: JSON.stringify({name: budgetName})});
+ const response = await result.json();
+ commit("addBudget", response)
+ },
+ async setCurrentBudget({state, commit, dispatch, rootState}, budgetid) {
+ commit("setCurrentBudgetID", budgetid);
+
+ if (budgetid == null)
+ return
+
+ await dispatch("fetchBudget", budgetid)
+ },
+ async fetchBudget ({state, commit, dispatch, rootState}, budgetid) {
+ const result = await dispatch("GET", {path: "/budget/" + budgetid});
+ const response = await result.json();
+ return commit("setAccounts", response.Accounts);
+ },
+ async fetchAccount ({state, commit, rootState}, accountid) {
+ const result = await fetch("/api/v1/account/" + accountid + "/transactions", {
+ headers: {
+ 'Authorization': 'Bearer ' + rootState.Session.Token
+ }
+ });
+ const response = await result.json();
+ commit("setTransactions", response.Transactions);
+ },
+ async setCurrentAccount({state, commit, dispatch, getters}, {budgetid, accountid}) {
+ if (budgetid == null)
+ return
+
+ await dispatch("fetchBudget", budgetid);
+ commit("setCurrentAccountID", accountid);
+ if (accountid == null)
+ return
+
+ commit(TITLE, getters.CurrentAccount.Name);
+ await dispatch("fetchAccount", accountid)
}
},
getters: {
@@ -76,30 +143,46 @@ const store = createStore({
return {
'Authorization': 'Bearer ' + state.Session.Token
}
+ },
+ CurrentBudget(state) {
+ if(state.CurrentBudgetID == null)
+ return {};
+
+ console.log(state.Budgets, state.CurrentBudgetID);
+ const budgets = state.Budgets.filter(x => x.ID == state.CurrentBudgetID);
+ if(budgets.length > 0)
+ return budgets[0];
+
+ return {};
+ },
+ Accounts(state) {
+ return state.Accounts || [];
+ },
+ CurrentAccount(state) {
+ if(state.CurrentAccountID == null)
+ return {name: "Not found"};
+ return state.Accounts.filter(x => x.ID == state.CurrentAccountID)[0];
+ },
+ OnBudgetAccounts(state) {
+ return (state.Accounts || []).filter(x => x.OnBudget);
+ },
+ OffBudgetAccounts(state) {
+ return (state.Accounts || []).filter(x => !x.OnBudget);
+ },
+ Transactions(state) {
+ return (state.Transactions || []);
}
},
- modules: {
- dashboard
- },
plugins: [createLogger()]
})
-store.subscribeAction({
- after(mutation, state) {
- switch(mutation.type){
- case "setCurrentBudget":
- return store.dispatch("fetchBudget", mutation.payload)
- case "setCurrentAccount":
- return store.dispatch("fetchAccount", mutation.payload)
- }
- }
-})
-
store.subscribe((mutation, state) => {
let persistedState = {
Session: state.Session,
Budgets: state.Budgets,
- CurrentBudget: state.CurrentBudget
+ Accounts: state.Accounts,
+ CurrentBudgetID: state.CurrentBudgetID,
+ CurrentAccountID: state.CurrentAccountID
}
localStorage.setItem("store", JSON.stringify(persistedState));
})
diff --git a/web/src/store/modules/dashboard.js b/web/src/store/modules/dashboard.js
deleted file mode 100644
index e9b943b..0000000
--- a/web/src/store/modules/dashboard.js
+++ /dev/null
@@ -1,110 +0,0 @@
-import { TITLE } from "../mutation-types";
-
-const dashboard = {
- state () {
- return {
- CurrentBudget: null,
- Accounts: [],
- CurrentAccount: null,
- Categories: [],
- Transactions: [],
- Assignments: []
- }
- },
- mutations: {
- setCurrentBudget(state, budget) {
- state.CurrentBudget = budget;
- },
- setAccounts (state, accounts) {
- state.Accounts = accounts;
- },
- setCurrentAccount(state, account) {
- state.CurrentAccount = account;
- },
- setTransactions(state, transactions){
- state.Transactions = transactions;
- }
- },
- getters: {
- CurrentBudget(state) {
- return state.CurrentBudget || {};
- },
- Accounts(state) {
- return state.Accounts || [];
- },
- CurrentAccount(state) {
- return state.CurrentAccount || {};
- },
- OnBudgetAccounts(state) {
- return (state.Accounts || []).filter(x => x.OnBudget);
- },
- OffBudgetAccounts(state) {
- return (state.Accounts || []).filter(x => !x.OnBudget);
- },
- Transactions(state) {
- return (state.Transactions || []);
- }
- },
- actions: {
- /*async fetchDashboard ({state, commit, rootState}) {
- const response = await fetch("/api/v1/dashboard", {
- headers: {
- 'Authorization': 'Bearer ' + rootState.Session.Token
- }
- })
- const data = await response.json();
- commit("setBudgets", data.Budgets);
- },*/
- async newBudget ({state, commit, rootState}, budgetName) {
- fetch("/api/v1/budget/new", {
- method: "POST",
- body: JSON.stringify({name: budgetName}),
- headers: {
- 'Authorization': 'Bearer ' + rootState.Session.Token
- }
- })
- .then(x => x.json())
- .then(x => commit("addBudget", x));
- },
- async setCurrentBudget({state, commit, dispatch, rootState}, budgetid) {
- for (const element of rootState.Budgets) {
- if(element.ID != budgetid)
- continue
-
- commit("setCurrentBudget", element);
- break
- }
- },
- async fetchBudget ({state, commit, rootState}, budgetid) {
- const result = await fetch("/api/v1/budget/" + budgetid, {
- headers: {
- 'Authorization': 'Bearer ' + rootState.Session.Token
- }
- });
- const response = await result.json();
- return commit("setAccounts", response.Accounts);
- },
- async fetchAccount ({state, commit, rootState}, accountid) {
- const result = await fetch("/api/v1/account/" + accountid + "/transactions", {
- headers: {
- 'Authorization': 'Bearer ' + rootState.Session.Token
- }
- });
- const response = await result.json();
- return commit("setTransactions", response.Transactions);
- },
- async setCurrentAccount({state, commit, dispatch}, {budgetid, accountid}) {
- await dispatch("fetchBudget", budgetid);
- for (const element of state.Accounts) {
- if(element.ID != accountid)
- continue
-
- commit("setCurrentAccount", element);
- commit(TITLE, element.Name);
- break
- }
- }
- }
-}
-
-export default dashboard
\ No newline at end of file