mirror of
https://github.com/ManInDark/HabitTrove.git
synced 2026-01-21 06:34:30 +01:00
fix infinite render
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { useAtom } from 'jotai';
|
import { useAtom } from 'jotai';
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect, useMemo } from 'react';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import { calculateCoinsEarnedToday, calculateCoinsSpentToday, calculateTotalEarned, calculateTotalSpent, calculateTransactionsToday, checkPermission } from '@/lib/utils'
|
import { calculateCoinsEarnedToday, calculateCoinsSpentToday, calculateTotalEarned, calculateTotalSpent, calculateTransactionsToday, checkPermission } from '@/lib/utils'
|
||||||
import {
|
import {
|
||||||
@@ -61,8 +61,11 @@ export function useCoins(options?: { selectedUser?: string }) {
|
|||||||
const [atomCoinsSpentToday] = useAtom(coinsSpentTodayAtom);
|
const [atomCoinsSpentToday] = useAtom(coinsSpentTodayAtom);
|
||||||
const [atomTransactionsToday] = useAtom(transactionsTodayAtom);
|
const [atomTransactionsToday] = useAtom(transactionsTodayAtom);
|
||||||
const targetUser = options?.selectedUser ? users.users.find(u => u.id === options.selectedUser) : currentUser
|
const targetUser = options?.selectedUser ? users.users.find(u => u.id === options.selectedUser) : currentUser
|
||||||
// Filter transactions for the targetUser
|
|
||||||
const transactions = allCoinsData.transactions.filter(t => t.userId === targetUser?.id)
|
const transactions = useMemo(() => {
|
||||||
|
return allCoinsData.transactions.filter(t => t.userId === targetUser?.id);
|
||||||
|
}, [allCoinsData, targetUser?.id]);
|
||||||
|
|
||||||
const timezone = settings.system.timezone;
|
const timezone = settings.system.timezone;
|
||||||
const [coinsEarnedToday, setCoinsEarnedToday] = useState(0);
|
const [coinsEarnedToday, setCoinsEarnedToday] = useState(0);
|
||||||
const [totalEarned, setTotalEarned] = useState(0);
|
const [totalEarned, setTotalEarned] = useState(0);
|
||||||
@@ -88,16 +91,14 @@ export function useCoins(options?: { selectedUser?: string }) {
|
|||||||
setTotalSpent(calculateTotalSpent(transactions));
|
setTotalSpent(calculateTotalSpent(transactions));
|
||||||
setCoinsSpentToday(calculateCoinsSpentToday(transactions, timezone));
|
setCoinsSpentToday(calculateCoinsSpentToday(transactions, timezone));
|
||||||
setTransactionsToday(calculateTransactionsToday(transactions, timezone));
|
setTransactionsToday(calculateTransactionsToday(transactions, timezone));
|
||||||
const userTransactions = allCoinsData.transactions.filter(t => t.userId === targetUser!.id);
|
setBalance(transactions.reduce((acc, t) => acc + t.amount, 0));
|
||||||
setBalance(userTransactions.reduce((acc, t) => acc + t.amount, 0));
|
|
||||||
}
|
}
|
||||||
}, [
|
}, [
|
||||||
targetUser,
|
targetUser?.id,
|
||||||
currentUser,
|
currentUser?.id,
|
||||||
transactions, // Derived from allCoinsData and targetUser
|
transactions, // Memoized: depends on allCoinsData and targetUser?.id
|
||||||
allCoinsData, // Added for balance calculation when targetUser is not currentUser
|
|
||||||
timezone,
|
timezone,
|
||||||
loggedInUserBalance, // Added for balance calculation when targetUser is currentUser
|
loggedInUserBalance,
|
||||||
atomCoinsEarnedToday,
|
atomCoinsEarnedToday,
|
||||||
atomTotalEarned,
|
atomTotalEarned,
|
||||||
atomTotalSpent,
|
atomTotalSpent,
|
||||||
|
|||||||
Reference in New Issue
Block a user