diff --git a/packages/desktop-client/src/components/accounts/Account.js b/packages/desktop-client/src/components/accounts/Account.js index 0ee330edddc1f0daf430ebfbc08153d5c4630e51..d1e6f4a99e020f5bd4a0d6203449a28952730b7b 100644 --- a/packages/desktop-client/src/components/accounts/Account.js +++ b/packages/desktop-client/src/components/accounts/Account.js @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef, useMemo } from 'react'; +import React, { useState, useRef, useMemo } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { Redirect, useParams, useHistory, useLocation } from 'react-router-dom'; @@ -327,31 +327,27 @@ function DetailedBalance({ name, balance }) { } function SelectedBalance({ selectedItems }) { - let [balance, setBalance] = useState(null); - - useEffect(() => { - async function run() { - let { data: rows } = await runQuery( - q('transactions') - .filter({ - id: { $oneof: [...selectedItems] }, - parent_id: { $oneof: [...selectedItems] } - }) - .select('id') - ); - let ids = new Set(rows.map(r => r.id)); - - let finalIds = [...selectedItems].filter(id => !ids.has(id)); - let { data: balance } = await runQuery( - q('transactions') - .filter({ id: { $oneof: finalIds } }) - .options({ splits: 'all' }) - .calculate({ $sum: '$amount' }) - ); - setBalance(balance); - } - run(); - }, [selectedItems]); + let name = `selected-balance-${[...selectedItems].join('-')}`; + + let rows = useSheetValue({ + name, + query: q('transactions') + .filter({ + id: { $oneof: [...selectedItems] }, + parent_id: { $oneof: [...selectedItems] } + }) + .select('id') + }); + let ids = new Set((rows || []).map(r => r.id)); + + let finalIds = [...selectedItems].filter(id => !ids.has(id)); + let balance = useSheetValue({ + name: name + '-sum', + query: q('transactions') + .filter({ id: { $oneof: finalIds } }) + .options({ splits: 'all' }) + .calculate({ $sum: '$amount' }) + }); if (balance == null) { return null;