From 3d530c8e7c48fb05da2c1aa5f12538f91bf46973 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 25 Oct 2023 20:54:51 +0300 Subject: [PATCH 1/4] You can now add expenses/incomes --- .../infolists/contents/ContentExpense.svelte | 93 ++++++++++++++----- .../infolists/contents/ContentIncome.svelte | 8 +- 2 files changed, 76 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentExpense.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentExpense.svelte index 68ab77c..34689f5 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentExpense.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentExpense.svelte @@ -1,6 +1,63 @@
@@ -9,27 +66,21 @@ +
-

- modal - adjective mod·al \ˈmō-dəl\ -

+
+ + -
    -
  1. of or relating to modality in logic
  2. -
  3. - containing provisions as to the mode of procedure or the manner of taking effect —used of a - contract or legacy -
  4. -
  5. of or relating to a musical mode
  6. -
  7. of or relating to structure as opposed to substance
  8. -
  9. - of, relating to, or constituting a grammatical form or category characteristically indicating - predication -
  10. -
  11. of or relating to a statistical mode
  12. -
+ + - merriam-webster.com + +
@@ -61,4 +112,4 @@ z-index: 1; margin: 0; } - + \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentIncome.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentIncome.svelte index 6216c4b..5935585 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentIncome.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentIncome.svelte @@ -6,7 +6,7 @@ import { getCookie } from "svelte-cookie"; let showModal; - let amount; + let amount = ''; const selectedIncomeId = writable(''); @@ -34,7 +34,7 @@ const selectedIncome = $incomeOptions.find(income => income.id === $selectedIncomeId); const data = { incomeCategory: selectedIncome.id, - amount: $amount, + amount: amount, }; try { @@ -62,7 +62,7 @@

Incomes

-
(showModal = true)} on:keydown={() => console.log("keydown")}> +
(showModal = true)} on:keydown={() => console.log("keydown")}> +
@@ -112,4 +112,4 @@ z-index: 1; margin: 0; } - + \ No newline at end of file From 485bd6b9ba58614721e6dc481415264a59d172e6 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 25 Oct 2023 21:07:20 +0300 Subject: [PATCH 2/4] Prettier income/expense forms --- .../dashboard/board/graphs/Graph1.svelte | 28 ++++- .../infolists/contents/ContentExpense.svelte | 116 +++++++++++++----- .../infolists/contents/ContentIncome.svelte | 114 ++++++++++++----- 3 files changed, 194 insertions(+), 64 deletions(-) diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte index a981296..1271447 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte @@ -2,13 +2,12 @@ import Chart from 'chart.js/auto'; import { onMount } from 'svelte'; import axios from 'axios'; - import {getCookie} from "svelte-cookie"; + import { getCookie } from "svelte-cookie"; let ctx; let chartCanvas; onMount(async () => { - const token = getCookie('access_token'); const config = { @@ -19,11 +18,28 @@ try { const response = await axios.get('http://localhost:8081/incomes/personal-incomes', config); - console.log(response.data); const incomeData = response.data; - const chartLabels = incomeData.map(item => item.incomeCategory.name); - const chartValues = incomeData.map(item => item.amount); + // Create a function to group and sum incomes by category + function groupAndSumByCategory(incomes) { + const groupedData = new Map(); + incomes.forEach(income => { + const category = income.incomeCategory.name; + if (groupedData.has(category)) { + groupedData.set(category, groupedData.get(category) + income.amount); + } else { + groupedData.set(category, income.amount); + } + }); + return groupedData; + } + + // Group and sum incomes by category + const groupedIncomeData = groupAndSumByCategory(incomeData); + + // Extract category names and summed values + const chartLabels = Array.from(groupedIncomeData.keys()); + const chartValues = Array.from(groupedIncomeData.values()); ctx = chartCanvas.getContext('2d'); new Chart(ctx, { @@ -51,6 +67,8 @@
+ + \ No newline at end of file + + h3 { + font-size: 20px; + margin-bottom: 20px; + } + + .form-group { + margin-bottom: 15px; + } + + label { + display: block; + font-weight: bold; + margin-bottom: 5px; + } + + .form-control { + width: 100%; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + } + + select.form-control { + height: 40px; + } + + .btn { + background-color: #007BFF; + color: #fff; + border: none; + border-radius: 5px; + padding: 10px 20px; + cursor: pointer; + } + + .btn:hover { + background-color: #0056b3; + } + diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentIncome.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentIncome.svelte index 5935585..ece775c 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentIncome.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/contents/ContentIncome.svelte @@ -61,55 +61,111 @@
-

Incomes

-
(showModal = true)} on:keydown={() => console.log("keydown")}> - + +
+

Incomes

+
(showModal = true)} on:keydown={() => console.log("keydown")}> + + +
-
- - +
+

Income Details

+
+ + +
- - +
+ + +
- +
+ \ No newline at end of file + + h3 { + font-size: 20px; + margin-bottom: 20px; + } + + .form-group { + margin-bottom: 15px; + } + + label { + display: block; + font-weight: bold; + margin-bottom: 5px; + } + + .form-control { + width: 100%; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + } + + select.form-control { + height: 40px; + } + + .btn { + background-color: #007BFF; + color: #fff; + border: none; + border-radius: 5px; + padding: 10px 20px; + cursor: pointer; + } + + .btn:hover { + background-color: #0056b3; + } + From 0a4ff6193520ac71b23cad6809b7fd300741516d Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 25 Oct 2023 21:14:24 +0300 Subject: [PATCH 3/4] Small modal and request fixes --- .../web/src/routes/dashboard/board/graphs/Graph1.svelte | 9 ++++----- .../web/src/routes/dashboard/board/graphs/Graph2.svelte | 7 ++++--- .../web/src/routes/dashboard/board/graphs/Graph3.svelte | 6 ++++-- .../src/routes/dashboard/board/infolists/Expenses.svelte | 5 +++-- .../src/routes/dashboard/board/infolists/Incomes.svelte | 5 +++-- .../web/src/routes/dashboard/board/other/DataMenu.svelte | 8 ++++++++ 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte index 1271447..0d1fa43 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte @@ -7,7 +7,7 @@ let ctx; let chartCanvas; - onMount(async () => { + async function updateGraph() { const token = getCookie('access_token'); const config = { @@ -20,7 +20,6 @@ const response = await axios.get('http://localhost:8081/incomes/personal-incomes', config); const incomeData = response.data; - // Create a function to group and sum incomes by category function groupAndSumByCategory(incomes) { const groupedData = new Map(); incomes.forEach(income => { @@ -34,10 +33,8 @@ return groupedData; } - // Group and sum incomes by category const groupedIncomeData = groupAndSumByCategory(incomeData); - // Extract category names and summed values const chartLabels = Array.from(groupedIncomeData.keys()); const chartValues = Array.from(groupedIncomeData.values()); @@ -60,7 +57,9 @@ } catch (error) { console.error('Error:', error); } - }); + } + + onMount(updateGraph);
diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph2.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph2.svelte index 98a362c..fe935a6 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph2.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph2.svelte @@ -7,8 +7,7 @@ let ctx; let chartCanvas; - onMount(async () => { - + async function updateGraph() { const token = getCookie('access_token'); const config = { @@ -65,7 +64,9 @@ } catch (error) { console.error('Error:', error); } - }); + } + + onMount(updateGraph);
diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph3.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph3.svelte index 9d5057a..640bd8a 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph3.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph3.svelte @@ -7,7 +7,7 @@ let ctx; let chartCanvas; - onMount(async () => { + async function updateGraph() { const token = getCookie('access_token'); const config = { @@ -50,7 +50,9 @@ } catch (error) { console.error('Error:', error); } - }); + } + + onMount(updateGraph);
diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/Expenses.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/Expenses.svelte index 9ea968a..bf4bc58 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/Expenses.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/Expenses.svelte @@ -8,7 +8,7 @@ let parentHeight; let listParentHeight; - onMount(async () => { + async function updateInfo() { const token = getCookie('access_token'); const config = { @@ -24,7 +24,8 @@ } catch (error) { console.error('Error:', error); } - }); + } + onMount(updateInfo); afterUpdate(() => { parentHeight = document.querySelector('#expenseInfo').offsetHeight; diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/Incomes.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/Incomes.svelte index 6a6ccd2..60d4f7f 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/Incomes.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/infolists/Incomes.svelte @@ -9,7 +9,7 @@ let parentHeight; let listParentHeight; - onMount(async () => { + async function updateInfo() { const token = getCookie('access_token'); const config = { @@ -25,7 +25,8 @@ } catch (error) { console.error('Error:', error); } - }); + } + onMount(updateInfo); afterUpdate(() => { parentHeight = document.querySelector('#incomeInfo').offsetHeight; diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/other/DataMenu.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/other/DataMenu.svelte index f2f2009..2eec838 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/other/DataMenu.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/other/DataMenu.svelte @@ -4,6 +4,14 @@ import Graph3 from '../graphs/Graph3.svelte'; import Expenses from "../infolists/Expenses.svelte"; import Incomes from "../infolists/Incomes.svelte"; + + function updateAll() { + Graph1.updateGraph(); + Graph2.updateGraph(); + Graph3.updateGraph(); + Expenses.updateInfo(); + Incomes.updateInfo(); + }
From b63f156eb7a9958bf3e6d1c1d439375d72c7355a Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 25 Oct 2023 21:20:42 +0300 Subject: [PATCH 4/4] Working on in-app live updates --- .../routes/dashboard/board/Dashboard.svelte | 22 +++++++- .../dashboard/board/graphs/Graph1.svelte | 53 ++++++++----------- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/Dashboard.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/Dashboard.svelte index 68a21dc..8849016 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/Dashboard.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/Dashboard.svelte @@ -4,11 +4,31 @@ import QuickInfobar from "./other/QuickInfobar.svelte"; import { getCookie } from "svelte-cookie"; import {onMount} from "svelte"; + import {writable} from "svelte/store"; + import axios from "axios"; - onMount(() => { + const incomeData = writable([]); + const expenseData = writable([]); + + onMount(async () => { if (getCookie('access_token') === null ) { window.location.href = '/auth/login'; } + + try { + const response = await axios.get('http://localhost:8081/incomes/personal-incomes', config); + incomeData.set(response.data); + } catch (error) { + console.error('Error fetching income data:', error); + } + + try { + const response = await axios.get('http://localhost:8081/expenses/personal-expenses', config); + expenseData.set(response.data); + } catch (error) { + console.error('Error fetching expense data:', error); + } + console.log(getCookie('access_token')); }) diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte index 0d1fa43..433a217 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/dashboard/board/graphs/Graph1.svelte @@ -1,44 +1,35 @@