* merge bump-package-versions script with get-next-package-version
* note
* appease the rabbit
* add update flag to node script
* use update flag in workflow
* not much has changed but they live underwater
* add translations for StatusLabel
* add translations for BalanceHistoryGraph (date)
* add random translations
* Update setHoveredValue update to avoid a crash
format
* add relese note
* feed back
---------
Co-authored-by: Alex <Alex>
* Have the multiple payee text overflow with ellipsis
* [autofix.ci] apply automated fixes
* Add release notes
* add minWidth to the payee text
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Use null as tag color by default (fallback to theme color) and stricter tag validation
* Set ColorPicker's defaultValue props
* Set default tag color in first position
* Make ColorSwatchPicker configurable
Easier to change colors and how they are presented
* fix: Move Add Specific Days to next line and dynamically increase the width of the numbered input box
* [autofix.ci] apply automated fixes
* Add Release Notes
* Update the release notes summary
* Update width from px to ch
* Update schedule date modal to expand when repeat every number increases
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* paginate the count points list files call
* fix tier assignment
* paginate the count points list files call
* fix tier assignment
* ensure utc dates and fix issue filtering to include issues updated in other months
* start
* migration
* don't show deleted tags in list
* tag updates (#5389)
* upsert tag to ensure uniqueness
and insert default-tag in migration
* remove ability to change default tag color
---------
Co-authored-by: pogman-code <adrian.maurin@gmail.com>
* tags fixes (#5391)
* better tag validation
* fix typecheck issues
* update note
---------
Co-authored-by: pogman-code <adrian.maurin@gmail.com>
* Add button to import existing tag from transactions notes
* fix ##non-tag matching
* 'find' tags instead of 'import' to avoid confusion
* add link to show transaction that have given tag
* use same style as PayeeTableRow's button
When using local group cleanup, currently all funds available in To Budget are distributed into the sinks. This behaviour seems somwhat odd and also results in all later groups or the "global" cleanup run to possibly have no funds as they've been distributed before.
This patch now changes the group usage of cleanup, to only distribute funds made available by the group itself. If one also wants to sink money from To Budget into the category, a simple addtional `#cleanup sink`, will achieve this.
Fixes#5374
Signed-off-by: Christian Speich <christian@spei.ch>
* add colors to ReportTable
* Update VRT
* use default color for zero values
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* only show sidebar tooltip on desktop
* release notes
* Update upcoming-release-notes/5352.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* replace with media query checks
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
I wrongly thought that all the card transactions will always
have their first line with the `CARTE` identifier.
But as I have seen recently, it's not the case, and we shouldn't
rely on the ordering of the array returned by the Boursorama
GoCardless integration.
Thus, check for transaction patterns in all of the lines of the
unstructured array.
This addresses a true case (added in test) where the payee name
was wrongly extracted as being `110,04 Gbp / 1 Euro = 0,860763454`
* replace static function with useCallback
occasionally if you are editing the notes of an account and then open another account from the sidebar without first closing the popover, the note would be saved to both the current and previously opened account.
* reset tempNote on id change
* save notes only if changes are made
Previously, the notes were being saved unconditionally when closing the Notes modal. This update ensures that the save action is triggered only if the temporary notes differ from the existing note, reducing unnecessary events.
* fix: apply context menu actions to all selected transactions
when multiple transactions were selected and the user right-clicked on one transaction, context menu actions were only being applied to the right-clicked transaction instead of all selected transactions
* fix: apply context menu actions to all selected payees
when multiple payees were selected and the user right-clicked on one payee, context menu actions were only being applied to the right-clicked payee instead of all selected payees
* no hidden
* changes for tracking
* note and cleanup
* sentance case
* exclude income categories
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* add user defined tag colors
* use DB to store tag colors
* change specific tags_colors to generic tags
* move tag customization to its own page (pt. 1)
* move tag customization to its own page (pt. 2), edit description
* move tag customization to its own page (pt. 3), better default tag mgmt
* move tag customization to its own page (pt. 4), tag creation
* move tag customization to its own page (pt. 5), remove tags settings
* Update VRT
* nitpicking & code rabbit fixing
* remove spaces from tag and better partial Tag typing
* add tag similar to transaction add
* peer review updates (live preview)
* enable keyboard navigation
* fix lint errors
* live input for color picker
* disable 3 digit hex color live input
* add context menu
* add tags link to command bar
* Update VRT
* Update VRT
* fix lint issues
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Run rules on transactions created by a transfer.
* [autofix.ci] apply automated fixes
* [autofix.ci] apply automated fixes (attempt 2/3)
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Apply PrivacyFilter to balance graph display
* Deleted empty line which was added by accident
* Added release note
* [autofix.ci] apply automated fixes
* isHovered state now conditionally deactivates PrivacyFilter if user hovers the graph
* [autofix.ci] apply automated fixes
---------
Co-authored-by: Seray Ciftci <seri@Mac.fritz.box>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Update CRDT protobuf generation to create a .ts file
* Move remaining .d.ts files to .ts
* Fix remaining type errors
* Ignore .d.ts files so we don't accidentally use them in the future
* Add release notes
* Fixes#5228 - has tag(s) filter now takes values when typing quickly and pressing Enter
* Added release notes
* State of GenericInput now gets updated with every keystroke
---------
Co-authored-by: Seray Ciftci <seri@Mac.fritz.box>
* fixed setAverage functions to ignore hidden categories
* Add logic to ignore hidden categories in budget actions
* Modify SQL statements in setAverage functions to also exclude categoryGroups and change DbViewCategory type definition to include hidden flag of the group a category belongs to
* [autofix.ci] apply automated fixes
* Revert setZero functionality to set all budget categories and category groups to zero, including hidden ones
* Add new type DbViewCategoryWithGroupHidden which includes a flag for whether the group a category belongs to is hidden or not, and have setAvg functions use that type instead
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* start
* small fix
* clean
* working for regular transactions
* working for schedules
* cleanup
* typing
* cleanup
* cleanup
* vrt
* bunny
* use pref
* use pref right, lint
* more lint
* vrt
* pass hasInitialBalances to isLoading
* remove comment
* Add option to calculate running balances in useTransactions hook
* Fix typecheck error
* Fix lint error
* use the updated hook
* typecheck
* simplify
* don't show balances when searching
* Add runningBalances to usePreviewTransactions and an option to set the starting balance to start running balance calculation from
* Add filter to usePreviewTransactions and set startingBalance to account and category preview transaction hooks
* use runningbalance from preview transactions hook
* lint
* lint;typecheck
* remove initial from preview balances
* remove unneeded type
* Apply suggestions from code review
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* typecheck; align right; change color
* types
* add a menu item
* cleanup
* fix for loot-core migrated files
* lint;type
* fix import
* only schedules need fixed
* lint
* it works
* cleanup
* make lint happy
* [autofix.ci] apply automated fixes
* simplify a bit
* fix import
* feedback
* fixed regular transaction balance calculation
* fix numbers not showing
* fix schedule running balance
* note
* attempt to update properly
* type
* remove the useEffect that I don't think should be requred
* remove old note
* cleanup
* typeing
* I FINALLY FOUND THE PROBLEM
* cleaner balance calculation
* fixes
* fix zeros
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Changed the buttonMenuText color for the light theme so that text is visible on light background as well.
* Updated the release notes.
* Change file name of release notes
* Remove button varient from use last synced total and restore light theme
values to previous.
* fix: reapply thousand separators before passing input to appendDecimals
This ensures that the input going into `appendDecimals` is not malformed when the `hideFraction` option is On, otherwise when hitting delete on the text `"1,234,567"`, it will result in the text `"1,234,56"` which the formatter will parse as `1234.56`. This doesn't happen when `hideFraction` is off since hitting delete on the text `"12,345.67"` results in `"12,345.6"`, which `appendDecimals` will happily handle in a separate case to provide `"1234.56"` as the input into `currencyToAmount`.
* Handle edge cases for reapplyThousandSeparators
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* [autofix.ci] apply automated fixes
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Added a gocardless bank parser for Raiffeisen AT bank
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* speedy
* bunny, fill in missing data
* small cleanup
* Update packages/desktop-client/src/components/sidebar/BalanceHistoryGraph.tsx
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* handle some edge cases, fix the month check
* better date formatting
* one more edge case
* fix
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Fix Boursobank transfer parsing
As per the comments on https://github.com/actualbudget/actual/pull/4958#issuecomment-2988814739,
the Boursobank transfer parsing was not working correctly.
Indeed, the array returned by GoCardless for transfers is randomly
ordered. So we cannot rely on the first line to know its type.
To work around this, the code gets a bit more complex by:
- Checking the first line for known types (card, loan, atm withdrawal)
and handling them accordingly.
- If it's not one of these, we iterate through all the lines by checking
if the array contains a line with the transfer type.
* Add credit note type for BoursoBank
An `Avoir` is a refund made to the credit card.
Adds the proper payee / notes parsing for it.
* Improve Boursobank card transaction parsing
Some Boursobank transactions have an unknown number attached to the
payee name. Remove it from the payee name to ensure consistency across
transactions.
For instance, `CARTE 19/03/25 Github 4 CB*0494` (notice the `4`).
* Improve Boursobank payee name backslashes handling
After more testing, I found that the backslashes present are for the
pending transactions, and indicating the localization of the payment.
To keep the payee name consistent, remove what follows the backslashes.
For instance `PICARD SA 1234\\PARIS\\ FR` is for a pending transaction
whereas `PICARD SA 1234` is what we receive for a completed one.
* Set notes with date for Boursobank card transactions
@mistyque requested to see the data of the card transaction in this
comment: https://github.com/actualbudget/actual/pull/4958#issuecomment-2981459622
* Add 5202 release note
* [autofix.ci] apply automated fixes
* refactor loops and match
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* start
* small fix
* clean
* working for regular transactions
* working for schedules
* cleanup
* typing
* cleanup
* cleanup
* vrt
* bunny
* use pref
* use pref right, lint
* more lint
* vrt
* pass hasInitialBalances to isLoading
* remove comment
* Add option to calculate running balances in useTransactions hook
* Fix typecheck error
* Fix lint error
* use the updated hook
* typecheck
* simplify
* don't show balances when searching
* Add runningBalances to usePreviewTransactions and an option to set the starting balance to start running balance calculation from
* Add filter to usePreviewTransactions and set startingBalance to account and category preview transaction hooks
* use runningbalance from preview transactions hook
* lint
* lint;typecheck
* remove initial from preview balances
* remove unneeded type
* Apply suggestions from code review
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* typecheck; align right; change color
* types
* add a menu item
* cleanup
* fix for loot-core migrated files
* lint;type
* fix import
* only schedules need fixed
* lint
* it works
* cleanup
* make lint happy
* [autofix.ci] apply automated fixes
* simplify a bit
* fix import
* feedback
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* add Belfius and KBC to banks with limited history
* Update upcoming-release-notes/5183.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update `processBankSyncDownload` to store synced balance in `balance_current`
* Display last synced balance in `MoreBalances`
* Add "Use last synced balance" to reconcile
* Remove logs
* Release notes
* Fix lint
* Add missing useEffect dep
* Restore console.log and fix type for id
* Last synced total
* Fix lint
* lint
* Made requested changes from maintainers.
* Added my name to authors note and updated description of feature.
---------
Co-authored-by: Spencer Sawyer <spencer@spencersawyer.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Move more .d.ts files to .ts
* Add release notes
* Some errors with templates snuck in
* Fix API build
* CodeRabbit feedback
* Move budget templates to new directory
* Fix type errors in library module
My Monzo bank appears to return 'name' through the GoCardless getDetails and getMetadata calls, but the value in the getMetadata response is an empty string! Merging metadata values over detail values therefore risks losing values, that are useful to have & to present to the user.
To solve this, we can make getDetailedAccount smarter about merging the two objects. We could swap the object splattening around so details has priority over metadata, but I'm not at all confident there won't be other banks doing strange things with additional properties that might suffer similar bugs in the reverse scenario.
Instead, we loop through all keys in both objects and construct a new merged object, continuing to prioritise metadata over details but changing it to a truthy-based comparison (with the `||` operator).
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* add workflow for publishing edge npm packages
* release notes
* alright mr rabbit
* never trust the wabbit
* changing tag to nightly as per maintainer feedback
* fix hotfix script version
* rename workflow
* wabbit
* exit process
* fix reference to package json
* variable scoping
* change nightly version number to yyyymmdd (#17)
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Fix net worth graph gradient conflict
Ensures that the net worth graph's gradient ID is unique to prevent conflicts when multiple graphs are rendered on the same page.
Fixes#3965
* Apply review suggestion
* use build directory in dockerfiles
* add release notes
* add test
* Add test for cli, try to fix image test
* - fail
* try again
* try again to fail
* done testing
* Code review
* publish is unecessary
* Enhance transaction import functionality with new Transaction type and type annotations
* release notes
* fixes for PR
* move transaction type as requested by @MatissJanis
* type importTransaction return value
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Include parent transactions in select-all when all of their children are selected
* Added release notes
* Fix release notes file name
* Make function return type explicit
* add spreadsheet logic
* separate to own cell
* add selection cell
* fix selection
* added button
* arrow
* switches between the two hold options gracefully
* reset manual hold on apply auto hold
* working?
* fix
* lint
* better to budget menu logic
* type
* typing
* missing function pass
* some cleanup
* typecheck
* translation
* closer to good arrow
* lint
* prevent rollover arrow from clipping
* move to a menu; position is broken
* lint
* fix location
* lint
* standardize verbage
* right case
* fix import
* cleanup
* start of a mobile menu
* slightly better
* some cleanup
* lint
* Update packages/desktop-client/src/components/modals/EnvelopeIncomeBalanceMenuModal.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* fix styling
* types
* Update packages/desktop-client/src/components/budget/envelope/BalanceMenu.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Apply suggestions from code review
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update bank-factory.js 90 days bank history
Add ING PL (ING_PL_INGBPLPW) to banks with limited history
* Adding a bank with limited history - alphabetical fix
adding alphabetical sorting
* note
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update gocardless-service.js
* Allow account selection during requisition based on institution support
* lint
* note
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Changed 'close file' to say 'exit file' so it is more clear that the file is not being deleted (#4852)
Resolved this issue here:
https://github.com/actualbudget/actual/issues/4852#issue-3006813465
* chore(release): add release note for PR #4872
* Update BudgetName.tsx "Close file" -> "Switch file"
* Update 4872.md
* Changed 'Close budget' to 'Switch file' on mobile
* Update VRT
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* button being focused
* working
* tests
* text selection test
* allow for ref injection
* updated some of the usages
* release notes
* rename of prop
* docs
* fixed release note
* remove unnecessary test setup
* updated from comments
* removed selecttext references
* fix type error
* updated children type
* removed comment
* moved over some util functions
* moved over TransactionHeader
* Added the bulk of Transaction typing data
* moved PayeeCell into its own file
* moved StatusCell over
* added NotesCell file
* Moved over NewTransaction
* converted TransactionsTable
* Converted TransactionList to use new typed TransactionsTable
* Converted consumers of TransactionList to use TransactionList
* removed old TransactionsTable
* release notes
* fixed bug vrt found
* fixed one todo
* attempting to debug whatever is going on
* moved TransactionsTable tests up a directory and that fixes it for some reason
* removed type cast
* re-instated onScheduleAction types
* re-added old TransactionsTable.jsx file
* consolidated changes into just TransactionsTable
* deleted split files and finished moving over TransactionList
* typecheck
* typecheck
* yarn lint
* changed type casting to make it more specific
* changed warn to error
* added some todos to clean up type assumptions later
* yarn lint
---------
Co-authored-by: Alec Bakholdin <alecbakholdin@mac.myfiosgateway.com>
Co-authored-by: Alec Bakholdin <alecbakholdin@Alecs-Mac.local>
* Move loot-core/client/modals code over to desktop-client package
* Fix lint error
* Move loot-core/client/store and loot-core/client/redux to desktop-client package
* Separate redux store into it's own file
* Import types from redux/store instead of redux
* Add runningBalances to usePreviewTransactions and an option to set the starting balance to start running balance calculation from
* Add filter to usePreviewTransactions and set startingBalance to account and category preview transaction hooks
* Move loot-core/client/modals code over to desktop-client package
* Fix lint error
* Move loot-core/client/queries code over to desktop-client package
* Move loot-core/client/modals code over to desktop-client package
* Fix lint error
* Move loot-core/client/notifications code over to desktop-client package
* Add a functionality to split transactions repair tool to remove categories from parent transactions and prevent adding/update parent transactions with categories
* Fix lint error
* Remove console.log
* start
* make week tests make sense
* fix
* copy
* average
* no call checks
* add rest. Still need to vet runSpend, and runBy
* fix average
* tweak spend
* updates
* cleanup
* note
* add more up to tests
* previous percentage
* hitting limit tests
* remainder
* fixes
* more fixes
* fixes, and fix remainder return value
* fix amounts in limit tests
* e2e for a category
* skip checking schedules if not needed
* lost changes
* fix null
* add goal tests
* final fix?
* lint
* lint option 2
* Add BoursoBank GoCardless Integration
The default normalization was creating new payees for each
transaction per day, as there was no specific integration
for this bank.
e.g. `Carte dd/mm/yy Payee Name Cb*1234` was taken as payee
name.
There doesn't seem to be an easy catch-all syntax for
the BoursoBank transactions, but I have put all the
ones I could find from my transactions.
* Fix comment typo
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* invert most of seb kort credit card transactions
* add release-notes
* revert package.json
---------
Co-authored-by: Vincent Giorgi <8283278+vincegio@users.noreply.github.com>
* changed default amount to come from amountToCurrency to handle localized values and maintain focus
* release notes
---------
Co-authored-by: Alec Bakholdin <alecbakholdin@Alecs-Mac.local>
* Add basic modal for budget automations
* Add release notes
* Exclude TODOs from this PR for now
* Fix some rebase errors
* CodeRabbit feedback
* PR feedback: reduce nesting in automation editor
* PR feedback: reduce nesting in automation read-only state
* PR feedback: make editors feel more like part of the read-only entry
* attempt at running with typescript
* release notes
* working jest tests for TS files
* working docker image build
* remaining docker images
* cleanup
* ensure vitest is working
* get tests passing in ci
* less strict
* update release notes
* use tsc compiled assets in the published package
* scripts
* update yarn.lock
* Use build path for electron app
* PR feedback: move sync-server build out of bin/build-browser
* PR feedback: undo moduleResolution change
* extend main tsconfig and fix types
* PR feedback on scripts and when the sync-server build runs
* fix lint (unrelated change)
---------
Co-authored-by: alecbakholdin <alecbakholdin@gmail.com>
* add PayeesPage model for searching payees in e2e tests
* add navigation method to go to PayeesPage in e2e tests
* add e2e tests for Payees page
* update release notes
* Run prettier to fix lint
* clean imports
* fix imports
* Add snapshots for visual tests
* Remove unused import in payees test
* Update VRT
* Update 4766.md
Dummy commit
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Automatically generate GitHub release text
* [TEMPORARY] Revert Electron signing changes to make this change testable
* Revert "[TEMPORARY] Revert Electron signing changes to make this change testable"
This reverts commit eeb5680b1a.
* Add release notes
* Rename AQL module's runQuery function to aqlQuery to disambiguate with DB module runQuery function
* Release notes
* Update SqlPieces
* Fix lint
* Update SqlPieces.from
* Add types
* Type result as any for now
* Fix lint
* Add types
* Fix typo
* PR feedback
* Update comment
* Fix lint error
* Fix import
* Update build + dependencies to work with vitest
* Update tests to use vitest
* Update snapshots to vitest format
* Update sql.js loading in tests to work with vitest
* Update crdt package loading to work with vitest
* Add release notes
ensure that modified filters are reapplied to the Custom Report when changing its interval or date range, rather than reverting to the last saved state, which could overwrite unsaved changes to the filters or their conditional operand
* Fix catch 22 problem when using In/Out with split columns already enabled
- Also changed UI and transaction amount parsing behavior to accept all options combined
- Repositioned some amount options
- Adjusted the labels of a few options
* Fix amount options triggering state resets
* Update VRT
* Revert "Update VRT"
This reverts commit 0a4b70afad.
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* added transactions-merge action
* mergeTransactions now returns kept id
* merge option only shows up when amount matches
* merge now handles more errors and merges from the dropped transaction if values are present
* modified merge logic slightly to avoid duplicating imported_id
* added reconciled and cleared to merge logic
* modified canMerge logic in SelectedTransactionsButton
* made merge undoable
* added onMerge to mobile menu
* release notes
* modified testing suite slightly
* added logic for detecting bank sync vs file import
* typecheck problem
* linting errors
* attempt to clean up tests better
---------
Co-authored-by: Alec Bakholdin <abakho@icims.com>
* Alternative solution
* tests
* a bit better, but now categories can be weird
* working, I think
* almost there
* I was making it harder than it needed to be
* Update VRT
* note
* note
* Separating logic from envelope and report to keep envelope as it was
* Update VRT
* Removed checks for budgetType inside `envelope.ts` and `report.ts`
* changed code position in file
* linter
* handle initially hidden
* Fix for when tracking but is enabled
* total up everything
* Add tests for handling hidden categories and groups in budget totals
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kevin Gatera <kevin@deployitwith.me>
* sync server as npm package
* yarn lock
* workflow
* fix yml
* fix script
* named job better
* imagine trusting an ai
* pack and publish separately
* v4 instead of v3 upload
* dependencies
* identifying the right package for uplaod
* updating references
* what
* i see
* here comes the glory
* aaaand here it comes
* perms
* hmm
* try changing scope
* owner is invalid for git so have to go to npm instead
* better names on workflow
* package the api too
* updates
* rename to play better with gitignore
* yarn
* better
* dont ignore me
* yarn
* readme
* readme
* release note
* typo
* updating to read package.json from fs rather than import to support more node versions
* more ai autocomplete more problems
* adding unlink and account name to modal
* fixing dispatch and some style updates
* release notes
* catching a few missed "bank-sync" phrases
* linting
* Addressing comments
* Addressing comments
* Linting
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Add functionality to download custom reports as an image.
* Add functionality to download custom reports as an image.
* Switched from html2canvas to html-to-image due to size considerations.
* Snapshot filename
* Add functionality to download custom reports as an image.
* Add functionality to download custom reports as an image.
* Update ReportTopbar.tsx
Fixed mistake
* Use existing date function
* fix imports
* Update VRT
* move component out of common in aid of components lib migration
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* playwright test fixture
* release notes
* update snapshots
* test
* again
* same timeout as web client
* faster
* srsly
* Update VRT
* update test
* get rid of this test for now
* updating update-vrt
* speed it up a bit
* same timeout as desktop-client
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* playwright testing for electron
* pipeline updates
* fix normal e2e scripts
* fix path to artifact
* listing out whats there
* attempt to fix ci
* umm
* again
* setting a viewport
* window size to be consistent across machine for tests
* now it work... Righhttt?
* hmm
* do it
* worflow
* will this work
* oops
* dont skip
* trust in the pipeline gods
* remove update snapshots, just do it in the pipeline
* change name of snapshot to account for os
* lint
* fix package script
* fix electron resolutions
* temp fix
* dont include build-electron in the web bundle assuming its built
* lowering size of build
* removing exports
* release notes
* adding bits back
* remove bad config
* fixed current month upcoming calculation
* added release notes
* updated test to validate the new behavior of getUpcoming
* modified one month and added more tests for leap years and months with different dates
* Fixed odd error
---------
Co-authored-by: Alec Bakholdin <abakho@icims.com>
* Added institution name to the LinkModal
* Added release notes
* removed a stray import I did not mean to leave in
* updated release note number
* Separated institution into its own column and updated sorting to sort by institution -> name
* Added tooltips to allow users to hover over institution name and account name when linking bank accounts
---------
Co-authored-by: Alec Bakholdin <abakho@icims.com>
* Extract category related server handlers from main.ts to server/budget/app.ts
* Release notes
* On DB layer, replace Entity model usage with DB models
* Fix typecheck errors
* Fix type error
* Fix types
* Fix typecheck error
* Fix lint errors
* Fix test errors
* Fix model mapping
* Use dvh to determine height of modal based on dynamic visual viewport
* Apply to dialog instead of another div
* Remove modal transition
* Release notes
* [Mobile] Drag and drop income categories to re-order
* Fix category group ID
* Update borders
* Use list item value prop
* Cleanup
* useCallback
* Remvoe usage of useListData
* Fix typecheck error
* Release notes
* Fix import
* Update DropIndicator
* Update DropIndicator
* Fix drop indicator
* Update mobile forms TapField to use the new Button component
* Release notes
* Fix typecheck error
* Cleanup
* Update VRT
* Dummy commit
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Display Goal/Target Information on Mobile
* Create 4546.md
* Fix lint issues
* change hr and div to View and modified styling
* Fix lint errors again
---------
Co-authored-by: lelemm <lelemm@gmail.com>
* Translate dates POC
* more dynamic loading of locales
* added locale
* linter
* linter and typecheck
* added md
* translated DateSelect component
* more translations and fixes
* removed redux state for locale
* linter
* typecheck fix
* fix test for schedules.ts
* linter
* fixed System Default language
* loading all locales at once
* added some fallback cases
* bugfix, linter and typecheck
* schedule description rework to have better translation labels
* fixes
* test fix
* Trigger actions
* merge of #4459
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Extract payees related server handlers from main.ts to server/payees/app.ts
* Release notes
* Payee model mapping methods
* Re-arrange methods
* Update types
* Remove undoable because there is withUndo already
* Support meta in undoable
* Fix types
* Fix typo on test
* Extract existing "Make Transfer" functionality
* Add "Make Transfer" functionality to mobile menu
* Don't just blindly allow setting as transfer
* Update disabled colour and missing translations
* Fix import warnings
* Add release note
* Use correct translation function
* Determine whether to show the "Make Transfer" option or not based on the presence of an account
* Build list of menu options nicer
* Fix types
* Fix translations
* Use Trans component instead of t function
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* feat: add "last reconciled" timestamp to accounts
add a `last_reconciled` column to the `accounts` table, which stores a UNIX timestamp indicating when each account was last reconciled
upon initial release, all accounts will display "Not yet reconciled"; however, after completing reconciliation and pressing the "Done reconciling" button, the timestamp will be updated accordingly
* test: generate mock accounts with `last_reconciled` as `null`
generate mock accounts with the `last_reconciled` value set to `null`, to match the expected behaviour that new accounts will start with a "Not yet reconciled" status
* improvement: display "last reconciled" timestamp in tooltip
relocate the "last reconciled" timestamp from the account balances header to a tooltip displayed when hovering over the "Reconcile" button
fix issue where transactions for transfers between accounts (i.e., transactions where the payee is another account) were not properly filtered during searches
* allowing copy budget files to succeed even if cleanup fails
* release notes
* updating fs-extra
* retries in for removing dir
* better retry defaults
* defaults
* 🔖 (25.3.0)
* Empty commit to bump ci
* Remove used release notes
* Empty commit to bump ci
* Bump sync-server for web release
* Remove used release notes
* Empty commit to bump ci
---------
Co-authored-by: jfdoming <9922514+jfdoming@users.noreply.github.com>
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Fix crash when deleting child transactions from an errored split
* Add tests
* Add release notes
* Add graceful fallback
Fallback: don't try to show errors on a transaction if it's not actually
a split.
* Move transaction related handlers to server/transactions folder and use the new convention
* Fix lint and typecheck
* Move server account handlers from main.ts to accounts/app.ts
* Add accounts app to main.ts
* Release notes
* Fix types
* Fix typecheck error
* Fix types
* Fix build error
* Use main app
* fix: ensure currencyToAmount works regardless of the configured number format
* chore: linting
* docs: add release note
* test: ensure correct amount is entered for debit when adding split transactions
* chore: rename variable thousandsSep to thousandsSeparator
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* chore: rename variable decimalSep to decimalSeparator
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* chore: rename decimalSep and thousandsSep variables to decimalSeparator and thousandsSeparator
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* update sync mapping data for existing transactions on sync
* show payment direction dropdown regardless of sample data
* note
* ignore changes in raw_synced_data
* feat: today button on mobile budget page
Jumps to the current month
* add release note
* cleaner onCurrentMonth
* Update VRT
* use SvgCalendar from icons/v2
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* making the server workflows run only when server files have changed
* release notes
* also on merge to master
* rabbit suggestion
* e2e tests and size compare dont need to run when server changes
* adding to the paths ignore
* remove non-booked transactions from import
* Add release notes
* minor fix to please the linter
* Add coderabbit suggestions
* add test file
* fix test
* add coderabbit fixes to test file
* fix mock console
* Correct consoleSpy to make linter happy
* Add mock cleanup
* save button
* release notes
* custom component shows
* custom input and saving working
* updated getUpcomingDays to handle custom values
* close modal after save
* test around getUpcomingDays
* updated to use more accurate timespan calculation
* fix for scheduled events only occurring till end of period
* add a day
* fixed input step down
* show broken transfers
* more detail
* feat: add step to fix splits for fixing transfers with categories that should not be there
* reword
* update the setting
* note
* lint
* typo
* another misspelling
* fix single notification
* note
* Update VRT
* run checks
---------
Co-authored-by: UnderKoen <koenvanstaveren@hotmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* show broken transfers
* more detail
* feat: add step to fix splits for fixing transfers with categories that should not be there
* reword
* update the setting
* note
* lint
* typo
* another misspelling
---------
Co-authored-by: UnderKoen <koenvanstaveren@hotmail.com>
* Display transaction notes on mobile, fixes#1764
* Display transaction notes on mobile, fixes#1764
* Display transaction notes on mobile, fixes#1764
* Display transaction notes on mobile, fixes#1764
* Moving the notes to the bottom
* Moving the notes to the bottom - right file.
* Updating the code as requested
* Adding conditional rendering as suggested by Bugs Bunny
* Adding conditional rendering as suggested by Bugs Bunny and lint
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Spending: Fix budget comparison filters
- Previously only worked for category *is*, now should work for any category filters
* Add release notes
* Spending Report: Fix linting, remove unused filters from budget filter options
- Removed ability to select 'contains', 'doesNotContain', or 'matches' filters for budget categories
* enhance: add possibility for join between zero budget and category
---------
Co-authored-by: Koen van Staveren <koenvanstaveren@hotmail.com>
* Add support for LHV_LHVBEE22
* Add upcoming-release-notes/542.md
* Don't set bookingDate unless booked
* Add a basic spec file
* Add test case for invalid date and date validation to handle it
* Remove accessValidForDays
* fix/#3128: listen to 'sync-event' to update user data when sync status changed, so 'userData.offline' is up to date and server status displayed is valid
* add upcoming release note
* fix: use of optional chaining for 'userData.offline' to fix typecheck errors
* fix: replace 'userData?.offline' by 'userDate' in useEffect's dependencies
* fix: add error handling for 'initializeUserData' method
* fix: remove optional chaining for 'userData.offline' and directly check if userData is not null
* fix: eslint warning "`loot-core/client/actions` import should occur before import of `loot-core/src/platform/client/fetch`"
* Added ability to control auto categories per payee and globally
* Added unit test
* Changed order of Learn Categories in settings page
* Removed console log and fixed prefs type
* Added release note
* Fixed default value for global setting
* Added tooltip and context menu option
* Removed test assertion
* Refactored default value for global setting
* Added missing boolean to saveDiff and saveDiffAndApply
* Fixed default global value
* Icon and Disable payee menu hidden when globally disabled
* Moved category learning settings to payees page
* Added automatic centering for payee SVGs
* Lint changes
* Typecheck changes
* Fixed copy paste
* Added more translation
* Changed global setting to a modal
* Fixed import order
* Renamed migration
* Update packages/desktop-client/src/components/payees/CategoryLearning.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update packages/desktop-client/src/components/payees/CategoryLearning.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update packages/desktop-client/src/components/payees/ManagePayees.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update packages/desktop-client/src/components/payees/CategoryLearning.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Changed wording
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Migrate to accountSlice
* Fix lint and typecheck errors
* Update types
* Fix lint
* Fix types
* Cleanup
* Rename file
* Rename state
* Cleanup
* Fix typecheck error
* Move createAppAsyncThunk
* Queries slice
* Release notes
* Cleanup types
* Cleanup
* Fix typecheck error
* Lint
* Fix typecheck error
* Fix import
* Fix typo
* Fix typo
* Update
* Copy category list so that sorting is not applied directly on category list redux state
* Update setLastTransaction payload
* Remove optional optional chaining on unwrap
* Rename accountId
* Fix type
* Remove return value of initiallyLoadPayees since no callers use it
* No need to getPayees. Just use the already loaded payees.
* Notify on action errors
* Add language global pref
* Add setting to control language
* Add release notes
* Update VRT
* Wrap missed strings in `t`
* Update VRT
* [placeholder] Bump CI
* Fix crash on old language file
* Fix loading wrong language
* Update packages/desktop-client/src/i18n.ts
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update ConfirmCategoryDeleteModal.tsx
Added space between category name and "is"
* Create 4175.md
* added space to trigger change; cloned repo in vscode with prettier linter to fix github bot alerting about lint
* Formatted chate with Prettier
* Add YTD and last year to Reports headers
* Add release note
* lint
* fix end date picker
* remove debugger
* Update VRT
* Update VRT
* Fix year to date and last year
* remove debugger
* pr comments
* fix small size
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* load all instances of scheduled transactions that occur within the upcoming period
* correct status in transaction table
* ts
* note
* ci
* upcoming -> forceUpcoming
* remove caveat from upcoming length setting modal
* Improve string to be clearer in other languages
Change from using ':' and no question mark to a full sentence and a question mark
* Create 4167.md
* Fix quotes
* Fix
* Fix
* Cleared import changes
- Add ability to provide default for cleared field
- Add ability to skip updating cleared field
* Add release notes
* Make linter happy
* Fix optional param
* Use nullish coalescing operator
* Add GoCardless integration for COMMERZBANK_COBADEFF
* Add optional iban property to creditorAccount
* Use fallback for normalizeAccount and calculateStartingBalance
* Update src/app-gocardless/banks/commerzbank_cobadeff.js
---------
Co-authored-by: Koen van Staveren <koenvanstaveren@hotmail.com>
* Pull/push strings via Git instead of via API
This is necessary because the Weblate API doesn't handle stale strings
well. In particular, it won't remove them automatically.
* Schedule workflow instead of running on every commit
This is so we can minimize downtime for Weblate translations.
* Prevent pull requests modifying translations
* Don't commit translations during the merge freeze
* Add release notes
* Undo rename
* Don't commit translations nightly, per feedback
* Include translations just-in-time in builds
* Revert "Prevent pull requests modifying translations"
This reverts commit 8c19a0ce13.
* Re-ignore translations
* Update release notes to be accurate
* Create missing directory
* Fix conditional logic
* Do not show undo notifications on desktop
* add release note
* fix linter
* Update packages/desktop-client/src/hooks/useUndo.ts
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Update useUndo.ts
* fix code pasted on wrong line
* drive-by fix typo
* Update 4097.md
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* add buttons for combined-account transaction pages (#2333)
* add release note for #3734
* add accessibility label to mobile combined-account header button
* increase touch targets for combined-account buttons
* remove highlight color and add bounce to header buttons
to match the feel of the other account buttons
* update vrt screenshots for actualbudget#3734
* enhance: context menu on custom reports page
* chore: release note
* chore: lint
* chore: use both feature flags
* chore: use both feature flags
* chore: pr feedback
* fix: changing name with context menu
* fix: translations were not being loaded properly
* fix: support running GitHub actions locally with `act`
* feat: upload new strings on master build
* Add release notes
* PR feedback: security
* Initial Commit
* Create 3847.md
* Removed un-needed comment
* Changed error log text
* Moved budget name validation from DuplicateFileModal to loot-core/server
* Added translation
* Fixed linting error
* Changed delete file hack
Changed from loading and closing the budget file to just opening and closing the database to be able to delete it.
* Removed hard coded english from loot-core server
* Updated wording and style of Duplicate File Modal
* Simpler wording for Duplication text and buttons
* Filter account by on budget / off budget
* small fix
* fix eval for new operations
* code review suggestion
* suggestions
* small fix for rules table
* batch loading the accounts
* Update packages/loot-core/src/server/accounts/transaction-rules.ts
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* missed this type
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* remove use of View component
* created a release note
* rename release note to PR number not issue number
* revert changes to check e2e tests
* redo changes
* indentify exact styling issue
* use style instead of css
* bump version
* Remove used release notes
* bump web version
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Don't crash when making a txn from the uncat page
* Always navigate consistently from the txn add/edit page
* Add release notes
* Attempt to fix functional tests
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Add support for "Hanseatic Bank" (access_valid_for_days max 89)
* add PR changelog file
* fix line endings + author format
* make linter happy
* make linter happy
* use alphabetical order for import and banks list
* change the font size implementation to be simpler
* release notes
* setting the line height back
* renames
* condtion on the font changed event
* fix type check
* typecheck
* clarifying comment
* remove margin on left and right - not required
* fix import
* fix derp
* 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] <github-actions[bot]@users.noreply.github.com>
* Summary card report
* Apply suggestions from code rabbit
* Apply suggestions from code review
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* MORE CODE RABBIT SUGGESTIONS
* typecheck fix
* change view form the details page
* added privacy filter
* Apply suggestions from code review
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* debounce
* removed binary search and changed the summary page to not use the card component
* Update packages/desktop-client/src/components/reports/spreadsheets/summary-spreadsheet.ts
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* fix on recommended code rabbit commit
* added some padding to number so it fits the window better for big numbers
* accept infinite
* feedback fixes
* Update packages/desktop-client/src/components/reports/reports/SummaryCard.tsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* translations
* fix on the save, linter and changed "include summary date range" to "all time divisor"
* changed MD from enhancements to feature
* typo
* change card
* typecheck
* Update packages/desktop-client/src/components/reports/SummaryNumber.tsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* typecheck
* changes to fit the number better
* small fix
* fix on filters
* code review
* revert code to check for height
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* filter out transfers when category is none
* add filter for parent id
* fix Category is not (nothing) as well
* lint fixups
* add special case for 'category is not nothing'
* add release notes
* adding tests
* lint fix
* use $and expression for complex condition special cases
* add tests for condition special cases
* Update packages/loot-core/src/server/accounts/rules.ts
rename subExpression to and
Co-authored-by: Koen van Staveren <koenvanstaveren@hotmail.com>
* update uses of subExpression with and
* remove stray debugger rules
* Update VRT
* Revert "Update VRT"
This reverts commit a450fc7b2457bb578e53f62d5f4201e91e9a93c4.
* make and an internal op to avoid exposing it to the UI
* feedback
---------
Co-authored-by: Koen van Staveren <koenvanstaveren@hotmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: matt <matt@fiddaman.net>
* Update scroll provider so that it only captures the scroll on div container and not the whole window
* Fix lint + release notes
* Rewrite useScroll to be more performant by being ref based instead of state to avoid re-renders when scrolling
* Check undefined
* Rename to useScrollListener
* Remove small 1px gap under mobile nav tabs when fully open
* Cleanup
* Fix lint
* Coderabbit feedback
* seperate build folders for easier switching between web and electron builds
* gitignore
* release notes
* one directory back from electron
* spelling mistake
* Update 3801.md
* test
* making it correct
* huh
* urghh
* again
* account for api bundle which uses electron bundle for some reason
* hu-
* lets go
* remove comment
* Fixes focus ring getting stuck on last column of /accounts/budgeted screen when creating a new transaction.
* Fix lint problems with the previous commit
* Changed the way the hook is made to the cancel and add button, removing the need to change Button2
* Changed the name of variables as mentioned in PR
* fix: don't clobber server pathname
The provided server URL may already include a pathname,
so all further segments need to be appended. This also
more closely matches the name `joinURL`.
* add release notes
* use `fs.join` to avoid double slashes
* Initial Commit
Moved Budget Name to its own component for a cleaner Sidebar component.
Added pencil icon for editing budget name.
Removed Rename Budget from menu.
* Create 3593.md
* Fixed Menu Dropdown Arrow shrinks with long budget name
* Changes recommended by coderabbitai
* Fixed Lint issue
* Remove Help from Menu
* Remove menu from budget name and added Actual logo with menu
* Update VRTs
* Update VRTs
* Fix logo shrinking with long budget name issue
* Update 3593.md
* Removed Logo and pencil icon
* Update VRTs
* Removed unused classnames from SideBar and BudgetName component
* revert to upstream VRTs
* Fix loading of mobile/desktop page on window resize
* Release notes
* Fix lint
* Use useWindowSize since it matches behavior of documentElement clientWidth and clientHeight
* Debounce so that components are only reloaded when user finishes the resize
* Adjust debounce delay
* allow matching null values when not equals query filter is set
* Also fix namedParameter queries with filter
* improve tests
* release note
---------
Co-authored-by: Joel Rich <joelrich@protonmail.com>
* by check
* minor changes and TS class migration
* good starting point
* very basic testing
* fix
* basic overwrite of simple templates working
* mostly working. By and schedule don't work
* some cleanup, better async
* add notifications
* add daily weekly limits
* by is working I think
* mostly working
* some fixes, make faster
* lint, note
* note
* cleanup old stuff
* fix paths
* test fixes
* fix test
* fix note
* rabbit, and fix long goal
* lint
* some fixes
* more typing
* fix save error
* last bunny fixes
* fix save, trim schedule names
* lint
* minor fixes
* last fixes
* lint
* add function to apply template to multiple category and add button to group sidebar
* add function to apply template to multiple category and add button to group sidebar
* add correct month
* clean up code
* clean up code
* clean up code
* clean up code
* add notification and clean up
* add notification and clean up
* add notification and clean up
* add notification and clean up
* add notification and clean up
* add release note
* excluded hidden categories
* removed unused method from api
* adjust template to run on already budgeted categories
* fix typecheck
* add apply multiple as budget action and remove from api
* lint clean up
* fix notification and remove log
---------
Co-authored-by: dreptschar <dreptschar@gmail.com>
* feat: context menu on transactions
* feat: context menu's on budget page
* chore: release note
* fix: losing focus on context menu
* feat: schedules context menu
* feat: payees context menu
* feat: rules context menu
* chore: update release note
* chore: lint
* fix: broken balance movement menu
* fix: placement on context menu to be closer to cursor
* feat: context menu on budget field
* chore: lint
* Update packages/desktop-client/src/components/transactions/TransactionsTable.jsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* chore: fix merge
* fix: e2e test
* fix: moving of the popover in the sidebar
* chore: lint
* chore: add feature flag
* chore: fix tsc
* chore: fix test
* Update packages/desktop-client/src/components/settings/Experimental.tsx
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
* fix: to budget button
next steps didn't work
* chore: lint
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
* adding some safety for if user has incorrect server url format
* added additional error handling for when incorrect server url has been setup
* good rabbit
This is primarily done by removing the blur effect from the overlay, and
replacing it will a translucent black.
The blur effect performs poorly on mobile devices.
* Adding a help modal for qucik reference to goal template syntax
* added release notes
* fixed misspelling of Enhancements
* fix lint errors
* Only show when Goal Template Flag is enabled
* fix lint
* Only show on Budget page
* fix lint
* Added Translation, change text formating to table (styling wip), change headers to use react-aria-component headings
* fix lint, made requested change to HelpMenuItem type
* stylized tables
* fixed type error
* Moved section headers to within Table Headers
* fix lint
* added space between last table and see more statement
* added reconcile button to account page
* add Reconcile Button in the account page
* added release note
* updated VRT snapshots
* removed Reconcile option from Account menu
* made the button minimal with tooltip and added vrt
* missing unused import
* fixed icon and button size
* fixed merge conflicts
* hide reconcile button on all account and for budget page
* fix lint from merged file
* changed reconcile button order
---------
Co-authored-by: vincenzo <dibiasev@gmail.com>
* Add tests for bug
* Add tests for unexpected behaviour
* Refactor to consistently generate valid splits with no errors
* Add release notes
* Update test names
* added info circle and box on click
* hover working
* moved title
* release notes
* updated release notes category
* split info bubble into its own component
* text longer than 500px will be split
* extracted text width into its own file
* wip tests
* wip testing
* removed separate method and tests
* added textWidth option to Info Bubble
* updated shadow
* initial poking around
* ui changes and setting
* wip
* null check
* removed more than a month
* prettier
* todo
* get status tests
* added prefs to app.ts
* updated to use LocalPrefs bc of limitation of app.ts
* updated schedules component to use localPrefs
* removed console.log
* release notes
* renamed release noted md
* eslint fixes
* import fix
* update useEffect dependencies
* removed a comment
* moved upcoming length setting to schedule page
* removed import
* made setting collapsible and moved to the top
* fixed breaking change
* updated to work with updated synced prefs methodology
* pulled preference from db
* updated tests with mock reset
* update vrt
* per coderabbit: upcoming length null value prevention
* update test to use number inputs rather than string
* aria label added to close button
* moved before/after each blocks per coderabbitai
* fixed default value typo
* updated edit button to use slimmer style
* vrt
* vrt
* vrt
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* add duplicate name validation to sidebar, and both narrow/wide Account pages
* unify error messages and styles
* keep state for the current account name on the mobile account modal
* add release notes
* remove extra validation function
* fix typo in AccountSyncSidebar params
* don't set current account name to empty string and prevent further changes on AccountMenuModal
* lint imports
* update error message to Name x already exists
* use proper translation functions
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* add a modal to say client is wrong version, accept the risks to continue using
* user friendly error
* hooking parts up - untested
* changed approach
* release notes
* removing old comments
* cleanup old code
* feedback
* Fix rules not checking "category is nothing" when reconciling
* release notes
* Apply suggestions from code review
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* move settings to the file management area
* more settings
* giving users option to automatically move files when changing dir
* trueee
* updates
* does this fix the type issue
* weird
* translating
* release notes
* release notes
* a bit extra safety
* updating wording
* parameterising backup params
* text update
* parameterise vals
* add a notification to ensure the user knows the dir has changed
* pencil icon to save real estate
* ordering
* Rename 3500.md to 3584.md
* Update packages/desktop-client/src/components/manager/BudgetList.tsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Update bank-factory.js
Add "Banco ActivoBank" to list of banks with a limited history
* Update README.md
* Rename README.md to 449.md
* Update 449.md
* Remove two duplicate lines
* Privacy mode: instead of blurring, use an illegible font (#3376)
* Privacy mode: no layout shift when switching mode
* fix(Spending): update for latest PrivacyFilter
* refactor(PrivacyFilter): use CSS :hover
* chore(PrivacyFilter): no privacy mode BudgetCell height regression...
https://github.com/actualbudget/actual/pull/3377?show_full=true#issuecomment-2357385371
* chore(GroupMonth): drop no-impact PrivacyFilter styles
* Add custom handler for the German bank Rheinhessen Sparkasse to the GoCardless app.
Following the guide and using the template added the code, similar to other handlers, that should match the transaction as seen in the logs when syncing my bank through Actual.
The only thing that had to be added was the notes about the transaction are stored under remittanceInformationStructured and not under remittanceInformationUnstructured.
Testing still pending.
* FIx linting errors and add release notes
Replaced the indentation from 4 spaces to 2, to fix linting error as recommended by the yarn test.
Added the release notes file 454.md.
* FIx linting errors (second try) and fix error in the release notes
* Fix linting errors
* Update src/app-gocardless/bank-factory.js
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update src/app-gocardless/bank-factory.js
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update src/app-gocardless/banks/spk_worms_alzey_ried_malade51wor.js
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update upcoming-release-notes/454.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Rename file "spk-worms-alzey-ried-malade51wor.js"
* Remove functions normalizeAccount and CalculateStartingBalance
Since no changes were made to the default functions, they should be deleted from this specific bank (SPK_WORMS_ALZEY_RIED_MALADE51WOR).
* Correct linting error
Remove import of unsed variables.
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Add advanced setting to reload app from server
* Add change notes
* Automatically reload when API call is redirected
* Error on redirect so we don't use the response
* Remove setting to reload
* Update release notes
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Undo auto transfer notes + auto notes for cover
* Release notes
* Fix notes
* Fix notes undo
* Do not show clicked category on transfer or cover menus
* Fix typecheck error
* typecheck
* Fix removeCategoriesFromGroups
* restart server silently on add self signed cert and add some logging
* release notes
* fix name
* updating names to be more specific
* removing setloading
* feedback
* hardening the file system access by added retrys
* release notees
* remove unneeded console log
* promise-retry instead of my own
* tiny bit more info
* capital U
* Update bank-factory.js
Added NORDEA_NDEADKKK (Nordea Personal Denmark) to the list BANKS_WITH_LIMITED_HISTORY
* Create 340.md
* Rename 340.md to 440.md
* Rename 440.md to 441.md
* solves the problem but creates a vulnerability
* sake...
* working but need to specify rootca.pem
* works
* being flexible on the cert names, as long as its a crt or pem
* remove console logs
* initial setup for adding cert
* caps
* comments
* fix ts strict
* rewrote it
* release notes
* remove unneeded
* https no polyfill
* removing the cert reference if it is not found
* moving full stop
* adding notarization stuff back in
* win csc settings so win build doesnt try to sign with mac stuff
* windows doesnt need to know about mac build
* teamid env var instead of config val as per docs
* for testing purposes only
* probably wont work
* yet, didnt work
* try this
* update notarize
* removing test code
* add release notes
* packaging different architectures for windows
* appx for the windows store app hosting
* remove unneeded applicationid
* adding windows store assets
* adding images
* appx added to artifacts
* add appx to release
* remove override build params
* being specific about the mac build - default is dmg
* are these all needed.. Seems so
* removing appx from the release notes as its only for the windows store
* moving appxs to a different artifact for smaller download
* Update electron-pr.yml
* update version
* update release process to remove actual-windows.exe because it can possible be the wrong arch
* Display splits in mobile previews
* Display splits in desktop previews
* UI fix: hide checkboxes on preview child transactions
* UI fix: show notes on preview transactions
* Add release notes
* Update vrt for mobile padding fix
* Fix status display
* Collapse split previews by default
* PR feedback: fix issues with split payee
* Update new VRT with spacing from this PR
* hide target category from cover overspending list
* release note
* suggestions from joel-jeremy
* useMemo and better types
* add change to mobile
* fix build
* fix mobile
* Automatically focus inputs, or the primary button, in modals.
* Set focus on more modals.
* focus mobile transaction edits
* add release note
* fix linter
* fix linter
* Added configuration to CSV importer that allows to skip lines
* Fixed several type / parser check when import is executed with a different CSV structure on accounts with transactions
* Fixed linter warning
* Reverted changes on sync.ts as initial error is not occuring anymore.
This will also fix the tests again
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Remove some `any` types from the API
* Add release notes
* No backwards-incompatible changes
* Update tests to reflect API changes
* PR feedback: standardize on id for deletes
* PR feedback: restore partial updates
* add electron logging to main browser process console
* add logging
* removing old way
* release notes
* adding some logs in to test mac build
* repent satan
* i caste yeee oooott sinner
* derp
* hmmm<
* forcing nodegyprebuild
* not like this.... Not like this... 😢
* hmm
* dunno
* will it recognise it if i link it manually.. 👀
* give up
* rebuild
* merge asars fasle
* update package
* manually do it ffs work damnit
* remove the cmd
* dont rebuild cause i build it manually
* dafuq is this, two bettersqlite modules installed huhhhhh
* test
* does this work?
* bloody hell
* couple more logs
* test this out
* arch in name
* adding the rebuild step back into first build
* try rebuild before pack - so we know what arch we need
* having a laugh
* tidying up
* release notes
* move package up a bit
* exit process if no electron verison
* fix: i18n: Use 'en' as default language
Using 'cimode' as default language code will return the
translation keys verbatim without doing interpolation.
This is unwanted unless working directly on localization.
Fixes#3240
* Add release note
* fix(#2562): Prevent transaction deduplication for imported transactions (#2770)
* fix(#2562): Prevent transaction deduplication for imported transactions
* chore(): eslint fixes
* chore(): Add release note file
* fix(#2562): Allow transaction deduplication if transaction being imported is null
* chore: Rename release note, add strazto as author
* test(loot-core): Add test case for new logic
* docs(release-notes.loot-core): Add pmoon00 as author
* test(loot-core): Update test case to not be affected by unrelated bug
* test(loot-core): fix linter
---------
Co-authored-by: Mohamed El Mahdali <mohamed.elmahdali.developer@gmail.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Add Handling For goCardless Fuzzy Search
* Rename Release Note File
* Rename Release Notes File
* Fix UseFuzzySearchV2 After Merge Conflict
* Update Fuzzy Search Query To Include New Columns
* Update useFuzzyMatchV2 Variable To useStrictIdChecking
* Update useStrictIdChecking To Only Be Used If It's Not Syncing From External Sources
---------
Co-authored-by: Matthew Strasiotto <39424834+strazto@users.noreply.github.com>
Co-authored-by: Mohamed El Mahdali <mohamed.elmahdali.developer@gmail.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Add "S" hotkey for viewing/linking schedules.
* Default to filtering by account name when linking a schedule to a transaction.
* Work on 'all accounts' page.
* Update help modal
* add release note
* Use csv fields with name payee/notes as defaults for Payee/Notes in getInitialMappings
* Add release notes
* Run lint
* Use or instead of nullish coalesce to match other fields
* revert built in number parse
* note
* tests
* remove trivial test
* more tests
---------
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
Imported hidden categories had the parent category entity id (UUID)
appended to the end of the name, making the category name quite long
and somewhat hard to read.
Remove the entity id from the end, and replace the apostrophe that
divides the master category from the sub category with a forward slash.
This shortens the name, ensuring a better chance that the full
category name fits into the default table cell width.
Co-authored-by: DJ Mountney <david@twkie.net>
* update conditionExists function to compare filter options
* rename method
* array.some instead of for loop
* release note
* refactor the condition search
* 🐛 (modals) allow content to be vertically scrollable
Closes#3079
* Feedback: overfloww auto
* fix modal scrollbar style
* dont need to spread
* lint 😞
* Update 3161.md
* adding width 100% to inputwithcontent
---------
Co-authored-by: Michael Clark <5285928+MikesGlitch@users.noreply.github.com>
* update the parser
* can set goal value, but there are errors and it still needs to look for a balance and not month amount
* fix apply budget
* un change
* note
* lint
* working processing, need to set colors based on month somehow
* add long goal option to the gui and db
* note, lint
* fix cleanup
* fix
* make mobile work, lint
* fix bindings
* more proper
* lint
* fix single category run
* don't unset goal values if they don't have a template too
* lint
* more lint
* fix check when no template exists
* rearrange to get around the issue of inconsistent colors
* lint
* typecheck
* add field to aql schema
* fixes
* cleanup
* migration date
* Autocomplete sort now ignores diacritics
* Payees tab now takes into account diacritics
* Category Autocomplete now ignores diacritics
* Schedules filter now ignore diacritics
* Added release note
* Fixed type error
* Added normalisation to manage rules filter
* Added normalisation to $like operator
* Added normalisation function to loot-core
* Fixed type error & added normalisation to notlike
* Fixed unit tests
* Changed normalise to use loot-core/shared on desktop
* Linting fix
* Use dicts to look up common information
* Show abbreviated payees in split payee section
* Update vrt
* fix: missing transfer icon
* Add release notes
* fix: update vrt again
* bugfix: failing edge cases
* fix: stale test
* fix: stale test, p2 (+ vrt)
* add idea of common payee, a top 10 frequently used payee
* add button in payee to mark as favorite
* cleanup
* minor fixes
* add release notes and make favorite optional
* fix TransactionsTable test
* lint and release notes
* rename section, resort list to ensure both are sorted
* don't show common, move bookmarked to menu
* add a limit on adding common payees
* linting
* reduce to 5 commonly used payees by default
* linting
* more linting
* update migrate timestamp
* more linting
* fix api name, bump migrate timestamp
* Add star to payee dropdown and rename section to 'Suggested Payees'
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Add computed padding for handling clipped Net worth amounts
* Add comment, early handle 5 character case
* Add release note
* Use currency decimal preference for Net Worth graph Y-axis ticks
* use number format preference for `BarLineGraph` ticks
* use number format preference for checking `NetWorthGraph` tick overflow
* prevent `numberFormatConfig` overwrite
`getNumberFormat` uses `numberFormatConfig` as the default argument;
passing just `{ hideFraction: true }` caused `numberFormatConfig.format`
to be ignored
* add release note
* use `amountToCurrencyNoDecimal` instead for `{BarLine,NetWorth}Graph` ticks
* Split transaction handling for csv export (#2973)
* refactor, zero-amt parents and add split_amount
change how child/parents are counted to remove dependence on `sort_order` being negative. for export, give parent transactions a 0 in the `amount` column, but add a new column with their `split_amount` for other programs to possibly import
---------
Co-authored-by: Zeus\Herb <herb@win.dows>
Co-authored-by: DJ Mountney <david.mountney@twkie.net>
* Add help modal for keyboard shortcuts.
* add release note
* fix linter
* fix typecheck
* fix linter
* use component syntax for GroupHeading
* use component syntax for Shortcut
* fix linter
* use component syntax for KeyIcon
* refactor to support different dialogs
* show different help based on current page
* fix linter
* reword help
* capitalize letters
* show cmd on mac
* stop event propagation
* dont show if a modal is already open
* remove unused import
* rename modal
* move where location check happens
* dont stop event
* allow typing '?' in inputs
* better filter
* extract function
* fix linter
* dont show if filter popover is visible
* fix linter
* fix wrong shortcut, support SHIFT
* fix linter
* fix conditional
* Disable interactivity on preview statuses
These have no click action but have a focus effect of a purple circle
(residual from the "Cleared" checkbox styling) that looks a bit glitchy.
* Add release notes
* Exclude status field from keyboard navigation
* Add computed padding for handling clipped Net worth amounts
* Add comment, early handle 5 character case
* Add release note
* Update packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx
Co-authored-by: Robert Dyer <rdyer@unl.edu>
* Update vrt snapshots
* Fix NetWorthGraph cutoff when `compact` is true
This happens in case of `ReportCard`
* Update VRT snapshots to revert to original
* Revert snapshots to original
* vrt
---------
Co-authored-by: Robert Dyer <rdyer@unl.edu>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Adds ability to resize sidebar
* Adds release notes
* Changes to feature
* lint
* change translateX to use % for both states
* vrt
* set max sidebar width, cleanup
* set min and max widths
* min width to 200px
* changes resizable sidebar to use re-resizable instead off css resize
* vrt
* vrt
* Remove the trafico pr review triggers
- We loose triggers for Approved and Changes Requested
- They weren't working on forks anyways
* Add release note
* Reapply rules to split transactions when the parent changes
Concretely, this enables the "standard" workflow for
split-transaction-entry on desktop, where you enter the payee first, and
then edit the amount afterwards (and expect splits in a rule to apply when
you edit the amount).
* Add release notes
* Fix bug in first field below parent transaction
* Update vrt
* FIX: For Report Budget, the income categories are negative when using 'Set budgets to 3 month average'. This fix solves this issue
* added 2862.md
* Ajustments for category menu not closing properly and fix to negative values for income category copy budget
* fix lint
* changed variable name without changing references after lint ajust
* retrigger checks
* smaller 2862.md
* Update main.ts - Handle Null Org Domain in SimpleFIN
SimpleFIN (currently) uses the org domain as the bank ID. According to SimpleFIN docs, this can possibly be a null value, as can the org name. However, at least one of the two must be present.
In Actual, org name is set to "Unknown" if it comes in as null, but the bank_id (previously just set to the org domain) was not, resulting in a null bank_id value at times.
* Create 2836.md
* Fix release notes format.
* Small change to release note.
* Change to use new org Id as fallback for bank_id
* Add orgId property, for new org id from SimpleFIN
* Make balance movement menus only appear on relevant conditions
* Release notes
* Hide to be budgeted when covering overbudgeted
* Fix typecheck error
* Added Year comparsion feature. Also fixed bug with greater than 28 days.
* Removed comments and console.logs
* Create 2806.md
* Cleaned up code
* Hide's graph if no data, and hides average, last month or last year if no data.
* Apply suggestions from code review
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
* Fixed spent MTD and last MTD. Added in all suggestions from carkom.
* Update 2806.md
* Added changes required by carkom #2
* Couple more fixes, only show graph if have data for last month (as requested by carkom)
* Removed console.log that was mistakenly added.
* removed useEffect
* Add files via upload
* Remove async function
* lint fix
* fixed carkom requests & added in fix for YAxis issues
* Fixed couple of mistakes. Removed Y Axis fix (new PR will be created)
* Cleanup code
* Fix mode buttons
* Removed console.log...
* Update showAverage Logic
* Update switch logic
default should be default for everyone other part of the graph.
* Add Math.abs
* lint fix
---------
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
* fix(#2562): Prevent transaction deduplication for imported transactions
* chore(): eslint fixes
* chore(): Add release note file
* fix(#2562): Allow transaction deduplication if transaction being imported is null
* chore: Rename release note, add strazto as author
* test(loot-core): Add test case for new logic
* docs(release-notes.loot-core): Add pmoon00 as author
* test(loot-core): Update test case to not be affected by unrelated bug
* test(loot-core): fix linter
---------
Co-authored-by: Mohamed El Mahdali <mohamed.elmahdali.developer@gmail.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Use amount input on rules page instead of plain text field
* Add release notes
* Remove unneeded attributes
* Support percent formatting
* Lint + typecheck
* Fix latent bug
* Handle existing data correctly
* PR feedback: naming
* PR feedback: force percent to a positive number
* PR feedback: reset percent to 100 upon changing input type
* Fix input clamping behaviour
* Empty commit to bump ci
* PR feedback: prop cleanup
* PR feedback: no default number format
* PR feedback: cosmetic refactor
* Show account notes in tooltip on sidebar
* add release note
* Only show tooltip for accounts
* Split account name and note into separate nodes
* Add padding inside tooltip
* Move tooltip to the right
* remove commented code
* Tweak the visual design
* Fix lint
* adjust padding
* Update packages/desktop-client/src/components/sidebar/Account.tsx
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* refactor to avoid function
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Update filter amount to filter incoming and outgoing transactions
* Add test and fix logic
* Added release note
* Update with linter fixes
* Update new ammount filter to apply to all ops
* Fix lint
* Add API for working with rules
* Add release note
* Change 'payees-get-rules' return type to RuleEntity[]
* Reuse existing handlers, make names not have 'payee', add two getters
* fix linter
* fix bad handler name
* fix broken handler name
* add test cases for 'getPayeeRules'
* fix broken test
* Remove unused locals
* Update packages/loot-core/src/types/api-handlers.d.ts
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Update packages/loot-core/src/types/server-handlers.d.ts
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Strict types and slightly improved return interface
* update test comment to match new API names
* fix linter issues
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* [Mobile] Add schedule name and date to scheduled transaction modal
* useRef to prevent rerenders
* Release notes
* Fix typecheck error
* Fix lint errors
* Update schedule font
* Heavier font weight
* Create types for the external versions of entities meant for the API
- Otherwise the types used in the API were actually wrong vs the data we were sending
* Add release note
* Added loginMethod config option
Added a new config option loginMethod that can be password (default) or header for header authentication. This value is returned to the client to be used on the front end
---------
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
Co-authored-by: DJ Mountney <david.mountney@twkie.net>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Johannes Löthberg <johannes@kyriasis.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: DJ Mountney <david@twkie.net>
* Fix some additional incorrect types
- This is part of working towards having enough correct types to be able to run tsc on our packed api without error.
- Working towards being able to ship types for the api in the package
* Add release note
* monthly Spending
* Add Average
* notes
* title
* date filter
* TS fixes and hide average when no data
* fix average tooltip and relabel x-axis
* Wording/verbiage
* filters changes
* feature flag
* networth card fix
* Fix menuItemTextHeader contrast in dark mode
* release note
* darken menu background and change accent colour to purple in dark theme
* change menu keybind accept colour to purple in midnight theme
* update release note
* fix menuBorder colour
* Add To Be Budgeted category to cover and transfer modal
* Release notes
* Fix To Be Budgeted input selection
* Fix typecheck error
* Fix duplicate modals in firefox
* Fix lint error
* Add UI test for validating that split transaction rules work as expected
* Apply suggestions from code review
Renames split-transactions-add to add-split-transactions
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Define id for finding splitactions on the page wher its used
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* add flatpack to electron build
* note
* add to workflow
* try to fix workflow
* typos
* workflow
* work
* update
* add repo
* update other electron workflow
* stable doesn't work
* fix version
* Mobile collapsible budget groups
* Release notes
* VRT updates
* No tap highlight when clicking collapse/uncollapse button
* Income group no tap highlight
* No highlight on hover
* Allow setting accessValidForDays per bank
This also stops taking `accessValidForDays` from the client since it's
hardcoded there anyway and it's simpler to just have these per-bank
values in one place.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Get the max allowed maxHistoricalDays value from the GoCardless API
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Upgrade nordigen-node to 1.4.0
Contrary to the claims in the nordigen-node changelog 1.3.0 did *not*
fix the missing support for passing in accessValidForDays, so we have to
upgrade to 1.4.0 to actually get the fix.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
---------
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Dim categories hidden by their groups
* Dim hidden cats on mobile view
* Do not show hide/show menu on mobile for categories in hidden groups
* Rename catGroup to categoryGroup
* Fix lint issue
* Hide menu line
* Pass in categoryGroup instead of isHidden
* avoid need for extra local
* fix lint issues
* Do not allow hiding income category group
* add release note
* rename file
* Migrate DB so income groups are not hidden
* Update migration to explicitly match on is_income = 1
* Use desktop colors for mobile autocomplete modals
* Release notes
* Color updates
* Color updates
* Update close button
* Fix typecheck
* Rename to ModalCloseButton
* Update ModalTitle
* added green700 (g3) to highlight text in PayeeAutocomplete and CategoryAutocomplete
* added upcoming release note doc for Isuee 2488
* modified background and text to meet WCAG AA compliance for contrast
* updated code for autocomplete highlight on menu items
* fixed linting errors and renamed release note
* updated release note category from 'bug' to 'bugfix'
* fixing the light theme
---------
Co-authored-by: Jenn Cox <jenncox@Jenns-MacBook-Air.local>
* add group enhancement
* warnings
* note
* add more group functions
* add Global: to differentiate warning from group warnings
* weights not properly recorded for sinking groups, safeNumber error
* modify exiting LineGraph to track budget items over time
* linter pass 1
* increase line weight, add sorting and colour to tooltip
* second lint pass
* add release note
* use new disabledLists, format tooltip, other nits from review
* add margins to LineGraph
* adding missed linting
* remove new line icon, add disable options for split, legend, label
* Update ReportTopbar.jsx
Remove unneeded lines
* lint fix
* SVGChart
---------
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
All banks are supposed to provide at least 90 days of access.
As of July 2023 EEA banks are required to allow access for up to 180
days[0], but this does not apply to UK banks, and apparently there might
still be EEA banks which don't comply with the new regulations.
We should consider eventually defaulting to 180 days and allowing
per-bank and maybe per-country overrides, but bumping it to 90 days
immediately provides a better user experience.
[0]: https://nordigen.zendesk.com/hc/en-gb/articles/13239212055581-EEA-180-day-access
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* sort of working
* fix null condition, move buttons up
* visual and workflow updates
* update colors on hover
* release note
* fix another condition that inserted null
* when custom reports were cold-reloaded, the selections would be null crashing the page
* add release notes for PR
* fix typo in release note file name
* cleanup: Move account sync indicators to the left on mobile
* cleanup: account sync indicators on mobile should show pending/failed syncs
* feature: show account sync indicator when viewing account on mobile
* fix lint issues
* add release note
* Fix flaky transfer e2e test
- If tests ran too fast, the transactions wouldn't finish rendering
before the select of the transactions was attempted.
* Add release note
* Fix mobile UX, issue #2079
* upcoming-release-notes
* Fix navigation bar buttons not fully displayed
* pill size changed, exported nav bar height
* Edit navigation bar const
Edit nav bar pill color
* Removed export
* Fixes release notes
* Fixed formatting
* Fix mobile UX, issue #2079
* upcoming-release-notes
* Fix navigation bar buttons not fully displayed
* pill size changed, exported nav bar height
* Edit navigation bar const
Edit nav bar pill color
* Removed export
* Fixes release notes
* Fixed formatting
* Test schedules and mobile images created
* Reverted schedules checks test images
* add log messages to schedule templates
* log the included schedules
* more log output
* use a negate filter for sinking funds
* carve out a top out exception if no sinking funds
* note
* Adds option to make a transfer from two selected transactions
- Transactions amount must match
- Transactions must be from different accounts
- Split transactions not eligible
* Add plugin for offline PWA support
* Add release notes
* Attempt to fix kcab fetch issue
* Fix type errors
* Cache more file types
* Empty commit to try to bump action
* Attempt to fix fonts
* Add split creation UI to rule creation modal
* Support applying splits when rules execute
* fix: deserialize transaction before running rules
According to how rules are run in other places in the app, we should be
supplying a "deserialized" (i.e., integer-for-amount and ISO date)
transaction rather than a "serialized" (amount-plus-formatted-date) one.
This fixes a crash in how split transactions are applied, as well as
date-based rules not applying correctly previously (any rule with a date
condition would never match on mobile).
* Add release notes
* Fix missing types pulled in from master
* PR feedback: use `getActions`
* PR feedback: use `flatMap`
* Fix action deletion
* Don't flicker upon split deletion
* Let users specify parent transaction actions (e.g. linking schedules)
* Support empty splits
* Revert adding `no-op` action type
* Support splits by percent
* Fix types
* Fix crash on transactions page when posting a transaction
The crash would probably have occurred in other places too with
auto-posting schedules :/
* Fix a bug where schedules wouldn't be marked as completed
This was because the query that we previously used didn't select parent
transactions, so no transaction was marked as being scheduled (since
only parent transactions have schedule IDs).
* Add feature flag
* Limit set actions within splits to fewer fields
* Fix merge conflict
* Don't run split rules if feature is disabled
* Fix percent-based splits not applying
* Fix crash when editing parent transaction amount
* Auto-format
* Attempt to fix failing tests
* More test/bug fixes
* Add an extra split at the end if there is a remaining amount
* Make sure split has correct values for dynamic remainder
* Remove extraneous console.log
* feat: Don't allow duplicate cat-groups in budget
* Add release notes
* fix: error message
* pass group instead of name for accurate error message
* improve error message
* Some initial UI work for adding SimpleFin.
* SimpleFin proof of concept working.
* Adds linking & unlinking to existing accounts through the account menu UI.
* Added loading and lint fixes.
* Lint changes.
* Added release notes.
* Typecheck cleanup.
* Import, lint, typecheck cleanups.
* More typecheck cleanup.
* Refactored language for consistency.
* Added default institution name.
* Lint cleanup.
* Addressed change requests.
* Added a default to migration, made variables consistent, added feature flag.
* Added account_sync_source to server schema.
* Adds account_sync_source to test.
* Fix for typecheck.
* Attempt to make typecheck happy.
* Added strict ignore.
* Moved account_sync_source to the right model (face palm).
* Hotfix for institution format.
* Lint cleanup.
* Removed unnecessary promise.all.
* Lint cleanup.
* Initial support for SimpleFin.
* Added release notes and lint cleanup.
* Changed some notes for better context.
* Fixed logic.
* Changes per requests on PR.
* More cleanup of null checks.
* Bundle loot-core types into the API
So we can have loot-core be the source of truth
for some types that get passed through
- Improves downstream development with API by including types
- Use path aliases for dist vs dev tsconfigs
- Convert api index to typescript as example
- Permit ts-ignore for issues with our version of typescript
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Restore ability to use console.log in vite
- Swap our swc plugin to remove-react-properties
- Configure remove-react-properties to preserve our testids
* Change the vite chunk filename hash usage
- Change to more closely match the . syntax we use with webpack
- This should fix some issues with our size compare as well
* Account for chunks being base64
* Allow case insensitive ynab5 import for special 'starting balance' payee
* set upcoming release number to related github issue
* extract string comparison into separate function
and reuse when checking starting balance/s on ynab4 import
* make all category group checks case insensitive
when importing from ynab5 to make the check strategy consistent when importing from ynab5
* extract findById into sreusable function
to 'simplify' usage
* Add null check
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Proof of concept for switching desktop-client to vite
* Fix other packages ts tests issues
* Update jsx tests to use vitest instead of jest
* Inject our global shims properly
* Add comment regarding new plugin
* Cleanup unnessary change after rebase
* Fix inter fonts pathing
* Remove manual chunks sizes for now
Just set the limit higher
* Bring back size compare
* Suppress victory warnings
* Remove craco config now that it's not used
* Add vite basic ssl plugin
- This autogenerates self-signed certs in dev mode when HTTPS env is set
- Made to match the CRA behaviour
* Add release note
* Remove warning suppression for victory
- Updated to a rollup version that includes the fix
* Add proper types to runHandler
- Args and return values from runHandler should now work within loot core
- Updated some of the handler types to be more accurate
* Request active edit on focus
* Release notes
* Track previous focus state
* use inputRef to focus
* Focus total amount effect
* Run active edit action synchronously
* Revert unneeded changes
* Run cleanup synchronously
* Cleanup
* runAction
* Space
* Negate schedule amount to budget if income
* Release notes
* Determine sign at initial calc
To ensure no unintended impact to remainder calcs etc.
* Lint fixes
* Add "end" field with date/count options
* Use "end" field to generate schedule
* Show "end" field in recurring description
* Disable weekend before/after picker when not enabled
* Add release notes
* Fix failing typechecks
* Add some description tests
* PR feedback
* 'Features', not 'Feature'
* Fix goal templates infinite loop
* Empty commit to bump ci
* Fix bug where schedule templates in the past would apply incorrectly
For example, if you had a schedule which started in November 2023 for
1.00, and you applied the schedule in October 2023, then you would end
up with a value of 0.50 applied in October.
* Fix handling of schedules with an end date
This commit also includes a refactor of the skip-weekend logic: rather
than referring only to dates with skipped weekends (which requires
checking whether the "next date" request worked correctly), we track a
"base date" which is the previous value of the schedule according to the
rrule, excluding any weekend-skipping. This lets us use `addDays(baseDate, 1)`
to get the next occurrence, regardless of the weekend behaviour.
Doing things this way ensures that the loop will always make progress.
* Only compute skipped weekend if weekend skips were requested
* Fix typo in iterate-schedule-occurrences code
We should be using `nextBaseDate` to derive the next base date, not
`nextDate`; this is because we want the base date to be guaranteed to
make progress in each loop iteration, so we can finish in at most 30
iterations without duplicate base dates.
* Use const
* Revert const -> let for one mutable variable
* Use Page component for mobile pages
* Release notes
* Use Button instead of Link in MobileBackButton
* Update mobile budget table to use Page component
* Settings page cleanup
* Fix lint error
* Updates + small font size increase in page headings
* Fix rebase error
* Button height
* Revert payees navtab
* Fix failure to create category with deleted name
I'm not 100% familiar with the design of the data model so may have
misinterpreted what's going on here, but how I read this:
- The tombstone flag is used to soft delete categories.
- When creating a new category, duplicate names within a group are
prevented.
- When checking for duplicate names, the tombstone flag was unchecked
which meant deleted categories were falsely blocking creation.
I had a look at category deleteion logic to verify that simply including
the tombstone flag in this check is sane and see that there's a category
mapping being maintained to redirect one category to another on
deletion. So from what I can tell the correct behaviour here is to allow
a new category with the previously deleted name, rather than to revive
the old category (to preserve that old mapping lineage).
* Add release note
* Add regression test
* Remove author from electron package.json
* Don't allow dupes in cat names (per group)
* Release Notes
* Handle reorders and moves
* Fix linter warnings
* Fix typecheck
* Show the name of the duplicate category
* missed func call
* Upper case before compare
* lint fixes
---------
Co-authored-by: Shazib Hussain <contact@shazib.com>
* Mobile Color Consistency
* VRT updates
* color updates
* notes
* Sync Text
* Adjust header font smaller
* color and format adjustments
* tidying header buttons
* color and button adjustments
* Header Text color
* VRT updates
* back button changes
* VRT changes
* adjust buttons
* lint fix
* darkTheme header background
* VRT updates
* VRT updates
* added sankey plot
* fix sankey
* formatting
* formatting
* lint
* reduce margin
* experimental flag
* update location of recharts install
* truncate tooltip
* add titles to node and sizing
* better filtering
* comments, types, and check if data exists
* don't log
* clean up extra views
* responsive container, and fix label in graph
* change back
* fix bug and font
* static tooltip
* update overview to fit both sankey and category spending
* overview sankey
* increase iterations, fix right text, and release notes
* remove is out
* lint
* fix tooltip space
* fix margins
* format and efficient sql payees query
* restructure category sum value
* add tooltip names...again
* conditionally use container
* use useCategories
* first pass at progress bar
* db migration / enter goal in db
* add getGoal function
* stabilize
* whoops
* TS
* reset goal in db if no template found
* reconfirm
* release note
* typo
* rename migration
* to ms
* move priority logic, consistent variable names,
* fixup
* clear goal if template removed
* Visual goals (#40)
* 🔥 removing privacyMode feature flag (#1688)
* 🎨 fix multiline label in schedules modal (#1687)
* Update Visual Regression README File (#1689)
* Fix typo in GoCardlessLink.js (#1684)
happend -> happened
* queried cleared balance for tooltip (#1678)
* Dark Theme Reports/Settings (#1512)
* 🐛 Mobile account transaction list: Fix sticky date section headers (#1698)
* 👷 do not cancel github ci jobs on master branch (#1692)
* Sidebar Account Fix (#1703)
* Dark Theme Final (#1513)
* Category autocomplete should only search selectable categories (#1681)
* set colors based on a goal value
* extra comment
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: Shaan Khosla <35707672+shaankhosla@users.noreply.github.com>
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
* update release note
* lint
* use null as cleared state
* show goal status via colors (#41)
* cleanup
* I think its working
* lint
* fix report budget, by adding in the goal coloring
* fix the error by adding colors to the report side (#42)
* [refactor] Migrate Schedules Table to typescript (#1691)
* 🔧 removing unnecessary manual module resolution (#1707)
* 🐛 (mobile) scrolling in lists with pull-to-refresh (#1706)
* 💄 (mobile) updating apple home-screen icon (#1705)
* Enhance Y-Axis Scaling on Net Worth Graph (#1709)
* fix report budget, by adding in the goal coloring
---------
Co-authored-by: Mohamed Muhsin <62111075+muhsinkamil@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
* report budget database updates
* Goal progress bar (#1734)
* first pass at progress bar
* db migration / enter goal in db
* add getGoal function
* stabilize
* whoops
* TS
* reset goal in db if no template found
* reconfirm
* release note
* typo
* rename migration
* to ms
* move priority logic, consistent variable names,
* fixup
* clear goal if template removed
* Visual goals (#40)
* 🔥 removing privacyMode feature flag (#1688)
* 🎨 fix multiline label in schedules modal (#1687)
* Update Visual Regression README File (#1689)
* Fix typo in GoCardlessLink.js (#1684)
happend -> happened
* queried cleared balance for tooltip (#1678)
* Dark Theme Reports/Settings (#1512)
* 🐛 Mobile account transaction list: Fix sticky date section headers (#1698)
* 👷 do not cancel github ci jobs on master branch (#1692)
* Sidebar Account Fix (#1703)
* Dark Theme Final (#1513)
* Category autocomplete should only search selectable categories (#1681)
* set colors based on a goal value
* extra comment
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: Shaan Khosla <35707672+shaankhosla@users.noreply.github.com>
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
* update release note
* lint
* use null as cleared state
* show goal status via colors (#41)
* cleanup
* I think its working
* lint
* fix the error by adding colors to the report side (#42)
* [refactor] Migrate Schedules Table to typescript (#1691)
* 🔧 removing unnecessary manual module resolution (#1707)
* 🐛 (mobile) scrolling in lists with pull-to-refresh (#1706)
* 💄 (mobile) updating apple home-screen icon (#1705)
* Enhance Y-Axis Scaling on Net Worth Graph (#1709)
* fix report budget, by adding in the goal coloring
---------
Co-authored-by: Mohamed Muhsin <62111075+muhsinkamil@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
* report budget database updates
* Fix schedule searchbar (#1729)
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: Shaan Khosla <35707672+shaankhosla@users.noreply.github.com>
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
Co-authored-by: Mohamed Muhsin <62111075+muhsinkamil@users.noreply.github.com>
* working dynamic colors. Need to figure out what changes are actually needed
* cleanup
* more cleanup
* lint
* reset the goal when applying a single template
* make getCategory function
* remove some unneeded changes
* actually remove the changes, not just comment
* cleanup some unneeded code that was causing some bugs. Works for me, but should be vetted more
* lint
* add json definitions to database
* use template feature flag to enable colors
* some fixes
* don't set goals for remainders, remove unneeded change
* lint
* release note
* lint again
* fix mobile crash
* undo changes in CellValue.tsx
* lint
* use getStyle
* move status calc to helper
* lint
* recommendations
* suggestion
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
---------
Co-authored-by: shall0pass <20625555+shall0pass@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: Shaan Khosla <35707672+shaankhosla@users.noreply.github.com>
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
Co-authored-by: Mohamed Muhsin <62111075+muhsinkamil@users.noreply.github.com>
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Inline mobile category and group edit
* Release notes
* Allow one edit at any time
* Mobile: long press to edit category/group
* Mobile: set userSelect: 'none'
* Move getLongPressEvents
* Add role to prevent tap-to-search
* Add role to text
* Prevent default on longpress
* Add tabIndex to disable tap-to-search
* Add back userSelect
* Role updates
* Remove userSelect
* Revert long press category name
* Remove unused import
* Fix lint error
* Edit mode
* Do not allow to start an edit when another field is currenty being edited
* Fix blur event not firing
* Grey out zero spent or balance values
* VRT update
* Fix budget cell being zero on click
* Delete useLongPress
* Hide mobile nav tabs on scroll
* Release notes
* Reduced navbar bottom padding
* Make hide transition a bit faster
* Update scroll defaults
* VRT snapshots
* Fix: safari scroll bounce effect disrupting the show/hide of bottom nav
* Update release notes
* No tap highlight on MobileNavTabs
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* More mobile functionalities
* Cleanup
* Remove close button on mobile budget summary modal
* Release notes
* Close mobile inputs on enter
* Fix mobile budget row header color
* Fix income group hidden
* Add validation + close button on category tooltip
* Add mobile budget visual cues
* More mobile visual cues
* Error message fix
* Update blank category name behavior
* Cleanup
* Cleanup
* Fix mobile group deletion and category tooltip behavior
* Zero sign for AmountInput
* VRT snapshot updates
* Handle null values in must-category-transfer
If we don't verify that the repository ID is what we expected then we
will pull artifacts from PRs where the source branch is `master`.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* fix percent goals in the same priority level not compounding but overwritting
* release note
* don't show hidden groups on mobile view
* cleanup
* cleanup2
* cleanup3
* release note
* desktopc-client swc-loader
* More swc
* Jest swc + upgrades
* Revert @swc/jest usage for now
* SWC minify
* Remove setupFilesAfterEnv in package.json as per warning message in CI
* Release notes
* Minify on CI
* swc helpers in loot-core
* @swc/jest
* Upgrade webpack
* Add @swc/core to crdt
* Use yarn cache in github actions
* Cleanup
* Fix electron
* Revert "Fix electron"
This reverts commit 787af1980648fa30788a1d1678dcda534716f31d.
* Revert action.yml cache changes
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Previously we would default to only show transfer payees in the payee
selection dropdown for child transactions. This is confusing and there
doesn't seem to be any obvious reason for this, so this commit removes
that behavior.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Added clear transactions on import option
* Added release note
* Added cleared column to csv export
* fixed Manually entered split transactions are not cleared on import
* Revert "Added cleared column to csv export"
This reverts commit 2952bc3e7d.
* added release note
* Copied same code to Gocardless
* Updated var name
* Updated to only query changed transactions instead of all
Most banks allow up to 90 days of transactions, and so we try to fetch
up to 90 days of transactions or transactions since the first
transaction in the Actual account, whichever is shortest. This lets
users get a clean start based on their selected starting balances date.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* allow schedules to skip weekends
* wording
* release note
* skip weekend in upcoming dates as well
* Clean UI
* Move switch to the date selection modal
Because different banks use the date fields in vastly different ways we
now let the server's bank integrations decide which date we should use.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* 🐛 (reports) fix incorrect cashflow balance
Fixing a small typo here where multiple transfers across different payees on the same day fail to be summed up resulting in significant balance errors.
* release notes
* Update 1518.md
* Fix re-rendering all rows on hover
* release note
* Removing isHover logic in place of css :hover
---------
Co-authored-by: biohzrddd <10577752+biohzrddd@users.noreply.github.com>
This breaks fetching transactions where the valueDate is in the future.
While the GoCardless documentation says this should never happen, it's
what happens with at least Bank Norwegian due to them using the interest
date as valueDate. (C.f. #1392)
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Set `role="button"` on downshift autocomplete items
This avoids content observation behavior in WebKit on touch devices that delays the onClick event (and therefore reaction to user input).
* Disable split transaction editing for now
The 'interval' value from the schedules is not set if the schedule is
monthly. This change will check for a valid number for the interval
value and if it does not exist will default to 1 (monthly).
References discord discussion starting here:
https://discord.com/channels/937901803608096828/940290142579605514/1133523705063030824
Currently the schedule keyword won't fill any future budget cells if the
category balance already satisfies the schedule. This PR is an attempt
to improve the behavior by allowing budget fills regardless of the
category balance.
This is a drastic rewrite of the schedule keyword. Though I've tried not
to have any regressions, it is possible because of how different the
logic is. I've tested compounding using a simple template, so a small
change in the 'by' keyword was also made.
This PR has no functional changes. Only types are changing and getting
improved (more stricter).
A follow-up PR will come next that does a few functional changes to make
this package fully strict.
<!-- Thank you for submitting a pull request! Make sure to follow the
instructions to write release notes for your PR — it should only take a
minute or two:
https://github.com/actualbudget/docs#writing-good-release-notes -->
Updating other menus to sentence case so that it is consistent with the
other menus throughout the app
The current link in the README directs to a github page that has a link
to the documentation page on how to write release notes. I've updated
the link here to just go straight to the documenation page on how to
write good release notes.
Eye.js is currently set to a static color (black). This PR allows you to
change the color of the icon with the style element - mimicing all other
icons in Actual.
Includes a few typographical improvements I PR’d.
(since the workflow is a `pull_request_target` one, the changes won’t
show up in the comments till this PR is merged)
Closes#1415
Fix number formatter not listening to state changes. This is not a fully
comprehensive solution. We will need to run a migration campaign to port
over from direct usage of `format` util to `useFormat`, but this is a
first step that solves the most glaring issue.
Removing env var/config file support for Nordigen secrets. These have
been migrated to the new `secrets` db table a while ago. We can now
clean up the legacy implementation for these secrets.
This is a more elegant way of implementing a month ahead version of the
percent goals. To use it add the `previous` flag to the percent goal, ex
`#template 10% of previous Paycheck`.
1. upgrade `nordigen-node` to 1.2.6 (which uses the new gocardless
domain)
2. allow accessing `nordigen` functionality via `/gocardless` to unblock
using the new API path in actual-web
Reverts actualbudget/actual#1204
Closes https://github.com/actualbudget/actual/issues/1293
This is way more complicated than originally anticipated. Reverting the
change to fix the prod build. Someone can work on re-introducing this in
a later build, but we need to be sure it doesn't break once more.
There's no new code here, just a reorg. Had to change some import calls
in some files to make it all work properly.
Having just done a lot of work in the accounts directory I figured it
could do with some organization. I've broken out all the Header
functions into a different file in order to cut down on the size of the
account.js file.
I also moved the transactions files into a new directory since they are
used by other pages. Also makes them easier to find with this structure.
This PR adds types to the `crdt` directory to make the structure of the
merkle tree (really a merkle radix trie) clearer.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Bringing back asset caching. This means we won't need to do a full
re-build for every change.
I had previously disabled caching because the backend changes (kcab)
were not picked up properly. But now that should be fixed too.
- Remove unused CSS files
- Set up the `.wasm` files to be automatically copied in
- `sql-wasm-debug.wasm` is removed entirely since we never use the
debug/dev build of sql.js. This reduces the app download size by 1MB on
the server side. It may be worth enabling the debug build automatically
in the future?
I noticed that:
- The web and electron versions of our `uuid` module both looked exactly
the same…
- …and deferred to the `uuid` package…
- …and the async version just called the sync API.
So now we will just use the `uuid` package directly everywhere.
This PR moves the size comparison action back to a separate workflow
which now uses the `pull_request_target` event. This event is triggered
at all the same times as the `pull_request` action, except that the
workflow file content comes from the target branch of the PR, and it is
run in the context of the repo owning the target branch. Practically,
this means that it will still have access to post a comment even if the
PR comes from a fork.
We don’t want the build actions to be run in a `pull_request_target`
workflow because they would get access to the secrets and be able to
perform arbitrary actions on the repository, even from fork PRs.
See the current version failing here:
https://github.com/actualbudget/actual/actions/runs/5395184895/jobs/9797388016?pr=1122
This significantly speeds up `yarn lint` for me. It also ensures we’re
listing all source files in the project, including the `.eslintrc` files
and any other files that may be present.
It me it seems the monkey patch is no longer necessary.. At least I'm
not able to reproduce any `escape` key related issues. But LMK what you
think.
The `@reach/listbox` component is used for the custom select component
(for example: for filters).
I've updated the return values in `sync/index` to sensible values based
on how they're being called.
I've updated the type of `msg.value` to be `string | number | null` to
match the values expected by `serializeValue`
- New linter rules are now added
- Perhaps the `createPayee` method i've tagged with a disable should be
deleted.
- I have ignored unused methods in Plaid/Mobile as this stuff is still
WIP/experimental?
None of this code is relevant to people who have used the open source
app. I initially wanted to leave it in so it could be used for major new
features in the future, but as it falls further and further out of date
I think it’s best to just delete it in a clean PR that can be referenced
later if desired.
Closes#1069
I've not actually tested this change. Which is why I'm not changing it
to direct links (as they might not work).
Instead I'm just applying a very quick patch so the message would not be
misleading anymore.
This PR is for the first item listed in #559: `Expand All / Collapse All
Categories`
For the expand / collapse all categories functionality, I was choosing
between having a single `Expand / collapse all categories` button or one
for each: `Expand all categories` and `Collapse all categories` buttons.
For the initial implementation, I have opted with the latter. Please let
me know which one is the right way to go or if there are other
suggestions and I'll just accordingly.

This allows running a health check from inside the container. Usage:
`npm run health-check`. That may not work inside of Alpine containers,
so you can do `node src/scripts/health-check.js` directly instead. Fixes
#213.
actual-server does not need to import the full actual-app/api package.
It can import only the CRDT stuff.. so I'm extracting it into a new
package to reduce the size of actual-server and make the link between
things more transparent.
Continuing on from #1139 this PR deletes all function that are not used
anywhere.
The next PR will include all the entire files that are unused & deleted.
This reverts #1029. As raised in #1097, the formatting chosen doesn’t
work well when doing math. There may be a way to balance compatibility
with multiple format styles with handling non-currency amounts
correctly, but it will require some more careful consideration. Re-opens
#894.
URLs with the trailing slash don’t work well — requests end up being
made to `https://example.com//sync/sync` and such which can 404
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
As discussed in #1126 creating separate PRs.
The linter rule isn't actually part of this first PR and will likely be
in the final PR as otherwise it will just fail because all the issues
aren't resolved.
The code is 'ready' though so as soon as this is merged I will open next
one(s)
Closes#1125
Disables (hides) the "all payees" checkbox when schedules are loading.
Reproduction:
1. open `/schedule/discover`
2. while the data is still loading - click on the checkbox in the table
header
3. after loading finishes - the page crashes with an error
Previously, the frontend would attempt to make real requests to
`https://not-configured/`, which of course failed. I’ve changed the
internal structure to have the lack of a server expressed as a `null`
server. A new `did-bootstrap` browser-level setting has been added to
track if the user clicked “Don’t use a server.”
Finally, I updated the auth logic for methods that call out to the
server to make them consistent and use the early return style which
reduces indentation.
This adds an option to the month drop down to check all the template
lines. If there are errors the offending line is shown with its
category.
I also modified the wording on the regular template return to be more
accurate. Fixes#1100
After #1115, new Node.js versions will be able to be used for
development of the frontend. This PR changes the recommended Node.js
version to 18 (the current LTS version). I have also tested with 16 and
20 and it works.
I also took the opportunity to:
- move the build script that was at the project root to the `bin/`
folder
- update the `browserslist` to target Electron 24 (which is the version
we currently build against). This results in a slightly smaller bundle
due to no longer having to transpile optional chaining.
Draft because it is untested, maybe tonight I will test it! Just wanted
to get some code out cause i had a spare 5 minutes.
The new parser isn't immediately good enough to replace the old parser,
and I sadly lost the time to contribute more! Sorry! If someone else
wants to take maintenance burden of this code, we can not merge this.
Otherwise, it should go the way of the Dodo it seems.
Thanks!
Closes#1044
Good catch @Jackenmen in
https://github.com/actualbudget/actual/pull/948#issuecomment-1580501909
— I’ve also added a CI check to ensure bad migrations aren’t introduced
in the future.
I think if you have a budget that has managed to have this migration
applied successfully, you’ll need to manually patch
`getAppliedMigrations` in
`packages/loot-core/src/server/migrate/migrations.ts` and inject a query
to remove the old migration ID and insert the new one.
Closes#944, closes#532. ~WIP because something is causing the test
budget to fail to create because it’s using INSERT instead of UPDATE sql
queries. (Or not? I have no idea)~
Added the option to add a remainder goal template. This will use the
remaining available funds and dump them into the respective category.
There is optional weighting. The remainder templates will be forced to
the lowest priority as to run after all other templates.
Usage: `#template remainder <weight>` Add the template line to any
categories you want to catch any remaining funds such as savings. The
amount added to the category will equal
`remaining_budget/total_of_weights*weight`. The default weight is 1.
- Fix socket connection issues when reloading
- Fix external url clicking & middle clicking internal links
- Remove broken menu option. Easier for now than refactoring the
settings panel it now lives in. We can add it back later if needed?
This adds back the functionality, which was inadvertantly removed, that
includes the already spent column in the calculation when the template
is run.
Some transactions may be posted to the account prior to running the
templates and would result incorrect budgeted amounts.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
~This is really just a proof of concept. I have no delusions that this
might get included. I'm sure others might have a much cleaner
implementation.~
I'm now delusional.
Resolves https://github.com/actualbudget/actual/issues/508
Taking @youngcw 's advice, I changed the keyword to #cleanup for the end
of month script to keep it separated.
This screen video shows two categories that are sources of funds. At the
end of the month, any excess in these funds can be redistributed to your
highest priorities. Three categories are set as sinks, or recipients, of
excess funds.
#cleanup source -> Move 'extra' funds to To Budget
#cleanup sink -> Fund category with To Budget funds, default weight = 1
#cleanup sink 2 -> Fund category with To Budget funds, weight = 2
Steps of the script:
1. Return funds from any category marked 'source'
2. Fund overspent categories fully if negative carryover is not allowed.
3. Fund each 'sink' category by the desired weight.
I run through the script twice. Once to show that if there is a debt
category that has a rolling negative balance, it will skip funding that
category first and once to show how if a rolling negative balance isn't
allowed, it will fund it before applying the weighted remainder. The
example shown uses weights of 60, 20, and 20; therefore, the Debt
category will receive 60% of the To Budget funds while General and Bills
receive 20% each. The weights could have been changed to 6, 2, and 2 or
3 for the Debt category with no additional value for General and Bills
to achieve the same result.

- Enforce that imports from the same package are merged into a single
import
- In `loot-core`, require that imports of other `loot-core` files use a
relative import (like the vast majority of such imports) rather than
specifiers starting with `loot-core/` (probably a result of moving files
out of other packages into `loot-core`)
Add option to schedule templates to budget the full amount only in the
needed month. Default behavior stays the same of spreading the expense
out over the available range.
To use the option, use a template like `#template schedule full
SCHEDULE_NAME`
Also some minor cleanup.
The payee autocomplete was always using cached accounts. Added a check
to see if accounts was already passed in as a parameter - only using
cached if it wasnt.
Updates to the latest version of electron and moves the backend-frontend
communication from node-ipc to websockets. This resolves the previous
roadblock regarding `nodeIntegration` .
Done
- Remove node-ipc in favour of websockets.
- Move file copying out of `preload.js` to avoid importing module `fs`
there
- Bump all electron pacakge versions to the latest
- Added new package for finding open ports as node-ipc is gone
- Tweaked webpack config for above changes
Partially fixes#468
Questions/ Pending:
- Literally every single test fails for me, presumably some issue with
my setup/environment.
- The websocket communication is not using TLS. I'm not sure how to
enable this, or if we even need to as its all local.
- Still need to create the CI for building/deploying but I'm not sure
where start in this regard as i have no exp with it. Presumably we will
need to point the electron auto-updater to the github releases url's. If
people are happy with this PR I will look at adding the CI before its
merged.
- In dev mode only, I have disabled TLS security becuase my docker
container's cert is not signed. I _assume_ this will be true for other
people who spin up the server on thier own hardware. Perhaps I just need
to change my cert to one from letsencrypt or something...
Notes.
I have not touched javascript in eons so my apologies if the commit
trail is a bit fragmented. I tried to keep them fairly contained and
then there is a slightly gnarly final commit fixing all the linter
issues... Please let me know if you want me to squash some commits etc.
I initially tried to move this to web workers the same way the web app
does it but this was unsuccessful. I have found no way to spin up a
worker in one place (frontend/backend) and then pass this worker to the
other. The electron ipc channels don't allow you to directly pass
objects such as workers, everything is cloned/serialised. Passing a port
number so the other end can spin up its own socket works fine.
---------
Co-authored-by: Shazib Hussain <contact@shazib.com>
Co-authored-by: Jed Fox <git@jedfox.com>
Introduces a **ResponsiveProvider** as the sole location that tracks
window size and makes that info available to the entire app. This can be
used for media queries and size-based component switching.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Previously, the latest artifact list was requested unauthenticated using
`ADD "https://api.github.com/..." /tmp/artifacts.json`. While this works
locally, on GitHub’s servers it seems that the per-IP rate limit was
exceeded. There isn’t a way to get Docker to pass the `Authorization`
header that I know of, so this work has been moved to an external shell
script that pulls down the relevant data.
# Add ability to filter the Manage Payees screen to show orphaned payees
only.
I aimed to modify as little code as possible - we now have a button on
the Manage Payees screen that will filter the table to show orphaned
payees only.
Adds support for [devcontainers](https://containers.dev/), this should
make onboarding easier and should allow (especially simpler)
contributions entirely online via Github Codespaces 🚀
I believe I found the infinite loop problem in the repeat goal.
This doesn't mess things up if you are budgeting the same month that the
goal starts, that's probably why we didn't see it before.
Side note: The logic always starts at the start date in the template,
then increments until falling in the right month window. If this
template gets used for, say, a few years, it will start to bog down the
processing. If someone has a good quick fix I can add that.
The regex for the "space-dot" format was incorrect.
When entering the amount on a schedule, the number was incorrectly read
(12.34 became 1234.00)
Strangely, it was not an issue with transactions...
Multi-line `if`/`for` statements in JS can be confusing since there
aren’t braces to indicate which code is enclosed in the statement. I set
the configuration to `multi-line` to enforce usage of braces for
multi-line statement bodies, but still allow things like `if (foo)
return;`. I additionally added the `consistent` option to require braces
for all elements of an if/else chain if one element has it. As you can
see, this set of options pretty closely matches the existing code style.
I was going to comment in #1008 about this stylistic change but realized
that it’s (IMO) a little impolite to ask for code style changes unless
they can be automatically enforced.
Note that `if (foo) { \n return; \n }` is still valid and won’t be
collapsed. I tried to automatically collapse all such cases but it was a
lot of files and I didn’t want to pick out the useful from the useless
differences.
Fixes#615. I would appreciate double-checking that I didn’t
accidentally delete anything that is important.
Since I’m removing the related API methods, this is technically a
breaking change (even if people would have no reason to remove this
stuff), so we should probably do a major release of the API package.
This attempts to add priorities for goal templates and addresses most of
https://github.com/actualbudget/actual/issues/959.
I couldn't find a good way to preserve both "Apply" and "Overwrite"
operations, so this PR does away with the current "Apply" action
behavior. Every box with a budgeted value will be overwritten if a
template goal is present.
The added syntax to define priorities is as follows:
#template -- priority 0, highest priority
#template-1 --priority 1, 2nd highest priority
#template-2 --priority 2, 3rd highest priority
#template-N --priority N, as many as you'd like.
~~Leaving as a draft as this may not be the preferred implementation but
I wanted others to be able to try it with netlify.~~
---------
Co-authored-by: Caleb Young <cwy@rincon.com>
Run the feature request management action when adding "feature" label.
This will allow us to..
1. remove "feature" label
2. add back "feature" label
Thus execute the workflow on the existing issues.
Improving error handling for Nordigen.
Before: if loading banks failed - a loading indicator would be shown
forever.
After: is loading banks fails - an error message is shown.
Closes#935
Before: we render all the pages (even the inactive ones in some cases)
After: we render only the visible pages. Thus the topbar color is set
only 1x.. thus the settings page topbar has the correct color.
<!-- Thank you for submitting a pull request! Make sure to follow the
instructions to write release notes for your PR — it should only take a
minute or two:
https://github.com/actualbudget/docs#writing-good-release-notes -->
Resolves issue #844 .
---------
Co-authored-by: biohzrddd <>
Hi there, `Peg.js` is unmaintained, so I figure you all would appreciate
if I replaced it with the drop-in replacement of Peggy. This is work I
am breaking out of #918.
Peggy adds new features like source map support that we could use,
although I do not include that in this change-set. It may be useful for
debugging changes to the .pegjs file we have.e
Hi there,
I try to tackle #798 here. It was suggested to throw this behind a
feature flag, so here it is!
this does its best to import the problem file in #767.
I am working on this because it would make my work on #918 easier :)
Feel free to set the feature flag to true and try the new importer. The
date parser is not as sophisticated as the one in `node-libofx`, but I
tried 3 different OFX files, one from my bank, one from the mocks, and
one from #767. They all seem to work well enough on that front, but this
is definitely the weak point of the new implementation.
Let me know what you think!
Helps with actualbudget/actual#919 by adding the `all` field wit both
pending and booked transactions to the output of
`getTransactionsWithBalance()` and, by extension, the
`/nordigen/transactions` endpoint.
I could alter the `getTransactions()` to return the `all` field as well
but I figured that keeping it such that it returns the output from
Nordigen API 1:1 might be better so I left it as is. If you don't agree,
let me know and I'll update this.
This is an initial concept for adding percent based goal targets.
This version works by using a string in the form of:
#template 10% of Income <- Income is an income category name. Only
income category names will work here currently.
or
#template 10% of all income<- 'all income' is a keyword in this context
and will base the calculation on the total income for the month.
Some of the nicer touches like Jed's polite notification that the syntax
isn't correct is not implemented here yet.
I've changed the method of calculating the budgeted amount. There may be
a more efficient way of writing the loop, so I'm looking forward to the
review.
This change implements the mathematics of
(Target1+Target2+TargetN-Last_months_category_balance) / (MonthsRemaing1
+ MonthsRemaining2 + MonthsRemaingN) * N. This is an averaged approach
for multiple templates in the same category. It will appear to
overbudget or underbudget some months compared to multiple single
targets in different categories, yet there should always be enough saved
in the category to satisfy the target due.
Setting a target, it's assumed that money will be spent in the
appropriate month, When a target reaches maturity, the money in the
category associated with that target should be spent or moved so the
remaining targets continue to be funded. I don't see an easy way of
fixing that, but I hope this change will be of some help.
Current method:
Notice how the Bills (flexible) category reduces each month, resulting
in larger budgeted amounts later in the goal cycle.

Proposed method:
**Note: The fact that the initial fill in this example equals the
expected fill is a coincidence based on the template values I chose. The
initial fills can be different from expected fill.

I got some feedback in the discord that this behavior was disruptive
when zooming in.
- I’ve reduced the breakpoint so hopefully the disruption of the
transition is matched by a significant improvement in available space
now.
- Also the 2 places in the app that use window width (including here)
now check for the width of the `<html>` tag, not the width of the
viewport (those 2 values can be different when doing a pinch-zoom,
causing undesirable layout shifts.)
- Most of the logic has been rewritten to improve the transitions
Mobile & desktop experience
https://user-images.githubusercontent.com/25517624/233653721-b13c5e22-ae11-4bdf-a494-a6916556d05e.movhttps://user-images.githubusercontent.com/25517624/233654784-b6cc1006-44ea-4066-be7a-8d0dd786fb5b.mov
(I’d like tapping on something to close the sidebar on mobile, but that
can be approached in a future PR)
It turns out that `event.key` for ctrl/cmd+Z is `z`, and it’s `Z` for
ctrl/cmd+shift+Z.
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
This improves the error reporting when issues are found with Goal
Templates. Before these changes, the only error that would be reported
is the "Bills" error in the image while the other issues would be
ignored and not funded.
CodeQL keeps yelling at us about this… I’m not sure if the filter is
smart enough to use this rate limit middleware to remove the warnings,
but at least we will be setting a reasonable bound on attempts to crack
the server password.
This PR converts everything (aside from electron) from CommonJS to ESM.
It is needed to reduce the changes that will happen during the migration
to Typescript (as TS does not play nice with CJS).
Basically:
- rewrite `require()` to `import`
- rewrite `module.exports` to `exports`
- introduce `ts-node` to run importers so we can convert them to TS too
Lastly, sorry for this larg-ish PR, not my preference but when I tried
to reduce its scope, I would end up with mixed commons/esm that was even
more tricky to handle.
Seems like we already added `tsc` to build the project, but we use the
wrong babel preset (Flow) instead of the specific TS one. This is only
used in testing to make Jest work (from what I can tell).
Fixes#840 by creating application-defined SQL functions
(https://www.sqlite.org/appfunc.html) for Unicode-aware implementations
of `LOWER()` and `UPPER()`. This uses
`String.prototype.toLower/UpperCase()` JS method.
I initially wanted to just redefine `LOWER()` and `UPPER()` but due to
[sql.js not supporting the definition of deterministic
functions](https://github.com/sql-js/sql.js/issues/551), I had to just
define them as separate functions and use that in the appropriate
places. It's probably better like that anyway...
I believe this change allows for having multiple 'by' rules in the same
category. It seems to be working well for my purposes, but I would
appreciate further testing to assure there aren't regressions.
Example:
#template 300 by 2023-06
#template 3000 by 2023-08
Before this PR, having these two lines in the notes would only budget
funds for the earliest of the two strings and ignore the 3000 funding
target. With this PR, the sum of the two funding targets will be
respected.
GitHub CI log:
```
[linux/arm/v6 base 6/8] RUN yarn workspaces focus --all --production
204.6 ➤ YN0007: │ bcrypt@npm:5.1.0 must be built because it never has been before or the last one failed
204.6 ➤ YN0007: │ better-sqlite3@npm:8.2.0 must be built because it never has been before or the last one failed
...
[linux/arm/v7 base 6/8] RUN yarn workspaces focus --all --production
203.8 ➤ YN0007: │ bcrypt@npm:5.1.0 must be built because it never has been before or the last one failed
203.8 ➤ YN0007: │ better-sqlite3@npm:8.2.0 must be built because it never has been before or the last one failed
```
It seems that both armv6 and armv7 have the same issues with `bcrypt`
and `better-sqlite3` not being built. These packages are required to
build from source, luckily QEMU use armv7l for compiling.
Tested and working on RPi Zero W.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
This improves usability of narrow screen widths, and also prepares for
further optimizations that would allow us to use the sidebar largely
as-is on mobile, instead of having to have a tab bar.
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Part 1 of the conversion. Mostly renaming js to ts and making sure
things make still sense. Added also handy TS ESLint rules.
In order to support the various .web/.electron/... I ended up adopting
`index.d.ts` as pattern to share type definition. Let me know if that
makes sense for you too. Right now the function type definition is
duplicated, but the solution will be importing from `index.d.ts` and
using `const fn: FnDef = () => ...` that way we can keep all variants in
sync from a single type file.
Such rewrite however is better done in another PR otherwise we risk
confusing git and loosing history (rename + too many changes). Another
thing that might do in the next PR is convert all files to ESModules, as
things get confusing between CJS exports, ESM default/named and TS adds
extra complains.
Update all Docker Hub references to new `actualbudget` organization from
`jlongster` personal account.
We're officially an org now!
A bit of markdown/yaml auto-formatting snuck in, too.
Closes https://github.com/actualbudget/actual/issues/364
Corresponding update for the docs site in
https://github.com/actualbudget/docs/pull/144
Simultaneous to merging, we need to update our `DOCKER_HUB_*` GitHub
secrets in this repo.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Users in #99 report that Actual in Docker runs on armv7 platforms,
although a bit sluggish. I confirmed that the base images for Debian and
Alpine support the linux/arm/v7 target and have added them to the
platform list in the GitHub Actions workflow.
At least one user confirms it works with the bullseye default
`Dockerfile`, but before merging it would be great if someone can
confirm it works with the Dockerfile.alpine image:
```
git clone https://github.com/jamesmortensen/actual-server.git
cd actual-server
git checkout armv7-image
docker build -t actual-server -f Dockerfile.alpine .
docker run -p 5006:5006 actual-server
```
---------
Co-authored-by: Jed Fox <git@jedfox.com>
When working on something else, I noticed that `.test.js` files were not
running due to `jest.config.json` not including them. I went ahead and
re-enabled these tests to make sure that unit tests are actually being
run.
Added onboarding and budget e2e tests. Also fixed an issue for
first-time flows using imports: currently people end up with a blank
white screen after importing. Instead they should see the budget table.
Related: https://github.com/actualbudget/actual/issues/583
- When parsing an amount string, consider surrounding parentheses to
mean the amount is negative.
- Ensures all input to `parseFloat()` is sanitized.
Closes: #807
This PR improves the consistency of the settings UI by moving everything
(except the budget name field on mobile) into `<Setting>` boxes.
Additionally, it adds a “Settings” option to the file dropdown menu (I
keep expecting it to be there, and I think it’s reasonable to expose it
in both locations so it’s easier to access)
This changes the behavior of configuration loading when
ACTUAL_CONFIG_PATH env var is not specified. With this change, syntax
errors in config.json will now be reported if ACTUAL_CONFIG_PATH env var
is not specified and the app will not proceed. When the config.json file
is not present or cannot be read, the behavior remains the same.
I'm not sure if this is something you want but it was a simple change so
I figured I might as well contribute it. This PR allows the user to
upload `.blob` files that they may have gotten from server's
`user-files/` folder. This can be useful if the user didn't export the
file but has server backups.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Exposing the demo bank again in the get-banks endpoint.
Frontend implementation of the `showDemo` will come next. The demo bank
will only be available for DEV and PREVIEW builds.
Enabling the new autocomplete for dev/preview deployments.
This will allow us to spot any more issues there might be before we
release the new autocomplete.
https://github.com/actualbudget/actual/issues/773
The final `Autocomplete` refactors. After this is merged what's
remaining is to do extensive testing and address the bugs in
https://github.com/actualbudget/actual/issues/773
This PR moves `Nordigen` autocomplete to the new one without using a
feature flag. IMO this is a safe change given the simple nature of the
Nordigen autocomplete component.
Refactored all feature flags to use the new `useFeatureFlag` hook.
Also added a new functionality to this feature flag: ability to define
custom "default" value for a feature flag. This will allow us to enable
the new autocomplete component for everyone using Netlify builds
eventually (need to address some issues before doing so).
Further iterations on the new autocomplete.
1. Created `AccountAutocomplete`
2. Started using new autocomplete in `GenericInput` (used for notes
field)
3. Extracted common functionality between the three new autocompletes to
a generic component: `Autocomplete`
I noticed that the first run flow is suboptimal for people who want to
import an existing file from Actual/YNAB. I’ve moved the welcome modal
into the management app and set it up to appear when there are no
budgets available (which also has the benefit of allowing people to see
the modal again!)
I think there’s some weirdness around getting the modal to reappear when
deleting a budget file which I want to work out before merging this.
This PR also reorganizes the management app a bit to reduce usage of
modals (currently, hitting escape while the budget list is open leaves
you with a blank page).
<img width="539" alt="Screenshot_2023-03-18 08 53 54"
src="https://user-images.githubusercontent.com/25517624/226107462-b2b88791-1015-4397-b290-c64e7fcc0f41.png">
- [x] Ensure modal consistently appears when needed (no longer a modal!)
- [x] Fix e2e tests
Added an extra `waitFor` after a flaky unit test step.
I'm not really super happy with this workaround.. but it does make the
test much more stable (re-ran 5x and no failures:
https://github.com/actualbudget/actual/actions/runs/4455134799).
I think there is some internal timeout happening somewhere which is
causing this issue.. But not really sure where. And this will hopefully
get auto-fixed once we migrate to a new table. 🤞
This is not a full fix for the flakiness. One of the test cases will
still be flaky. But at least this fixes the other test cases thus
improving stability.
I am currently not working on adding support for importing to multiple
accounts, but I wanted to give anyone who takes that on a starting point
by updating the underlying C library to provide access to the account
name field.
Tests cases should be independent. You should be able to run them in
whatever order you want. And they should still pass.
Currently this is not the case. The order of the tests is very important
due to the "pseudo" randomization algorithm.
This PR makes the mock data IDs truly unique thus better exposing the
issue in our tests. Also this PR fixes the dependency issues thus making
each test case truly independent.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
See https://github.com/actualbudget/docs/pull/129 for more details. If
this is accepted, I’ll fill in release notes for the PRs that have been
submitted since the last release and submit a corresponding PR to
`actual-server`.
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
before:
```
kcab.worker.4bdc73a8d45eb2115156.js (2.1 MiB)
xfo.kcab.worker.4bdc73a8d45eb2115156.js (1010 KiB)
```
after:
```
kcab.worker.39f5fba82d7bc7477962.js (1.41 MiB)
xfo.kcab.worker.39f5fba82d7bc7477962.js (1000 KiB)
```
What’s changed:
- `loot-core` did not have a `browserslist` config, so
`@babel/preset-env` assumes we want to [transpile all the way back to
ES5](https://babeljs.io/docs/options#no-targets). I’ve removed the
`browserslist` config from each of the `package.json` files and moved it
to the root so this doesn’t happen again.
- I updated the target from `electron 3.0` to `electron 12.0` to match
our Electron dependency
- I’ve added `defaults` (currently equivalent to `> 0.5%, last 2
versions, Firefox ESR, not dead`) which is [recommended by
browserslist](https://browsersl.ist/#q=defaults). We could consider
tightening this, but it doesn’t offer a ton of space savings at this
point to just target Electron 12.
- Since much less transpilation will be happening, stack traces (dev and
prod) will be much easier to read!
I recently migrated my personal usage of Actual over to the open-source
version and imported a bunch of transactions. I have a _lot_ of history
in Actual, including a lot of weird edge cases like deleted split
transactions. While reconciling I noticed that my account balance shown
at the top was incorrect, even though the running balance was current.
Digging into this, I discovered that we aren't correctly handling
aggregate queries when querying transactions in the "grouped" mode.
Aggregate queries don't make sense in the "grouped" mode. Grouped means
that you want a list of transactions that include both the parent and
child transactions (when they are split). If you are summing up all the
amount, you only want to consider non-parent transactions. So we switch
it back to "inline" mode, but the way we did this previously was to
manually stitch the query together.
Even though was add SQL to ignore deleted transactions, we still
possibly include them. A child transaction may not be marked as deleted,
even though the parent transaction is deleted. When a parent transaction
is deleted, all child transactions should be considered deleted as well,
regardless of their tombstone status. This is what the
`v_transactions_internal_alive` view does. Previously we weren't going
through this view though, so we could still potentially include split
transactions even though they've been deleted.
This is little hacky, but it fixes the immediate problem. We fall back
to the inline mode by modifying the where clause, and we also adjust the
view that it queries to use the correct one.
Check if the transaction amount is a positive 0 rather than -0.
I went for casting the string with `Number` but I could instead replace
the whole condition with `!trans.amount.startsWith('-')` or with
`trans.amount > 0 || trans.amount == '0.00'` if either of these variants
are preferred.
Fix for
https://github.com/actualbudget/actual/issues/724#issuecomment-1464907064
Sometimes accounts have the same names and the same IBAN, but different
currencies (Paypal).
This should make the account names a bit more unique.. thus easier to
distinguish.
https://github.com/actualbudget/actual/issues/724#issuecomment-1464902166
Obviously the user can choose to use different names in `Actual`. They
are not forced to use this name.
Add a small endpoint that will be used to check the configuration status
of Nordigen. If it is not configured - we should not allow people to
proceed in the account-link flow.
When Nordigen accounts are linked 2x windows get opened: 1x (initial
tab) is polling for the status; the other window is for authenticating
with bank. Once the auth is done - customer is redirected back to app:
`/nordigen/link` page. At this point we can just close the tab.
https://github.com/actualbudget/actual/issues/724#issuecomment-1462853590
People have been having issues with this. I copied it from
`docker/stable-ubuntu.Dockerfile`. We should follow up on this to remove
the duplication at some point but this will help fix the problems people
are having now.
This _slightly_ changes the interface for configuring Nordigen, but IMO
it's safe to do because
1. the nordigen support is still experimental and subject to breaking
changes
2. we released 23.3.0 only an hour ago
This implements a simple indicator showing the user if the currently
used version is outdated by utilising GitHub tags to track the latest
version.
Closes#463
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Set a default balance calculation logic. This will allow us to integrate
with the majority of the Nordigen supported banks without needing to
manually implement each individual bank.
Frontend change: https://github.com/actualbudget/actual/pull/727
**Important**: some banks might break.. sadly I cannot test all of the
banks. But we should successfully cover ~80-90% of the supported banks
with these defaults. And if people notice that some specific bank is
broken - they can alwys report it to us and we can try and implement a
custom bank class for them.
- The `:edge` and `:edge-alpine` containers will now download the latest
commit of the frontend repo and build it when they are built.
- The backend dependency install process now uses the local copy of Yarn
(from #56) to install dependencies
- Extraneous files are no longer copied into the production image. This
is mostly a win for local builds (where the `.yarn` cache folder used to
get copied in) but it’s also a small win for CI-built containers which
will no longer have the README/configuration files/Yarn source code
lying around
- The dockerfiles now say `EXPOSE 5006`. This doesn’t have an effect on
anything by default as far as I can tell but it does mean that tools
know we will be listening on that port and can help users set up their
container accordingly (for example, Docker Desktop)
- Remove some extraneous dependencies from the containers (including
openssl)
---------
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
* Update gitignore about .idea folder
The .idea folder is generated by IntelliJ IDEA
* Add integration with Nordigen
* Fix linter
* Use longer access to the account
* Move normalizatoin of accounts to the backend side
* Fix possibility to force remove account
* Move normalization of transactions to the backend side
* Fix Settings.js after merge
* fix enableing bank sync
* delete old Settings component
* Use camelCase for nordigen/remove-account call
* WIP refactor
* Fix auto-selecting existing accounts
* Fix unlinking accounts
* Align to backend changes for Nordigen integration
* Fix AnimatedLoading
* Code review changes
* Fix TZ date issue
* rm mobile package
* rm BankSync settings section
* rm console.log
* rm comment
* applies some alignments from code review
* applies some alignments from code review
* Add prefix for nordigen specific functionality
* Use arrow char
* Add prefix for nordigen functionalities
* Fix linter
* Display only open accounts
* Update packages/desktop-client/src/nordigen.js
Co-authored-by: Jed Fox <git@jedfox.com>
* Fix incorrect calc of TZ for endDate
* Improved error checking
* Fix throwing invalid-schema error
* Fix for syncing large batches in Safari
---------
Co-authored-by: Filip Stybel <filip.stybel@ynd.co>
Co-authored-by: Leon Ebel <24588023+ebelleon@users.noreply.github.com>
Co-authored-by: Jed Fox <git@jedfox.com>
* Intelligently adjust field for newly added action
* Remove unnecessary switch case
* Dedupe list of fields
* Remove unnecessary conditionFields prop
* Intelligently adjust field for newly added condition
* Use a less specific condition
* Run `yarn dedupe`
* Update to better-sqlite3@latest
* Remove react-native
* Remove a bunch more unused deps
* Update mitt to 3.0
* Remove a few more
* Remove react-native-gesture-handler
* Revert "Update to better-sqlite3@latest"
This reverts commit d436bc8d73f2745f484def4e40596322d0c56458.
* Dedupe better-sqlite3 versions
* snapshots!
* Fix jsdom error
* Revert "Dedupe better-sqlite3 versions"
This reverts commit f99d2ab6f9.
* Add back jest-watch-typeahead
* Fix conflicting Jest version
(The jest-environment-jsdom package that is magically available seems to only be compatible with Jest 27)
* Allow rendering a schedule rule in <Value />
* Refactor: RulesPage.getNthRule returns arrays for conditions/actions
* Visit the rules page after creating a schedule
* Make it easier to build the bundle.api.js for the API
* Remove budgetId parameter, move config to top level of API
* that’s a breaking change
* Add support for signing into the server in init()
* Add api.downloadBudget(syncId, { password }) method
* Fix lint errors
* Refactor: extract out getSyncError
* api/download-budget: sync if possible instead of downloading
* Don’t bother with fetching remote files and installing key if the file is local
* *groupId
* FIx lint issues
* Remove extra close+reopen
* Refactor out duplicate load-budget logic
* Trailing commas
* Add missing imported_payee case
* Switch over to a `switch` to ensure no other cases are missed
* Fix switching from “amount” to “amount (inflow/outflow)”
* fix crash when parsing null value as number
* Fix formatting for “payee/category/account contains” filters
* Respond to the /client-bootstrap route
* Move the bootstrap route to /account/needs-bootstrap
* needs-bootstrap is not authenticated
* we don’t need isActual
* Allow the server to auto-configure the server URL for the client
* Extract server URL/version logic out to ensure consistent updates
* ()
* Be more explicit about when the server version is re-fetched
* Use a single layer of context provider
* Move the bootstrap route to /account/needs-bootstrap
* No more `isActual`
* Refactor to call subscribe-needs-bootstrap instead of fetch()
* Dedupe calls to subscribe-needs-bootstrap
* Don’t revalidate the server when we just validated it
* simplify
* Fix setServerURL
* Provide more debugging information when throwing an invalid-schema sync error
* Don’t log the errors directly
* Update dynamic cell warning to be clearer
* rebuild
* Prevent Cmd+Z/Cmd+Shift+Z from propagating to the browser
* Allow browser to handle undo/redo shortcuts in input fields
* Don’t change a transaction’s note from null to ''
* Dedupe loot-core webpack configs
* Swap to parsing using Peggy
* Actually record syntax errors
* Refactor template types
* Add notifications after applying the templates
* “Successfully”
* Try a Nearley grammar
* Revert "Try a Nearley grammar"
This reverts commit 1e11c07b85.
Not going with this approach since the error messages are inscrutable.
* switch to PEG.js which has slightly better tooling support
* fix parser
* Fix error reporting
* Adjust grammar for better error messages
Also allow spaces between currency symbol and number
* Fix grammar
* Make #template prefix case insensitive
* Trailing commas
* Remove patch-package from loot-core
* Add a `webRoot` property to the config file to override the web UI used
* Allow all config options to be set via env variables
* Fix TS
* Fix test file paths
* Move “Listening on” message to after we’re actually listening
* Fix codeql warning
* Fix bug when config.https is null but HTTPS_* env vars are defined
* Allow passing raw key/cert into `https.key`/`https.cert`
* Allow passing config file as ACTUAL_CONFIG_PATH
* Forgot to handle userConfig not being specified
Fly deployments on the free tier have ~256mb of memory available. Users
with large transaction histories were encountering out of memory errors
when attempting to export their data. This commit adds a node argument
to (more or less) run the garbage collector at a smaller memory usage,
helping keep users on flyio within their available limit.
Fly deployments with the previous template setting are running without
tini's subreaper capabilities. This change enables tini as a subreaper
in that environment.
While investigating #54 it was noted that the previous implementation
zips the entire budget folder in the download endpoint. Once received on
the client side, only the most recent db and metadata are actually used.
This means up to 10 backups are being zipped in memory and transferred
to the client (in addition to the two necessary files) despite none of
that data being used. While this inefficiency isn't a major concern in
some environments, it may be problematic in memory constrained
environments.
This change transfers only the files that are actually utilized.
issue #54
- code as written expects the file may be absent and has a fallback
implemented, so the error can be safely ignored. There may be a better
strategy for dealing with this, however.
description:File a bug report also known as an issue or problem.
title: '[Bug]:'
labels: ['bug', 'needs triage']
labels: ['needs triage', 'bug']
body:
- type:markdown
id:intro-md
attributes:
value:|
Thanks for taking the time to fill out this bug report! Please ensure you provide as much information as possible to better assist in confirming and identifying a fix for the bug.
- type:markdown
attributes:
value:|
**IMPORTANT:** we use GitHub Issues only for BUG REPORTS and FEATURE REQUESTS. If you are looking for help/support - please reach out to the [community on Discord](https://discord.gg/pRYNYr4W5A). All non-bug and non-feature-request issues will be closed.
**Bank-sync problems (SimpleFin / GoCardless)?** Reach out via the [community Discord](https://discord.gg/pRYNYr4W5A) first and open an issue only if the community deems the issue to be a legitimate bug in Actual.
- type:checkboxes
id:existing-issue
attributes:
@@ -16,8 +21,6 @@ body:
options:
- label:'I have searched and found no existing issue'
required:true
validations:
required:true
- type:textarea
id:what-happened
attributes:
@@ -28,14 +31,14 @@ body:
validations:
required:true
- type:textarea
id:errors-received
id:reproduction
attributes:
label:'What error did you receive?'
description:'If you received an error or a message on the screen, please provide that here.'
label:How can we reproduce the issue?
description:Please give step-by-step instructions on how to reproduce the issue. In most cases this might also require uploading a sample budget/import file.
Thanks for taking the time to fill out this feature request! Please ensure you provide as much information as possible so we can better understand what you’re proposing so we can come up with the best solution for everyone.
@@ -16,8 +15,6 @@ body:
options:
- label:'I have searched and found no existing issue'
<!-- Thank you for submitting a pull request! Make sure to follow the instructions to write release notes for your PR — it should only take a minute or two: https://github.com/actualbudget/docs#writing-good-release-notes. Try running yarn generate:release-notes *before* pushing your PR for an interactive experience. -->
// 'The release notes file has been committed to the repository. You can edit it if needed before merging.',
"If you're happy with this release note, you can add it to your pull request. If not, you'll need to add your own before a maintainer can review your change.",
].join('\n');
awaitoctokit.rest.issues.createComment({
owner,
repo:repoName,
issue_number:issueNumber,
body:commentBody,
});
console.log('✅ Successfully commented on PR');
}catch(error){
console.log('Error commenting on PR:',error.message);
'You are categorizing pull requests for release notes. You must respond with exactly one of these categories: "Features", "Enhancements", "Bugfix", or "Maintenance". No other text or explanation.',
},
{
role:'user',
content:`PR Title: ${prDetails.title}\n\nGenerated Summary: ${summaryData.summary}\n\nCodeRabbit Analysis:\n${commentBody}\n\nCategories:\n- Features: New functionality or capabilities\n- Bugfix: Fixes for broken or incorrect behavior\n- Enhancements: Improvements to existing functionality\n- Maintenance: Code cleanup, refactoring, dependencies, etc.\n\nWhat category does this PR belong to?`,
},
],
max_tokens:10,
temperature:0.1,
});
constoptions={
hostname:'api.openai.com',
path:'/v1/chat/completions',
method:'POST',
headers:{
Authorization:`Bearer ${openaiApiKey}`,
'Content-Type':'application/json',
},
};
constreq=https.request(options,res=>{
letresponseData='';
res.on('data',chunk=>(responseData+=chunk));
res.on('end',()=>{
if(res.statusCode!==200){
console.log('OpenAI API error for categorization');
setOutput('result','null');
return;
}
try{
constresponse=JSON.parse(responseData);
console.log('OpenAI raw response:',JSON.stringify(response,null,2));
'You are a technical writer helping to create concise release notes. Generate a maximum 15-word summary that describes what this PR does. Focus on the user-facing changes or bug fixes. Do not include "This PR" or similar phrases - just describe the change directly. Start with a base form verb (e.g., "Add" not "Adds", "Fix" not "Fixes", "Introduce" not "Introduces").',
},
{
role:'user',
content:`PR Title: ${prDetails.title}\n\nCodeRabbit Analysis:\n${commentBody}\n\nPlease provide a concise summary (max 15 words) of what this PR accomplishes.`,
},
],
max_tokens:50,
temperature:0.3,
});
constoptions={
hostname:'api.openai.com',
path:'/v1/chat/completions',
method:'POST',
headers:{
Authorization:`Bearer ${openaiApiKey}`,
'Content-Type':'application/json',
},
};
constreq=https.request(options,res=>{
letresponseData='';
res.on('data',chunk=>(responseData+=chunk));
res.on('end',()=>{
if(res.statusCode!==200){
console.log(`OpenAI API error: ${res.statusCode}${res.statusMessage}`);
body:`:tada: This feature has been implemented in #${process.env.PR_NUMBER} and will be released in the next version. Thanks for sharing your idea! :tada:\n\n<!-- feature-implemented-comment -->`,
name:Close feature requests with automated message
on:
issues:
types:[labeled]
jobs:
needs-votes:
if:${{ github.event.label.name == 'feature' }}
runs-on:ubuntu-latest
steps:
- uses:actions-ecosystem/action-add-labels@v1
with:
labels:needs votes
- name:Add reactions
uses:aidan-mundy/react-to-issue@v1.1.1
with:
issue-number:${{ github.event.issue.number }}
reactions:'+1'
- name:Create comment
uses:peter-evans/create-or-update-comment@v3
with:
issue-number:${{ github.event.issue.number }}
body:|
:sparkles: Thanks for sharing your idea! :sparkles:
This repository uses a voting-based system for feature requests. While enhancement issues are automatically closed, we still welcome feature requests! The voting system helps us gauge community interest in potential features. We also encourage community contributions for any feature requests marked as needing votes (just post a comment first so we can help guide you toward a successful contribution).
The enhancement backlog can be found here: https://github.com/actualbudget/actual/issues?q=label%3A%22needs+votes%22+sort%3Areactions-%2B1-desc+
Don’t forget to upvote the top comment with 👍!
<!-- feature-auto-close-comment -->
- name:Close Issue
run:gh issue close "https://github.com/actualbudget/actual/issues/${{ github.event.issue.number }}"
stale-issue-message:"🚧🚨 This issue is being marked as stale due to 90 days of inactivity. 🚧🚨"
only-labels:'needs triage'
repo-token:${{ secrets.GITHUB_TOKEN }}
stale-pr-message:'This PR is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
close-pr-message:'This PR was closed because it has been stalled for 5 days with no activity.'
days-before-stale:30
days-before-close:5
days-before-issue-stale:-1
stale-wip:
runs-on:ubuntu-latest
steps:
- uses:actions/stale@v9
with:
stale-pr-message: ':wave:Hi! It looks like this PR has not had any changes for a week now. Would you like someone to review this PR? If so - please remove the "[WIP]" prefix from the PR title. That will let the community know that this PR is open for a review.'
days-before-stale:7
any-of-labels: ':construction:WIP'
days-before-close:-1
days-before-issue-stale:-1
stale-needs-info:
runs-on:ubuntu-latest
steps:
- uses:actions/stale@v9
with:
stale-issue-label:'needs info'
days-before-stale:-1
days-before-close:7
close-issue-message:'This issue has been automatically closed because there have been no comments for 7 days after the "needs info" label was added. If you still need help, please feel free to reopen the issue with the requested information.'
Actual was _just_ open-sourced so the contributing model isn't fully fleshed out yet.
## Expectations
Personally, I would like to see an ecosystem of minor forks that make small changes to Actual and continually rebase on the latest version. Unlike what some people think, forks are a healthy sign of a community in my opinion.
We aren't going to take every single little change. Don't be offended if we close your PR. In order for the project to stay healthy, we need to guard our bandwidth and also only take changes that align with Actual.
Please ask first before making a large change; you might waste a lot of work if it doesn't align with how Actual should work.
Here are some initial guidelines for how contributions will be treated:
* The mental health of the maintainers will be prioritized above all else. If this means some things get lost and PRs are unreviewed because maintainers are spending time with family or on themselves, we celebrate that.
* Multiple maintainers are key to this being a healthy project. Currently, only I (@jlongster) have maintainer rights. I am actively looking for more people to come on as maintainers. If nobody steps up, expect less activity on this project.
* An open PR does not automatically deserve time for a full review and acceptance. It's up to the PR author to convince the maintainers that the change is good and worth reviewing. This involves a clear description for why the the change is being made, detailing the tradeoffs, and ideally a link to a live demo where Actual is running with the changes. (Ideally, we would automatically generate a live demo)
* We especially welcome improvements in automation: creating github actions to automatically generate builds, making the release process easier, etc.
## Main contributors
*@jlongster
## Project ideas
The code needs a lot of improvements. When it was just me (@jlongster) I would often find myself halfway through an improvement overall, but always had to put it aside to work on something else. This shows in the code; there's a lot of things that I wanted to improve but was never able to complete. These are list of projects on the top of my mind that I would love to see progress on.
### A mobile web app
One of the most pressing needs is a mobile app based on the web app. This could mean making the web app responsive, or a separate app that does a few basic things.
We are deprecating the native iOS/Android apps because we don't have bandwidth to support development and distribution of them (it's complicating submitting them to the app stores, etc).
Ideally you'd be able to enter transactions on mobile.
### Transitioning to TypeScript
This is something I should have done a long time ago. I'd love any help setting up infrastructure for TypeScript and starting to transitioning code to it, particularly the backend.
### Rewriting the transaction table
The transaction table is a very complex component because of all the interactions. The original goal was to embrace inline editing fully and never pull the user out into something like a modal or a drawer. I like how this worked out for some workflows, but it made other workflows plain awkward.
For example, splitting a transaction. Currently, it all happens inline which means the user could be in the middle of splitting a transaction and navigate somewhere else. The transaction needs to support that middle state where the subtractions don't equal the parent transaction amount. Currently, we show a little "error" popup near the transacton when it's in this state.
This is a very awkward flow, and it would actually be better to pop the user into a modal state to split a transaction. I would still want to _display_ the split transaction inline, and even edit the categories of them, but for editing the amount the user should work on them in a modal/drawer/etc.
The code for the transaction table originates from a time when React hooks were very new. If I had to do it all over, I'd avoid hooks entirely and look into better ways to manage state. **The performance of the table is crucial** and React hooks with complicated interaction actively make it difficult for this to work. The code is convoluted for a single purpose: only a single row should ever render when something changes.
I'm proud of the fact that you can scroll down the transactions list incredibly fast. You can even hold down "enter" to move the editing cell downward and it'll scroll down the list to keep the edited cell in view. But this came at a cost: the code needs to be more maintainble.
I'm not sure what the solution is yet. Maybe it's using a 3rd party library like [react-table](https://react-table.tanstack.com). To be honest, I'm quite skeptical of 3rd party library performance-wise, but it's worth looking into. That would also make it easy to support hiding/showing columns and other advanced features.
### Ditching babel
A huge pain point in development is using babel. The way it interacts with other tooling and requires a billion dependencies make it fucking annoying to work with (sorry, I'm drinking bourbon at this point). Updating Jest requires fiddling with versions of babel in the `yarn.lock` file until it works. I'm freaking over it.
We should switch to [swc](https://swc.rs). That would also have another benefit: it's **blazingly** fast. Like 100x faster. So it's also make development way way faster.
### Adopt an existing component library
One of my mistakes with Actual was rebuilding everything from scratch, even the design system. While I was able to make it look good for the current version of Actual, it makes it a lot of work to build new designs. We should choose a 3rd party library and start using it in Actual. It would make it way faster to build new designs.
There aren't many good 3rd party library unfortunately. API, accessibility, and general thoughtful-ness are important. The two that come to my mind are [Radix](https://www.radix-ui.com) and [react-aria](https://react-spectrum.adobe.com/react-aria/). I'm leaning towards react-aria.
I'm open to other things, but we really need something to take the weight off of building UI.
### Enriching the budget page
This is more of a feature, but if someone (preferrably with design experience) wants to dig into the budget page and figure out how to make it more extensible, that'd be great. I always wanted to show more data on that page but never had time to design something good. The multi-month view makes it hard, but maybe if there's only a single month showing we could show additional data beside it.
This also might require the ability to "select" a category so we can show data specific to that category.
### Custom reports
This is a big one. I'm very sad I never had time to see this through. I would love to see experiments to how better reports should work, particularly custom reports. Actually letting the user write some SQL or AQL code and visualizing it somehow. This is something I'll probably still play with.
Please review the contributing documentation on our website: https://actualbudget.org/docs/contributing/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
Actual is a local-first personal finance tool. It is 100% free and open-source, written in NodeJS, it has a synchronization element so that all your changes can move between devices without any heavy lifting.
If you are interested in contributing, or want to know how development works, see [CONTRIBUTING.md](https://github.com/actualbudget/actual/blob/master/CONTRIBUTING.md) we would love to have you.
If you are interested in contributing, or want to know how development works, see our [contributing](https://actualbudget.org/docs/contributing/) document we would love to have you.
Want to say thanks? Click the ⭐ at the top of the page.
## Key Links
- Actual [discord](https://discord.gg/pRYNYr4W5A) community.
- Actual [Community Documentation](https://actualbudget.github.io/docs)
- Actual [Community Documentation](https://actualbudget.org/docs)
If you are only interested in running the latest version and not contributing to the source code, you don't need to clone this repo. You can get the latest version through npm.
1. Self-hosted by using [a Docker image](https://actualbudget.org/docs/install/docker)
1. Local-only apps - [downloadable Windows, Mac and Linux apps](https://actualbudget.org/download/) you can run on your device
The easiest way to get Actual running is to use the [actual-server](https://github.com/actualbudget/actual-server) project. That is the server for syncing changes across devices, and it comes with the latest version of Actual. The server will provide both the web project and a server for syncing.
Learn more in the [installation instructions docs](https://actualbudget.org/docs/install/).
You can get up and running quickly and easily by following our [Running Actual Locally Guide](https://actualbudget.github.io/docs/Installing/Local/your-own-machine)
## Ready to Start Budgeting?
Read about [Envelope budgeting](https://actualbudget.org/docs/getting-started/envelope-budgeting) to know more about the idea behind Actual Budget.
### Are you new to budgeting or want to start fresh?
Check out the community's [Starting Fresh](https://actualbudget.org/docs/getting-started/starting-fresh) guide so you can quickly get up and running!
### Are you migrating from other budgeting apps?
Check out the community's [Migration](https://actualbudget.org/docs/migration/) guide to start jumping on the Actual Budget train!
## Documentation
We have a wide range of documentation on how to use Actual, this is all available in our [Community Documentation](https://actualbudget.github.io/docs), this includes topics on Budgeting, Account Management, Tips & Tricks and some documentation for developers.
We have a wide range of documentation on how to use Actual, this is all available in our [Community Documentation](https://actualbudget.org/docs), this includes topics on Budgeting, Account Management, Tips & Tricks and some documentation for developers.
## Code structure
## Contributing
Actual is a community driven product. Learn more about [contributing to Actual](https://actualbudget.org/docs/contributing/).
### Code structure
The Actual app is split up into a few packages:
- loot-core - The core application that runs on any platform
- loot-design - The generic design components that make up the UI
- desktop-client - The desktop UI
- desktop-electron - The desktop app
More information on the project structure is available in our [community documentation](https://actualbudget.github.io/docs/Developers/project-layout).
More information on the project structure is available in our [community documentation](https://actualbudget.org/docs/contributing/project-details).
### Feature Requests
Current feature requests can be seen [here](https://github.com/actualbudget/actual/issues?q=is%3Aissue+label%3A%22needs+votes%22+sort%3Areactions-%2B1-desc).
Vote for your favorite requests by reacting :+1: to the top comment of the request.
To add new feature requests, open a new Issue of the "Feature Request" type.
### Translation
Make Actual Budget accessible to more people by helping with the [Internationalization](https://actualbudget.org/docs/contributing/i18n/) of Actual. We are using a crowd sourcing tool to manage the translations, see our [Weblate Project](https://hosted.weblate.org/projects/actualbudget/). Weblate proudly supports open-source software projects through their [Libre plan](https://weblate.org/en/hosting/#libre).
'To avoid having to enter your username, consider installing the official GitHub CLI (https://github.com/cli/cli) and logging in with `gh auth login`.',
Some files were not shown because too many files have changed in this diff
Show More
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.