diff --git a/.DS_Store b/.DS_Store
index eced0a8..aa53cfc 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/client/src/components/expense/addExpense.jsx b/client/src/components/expense/addExpense.jsx
index 2206377..6f72b80 100644
--- a/client/src/components/expense/addExpense.jsx
+++ b/client/src/components/expense/addExpense.jsx
@@ -11,7 +11,7 @@ import useResponsive from '../../theme/hooks/useResponsive';
import { currencyFind } from '../../utils/helper';
import { addExpenseService } from '../../services/expenseServices';
import configData from '../../config.json'
-import { useParams } from 'react-router-dom'
+import { useParams, useNavigate } from 'react-router-dom'
import { getGroupDetailsService } from '../../services/groupServices';
import Loading from '../loading';
import { Link as RouterLink } from 'react-router-dom';
@@ -20,6 +20,7 @@ import { parseISO } from 'date-fns';
export default function AddExpense() {
+ const navigate = useNavigate();
const params = useParams();
const mdUp = useResponsive('up', 'md');
const profile = JSON.parse(localStorage.getItem('profile'))
@@ -58,7 +59,7 @@ export default function AddExpense() {
onSubmit: async () => {
setLoading(true)
if(await addExpenseService(values, setAlert, setAlertMessage))
- window.location = configData.VIEW_GROUP_URL+groupId
+ navigate(configData.VIEW_GROUP_URL + groupId, { state: { refresh: true } })
},
});
diff --git a/client/src/components/expense/editExpense.jsx b/client/src/components/expense/editExpense.jsx
index acc39a2..7b734a3 100644
--- a/client/src/components/expense/editExpense.jsx
+++ b/client/src/components/expense/editExpense.jsx
@@ -16,7 +16,7 @@ import Loading from '../loading';
import { useNavigate } from "react-router-dom";
import AlertBanner from '../AlertBanner';
import { parseISO } from 'date-fns';
-
+import configData from '../../config.json';
export default function EditExpense() {
@@ -55,7 +55,7 @@ export default function EditExpense() {
onSubmit: async () => {
setLoading(true)
if(await editExpenseService(values, setAlert, setAlertMessage))
- navigate(-1)
+ navigate(configData.VIEW_GROUP_URL + values.groupId, { state: { refresh: true } })
},
});
diff --git a/client/src/components/expense/expenseCard.jsx b/client/src/components/expense/expenseCard.jsx
index ba12ab5..03ac99c 100644
--- a/client/src/components/expense/expenseCard.jsx
+++ b/client/src/components/expense/expenseCard.jsx
@@ -38,7 +38,7 @@ const modelStyle = {
};
-export default function ExpenseCard({ expenseId, expenseName, expenseAmount, expensePerMember, expenseOwner, expenseDate, currencyType }) {
+export default function ExpenseCard({ expenseId, expenseName, expenseAmount, expensePerMember, expenseOwner, expenseDate, currencyType, onExpenseDeleted }) {
const mdUp = useResponsive('up', 'md');
const [anchorEl, setAnchorEl] = useState(null);
const [deleteConfirm, setDeleteConfirm] = useState(false)
@@ -60,8 +60,12 @@ export default function ExpenseCard({ expenseId, expenseName, expenseAmount, exp
const apiDeleteCall = async() => {
await deleteExpenseService({id: expenseId})
- window.location.reload()
deleteConfirmClose()
+ if (onExpenseDeleted) {
+ onExpenseDeleted()
+ } else {
+ window.location.reload()
+ }
}
const open = Boolean(anchorEl);
diff --git a/client/src/components/groups/settlement/index.jsx b/client/src/components/groups/settlement/index.jsx
index cfd0316..4e469a7 100644
--- a/client/src/components/groups/settlement/index.jsx
+++ b/client/src/components/groups/settlement/index.jsx
@@ -12,7 +12,7 @@ import SettlementCard from './settlementCard';
import UserBalanceChart from './userBalanceChart';
-export const GroupSettlements = ({ currencyType }) => {
+export const GroupSettlements = ({ currencyType, refreshKey = 0 }) => {
const params = useParams();
const [noSettle, setNoSettle] = useState(true)
const [alert, setAlert] = useState(false)
@@ -27,6 +27,7 @@ export const GroupSettlements = ({ currencyType }) => {
const getGroupSettlement = async () => {
setReload(false)
setLoading(true)
+ setNoSettle(true)
const groupIdJson = {
id: params.groupId
}
@@ -35,7 +36,7 @@ export const GroupSettlements = ({ currencyType }) => {
setLoading(false)
}
getGroupSettlement()
- }, [reload])
+ }, [reload, params.groupId, refreshKey])
return (
<>
@@ -71,7 +72,7 @@ export const GroupSettlements = ({ currencyType }) => {
No Settlement requiered !
- : }
+ : }
diff --git a/client/src/components/groups/settlement/userBalanceChart.jsx b/client/src/components/groups/settlement/userBalanceChart.jsx
index 68ce613..8291e62 100644
--- a/client/src/components/groups/settlement/userBalanceChart.jsx
+++ b/client/src/components/groups/settlement/userBalanceChart.jsx
@@ -10,7 +10,7 @@ import { Bar } from "react-chartjs-2"
import useResponsive from "../../../theme/hooks/useResponsive"
-const UserBalanceChart = () => {
+const UserBalanceChart = ({ refreshKey = 0 }) => {
const params = useParams();
const mdUp = useResponsive('up', 'md');
const [loading, setLoading] = useState(false)
@@ -51,6 +51,8 @@ const UserBalanceChart = () => {
useEffect(() => {
const getGroupDetails = async () => {
setLoading(true)
+ setGraphData([])
+ setGraphLabel([])
const groupIdJson = {
id: params.groupId
}
@@ -71,7 +73,7 @@ const UserBalanceChart = () => {
setLoading(false)
}
getGroupDetails()
- }, [])
+ }, [params.groupId, refreshKey])
return (
<>
diff --git a/client/src/components/groups/viewGroup/groupCategoryGraph.jsx b/client/src/components/groups/viewGroup/groupCategoryGraph.jsx
index c4f9c19..d48ebee 100644
--- a/client/src/components/groups/viewGroup/groupCategoryGraph.jsx
+++ b/client/src/components/groups/viewGroup/groupCategoryGraph.jsx
@@ -10,7 +10,7 @@ import ChartDataLabels from 'chartjs-plugin-datalabels';
import 'chart.js/auto'
import { convertToCurrency, currencyFind } from '../../../utils/helper';
-const GroupCategoryGraph = ({currencyType}) => {
+const GroupCategoryGraph = ({currencyType, refreshKey = 0}) => {
const params = useParams();
const [alert, setAlert] = useState(false)
const [alertMessage, setAlertMessage] = useState()
@@ -66,12 +66,12 @@ const GroupCategoryGraph = ({currencyType}) => {
}
const category_exp =
await getGroupCategoryExpService(groupIdJson, setAlert, setAlertMessage)
- setCategoryExp(category_exp.data.data)
+ setCategoryExp(category_exp?.data?.data)
setLoading(false)
}
getGroupCategoryExpense()
- }, [])
+ }, [params.groupId, refreshKey])
return (
<>
{loading ? :
diff --git a/client/src/components/groups/viewGroup/groupMonthlyGraph.jsx b/client/src/components/groups/viewGroup/groupMonthlyGraph.jsx
index 2e91c3a..8f9cc89 100644
--- a/client/src/components/groups/viewGroup/groupMonthlyGraph.jsx
+++ b/client/src/components/groups/viewGroup/groupMonthlyGraph.jsx
@@ -9,7 +9,7 @@ import { Line } from "react-chartjs-2";
import 'chart.js/auto'
import { monthNamesMMM } from '../../../utils/helper';
-const GroupMonthlyGraph = () => {
+const GroupMonthlyGraph = ({ refreshKey = 0 }) => {
const params = useParams();
const [alert, setAlert] = useState(false)
const [alertMessage, setAlertMessage] = useState()
@@ -71,13 +71,13 @@ const GroupMonthlyGraph = () => {
const monthly_exp =
await getGroupMonthlyExpService(groupIdJson, setAlert, setAlertMessage)
const daily_exp = await getGroupDailyExpService(groupIdJson, setAlert, setAlertMessage)
- setMonthlyExp(monthly_exp.data.data)
- setDailyExp(daily_exp.data.data)
+ setMonthlyExp(monthly_exp?.data?.data)
+ setDailyExp(daily_exp?.data?.data)
setLoading(false)
}
getGroupMonthlyExpense()
- }, [])
+ }, [params.groupId, refreshKey])
return (
<>
{loading ? :
diff --git a/client/src/components/groups/viewGroup/index.jsx b/client/src/components/groups/viewGroup/index.jsx
index 8e64b32..8ed6410 100644
--- a/client/src/components/groups/viewGroup/index.jsx
+++ b/client/src/components/groups/viewGroup/index.jsx
@@ -1,6 +1,6 @@
import { Box, Button, Container, Divider, Fab, Grid, Link, Stack, styled, Typography } from '@mui/material';
import React, { useEffect, useState } from 'react'
-import { useParams } from 'react-router-dom'
+import { useParams, useLocation } from 'react-router-dom'
import { getGroupDetailsService, getGroupExpenseService } from '../../../services/groupServices';
import AlertBanner from '../../AlertBanner';
import Iconify from '../../Iconify';
@@ -19,6 +19,7 @@ const emailId = profile?.emailId
var showCount = 10
export default function ViewGroup() {
const params = useParams();
+ const location = useLocation();
const [loading, setLoading] = useState(true);
const [group, setGroup] = useState({});
const [groupExpense, setGroupExpense] = useState([]);
@@ -30,6 +31,11 @@ export default function ViewGroup() {
const [expFocus, setExpFocus] = useState(false);
const [expenses, setExpenses] = useState()
const [viewSettlement, setViewSettlement] = useState(0)
+ const [expenseRefreshKey, setExpenseRefreshKey] = useState(0)
+
+ const triggerExpenseRefresh = () => {
+ setExpenseRefreshKey(prev => prev + 1)
+ }
const toggleAllExp = () => {
@@ -63,9 +69,18 @@ export default function ViewGroup() {
return 0
}
+ useEffect(() => {
+ if (location.state?.refresh) {
+ triggerExpenseRefresh()
+ }
+ }, [location.state])
+
useEffect(() => {
const getGroupDetails = async () => {
setLoading(true)
+ showCount = 10
+ setShowAllExp(false)
+ setExpFocus(false)
const groupIdJson = {
id: params.groupId
}
@@ -80,7 +95,7 @@ export default function ViewGroup() {
setLoading(false)
}
getGroupDetails()
- }, []);
+ }, [params.groupId, expenseRefreshKey]);
const CategoryStyle = styled('span')(({ theme }) => ({
top: 22,
@@ -367,7 +382,7 @@ export default function ViewGroup() {
}
{viewSettlement === 1 &&
-
+
}
{viewSettlement === 0 &&
@@ -405,6 +420,7 @@ export default function ViewGroup() {
expenseOwner={myExpense?.expenseOwner}
expenseDate={myExpense?.expenseDate}
currencyType={group?.groupCurrency}
+ onExpenseDeleted={triggerExpenseRefresh}
/>
))}
@@ -414,10 +430,10 @@ export default function ViewGroup() {
-
+
-
+
>
}
diff --git a/components/group.js b/components/group.js
index ae54a9f..7c860fd 100644
--- a/components/group.js
+++ b/components/group.js
@@ -301,7 +301,7 @@ exports.addSplit = async (groupId, expenseAmount, expenseOwner, expenseMembers)
})
group.groupTotal += expenseAmount
group.split[0][expenseOwner] += expenseAmount
- expensePerPerson = expenseAmount / expenseMembers.length
+ let expensePerPerson = expenseAmount / expenseMembers.length
expensePerPerson = Math.round((expensePerPerson + Number.EPSILON) * 100) / 100;
//Updating the split values per user
for (var user of expenseMembers) {
@@ -310,7 +310,7 @@ exports.addSplit = async (groupId, expenseAmount, expenseOwner, expenseMembers)
//Nullifying split - check if the group balance is zero else added the diff to owner
let bal=0
- for(val of Object.entries(group.split[0]))
+ for(let val of Object.entries(group.split[0]))
{
bal += val[1]
}
@@ -334,7 +334,7 @@ exports.clearSplit = async (groupId, expenseAmount, expenseOwner, expenseMembers
})
group.groupTotal -= expenseAmount
group.split[0][expenseOwner] -= expenseAmount
- expensePerPerson = expenseAmount / expenseMembers.length
+ let expensePerPerson = expenseAmount / expenseMembers.length
expensePerPerson = Math.round((expensePerPerson + Number.EPSILON) * 100) / 100;
//Updating the split values per user
for (var user of expenseMembers) {
@@ -343,7 +343,7 @@ exports.clearSplit = async (groupId, expenseAmount, expenseOwner, expenseMembers
//Nullifying split - check if the group balance is zero else added the diff to owner
let bal=0
- for(val of Object.entries(group.split[0]))
+ for(let val of Object.entries(group.split[0]))
{
bal += val[1]
}