[PR #8177] [MERGED] [AI] Fix shift-click range selection including hidden reconciled transactions #122389

Closed
opened 2026-06-11 21:14:12 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/actualbudget/actual/pull/8177
Author: @augustocbx
Created: 6/10/2026
Status: Merged
Merged: 6/11/2026
Merged by: @MatissJanis

Base: masterHead: fix/shift-select-hidden-reconciled-6579


📝 Commits (4)

  • b9304e1 [AI] Fix shift-click range selection including hidden reconciled transactions
  • 40f402f [AI] Add release notes
  • 04ddb14 [AI] Slim down range selection e2e test to reduce runtime
  • 03d957a Merge branch 'master' into fix/shift-select-hidden-reconciled-6579

📊 Changes

4 files changed (+149 additions, -1 deletions)

View changed files

📝 packages/desktop-client/e2e/accounts.test.ts (+62 -0)
📝 packages/desktop-client/src/components/accounts/Account.tsx (+10 -1)
packages/desktop-client/src/hooks/useSelected.test.ts (+71 -0)
upcoming-release-notes/8177.md (+6 -0)

📄 Description

Summary

  • Fix shift-click range selection in the account register including transactions hidden by "Hide reconciled transactions". The selection count was wrong and batch actions (e.g. delete) silently operated on the hidden reconciled transactions.
  • Root cause: when the running balance is shown, reconciled transactions stay loaded (they are needed to calculate the running balance) and are only filtered out at render time in TransactionsTable. The selection provider (SelectedProviderWithItems) still received the full transaction list, and range selection in useSelected selects every item between two indexes of that list — including the hidden rows. This is also why #6015 could not be reproduced at the time: without the running balance enabled, reconciled transactions are filtered out at the query level and the bug never manifests.
  • Fix: pass only the visible transactions to SelectedProviderWithItems, mirroring the filtering the transaction table applies when rendering. This also prunes hidden reconciled transactions from an existing selection when "Hide reconciled transactions" is toggled on.

Fixes #6579

Tests

  • New e2e regression test (accounts.test.ts): reconciles two transactions in the middle of a register, hides reconciled transactions, shows the running balance, then shift-click selects across the range. Verified it fails without the fix (selects 5 transactions) and passes with it (selects 3).
  • New unit tests for the useSelected hook covering range selection bounds and pruning of selected ids that are removed from the visible items.
  • Commands run:
    • yarn typecheck
    • yarn lint:fix
    • yarn test (all workspaces)
    • yarn workspace @actual-app/web run playwright test accounts.test.ts --browser=chromium

AI assistance disclosure

This pull request was authored with the assistance of an AI agent (Claude Code), in accordance with the repository's AI usage policy. The change was reviewed, tested, and verified locally.


Bundle Stats

Bundle Files count Total bundle size % Changed
desktop-client 37 14.14 MB → 14.14 MB (+64 B) +0.00%
loot-core 1 5.28 MB 0%
api 2 3.87 MB 0%
cli 1 7.97 MB 0%
crdt 1 11.12 kB 0%
View detailed bundle stats

desktop-client

Total

Files count Total bundle size % Changed
37 14.14 MB → 14.14 MB (+64 B) +0.00%
Changeset
File Δ Size
src/components/accounts/Account.tsx 📈 +64 B (+0.14%) 43.94 kB → 44 kB
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger

Asset File Size % Changed
static/js/wide.js 298.88 kB → 298.95 kB (+64 B) +0.02%

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
static/js/index.js 1.6 MB 0%
static/js/BackgroundImage.js 121.09 kB 0%
static/js/FormulaEditor.js 962.55 kB 0%
static/js/ManageRules.js 46.63 kB 0%
static/js/PayeeRuleCountLabel.js 7.33 kB 0%
static/js/ReportRouter.js 1.27 MB 0%
static/js/ScheduleEditForm.js 146.57 kB 0%
static/js/SchedulesTable.js 206.3 kB 0%
static/js/TransactionEdit.js 90.63 kB 0%
static/js/TransactionList.js 85.81 kB 0%
static/js/Value.js 5.08 MB 0%
static/js/_baseIsEqual.js 98.38 kB 0%
static/js/ca.js 185.63 kB 0%
static/js/client.js 451.37 kB 0%
static/js/da.js 100.19 kB 0%
static/js/de.js 181.63 kB 0%
static/js/en-GB.js 9.25 kB 0%
static/js/en.js 201.71 kB 0%
static/js/es.js 177.58 kB 0%
static/js/extends.js 508.79 kB 0%
static/js/fr.js 177.35 kB 0%
static/js/indexeddb-main-thread-worker-e59fee74.js 13.46 kB 0%
static/js/it.js 163.93 kB 0%
static/js/narrow.js 365.05 kB 0%
static/js/nb-NO.js 147.07 kB 0%
static/js/nl.js 119.71 kB 0%
static/js/pt-BR.js 187.34 kB 0%
static/js/resize-observer.js 18.06 kB 0%
static/js/th.js 173.33 kB 0%
static/js/theme.js 31.88 kB 0%
static/js/toString.js 705.18 kB 0%
static/js/uk.js 216.7 kB 0%
static/js/useFormatList.js 2.52 kB 0%
static/js/useTransactionBatchActions.js 9.71 kB 0%
static/js/workbox-window.prod.es5.js 7.33 kB 0%
static/js/zh-Hans.js 116.44 kB 0%

loot-core

Total

Files count Total bundle size % Changed
1 5.28 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
kcab.worker.C3iXgrGb.js 5.28 MB 0%

api

Total

Files count Total bundle size % Changed
2 3.87 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
index.js 3.87 MB 0%
models.js 0 B 0%

cli

Total

Files count Total bundle size % Changed
1 7.97 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
cli.js 7.97 MB 0%

crdt

Total

Files count Total bundle size % Changed
1 11.12 kB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
index.js 11.12 kB 0%

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/actualbudget/actual/pull/8177 **Author:** [@augustocbx](https://github.com/augustocbx) **Created:** 6/10/2026 **Status:** ✅ Merged **Merged:** 6/11/2026 **Merged by:** [@MatissJanis](https://github.com/MatissJanis) **Base:** `master` ← **Head:** `fix/shift-select-hidden-reconciled-6579` --- ### 📝 Commits (4) - [`b9304e1`](https://github.com/actualbudget/actual/commit/b9304e15e0d5ccbe306e7d6b0ae4b27a35843f29) [AI] Fix shift-click range selection including hidden reconciled transactions - [`40f402f`](https://github.com/actualbudget/actual/commit/40f402f5b782cd815c3820932fcda4970401a530) [AI] Add release notes - [`04ddb14`](https://github.com/actualbudget/actual/commit/04ddb14cb90c8bd49dafa8936e5b3df00aa0d1c1) [AI] Slim down range selection e2e test to reduce runtime - [`03d957a`](https://github.com/actualbudget/actual/commit/03d957a7a59c020d8f1e6cc0443fa0e0ff2cec29) Merge branch 'master' into fix/shift-select-hidden-reconciled-6579 ### 📊 Changes **4 files changed** (+149 additions, -1 deletions) <details> <summary>View changed files</summary> 📝 `packages/desktop-client/e2e/accounts.test.ts` (+62 -0) 📝 `packages/desktop-client/src/components/accounts/Account.tsx` (+10 -1) ➕ `packages/desktop-client/src/hooks/useSelected.test.ts` (+71 -0) ➕ `upcoming-release-notes/8177.md` (+6 -0) </details> ### 📄 Description ## Summary - Fix shift-click range selection in the account register including transactions hidden by "Hide reconciled transactions". The selection count was wrong and batch actions (e.g. delete) silently operated on the hidden reconciled transactions. - Root cause: when the running balance is shown, reconciled transactions stay loaded (they are needed to calculate the running balance) and are only filtered out at render time in `TransactionsTable`. The selection provider (`SelectedProviderWithItems`) still received the full transaction list, and range selection in `useSelected` selects every item between two indexes of that list — including the hidden rows. This is also why #6015 could not be reproduced at the time: without the running balance enabled, reconciled transactions are filtered out at the query level and the bug never manifests. - Fix: pass only the visible transactions to `SelectedProviderWithItems`, mirroring the filtering the transaction table applies when rendering. This also prunes hidden reconciled transactions from an existing selection when "Hide reconciled transactions" is toggled on. Fixes #6579 ## Tests - New e2e regression test (`accounts.test.ts`): reconciles two transactions in the middle of a register, hides reconciled transactions, shows the running balance, then shift-click selects across the range. Verified it fails without the fix (selects 5 transactions) and passes with it (selects 3). - New unit tests for the `useSelected` hook covering range selection bounds and pruning of selected ids that are removed from the visible items. - Commands run: - `yarn typecheck` ✅ - `yarn lint:fix` ✅ - `yarn test` ✅ (all workspaces) - `yarn workspace @actual-app/web run playwright test accounts.test.ts --browser=chromium` ✅ ## AI assistance disclosure This pull request was authored with the assistance of an AI agent (Claude Code), in accordance with the repository's AI usage policy. The change was reviewed, tested, and verified locally. <!--- actual-bot-sections ---> <hr /> <!--- bundlestats-action-comment key:combined start ---> ### Bundle Stats Bundle | Files count | Total bundle size | % Changed ------ | ----------- | ----------------- | --------- desktop-client | 37 | 14.14 MB → 14.14 MB (+64 B) | +0.00% loot-core | 1 | 5.28 MB | 0% api | 2 | 3.87 MB | 0% cli | 1 | 7.97 MB | 0% crdt | 1 | 11.12 kB | 0% <details> <summary>View detailed bundle stats</summary> #### desktop-client **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 37 | 14.14 MB → 14.14 MB (+64 B) | +0.00% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `src/components/accounts/Account.tsx` | 📈 +64 B (+0.14%) | 43.94 kB → 44 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** Asset | File Size | % Changed ----- | --------- | --------- static/js/wide.js | 298.88 kB → 298.95 kB (+64 B) | +0.02% **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- static/js/index.js | 1.6 MB | 0% static/js/BackgroundImage.js | 121.09 kB | 0% static/js/FormulaEditor.js | 962.55 kB | 0% static/js/ManageRules.js | 46.63 kB | 0% static/js/PayeeRuleCountLabel.js | 7.33 kB | 0% static/js/ReportRouter.js | 1.27 MB | 0% static/js/ScheduleEditForm.js | 146.57 kB | 0% static/js/SchedulesTable.js | 206.3 kB | 0% static/js/TransactionEdit.js | 90.63 kB | 0% static/js/TransactionList.js | 85.81 kB | 0% static/js/Value.js | 5.08 MB | 0% static/js/_baseIsEqual.js | 98.38 kB | 0% static/js/ca.js | 185.63 kB | 0% static/js/client.js | 451.37 kB | 0% static/js/da.js | 100.19 kB | 0% static/js/de.js | 181.63 kB | 0% static/js/en-GB.js | 9.25 kB | 0% static/js/en.js | 201.71 kB | 0% static/js/es.js | 177.58 kB | 0% static/js/extends.js | 508.79 kB | 0% static/js/fr.js | 177.35 kB | 0% static/js/indexeddb-main-thread-worker-e59fee74.js | 13.46 kB | 0% static/js/it.js | 163.93 kB | 0% static/js/narrow.js | 365.05 kB | 0% static/js/nb-NO.js | 147.07 kB | 0% static/js/nl.js | 119.71 kB | 0% static/js/pt-BR.js | 187.34 kB | 0% static/js/resize-observer.js | 18.06 kB | 0% static/js/th.js | 173.33 kB | 0% static/js/theme.js | 31.88 kB | 0% static/js/toString.js | 705.18 kB | 0% static/js/uk.js | 216.7 kB | 0% static/js/useFormatList.js | 2.52 kB | 0% static/js/useTransactionBatchActions.js | 9.71 kB | 0% static/js/workbox-window.prod.es5.js | 7.33 kB | 0% static/js/zh-Hans.js | 116.44 kB | 0% </div> </details> --- #### loot-core **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 5.28 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.C3iXgrGb.js | 5.28 MB | 0% </div> </details> --- #### api **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 2 | 3.87 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- index.js | 3.87 MB | 0% models.js | 0 B | 0% </div> </details> --- #### cli **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 7.97 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- cli.js | 7.97 MB | 0% </div> </details> --- #### crdt **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 11.12 kB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- index.js | 11.12 kB | 0% </div> </details> </details> <!--- bundlestats-action-comment key:combined end ---> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-06-11 21:14:12 -05:00
GiteaMirror changed title from [PR #8177] [AI] Fix shift-click range selection including hidden reconciled transactions to [PR #8177] [MERGED] [AI] Fix shift-click range selection including hidden reconciled transactions 2026-06-14 06:36:30 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#122389