* 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>
* 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 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
* 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
* 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
* 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.
* 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
* 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.
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`.
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.

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>
# 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!
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.
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.
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.
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.
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)
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>
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
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>
* 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
* 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
* Removing dead links
Removing any links that no longer exist and can't move the content to docs.
* Update packages/loot-design/src/components/modals/PlaidExternalMsg.js
Co-authored-by: Jed Fox <git@jedfox.com>
* Update upgrade-notifications.js
Added video link back in
---------
Co-authored-by: Jed Fox <git@jedfox.com>
* Update FatalError.js
Removed reference to automatic reporting of errors to ActualBudget, also removed the email address as a endpoint for errors to be reported to and replaced it with GitHub issues.
* Update FatalError.js
Link changed.
* Update FatalError.js
Changed link
* use onEnter over onKeyDown in TransferTooltip
* condense line
Co-authored-by: Jed Fox <git@jedfox.com>
* remove unnecessary arrow fn
---------
Co-authored-by: Jed Fox <git@jedfox.com>
* Add support for searching the schedules table at /schedules
* Move filtering logic into SchedulesTable
* Extract out a <Search> component
* Improve margins in Link Schedule dialog
* Add support for filtering in Link Schedule
* Add support for filtering by date
* rename param for clarity
* Remove unused imports
* Fix schedules with empty values always showing up in search results
* Fix matching behavior
* Allow libofx to handle decoding imported files
* Add releve.qfx as a test file
* Remove irrelevant redacted transactions from test file
* Fix console overload from long console.warn stacks
* Schedule Editor: Keep payee list open while toggling transfer payees focus
This makes the schedule editor match the behavior of the PayeeAutocomplete in TransactionsTable
* Move fix to PayeeAutocomplete
* Fix adding date back to a schedule that lost its date
* Propagate errors when searching matching transactions
* Make the error more visible
* Block removing the date field on schedule-linked rules
* add hover state to NotesButton
* switch NotesButton editability to a ternary
* fix new lines, adjust padding on textarea
* add workBreak to text styling
* Update packages/loot-design/src/components/NotesButton.js
Co-authored-by: Jed Fox <git@jedfox.com>
* change wordBreak to overflowWrap
---------
Co-authored-by: Jed Fox <git@jedfox.com>
* Bug report: switch “please search first” to a checkbox
* Add an issue template for feature requests
* Add a “willing to implement” checkbox
* + section about docs/learning
* Wording improvements
* Regenerate icons without the .web.js extension
* Move icons in the root folder to a “v0” folder
* Remove generated index.js files
* Update generator to auto-remove deleted icons
* Add back AnimatedLoading + Loading
* Add SVG files for missing icons
* lint fix
* the perils of (not) running a case-sensitive file system
* Fix new import
* Switch v0 icons from width/height to viewBox
* Make ButtonSetting more generic
* Add an “Experimental Features” section in the settings
* Fix text color
* Put experimental features behind another link
* Update Encryption.js
* Update FixSplits.js
* Remove unused variable
* That’s what I get for coding on my phone
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Split the Settings component into multiple files (#434)
* Remove need for isMobile in CSS: lean on media queries in styles.js and glamor
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Jed Fox <git@jedfox.com>
Added a button to the reconciliation menu that will automatically create reconciliation balance adjustment transaction according to the target diff calculated.
* master:
ci: fix CI to an exact node version (#240)
Sort import in alphabetical order (#238)
Separate external, monorepo and internal imports (#237)
Allow `enter` to create new transaction when focused on `cleared` column (#234)
Enforce linting in loot-design (#233)
style: run linter (#232)
* master:
ci: fix CI to an exact node version (#240)
Sort import in alphabetical order (#238)
Separate external, monorepo and internal imports (#237)
Allow `enter` to create new transaction when focused on `cleared` column (#234)
Enforce linting in loot-design (#233)
style: run linter (#232)
refactor: create index.js for aql directory (#68)
Revert "build: update yarn.lock" (#230)
Fix handling of -0 in budget summary (#229)
Update bug-report.yml (#228)
description:File a bug report also known as an issue or problem.
title: '[Bug]:'
labels: ['bug', 'needs triage']
labels: ['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 asked to better assist in confirming and identifying a fix for the bug report.
- type:dropdown
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
id:intro-md
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:
label:'Verified issue does not already exist?'
description:'Please search to see if an issue already exists for the issue you encountered.'
options:
- 'I have searched and found no existing issue'
- label:'I have searched and found no existing issue'
required:true
- label:'I will be providing steps how to reproduce the bug (in most cases this will also mean uploading a demo budget file)'
required:true
validations:
required:true
- type:textarea
id:what-happened
attributes:
label:What happened?
description:Also tell us, what did you expect to happen?
description:Also tell us, what did you expect to happen? If you’re reporting an issue with imports, please attach a (redacted) version of the file you’re having trouble importing. You may need to zip it before uploading.
placeholder:Tell us what you see!
value:'A bug happened!'
validations:
required:true
- type:textarea
id:errors-received
attributes:
label:'What error did you receive?'
description:'If you received an error or a message on the screen, please provide that here.'
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.
- type:checkboxes
id:existing-issue
attributes:
label:'Verified feature request does not already exist?'
description:'Please search to see if an issue or PR already exists for the feature you’re requesting.'
options:
- label:'I have searched and found no existing issue'
required:true
validations:
required:true
- type:checkboxes
attributes:
label:'💻'
description:(Optional) Please check this box if you’re willing to open a PR to implement this feature. We’ll help you get started and answer any questions you have along the way :)
options:
- label:Would you like to implement this feature?
- type:textarea
id:pitch
attributes:
label: 'Pitch:what problem are you trying to solve?'
description:Please describe, in as much detail as you can, the problem that motivated you to submit this feature request.
validations:
required:true
- type:textarea
id:solution
attributes:
label:Describe your ideal solution to this problem
description:Feel free to give multiple different ideas for how the problem could be solved — we’d love to have a discussion to find the best way to solve your problem and related problems others may face! (Or leave this blank if you don’t have a solution in mind yet.)
validations:
required:false
- type:textarea
id:learning
attributes:
label:Teaching and learning
description:How can we make sure future users find and enjoy this feature? (i.e. how do we make it discoverable? what kind of documentation should we write? are there aspects of the feature that could trip up users?)
<!-- 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 -->
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 lodash style issue management for enhancements. That means enhancement issues are automatically closed. This doesn’t mean we don’t accept feature requests, though! We will consider implementing ones that receive many upvotes, and we welcome contributions for any feature requests marked as needing votes (just post a comment first so we can help you make 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. 🚧🚨"
days-before-pr-stale:-1
days-before-pr-close:-1
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.'
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 [discord](https://discord.gg/pRYNYr4W5A) community.
- 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.
There are four ways to deploy Actual:
**Please Note:** While the Actual repository holds source code for the mobile applications that were supported when Actual was closed source, these are no longer supported on the Open Source version of Actual.
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 easy way: using a server (recommended)
Learn more in the [installation instructions docs](https://actualbudget.org/docs/install/).
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.
## Ready to Start Budgeting?
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)
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
- loot-core - The core application that runs on any platform
-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).
This package contains the core CRDT logic that enables Actual’s syncing. It is shared between the client and server. We may or may not follow semver when updating this package; any usage of it outside Actual is undocumented and at your own risk.
## protobuf
We use [protobuf](https://developers.google.com/protocol-buffers/) to encode messages as binary data to send across the network.
### Generating protobuf
The protobuf is generated by using the [protoc](https://github.com/protocolbuffers/protobuf) compiler.
This can be installed by downloading one of the [pre-built binaries](https://github.com/protocolbuffers/protobuf/releases/) and placing it in your `$PATH`. The version used to build the current protobuf is [v3.20.1](https://github.com/protocolbuffers/protobuf/releases/tag/v3.20.1). You’ll also need to [download the latest version of `protoc-gen-js`](https://github.com/protocolbuffers/protobuf-javascript/releases/latest). For convenience, you can put both of these binaries in `./bin`.
Once installed, the protobuf can be generated by running `./bin/generate-proto`.
However there is one very important thing to remember! The default output includes this near the top:
```
var global = (function() { return this || window || global || self || Function('return this')(); }).call(null);
```
This will not work with our CSP directives. You must manually modify this to this:
super(['timestamp is not valid'].concat(args.map(String)).join(' '));
this.name='InvalidError';
}
};
}
classMutableTimestampextendsTimestamp{
staticfrom(timestamp: Timestamp){
returnnewMutableTimestamp(
timestamp.millis(),
timestamp.counter(),
timestamp.node(),
);
}
setMillis(n: number){
this._state.millis=n;
}
setCounter(n: number){
this._state.counter=n;
}
setNode(n: string){
this._state.node=n;
}
}
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.