From 7f7a9afc8c300e089ac2f653130fce7143b4380c Mon Sep 17 00:00:00 2001 From: Jed Fox <git@jedfox.com> Date: Mon, 30 Jan 2023 16:31:58 -0500 Subject: [PATCH] Update SelectedBalance to use useSheetValue (#592) --- .../src/components/accounts/Account.js | 48 +++++++++---------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/packages/desktop-client/src/components/accounts/Account.js b/packages/desktop-client/src/components/accounts/Account.js index 0ee330edd..d1e6f4a99 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; -- GitLab