From c5411518c46526c6a589beaa2e142da27cde5a85 Mon Sep 17 00:00:00 2001 From: Joel Jeremy Marquez Date: Thu, 21 Nov 2024 16:01:09 -0800 Subject: [PATCH] Use strict typing in useSheetValue and fix bug where query is not being updated when changed (#3864) * Use strict typing in useSheetValue and fix bug where query is not being updated when changed * Release notes * Update VRT * Fix regression * Update VRT --------- Co-authored-by: github-actions[bot] --- ...nsactions-by-category-1-chromium-linux.png | Bin 11822 -> 11822 bytes ...nsactions-by-category-2-chromium-linux.png | Bin 11696 -> 11696 bytes ...nsactions-by-category-4-chromium-linux.png | Bin 5499 -> 5500 bytes ...nsactions-by-category-5-chromium-linux.png | Bin 5600 -> 5601 bytes .../src/components/accounts/Reconcile.tsx | 12 +++-- .../autocomplete/CategoryAutocomplete.tsx | 13 +++-- .../budget/envelope/BalanceMenu.tsx | 3 +- .../budget/envelope/BalanceMovementMenu.tsx | 6 +-- .../envelope/budgetsummary/ToBudgetMenu.tsx | 2 +- .../components/spreadsheet/useSheetValue.ts | 48 +++++++++++------- upcoming-release-notes/3864.md | 6 +++ 11 files changed, 57 insertions(+), 33 deletions(-) create mode 100644 upcoming-release-notes/3864.md diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-1-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-1-chromium-linux.png index fbac8396fa545c20390542ce6e8d4ad743981dec..6d47cb90a5eea4393fe9c4abe13e01161c0c3042 100644 GIT binary patch delta 36 qcmZ1%vo2^%NJpLnp0TlpxFa`&v~zQQUW@yj=zo^_rG`W&{1k87CoybHYPe~ zxmK&?$gwl?-5xrtt`MU9%0JGe3XWp3a&qzceAKC#;D4`v-CBPfKbcjg^18JX&nXu| z6sy2~U9ASKIh-!me)S#WM-RkoHc=xciqwHU_~^5ZA(yZJdMnSR4kRMNOl*y42KVY( z#akuBrJ-6S6M&Z{&mq6CkZ)GbA$`HyeE#)T(w6@x^zt`n;c&Uw^zj^)&w7nnX)CK} zON6+zXc~7Ks-S;BZq~^Q4sl9M0#-R)q7;veEiO|Oh3x#ls$f%u5Ne665r^jVh*yoKcmynG#=M?Y#yPW{ z6#Zl`$VcyXIyjY+f!Pv?PH#Y~EyJWJLWs+j&#U0|y090V!sBxB{{f7bzW}WHNW}mE O002ovPDBK*LSTZaO$Mj{ delta 524 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 delta 5125 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 diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-5-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-5-chromium-linux.png index 5badb7008027eb30873847c1f86623629855d474..ac6583f5c46108ba3dcc58fa94dfcd12b887d3ed 100644 GIT binary patch delta 5253 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 jm8oZq!7;Kin}1E(+OZhgpgwZVQ-^ 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 diff --git a/packages/desktop-client/src/components/accounts/Reconcile.tsx b/packages/desktop-client/src/components/accounts/Reconcile.tsx index 77e0dc1459..e3136bea02 100644 --- a/packages/desktop-client/src/components/accounts/Reconcile.tsx +++ b/packages/desktop-client/src/components/accounts/Reconcile.tsx @@ -29,11 +29,13 @@ export function ReconcilingMessage({ onDone, onCreateTransaction, }: ReconcilingMessageProps) { - const cleared = useSheetValue<'balance', `balance-query-${string}-cleared`>({ - name: (balanceQuery.name + '-cleared') as `balance-query-${string}-cleared`, - value: 0, - query: balanceQuery.query.filter({ cleared: true }), - }); + const cleared = + useSheetValue<'balance', `balance-query-${string}-cleared`>({ + name: (balanceQuery.name + + '-cleared') as `balance-query-${string}-cleared`, + value: 0, + query: balanceQuery.query.filter({ cleared: true }), + }) ?? 0; const format = useFormat(); const targetDiff = targetBalance - cleared; diff --git a/packages/desktop-client/src/components/autocomplete/CategoryAutocomplete.tsx b/packages/desktop-client/src/components/autocomplete/CategoryAutocomplete.tsx index 735982713b..1939b82e65 100644 --- a/packages/desktop-client/src/components/autocomplete/CategoryAutocomplete.tsx +++ b/packages/desktop-client/src/components/autocomplete/CategoryAutocomplete.tsx @@ -393,7 +393,7 @@ function CategoryItem({ >(balanceBinding); const isToBeBudgetedItem = item.id === 'to-be-budgeted'; - const toBudget = useEnvelopeSheetValue(envelopeBudget.toBudget) ?? 0; + const toBudget = useEnvelopeSheetValue(envelopeBudget.toBudget); return (
{isToBeBudgetedItem diff --git a/packages/desktop-client/src/components/budget/envelope/BalanceMenu.tsx b/packages/desktop-client/src/components/budget/envelope/BalanceMenu.tsx index 83244cf4a9..f9762b5cc8 100644 --- a/packages/desktop-client/src/components/budget/envelope/BalanceMenu.tsx +++ b/packages/desktop-client/src/components/budget/envelope/BalanceMenu.tsx @@ -29,7 +29,8 @@ export function BalanceMenu({ const carryover = useEnvelopeSheetValue( envelopeBudget.catCarryover(categoryId), ); - const balance = useEnvelopeSheetValue(envelopeBudget.catBalance(categoryId)); + const balance = + useEnvelopeSheetValue(envelopeBudget.catBalance(categoryId)) ?? 0; return ( {}, }: BalanceMovementMenuProps) { - const catBalance = useEnvelopeSheetValue( - envelopeBudget.catBalance(categoryId), - ); + const catBalance = + useEnvelopeSheetValue(envelopeBudget.catBalance(categoryId)) ?? 0; + const [menu, _setMenu] = useState('menu'); const ref = useRef(null); diff --git a/packages/desktop-client/src/components/budget/envelope/budgetsummary/ToBudgetMenu.tsx b/packages/desktop-client/src/components/budget/envelope/budgetsummary/ToBudgetMenu.tsx index 28978d6a13..3dd9b4a685 100644 --- a/packages/desktop-client/src/components/budget/envelope/budgetsummary/ToBudgetMenu.tsx +++ b/packages/desktop-client/src/components/budget/envelope/budgetsummary/ToBudgetMenu.tsx @@ -25,7 +25,7 @@ export function ToBudgetMenu({ const { t } = useTranslation(); const toBudget = useEnvelopeSheetValue(envelopeBudget.toBudget) ?? 0; - const forNextMonth = useEnvelopeSheetValue(envelopeBudget.forNextMonth); + const forNextMonth = useEnvelopeSheetValue(envelopeBudget.forNextMonth) ?? 0; const items = [ ...(toBudget > 0 ? [ diff --git a/packages/desktop-client/src/components/spreadsheet/useSheetValue.ts b/packages/desktop-client/src/components/spreadsheet/useSheetValue.ts index 62061fede0..692adeac56 100644 --- a/packages/desktop-client/src/components/spreadsheet/useSheetValue.ts +++ b/packages/desktop-client/src/components/spreadsheet/useSheetValue.ts @@ -1,6 +1,6 @@ -// @ts-strict-ignore import { useState, useRef, useLayoutEffect } from 'react'; +import { type Query } from 'loot-core/shared/query'; import { useSpreadsheet } from 'loot-core/src/client/SpreadsheetProvider'; import { useSheetName } from './useSheetName'; @@ -12,13 +12,22 @@ import { type Binding, } from '.'; +type SheetValueResult< + SheetName extends SheetNames, + FieldName extends SheetFields, +> = { + name: string; + value: Spreadsheets[SheetName][FieldName] | null; + query?: Query; +}; + export function useSheetValue< SheetName extends SheetNames, FieldName extends SheetFields, >( binding: Binding, - onChange?: (result) => void, -): Spreadsheets[SheetName][FieldName] { + onChange?: (result: SheetValueResult) => void, +): SheetValueResult['value'] { const { sheetName, fullSheetName } = useSheetName(binding); const bindingObj = @@ -27,34 +36,37 @@ export function useSheetValue< : binding; const spreadsheet = useSpreadsheet(); - const [result, setResult] = useState({ + const [result, setResult] = useState>({ name: fullSheetName, value: bindingObj.value === undefined ? null : bindingObj.value, query: bindingObj.query, }); const latestOnChange = useRef(onChange); - const latestValue = useRef(result.value); + latestOnChange.current = onChange; - useLayoutEffect(() => { - latestOnChange.current = onChange; - latestValue.current = result.value; - }); + const latestValue = useRef(result.value); + latestValue.current = result.value; useLayoutEffect(() => { if (bindingObj.query) { spreadsheet.createQuery(sheetName, bindingObj.name, bindingObj.query); } - return spreadsheet.bind(sheetName, binding, null, newResult => { - if (latestOnChange.current) { - latestOnChange.current(newResult); - } + return spreadsheet.bind( + sheetName, + binding, + null, + (newResult: SheetValueResult) => { + if (latestOnChange.current) { + latestOnChange.current(newResult); + } - if (newResult.value !== latestValue.current) { - setResult(newResult); - } - }); - }, [sheetName, bindingObj.name]); + if (newResult.value !== latestValue.current) { + setResult(newResult); + } + }, + ); + }, [sheetName, bindingObj.name, bindingObj.query]); return result.value; } diff --git a/upcoming-release-notes/3864.md b/upcoming-release-notes/3864.md new file mode 100644 index 0000000000..837da8dc6a --- /dev/null +++ b/upcoming-release-notes/3864.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [joel-jeremy] +--- + +Use strict typing in useSheetValue and fix bug where query is not being updated when the query object changed