mirror of
https://github.com/actualbudget/actual.git
synced 2026-03-10 20:23:07 -05:00
Closed
opened 2026-02-28 21:19:49 -06:00 by GiteaMirror
·
0 comments
No Branch/Tag Specified
master
matiss/oxlint-no-floating-promises-require-array-sort-compare
ai/custom-theme-dual-prefs
claude/fix-simplefin-batch-sync-O8LcD
matiss/fix-6804
claude/fix-simplefin-ssrf-T31gX
claude/release-notes-validation-X7rvR
add-claude-github-actions-1772738270730
react-query-rules
react-query-useSchedules
matiss/separate-lint-format
dependabot/npm_and_yarn/ajv-6.14.0
cursor/sync-performance-notification-9899
react-query-prefs
matiss/chunked-sync-and-progress-ux
v26.2.1
copilot/sub-pr-6880
fix-react-query-clear-on-close-budget
copilot/sub-pr-6140
feat/auto-note
feat/scoped-bank-sync
cursor/desktop-transactions-react-table-1d0c
fix-exhaustive-deps-App
copilot/fix-find-replace-bug
release/v26.2.0-pre
matiss/browser-tests
mobile-fix-drag-and-drop-across-groups
budget-table-v2
PayeeAutocomplete2
pglite
bugfix/plugins/fix-plugins-sw
feat/plugins/plugins-core-package
prerelease
matiss/unicode-minus-fix
cursor/fix-actual-github-issue-6206-gemini-3-pro-preview-9c37
TransactionFormPage
cursor/implement-mortgage-and-loan-account-type-78ca
tests-update-fill-with-pressSequentially
mobile/link-modal
deps/25.11
cursor/fix-update-vrt-apply-ci-job-dispatch-b324
sync-server-plugins
cursor/propose-patch-for-github-issue-5680-2a18
fix/compiler-preserve-inner-dollar-escapes
cursor/analyze-actual-budget-issue-and-propose-fix-5b70
coderabbitai/docstrings/0c070e5
cursor/add-wip-prefix-and-comment-to-prs-d78d
jfdoming/08-21-auto-focus-on-navigate-in-all-browsers
show-totals-on-mobile-budget-banners
allow-child-transactions-make-transfer
mobile-calculator-keyboard
payee-geolocation
enhance/restore_scroll_position
dm-fix-second-click-on-mobile-new-transaction-2
scrollToLocationBudget
alert-autofix-38
tsconfig-composite
mobile-fix-uncategorized-transactions-on-tracking-budgets
server-budget-handlers
fix-sql-injection-in-cleanup-template
non-chrome-draggable-workaround
mobile-budget-page-swipe-navigation
ts-db-all
stable
dark-theme-with-brand-colors
fix-mobile-delete-group
ts-db-select
UnderKoen/reconcile-context-menu
master-before-server-merge
v25.2.1
ts-runQuery
rename-redux-hooks
UnderKoen/3557-persist-state-in-history
remove-redux-CLOSE_BUDGET
fix-exhaustive-deps-errors-FinancesApp
redux-toolkit-createSlice-backup
accounts-function-component
ts-useSplitsExpanded
loot-core-server-package
useTransactios-in-TransactionEdit
react-aria-input
move-redux-to-desktop-client
QueryState-type
fix-themes-applied-late
mobile-vrts
revert-3295-spendingCardFix
react-aria-button-4
split-payee-on-mobile
twk3/pin-apis-crdt
notes-tag-autocomplete
ts-LoadBackup
dnd-kit
package-upgrades
v26.3.0
v26.2.1
v26.2.0
v26.1.0
v25.12.0
v25.11.0
v25.10.0
v25.9.0
v25.8.0
v25.7.1
v25.7.0
v25.6.1
v25.6.0
v25.5.0
v25.4.0
v25.3.1
v25.3.0
v25.2.1
v25.2.0
v25.1.0
v24.12.0
v24.11.0
v24.10.1
v24.10.0
v24.9.0
v24.8.0
v24.7.0
v24.6.0
v24.5.0
v24.4.0
v24.3.0
v24.2.0
v24.1.0
v23.12.0
v23.11.0
v23.10.0
v23.9.0
v23.8.1
v23.8.0
v23.7.2
v23.7.1
v23.7.0
v23.6.0
v23.5.0
v23.4.2
v23.4.1
v23.4.0
v23.3.2
v23.3.0
v23.2.9
v23.2.5
v23.1.12
v22.12.9
Labels
Clear labels
AI generated
API
bank sync
budgeting
bug
can’t replicate
dependencies
docker
documentation
electron
experimental feature
feature
feedback
goal templates
good first issue
help wanted
importers
maintenance
needs info
needs testing
needs triage
needs votes
openid
payees
pull-request
regression
reports
responsive
rules
schedules
server
✨ merged
split transactions
tech debt
theme
transaction import
transaction reconciliation
transactions
translations
upstream
user interface
✅ approved
wontfix
Mirrored from GitHub Pull Request
No Label
pull-request
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/actual#5851
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/actualbudget/actual/pull/5268
Author: @Johnn27
Created: 7/2/2025
Status: ❌ Closed
Base:
master← Head:feat/sub-categories-johnn27📝 Commits (10+)
2a9e296feat: sub category groups9d9207cchore: release note7618a39fix: adding initial child group add budget twice to totald9ec619feat: groups for income6a7ef6fchore: rename button to "Add sub-group"9988c6eMerge remote-tracking branch 'origin/master' into feat/sub-categories3c25df1Merge remote-tracking branch 'underkoen/feat/sub-categories' into feat/sub-categories-johnn270247b9bMerge branch 'actualbudget:master' into feat/sub-categories-johnn277aa6ad3Fixing code broken from merge so it is in runnable state7f71f7dMerge branch 'feat/sub-categories-johnn27' of https://github.com/Johnn27/actual into feat/sub-categories-johnn27📊 Changes
39 files changed (+2596 additions, -99 deletions)
View changed files
➕
docs/hierarchical-categories/README.md(+91 -0)➕
docs/hierarchical-categories/competitive-research.md(+433 -0)➕
docs/hierarchical-categories/implementation-spec.md(+284 -0)➕
docs/hierarchical-categories/mixed-categories-approach.md(+227 -0)➕
docs/hierarchical-categories/risk-analysis.md(+386 -0)➕
docs/hierarchical-categories/user-guide.md(+75 -0)📝
packages/component-library/src/theme.ts(+1 -0)📝
packages/desktop-client/src/components/budget/BudgetCategories.jsx(+81 -52)📝
packages/desktop-client/src/components/budget/BudgetTable.tsx(+1 -1)📝
packages/desktop-client/src/components/budget/ExpenseCategory.tsx(+3 -0)📝
packages/desktop-client/src/components/budget/ExpenseGroup.tsx(+12 -1)📝
packages/desktop-client/src/components/budget/IncomeCategory.tsx(+3 -0)📝
packages/desktop-client/src/components/budget/IncomeGroup.tsx(+6 -0)📝
packages/desktop-client/src/components/budget/IncomeHeader.tsx(+5 -2)📝
packages/desktop-client/src/components/budget/SidebarCategory.tsx(+6 -1)📝
packages/desktop-client/src/components/budget/SidebarGroup.tsx(+16 -3)📝
packages/desktop-client/src/components/budget/envelope/EnvelopeBudgetComponents.tsx(+3 -2)📝
packages/desktop-client/src/components/budget/index.tsx(+18 -4)📝
packages/desktop-client/src/components/settings/Experimental.tsx(+6 -0)➕
packages/desktop-client/src/components/util/BuildCategoryHierarchy.test.ts(+528 -0)...and 19 more files
📄 Description
✨ feat: Introduce Hierarchical Category Group (Draft)
This pull request introduces the 6th most voted feature of hierarchical sub-categories, allowing for more granular and organized budgeting. This work is based on the original efforts in #3772 by @underkoen, which has been updated and adapted to the current codebase.
This PR is currently in a draft stage. I am actively seeking feedback, suggestions, and guidance from the community and maintainers. I am fully open to changes and requests, and community support for this direction will determine its continuation.
🎥 Demo
Key Changes & Implementation Logic
The core of this implementation focuses on a robust, client-side approach to hierarchy management to prevent regressions and ensure data consistency.
Client-Side Hierarchy Building: Instead of relying on the backend to return a hierarchical structure, the application now always fetches flat lists of categories and category groups. A new, dedicated helper,
buildCategoryHierarchy.ts, is responsible for transforming this flat data into a nested, hierarchical structure on the front end. This approach is crucial because it allows all existing functionality, such as the category pickers in the Reports tab, to continue working with the flat structure they expect, preventing any breaking changes.Modular & Testable: The
BuildCategoryHierarchy.tshelper is built with modular, single-responsibility functions, making it highly readable, maintainable, and easy to unit test (which is a key next step!).UI Integration: The
BudgetCategories.jsxcomponent now uses this new helper to build the category tree, which is then rendered by theexpandGrouplogic. This minimizes changes to the existing component while centralizing the complex data transformation.Future Goals & Vision 🚀
If this initial implementation is successful and supported by the community, the end goal is to leverage this new hierarchical data structure for more advanced features, such as:
📝 TODO & Next Steps
If this is endorsed by the maintainers, I will continue with the work below:
buildCategoryHierarchy.tshelper.I am looking forward to collaborate with the community to bring this feature to Actual Budget! Thank you for your time and feedback!
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.