Compare commits

...

225 Commits

Author SHA1 Message Date
Matiss Janis Aboltins
9b7a79a01c 🔖 (24.10.0) (#3545) 2024-10-03 18:06:47 +01:00
Michael Clark
125510c981 🐛 Fix balance carryover arrow on Firefox (#3535)
* Update BalanceWithCarryover.tsx

* Create 3535.md
2024-10-02 15:55:01 +01:00
Matiss Janis Aboltins
327887b87d 🐛 (import) fix qfx import crash if input is malformed file (#3541)
Closes #3519
2024-10-02 11:35:07 +01:00
Matiss Janis Aboltins
47ef916873 🐛 (bank-sync) fix initial sync - close modal stack, show loading indicators (#3540) 2024-10-02 11:32:29 +01:00
Matt Fiddaman
5064b06f2c fix creating rule from transaction (#3539)
* fix creating rule from transaction

* note
2024-10-02 10:27:34 +01:00
Joel Jeremy Marquez
4df03984bd [e2e] Account page tests - wait for transaction table to be visible (#3530)
* Wait for transaction table to be visible

* Release notes
2024-09-30 15:25:44 -06:00
Joel Jeremy Marquez
92980ab55b Set theme-color at App level instead of per page (#3521)
* Set theme-color at App level instead of per page

* Release notes

* Fix lint error
2024-09-29 20:25:19 -07:00
Joel Jeremy Marquez
3b97d1eec7 [e2e stability] Check for data-theme before taking a screenshot (#3523)
* Check for data-theme before taking a screenshot

* Release notes

* Update playwright.config.js

* Fix error

* Updates VRT

* VRT

* Revert VRT

---------

Co-authored-by: youngcw <calebyoung94@gmail.com>
2024-09-29 09:00:54 -06:00
Julian Dominguez-Schatz
545c8d5456 Fix regression in case sensitivity for is/matches operator (#3399)
* Fix regression in case sensitivity for `is`/`matches` operators

* Add test

* Add release notes

* Fix failing tests

---------

Co-authored-by: youngcw <calebyoung94@gmail.com>
2024-09-28 12:38:42 -04:00
Ryan Bianchi
f79edf866a pass causes along in failed-to-load exceptions (#3525) 2024-09-28 17:01:42 +01:00
Yue Wu
83ea40dff9 fix: pushModal not dispatched in GoCardless linking (#3515)
* fix: pushModal not dispatched in GoCardless linking

* chore: add PR release note

---------

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
2024-09-28 16:26:50 +01:00
Matt Fiddaman
444ac83697 Fix electron build workflows for ubuntu-latest (#3526)
* add apt update to ubuntu-latest electron build workflows

* release note
2024-09-28 08:17:04 -07:00
youngcw
8f725c7911 Add goal info to the prewarm list (#3514)
* add goals to prewarm list

* add to tracking

* note

* note

* lint
2024-09-27 17:36:41 -07:00
Matiss Janis Aboltins
6725d56bb8 🧪 improving rules test e2e stability (#3512) 2024-09-27 08:03:42 +01:00
Matiss Janis Aboltins
666b7870b7 🧪 improve setting e2e test stability (#3513) 2024-09-27 08:03:25 +01:00
Henry Bley-Vroman
686ce5b504 Privacy mode: instead of blurring, use an illegible font (#3376) (#3377)
* 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
2024-09-26 22:31:01 -07:00
youngcw
4373f4d8f9 Ignore deleted categories when running templates (#3510)
* don't look at deleted categories

* note
2024-09-26 08:14:13 -07:00
Ryan Bianchi
479572fadb add disable option for ToBudgetAmount popover when displaying modal (#3509)
* add disable option for popover when displaying modal

* add release note
2024-09-26 07:06:47 -07:00
Joel Jeremy Marquez
6e627c4e2e Fix mobile balance modal colors (#3492)
* Fix mobile balance modal colors

* Release notes

* Update packages/desktop-client/src/components/budget/BalanceWithCarryover.tsx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Disable balance tooltip for mobile

* Fix lint error

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2024-09-25 21:02:42 -07:00
Ryan Bianchi
0f41e95952 Fix Issue 3331, sort favorite payees before other frequently used payees (#3412)
* add tests for payee dropdown bug on new transactions on all accounts page

* add tests for bugfixes

* sort favorite payees first, add tests for PayeeAutocomplete.getPayeeSuggestions

* lint and release notes

* fix release note number

* lint fixes

* add missing file in previous lint fix

* fix typecheck and linting errors

---------

Co-authored-by: youngcw <calebyoung94@gmail.com>
2024-09-25 15:40:07 -07:00
Tim
7e889300ef Add UncategorizedButton to mobile budget view (#3326) 2024-09-25 14:39:24 -07:00
Matiss Janis Aboltins
c497d3a941 🧪 improve onboarding e2e test stability (#3503) 2024-09-25 21:56:44 +01:00
Tim Quelch
fe17c6ba75 Forcibly reload app from server when API is redirected (#3286)
* 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>
2024-09-25 13:41:52 -07:00
Junyuan Zheng
3a9a929f56 Fix issue #3252 remove extra space from category name (#3495)
* Fix issue #3252 remove extra space from category name

* add md file

* rename
2024-09-25 13:35:37 -07:00
Koen van Staveren
88a7432975 fix: vrt:docker with git-bash (#3497)
* fix: vrt:docker with git-bash

* chore: release note
2024-09-25 20:56:32 +01:00
Jonathan Fang
373dfb0465 Update README.md to fix typo (#3501)
* Update README.md to fix typo

Typo "Actual budget" to "Actual Budget"

* Create 3501

* Rename 3501 to 3501.md

* Update 3501.md
2024-09-25 14:08:44 +01:00
Neil
80a7a9873a SpendingReport: Fixing some display issues (#3451)
* work

* notes

* merge fixes

* legenditem

* VRT fixes
2024-09-25 12:08:43 +01:00
Matiss Janis Aboltins
9c2bb9b3de 🧪 improving rules e2e test stability (#3498) 2024-09-24 21:07:15 +01:00
Joel Jeremy Marquez
2acf996430 Fix mobile page header buttons (#3491)
* Fix button2 styles

* Create 3491.md

* VRT

* Revert VRT

* Put pressed css on Page component

* Remove data-pressed

* Fix lint errors

* [chore] Update README

* Remove Icon
2024-09-24 13:02:49 -07:00
Matiss Janis Aboltins
f3451bfc2e (dashboards) ability to save filters & timeframes on spending widgets (#3432) 2024-09-24 08:03:04 +01:00
Matiss Janis Aboltins
48cdffbc03 🧪 (tests) adding custom report e2e tests (#3493) 2024-09-23 22:10:46 +01:00
Matiss Janis Aboltins
37d201b6fb 🐛 fix custom reports crashing when opening table (#3484) 2024-09-23 21:10:07 +01:00
Joel Jeremy Marquez
d1ecb3db44 Fix privacy filter (#3472)
* Fix privacy filter

* Release notes

* Coderabbit suggestion

* VRT

* VRT

* Revert VRT

* VRT

* VRT

* VRT

* VRT

* Delete VRT

* VRT

* Revert VRT
2024-09-23 10:22:05 -07:00
Tim
90e2fe60d1 fix modals on mobile BudgetTable (#3487) 2024-09-23 18:15:49 +01:00
Robert Dyer
09e3721036 Update tooltip and themes with better visibility (#3298)
* Update tooltip and themes with better visibility

* Rename merge request # into release notes

* rename release note

* update VRT

* tweak light theme

* dont put border on autocomplete menus

* update VRT

* tweak popover style

* simplify

* update VRT

* update VRT

---------

Co-authored-by: Dustin Conlon <dustin@dustinconlon.com>
Co-authored-by: Dustin Conlon <58367364+VoltaicGRiD@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
2024-09-22 13:01:30 -07:00
Matiss Janis Aboltins
6354598d48 🐛 (import) fix csv import checkboxes not working (#3478) 2024-09-22 20:30:59 +01:00
Matiss Janis Aboltins
55df377a20 ♻️ rename report/rollover budget to tracking/envelope (#3483) 2024-09-22 20:30:44 +01:00
Ryan Bianchi
634508a3bc update sql regexp to default to empty string when field is null (#3480) 2024-09-22 18:11:20 +01:00
Michael Clark
ec55e8dc9a :electron: Replace deprecated file protocol registration (#3475)
* replace deprecated file handler in electron

* release notes

* types eh

* types
2024-09-21 17:19:10 +01:00
Matiss Janis Aboltins
a1bc66b10a ♻️ (synced-prefs) separate metadata and local prefs out (#3458) 2024-09-20 20:01:51 +01:00
Matiss Janis Aboltins
4485a631cd Revert "CSV import e2e tests (#3467)" (#3474)
This reverts commit 5e12d4013a.
2024-09-20 19:48:10 +01:00
Matiss Janis Aboltins
25a4041958 🐛 (reports) deleting custom report should remove it from the dashboard (#3469) 2024-09-20 08:11:20 +01:00
Joel Jeremy Marquez
e6bf6da381 Undoable auto transfer notes + auto notes for cover (#3411)
* 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
2024-09-19 16:13:19 -07:00
Joel Jeremy Marquez
e507b8ff43 Fix React Aria Button hover styles (#3453)
* Fiox hover styles and use className instead of inline to prepare for future css migration

* Release notes

* Cleanup

* Update edit rule hover style
2024-09-19 16:12:57 -07:00
Koen van Staveren
5e12d4013a CSV import e2e tests (#3467) 2024-09-19 21:33:51 +01:00
Michael Clark
84af8b76be :electron: Remove some old updater code (#3468)
* remove some old updater code

* remove old updater logic
2024-09-19 09:16:50 +01:00
Joel Jeremy Marquez
b3669b3001 Fix reports form submit handlers (#3462)
* Fix form submit handlers

* Release notes
2024-09-18 06:29:06 -07:00
Joel Jeremy Marquez
6f41b20caf [Mobile] Fix #3214 - Pull down to refresh triggering clicks on budget cells (#3374)
* Fix #3214

* Fix rollover indicator

* VRT

* Fix typecheck error

* VRT

* Release notes

* VRT

* Update style

* Fix budgeted

* VRT

* VRT

* Revert VRT

* VRT

* Fix style

* Revert usePreviewTransactions

* Fix error
2024-09-18 06:28:37 -07:00
Joel Jeremy Marquez
37d391b4fc Do not allow renaming to an empty category or group name (#3463)
* Do not allow renaming to an emoty category or group name

* Release notes
2024-09-18 06:27:47 -07:00
Matiss Janis Aboltins
7702ee4f4f release simplefin as a first-party feature (#3459)
Closes #2272
2024-09-18 08:58:42 +01:00
Koen van Staveren
d0ba623cfa fix: csv import deduplication (#3456) 2024-09-18 08:56:54 +01:00
Matiss Janis Aboltins
ea675f11ee 🐛 (synced-prefs) fix bulk-reading not working in import modal (#3460) 2024-09-18 08:03:53 +01:00
Matt Fiddaman
17fd06894a update synced account balance in db if available (#3452) 2024-09-17 21:10:52 +01:00
Matiss Janis Aboltins
4e6a3bbace ♻️ (synced-prefs) move budget type to synced prefs (#3427) 2024-09-17 20:21:06 +01:00
Michael Clark
3743a328e3 :electron: Restart server silently when adding self signed cert and add some logs (#3431)
* 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
2024-09-17 08:59:33 +01:00
Matiss Janis Aboltins
6c87d85920 ♻️ (synced-prefs) moving the prefs from metadata.json to the db (#3423) 2024-09-17 07:59:26 +01:00
Joel Jeremy Marquez
5b685ecc64 [Maintenance] Cleanup react aria packages and dedupe (#3450)
* Cleanup react aria packages and dedupe

* Release notes
2024-09-16 13:07:52 -07:00
Michael Clark
ae01066fe2 :electron: Reduce package size (#3443)
* reduce package size of all packages

* release notes

* Update beforePackHook.ts
2024-09-16 19:12:25 +01:00
Matiss Janis Aboltins
fefd1be22c 🐛 fix account filters being overridden (#3441) 2024-09-16 18:52:55 +01:00
Joel Jeremy Marquez
bdbf6e9ca6 [Maintenance] Reduce budget table re-renders (#3448)
* Reduce budget table re-renders

* Release notes
2024-09-15 15:10:52 -07:00
Ali Gradina
c5193b6d43 Marked files for translation (#3430) 2024-09-14 21:41:10 +01:00
Matiss Janis Aboltins
183c4b25a9 (dashboards) ability to save cash-flow report filters/date-range (#3417) 2024-09-13 19:40:10 +01:00
Ali Gradina
933804e836 Translation for IncomeHeader, BalanceMenu & BudgetMenu .tsx (#3426) 2024-09-13 18:25:57 +01:00
NickFR
0a59f793bf Translation: desktop-client/src/components/budget/BalanceWithCarryover.tsx (#3352) 2024-09-13 18:07:00 +01:00
Ali Gradina
cfa9ac09d7 Translation for MonthCountSelector, index, SidebarCategory & SidebarGroup Component (#3363) 2024-09-12 20:13:31 +01:00
Joel Jeremy Marquez
420aad0878 Final PR for react-aria-components Modal migration (#3413)
* Final PR for react-aria-components Modal migration

* Complete manager modals migration

* Release notes

* fix lint

* Apps full height

* Fix lint error

* VRT

* Centralize providers

* Feedback
2024-09-11 11:42:11 -07:00
Neil
16944a6140 Spending Report: Header update (#3380)
* adjust header

* notes

* typecheck fixes

* fix bugs and UI changes

* fix error for invalid time

* change budget button wording

* fix some visual issues
2024-09-11 10:58:59 +01:00
Matiss Janis Aboltins
b2d7b65ce9 ♻️ (synced-prefs) moving budgetType pref back to MetadataPrefs (#3410)
* ♻️ (synced-prefs) moving budgetType pref back to MetadataPrefs (temporary)

* Release notes
2024-09-10 21:29:51 +01:00
Joel Jeremy Marquez
8c8c248ef7 [React Aria Button] Filter buttons (#3401)
* vrt

* Fix account menu test

* Fix payee icons and category notes

* vrt

* vrt

* Fix notes button

* VRT

* VRT

* React Aria Button - All except filters and autocomplete

* Fix typecheck errors

* Fix typecheck error

* Update

* Fix typecheck error

* Fix border

* VRT

* Revert MobileForms and TransactionEdit

* VRT

* VRT

* Revert VRT

* React Aria Button - Filter buttons

* Release notes

* Revert CoverModal and TransferModal
2024-09-10 13:09:32 -07:00
Michael Clark
6e8cdb30e8 :electron: Adding retries in to the file system writes (#3406)
* 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
2024-09-09 22:10:07 +01:00
Joel Jeremy Marquez
3985d2549e [React Aria Button] All remaining components except filters, mobile transaction edit, and autocomplete (#3163)
* vrt

* Fix account menu test

* Fix payee icons and category notes

* vrt

* vrt

* Fix notes button

* VRT

* VRT

* React Aria Button - All except filters and autocomplete

* Release notes

* Fix typecheck errors

* Fix typecheck error

* Fix button links

* Update

* Fix typecheck error

* Fix link button variant

* Fix typecheck error

* Fix typecheck error

* Fix typecheck error

* Fix border

* Fix mobile accounts page

* VRT

* Fix playwright config

* Revert MobileForms and TransactionEdit

* VRT

* Remove borderRadius

* Fix add account button

* VRT

* Revert VRT

* Fix tests

* Fix Cover and Transfer modals

* Fix lint error
2024-09-09 12:53:28 -07:00
Matiss Janis Aboltins
68a2af0248 (dashboards) ability to save net-worth widget details (#3364) 2024-09-09 20:38:33 +01:00
Matiss Janis Aboltins
7231959f81 ♻️ (synced-prefs) refactor ImportedTransactions usage of prefs (#3408) 2024-09-09 19:18:55 +01:00
Matiss Janis Aboltins
8498d7f788 ♻️ (synced-prefs) refactor number formatter away from redux (#3397) 2024-09-09 08:04:41 +01:00
Julian Dominguez-Schatz
d752389710 Update splash background to match theming (#3400)
* Update splash background to match theming

* Add release notes
2024-09-08 21:01:23 -04:00
Matiss Janis Aboltins
95ed7aaf27 ♻️ (synced-prefs) refactor some SyncedPrefs to string type (#3395) 2024-09-08 21:42:34 +01:00
Michael Clark
21dc573f3f 🔧 Prevent metadata.json update if the sync time value is the same (#3398)
* prevent metadata.json update if the sync time value is the same as the saved one

* release notes
2024-09-08 20:28:53 +01:00
Julian Dominguez-Schatz
cb0411b180 Convert RecurringSchedulePicker.jsx -> RecurringSchedulePicker.tsx (#3396)
* Supporting types

* Move `RecurringSchedulePicker.jsx` -> `RecurringSchedulePicker.tsx`

* Add release notes
2024-09-08 15:20:03 -04:00
Julian Dominguez-Schatz
62dbe3acf5 Refine Menu/Select types to allow broader types for the value/name attribute (#3391)
* Refine `Menu`/`Select` types to allow arbitrary value types

* Add release notes
2024-09-08 13:16:50 -04:00
Michael Clark
bbff543768 🔧 Remove unneeded console log (#3394)
* remove unneeded console log

* release notes
2024-09-08 16:32:25 +01:00
Michael Clark
008a8a78b9 🔧 Prevent sidebar from saving to metadata until resize is complete (#3393)
* prevent sidebar from saving to metadata until resize is complete

* add release notes
2024-09-08 12:49:03 +01:00
Tim
c466189007 set html theme-color to match the webmanifest (#3332) 2024-09-07 20:12:53 +01:00
Tim
b856c4874e add option to select dark theme for "System default" (#3325)
* add option to select dark theme for "System default"

* add release notes

* fix release notes

* update visual tests
2024-09-07 20:08:04 +01:00
Michael Clark
407e3143eb :electron: Prevent keyboard shortcuts modal when entering shortcut into editable field (#3389)
* check input element is focused on before triggering keyboard shortcuts modal

* release notes

* remove comment
2024-09-07 19:04:53 +01:00
Neil
ac90eb21a6 Report Header: fix validateStart bug (#3379)
* day to month

* notes
2024-09-07 07:17:38 +01:00
Joel Jeremy Marquez
61bffa3d31 Auto notes when transferring budgets (#3119)
* Add expense category budget notes that resets every month + auto notes when transferring budgets

* Remove unused import

* Release notes

* VRT

* Fix typecheck error

* Rename

* Fix typecheck error

* Fix category name

* Update to notes to reassigned

* Append auto transfer notes to month notes

* Update release notes

* VRT

* VRT

* Fix lint error
2024-09-05 18:59:13 -07:00
NickFR
fca1bccda3 [WIP] Translation: desktop-client/src/components/budget/BudgetTotals.tsx (#3367)
* i18 translation

* realease note

* translate 'arial-label' text

* translate 'text'

* fixing 'text' translation

* <Trans> component for HTML tag

* Lint

---------

Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
2024-09-05 19:00:53 -04:00
Tim
8e6fb4c64f enhance mobile header links (#3344)
* enhance mobile header links

- change underlinedText style to use borderBottom
- disable text selection

* update vrt
2024-09-05 21:22:32 +01:00
Joel Jeremy Marquez
5229fe7d16 [Mobile] Budget page actions undo notifications (#3085)
* Mobile transaction long press

* Fix typecheck error

* Use react-aria useLongPress

* Category transactions batch updates

* Remove undo notification title

* Fix types

* Fix notes undo notification

* Move SelectedProvider to TransactionListWithBalances

* Notification inset + reuse useTransactionBatchActions

* Allow clicking action bar when notifications are present

* VRT

* VRT

* VRT

* VRT

* Show undo notification on budget page when applying budget actions/goal templates

* Release notes

* Transfer and cover undo notification

* More budget actions undo
2024-09-05 09:42:41 -07:00
Matiss Janis Aboltins
bc04a8cbec ♻️ (typescript) migrate reconcile file to TS (#3355) 2024-09-04 20:15:27 +01:00
Koen van Staveren
0a34ede61a fix: typescript rschedule types (#3361)
* fix: typescript rschedule types

* chore: release note
2024-09-04 12:56:21 -04:00
Matt Fiddaman
8a4a9ba083 fix incorrect hook usage in #3277 (#3356)
* fix incorrect hook usage in #3277

* release note
2024-09-03 21:25:46 +01:00
Matiss Janis Aboltins
61f5dcfd02 (dashboards) text widget (#3288) 2024-09-03 20:42:33 +01:00
Matiss Janis Aboltins
5cfa2cf577 ♻️ (typescript) moving account component to TS (#3311) 2024-09-03 19:35:02 +01:00
Robert Dyer
3f8963273b Translation: desktop-client/components/schedules (#3313)
* Translation: desktop-client/components/schedules

* add release note

* better handling of plural

* clean plural use

* add review suggestions

* more review suggestions

* change to t() syntax

* use basic list format

* eslint no longer needs disabled

* Fix interpolation of payees list.

Co-authored-by: Julian Dominguez-Schatz <jfdoming@uwaterloo.ca>

* fix linter

* fix typecheck

* tighten the types

* move to hook

* memoize the hook

---------

Co-authored-by: Julian Dominguez-Schatz <jfdoming@uwaterloo.ca>
2024-09-03 19:23:15 +01:00
Matt Fiddaman
1aa65946c2 🌍 add translations for desktop-client/components/accounts (#3277)
* add translations for `desktop-client/components/accounts`

* release note

* fix lint

* fix quotes

* feedback

* Update 3277.md
2024-09-03 19:20:55 +01:00
Matiss Janis Aboltins
44375e72ad 🔖 (24.9.0) (#3348) 2024-09-03 18:02:45 +01:00
Michael Clark
6454c10e63 🐛 Fix tooltip when using touch devices (#3342)
* fix tooltip when using touch devices

* release notes
2024-09-02 17:23:22 +01:00
Matiss Janis Aboltins
2a9546ced1 🐛 fix reconciliation closing on enter click (#3338) 2024-09-01 20:08:19 +01:00
Matiss Janis Aboltins
8926ff69b1 🐛 fix long payee name overflow (#3340) 2024-09-01 18:26:57 +01:00
Matiss Janis Aboltins
340169bfb6 🐛 fix schedules modal closing when selecting link transactions (#3337) 2024-09-01 18:26:41 +01:00
Tim
3a905d3f9a [WIP] fix toggleSpentColumn being called on every render (#3333)
* fix toggleSpentColumn being called on every render

* release notes
2024-08-31 20:10:02 +01:00
Ryan Bianchi
7738ea0c00 Fix suggested payee issues #3317 #3316 (#3318) 2024-08-30 19:04:50 +01:00
Michael Clark
8e077e0282 :electron: Desktop app to work with self signed certificates (#3308)
* 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
2024-08-28 21:39:14 +01:00
Matiss Janis Aboltins
ae608f0cb8 🐛 (dashboards) add back spending report if dashboards feature is not enabled (#3323) 2024-08-28 21:02:47 +01:00
Matiss Janis Aboltins
f1c0d0b8a6 🐛 fix 's' hotkey not working in transaction table (#3324) 2024-08-28 20:21:24 +01:00
Matt Fiddaman
d9adb750d4 🧹 optimise GoCardless bank sync to use fewer api calls (#3279)
* optimise

* lint

* release note

* psybers feedback
2024-08-26 11:03:57 +01:00
lelemm
1750cd9081 Filter fix when alternating all <-> any (#3278) 2024-08-24 09:49:36 +01:00
lelemm
7769d0303e "has tags" filter (#3290)
* new tag filter

* fixes

* release notes

* fixes for the rules modal

* more fixes

* linter

* visual regression fixes

* review suggestions

* missing this change
2024-08-23 08:21:09 -07:00
Michael Clark
9108b63355 :electron: Notarize the mac desktop app (#3300)
* 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
2024-08-22 17:43:51 +01:00
Robert Dyer
1b70e59bde Apply regular expression conditions to imported transactions. (#3287) 2024-08-22 17:25:16 +01:00
Robert Dyer
b48d256ec4 Translation: desktop-client/components/sidebar (#3302) 2024-08-22 17:23:23 +01:00
Robert Dyer
9c0e6a307b Translation: desktop-client/components/reports/graphs (#3299) 2024-08-21 20:41:25 +01:00
Michael Clark
3e5ce72e27 :electron: Packaging different architectures and installers for windows (#3185)
* 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
2024-08-20 12:01:36 -07:00
Matiss Janis Aboltins
b347f03fbb (dashboards) ability to rename all widgets (#3284) 2024-08-20 17:25:18 +01:00
Matiss Janis Aboltins
f3660c166f ⬆️ upgrade typescript, eslint, prettier (#3289) 2024-08-20 17:18:54 +01:00
Robert Dyer
aaf96bbc2c Better debug logs for bank sync errors. (#3296)
* Better debug logs for bank sync errors.

* add release note

* force CI update
2024-08-20 07:44:35 -07:00
Crazypkr1099
6d84b0e371 Fix wrong month on spending card (#3295)
* Create 2881.md

* Fix spending card reading wrong month

* Revert "Create 2881.md"

This reverts commit de26f690e8.

* Create 3295.md
2024-08-20 07:38:01 -07:00
Matiss Janis Aboltins
db4b504e53 typescript: migrate cards from jsx to tsx (#3285) 2024-08-19 18:07:20 +01:00
Matiss Janis Aboltins
d6afc85a8c adding feedback links besides the feature flags (#3283) 2024-08-18 11:17:42 +01:00
Julian Dominguez-Schatz
ee21155d1a Display splits in previews (#2923)
* 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
2024-08-17 16:30:27 -04:00
Robert Dyer
65a7c58441 Translation: desktop-client/components/budget/report (#3280) 2024-08-17 18:33:03 +01:00
Matiss Janis Aboltins
51ec600de2 customizable reports homepage - drag-able and resizable widgets (#3231) 2024-08-17 17:53:35 +01:00
Robert Dyer
af5fd5b3ef Translation: desktop-client/components/autocomplete (#3275) 2024-08-17 11:44:37 +01:00
wdpk
eccdc52342 feat: [localization] Update README to mention weblate (#3271)
* weblate mention in readme

part of terms for libre plan

* Create 3271.md

* add link to internationalization section of documentation
2024-08-16 19:47:54 +01:00
Robert Dyer
4c192d7e1e Translation: desktop-client/components/filters (#3270)
* Translation: desktop-client/components/filters

* add release note

* fix linter

* add missing t definition
2024-08-16 13:35:57 +01:00
Matt Fiddaman
f715ceafc9 hide target category from cover overspending list (#3115)
* 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
2024-08-15 14:40:20 +01:00
Robert Dyer
af73dcd722 Add rule actions to prepend/append to transaction notes. (#3215)
* Add rule action to append to transaction notes.

* add release note

* support prepending

* fix linter

* update release note

* fix typecheck error

* update VRT test code

* revising VRT code

* select by row

* fix missing delete button

* fix VRT tests

* fix linter

* empty commit for CI

* avoid 'undefined' appearing in notes

* fix linter
2024-08-15 14:36:44 +01:00
Robert Dyer
5e3485a8e2 Automatically focus inputs, or the primary button, in modals. (#2974)
* 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
2024-08-15 14:36:09 +01:00
Julian Dominguez-Schatz
1458dbc307 Support type-checking on spreadsheet fields (part 3—last part) (#3097)
* Add report budget typing

* Remove default `any` types

* Add release notes

* Fix lint

* Attempt to fix unrelated test error

* fix: changed type name

* More correct types

* fix types
2024-08-15 08:32:41 -04:00
Stefan Wilkes
9ac77af077 Added configuration to CSV importer that allows to skip lines (#3234)
* 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>
2024-08-14 22:16:33 +01:00
Neil
3e07d18acd Update ModeButton.tsx (#3257)
* Update ModeButton.tsx

* Update upcoming-release-notes

* Update 3257.md

* Update ModeButton.tsx
2024-08-14 21:45:59 +01:00
Matiss Janis Aboltins
fa6cc26416 ♻️ cleanup iterableTopologicalSort feature flag (#3262) 2024-08-14 19:42:04 +01:00
Robert Dyer
a1ca871b24 Allow escaping tags with double ##. (#3246)
* Allow escaping tags with double ##.

* add release note

* convert '#' to '##' in bank sync-generated notes
2024-08-14 18:40:06 +01:00
Julian Dominguez-Schatz
d9066a49c4 Remove some any types from the API (#3238)
* 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
2024-08-14 13:28:09 -04:00
Julian Dominguez-Schatz
63ad6dadf2 fix(mobile): show category for on-to-off-budget transfers (#3258)
* fix(mobile): show category for on-to-off-budget transfers

* Add release notes
2024-08-14 13:27:34 -04:00
Michael Clark
89b096aa65 :electron: Fix export on mac (#3250)
* fix export on mac

* add release notes
2024-08-14 13:38:57 +01:00
Eirik Reksten
ee0156d35d 3211: Fix broken transaction import on new accounts (#3251)
* 3211: Added check for string before matching any object.

* Release notes for 3251.

* Fix release notes authors.
2024-08-14 10:13:07 +01:00
Alex Walker
9c17d55e0d Extract out note template logic from goaltemplates.ts, refactor and add unit tests (#3221)
Signed-off-by: Alex Walker <walker.c.alex@gmail.com>
2024-08-13 06:15:51 -07:00
Julian Dominguez-Schatz
411a6791b2 Fix transfer category in temporary transactions (#3239)
* Fix transfer category in temporary transactions

* Add visual regression tests to prevent this issue in the future

* Add release notes
2024-08-12 21:33:21 -04:00
Michael Clark
6f3af7b609 :electron: Fix "Unknown problem opening <local actual file>" on Electron (#3220)
* 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
2024-08-12 22:50:48 +01:00
Joel Jeremy Marquez
43ff1c033e [React Aria Button] Reports page buttons (#3159)
* More components to use react aria Button

* vrt

* Fix account menu test

* vrt

* vrt

* VRT

* VRT

* React Aria Button - Reports page

* Release notes

* Fix typecheck error

* Fix typecheck error + VRT (Create new custom report button got slightly bigger)

* Fix payee icon color
2024-08-12 13:53:58 -07:00
Joel Jeremy Marquez
09c44d351d [Mobile] Long press transaction to reveal floating action bar with bulk actions (#2892)
* Mobile transaction long press

* Floating action bar

* Styling

* Add functionality

* Fix typecheck error

* Release notes

* Undo notifications

* Fix schedules and update transaction delete confirmation message

* Use react-aria useLongPress

* Bulk edit amount display

* Themes

* Do not clear on batch update

* useUndo hook

* Fix typecheck error

* Update useUndo

* Fix typecheck error

* Handle batch deleted transactions

* useMemo

* Make onClearSelectedTransactions mandatory

* Extract FloatingActionBar to a separate component

* Require onAddSelectedTransaction and onClearSelectedTransactions if there are  any selectedTransactions

* Fix schedule link

* Undo notification timeout

* Use useSelected

* Fix typecheck error

* Category transactions batch updates

* Remove undo notification title

* Fix types

* Fix notes undo notification

* Move SelectedProvider to TransactionListWithBalances

* Remove NewPayeeEntity

* Disable support for amount batch edit for now

* Fix lint error

* Notification inset + reuse useTransactionBatchActions

* Always show notification close button regardless if sticky or not

* Allow clicking action bar when notifications are present

* Fix typecheck error

* Remove inset on addNotification calls

* Use PressResponder

* Fix mobile transaction border

* VRT

* VRT

* VRT

* VRT
2024-08-12 13:53:14 -07:00
Julian Wachholz
a22160579d fix: i18n: Use 'en' as default language (#3242)
* 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
2024-08-12 10:54:48 +01:00
Matiss Janis Aboltins
81df2ce7fd ♻️ (prefs) initial type implementation for synced/local/metadata prefs (#3236) 2024-08-12 08:12:14 +01:00
Jordan Lees
119d0b339d Fix off-by-one error when placing category into 2nd-to-last place (#3241)
* Fix off-by-one error when placing category into 2nd-to-last place

Signed-off-by: JL102 <jordanlees@mailbox.org>

* Add changelog file

Signed-off-by: JL102 <jordanlees@mailbox.org>

---------

Signed-off-by: JL102 <jordanlees@mailbox.org>
2024-08-11 22:49:17 -07:00
Julian Dominguez-Schatz
d1362c3d74 Correct type for to-budget field (#3237)
* Correct type for `to-budget` field

* Add release notes

* Don't enable `strictNullChecks` for now
2024-08-11 16:52:35 -04:00
Julian Wachholz
8142dd1ec9 feat: introduce i18n framework (#3036)
* feat: introduce i18n framework

* Incorporate review feedback

* Patch demo

* remove unnecessary arguments

* Consistently use t() function

* Fix typing issue

* Fix e2e tests

---------

Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
2024-08-11 15:37:33 -04:00
pmoon
2afd6967b4 Fix reconcileTransactions Invokation To Use strictIdChecking (#3232) 2024-08-11 18:37:20 +01:00
Robert Dyer
fe922ec22e Highlight current month in budgets. (#3111) 2024-08-10 20:00:46 +01:00
pmoon
30a70f5627 fix(#2562): Prevent transaction deduplication for imported transactions (#2991)
* 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>
2024-08-09 01:44:37 +01:00
Robert Dyer
65c5f2c559 Filter by account when linking schedules (#3188)
* 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
2024-08-08 13:16:19 -07:00
Michael Clark
1abca7619d :electron: Making Electron server logs visible in devtools (#3219)
* add electron logging to main browser process console

* add logging

* removing old way

* release notes
2024-08-08 20:45:57 +01:00
Michael Clark
6a85f84565 :electron: Fix gocardless "Linking account" integration (#3212)
* fix gocardless call - forked process didnt know its origin

* add release notes

* mamma mia

* remove old change
2024-08-07 20:33:23 +01:00
Julian Dominguez-Schatz
65329398fd Support type-checking on spreadsheet fields (part 2) (#3095)
* Add rollover budget typing

* Fix lint

* Add release notes

* Fix strict typechecking
2024-08-07 07:55:54 -04:00
Matiss Janis Aboltins
a2e434a1fb ♻️ (reports) improve useReports data fetching hook to return loading state (#3198) 2024-08-06 20:47:43 +01:00
Neil
d2bbe6a98e Spending Report: Mobile UI (#3209)
* SpendingMobile UI

* notes
2024-08-06 20:36:45 +01:00
Matiss Janis Aboltins
2c1967d788 ♻️ (reports) add 'showTooltip' prop to various graphs (#3200) 2024-08-06 20:31:35 +01:00
Spencer Murray
798aee78c3 Identify Payee and Notes fields by name if they exist in CSV import (#3203)
* 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
2024-08-06 15:41:48 +01:00
Matt Fiddaman
2807c98c2c fix "unkown" typo in error message (#3205) 2024-08-06 10:09:21 +01:00
Joel Jeremy Marquez
5e9b976676 [React Aria Button] - Migrate desktop and mobile budget page buttons (#3156)
* More components to use react aria Button

* Release notes

* vrt

* Fix typecheck error

* Fix account menu test

* Fix typecheck error

* Fix typecheck error

* Remove unnecessary aria-labels

* Fix payee icons and category notes

* vrt

* vrt

* Fix notes button

* Fix typecheck error

* Fix lint error

* VRT

* Remove default :focus on Button2

* Add Button2 defaultClassName

* Update className

* Fix typecheck error

* Cleanup

* VRT

* Fix typecheck error

* Fix typecheck error

* Fix typecheck error

* react-aria Button for budget pages

* Release notes
2024-08-05 20:45:30 -06:00
Joel Jeremy Marquez
44ce976ffa [React Aria Button] - Migrate sidebar, notifications, transactions, recurring schedule picker buttons (#2984)
* More components to use react aria Button

* Release notes

* vrt

* Fix typecheck error

* Fix account menu test

* Fix typecheck error

* Fix typecheck error

* Remove unnecessary aria-labels

* Fix payee icons and category notes

* vrt

* vrt

* Fix notes button

* Fix typecheck error

* Fix lint error

* VRT

* Remove default :focus on Button2

* Add Button2 defaultClassName

* Update className

* Fix typecheck error

* Cleanup

* VRT

* Fix typecheck error

* Fix typecheck error

* Fix typecheck error
2024-08-05 20:44:51 -06:00
Robert Dyer
5ba80fcbdc Fix mobile status indicators cutting off. (#3206) 2024-08-06 02:10:10 +01:00
Matt Fiddaman
7b77f60458 Adds a tooltip to the transaction tables to show the imported payee (#3018) 2024-08-05 20:24:49 +01:00
Alex Walker
81f59ff776 Add unit tests for goal template types (#3183)
* Add unit tests for each goal type

* Add test for goals schedule template

* Update release notes
2024-08-05 11:58:49 +01:00
Matiss Janis Aboltins
63d9547e7c ♻️ (reports) unify selectedCategories and conditions (#3178) 2024-08-04 20:09:54 +01:00
Neil
d18fd36ae1 Spending Report: UI Adjustments (#3166)
* adjust UI

* notes

* revert cashflow change

* merge fixes

* remove bold, adjust style code
2024-08-04 20:06:48 +01:00
rodriguestiago0
2b1ba88983 Add Reset Hold and Hold For Next Month api (#3140) 2024-08-04 19:56:11 +01:00
youngcw
8be867f884 Fix a few number parsing issues (#3044)
* revert built in number parse

* note

* tests

* remove trivial test

* more tests

---------

Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
2024-08-04 10:21:53 -07:00
Tim Quelch
cafe480ba4 Update monthly spending report option name (#3181)
* Update monthly spending report name

* Add change note

---------

Co-authored-by: DJ Mountney <david@twkie.net>
2024-08-03 11:33:22 -07:00
alcroito
6472c70960 Shorten hidden category names imported from YNAB4 (#3122)
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>
2024-08-03 11:18:33 -07:00
Sebastian Civarolo
56c5a533e7 Fix false positives for duplicate filters error when saving a new filter (#2970)
* update conditionExists function to compare filter options

* rename method

* array.some instead of for loop

* release note

* refactor the condition search
2024-08-03 11:09:25 -07:00
Matiss Janis Aboltins
7e3ff1ad03 (vrt) improving stability - rules test (#3186) 2024-08-03 19:06:48 +01:00
Julian Dominguez-Schatz
e0d7233b40 Support type-checking on spreadsheet fields (part 1) (#3093)
* Correct table usage of `onBlur`

* Add basic spreadsheet typing structure

* Move to different module

* Add account typing

* Add release notes

* Fix lint

* Remove unneeded diff

* PR feedback
2024-08-03 11:06:47 -04:00
Julian Dominguez-Schatz
1b4c4319e1 Disable typography linter in tests (#3114)
* Disable typography linter in tests

* Add release notes

* Remove unused type ignore
2024-08-03 11:05:30 -04:00
Matiss Janis Aboltins
14f29941b0 ♻️ (typescript) make category and rule types stricter (#3180) 2024-08-03 15:24:01 +01:00
Matiss Janis Aboltins
4389329bfa 🔖 (24.8.0) (#3179) 2024-08-03 14:30:33 +01:00
Matiss Janis Aboltins
3a38c32b4c 🐛 (modals) allow content to be vertically scrollable (#3161)
* 🐛 (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>
2024-08-02 19:16:32 +01:00
Yusef Ouda
c3c6acd37c Fix budget type toggle not working the first time (#3169)
* use default 'rollover' for budgetType localPref

* release notes

---------

Co-authored-by: Yusef Ouda <5180063+YusefOuda@users.noreply.github.com>
2024-08-01 17:59:04 +01:00
wnklmnn
8de0f6a72a Set minWidth on <input /> to allow it to shrink. (#3168)
* Set minWidth on <input /> to allow it to shrink.
Fixes #3126

* fix formatting

* add release-notes markdown
2024-07-31 18:31:49 -04:00
Neil
2799dbee3e Spending Report: Add Last Month (#3132)
* AddLastMonth

* notes

* Add data for last month a year ago

* Adjustments for save button

* spending card fix

* notes

* fix typecheck

* fix averages
2024-07-31 21:35:23 +01:00
Matt Fiddaman
58eeee825e add goal tooltip to balance in budget table (#3123)
* add goal tooltip to balance in budget table

* release note

* fix long goals over multiple months
2024-07-29 23:49:25 +01:00
Matiss Janis Aboltins
6653dca776 🐛 (modals) remove focus outline (#3160)
Closes #3141
2024-07-29 22:00:27 +01:00
Joel Jeremy Marquez
77ba15f54c Fix local playwright reporter config (#3158)
* Fix local playwright reporter config

* Release notes
2024-07-29 12:26:51 -07:00
Matiss Janis Aboltins
653a0ab104 🐛 (rules) fix error handling (#3149) 2024-07-29 18:35:49 +01:00
Joel Jeremy Marquez
2c26fa51a3 Add Modal2 backdrop (#3147)
* Add Modal2 backdrop

* Release notes

* VRT

* Use HTML reported when running tests locally
2024-07-29 00:41:44 -07:00
Michael Clark
dff9911a15 [Fix] "Enter" key should save on "Cover Overspending" popup (#3153)
* allow autocomplete events to fire when dropdown is closed

* release notes

* simpler solution

* release notes
2024-07-28 21:47:13 +01:00
Michael Clark
3d5818f017 :electron: Fix electron "Data Dir" picker on Settings page (#3133)
* fix electron file location picker

* add release notes

* update message and style
2024-07-28 21:32:20 +01:00
Matiss Janis Aboltins
efd294dcef 🐛 fix plain-text link in simplefin error (#3151) 2024-07-28 14:57:24 +01:00
Matiss Janis Aboltins
0eb62a09bc 🔧 improve unit test stability while using uuid (#3144) 2024-07-27 21:24:19 +01:00
Joel Jeremy Marquez
73d52fa0d0 Fix Button2 isDisabled prop (#3146)
* Fix Button2 isDisabled prop

* Release notes

* Update 3146.md
2024-07-27 13:06:15 -07:00
Matiss Janis Aboltins
5b0cc63f73 🐛 add missing underline to links (#3143)
* 🐛 add missing underline to links

* Update accounts screenshots
2024-07-27 16:44:14 +01:00
Matiss Janis Aboltins
26a591f07f 🐛 add missing hover cursor to new button component (#3142) 2024-07-27 16:41:59 +01:00
Robert Dyer
fe8851c797 Fix running balances thick header. (#3082)
* Update running balances width to display large numbers.

* add release note

* update width

* update width

* Fix running balances thick header.

* add release note

* fix alignment

* fix lint

* dont make header clickable

* refactor so HeaderCell can be unclickable
2024-07-26 12:07:10 -07:00
youngcw
511f677ae4 [Goals]: Add a long term goal template (#3012)
* 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
2024-07-26 09:04:44 -07:00
Joel Jeremy Marquez
1cef0d11ee Fix menus autoclosed when clicked element on top of the menu item (#3131)
* Fix menus autoclosed when clicked element on top of the menu item

* Release notes
2024-07-25 13:50:23 -07:00
Neil
536cabb75b Spending Report: card fix (#3135)
* spending card fix

* notes
2024-07-25 18:07:43 +01:00
Neil
cceda03905 Spending Report: add save button (#3112)
* add save button

* notes

* rerun checks

* add time

* tooltips

* change entity to string

* lint fix

* adjust defaults

* lint
2024-07-25 09:35:44 +01:00
Neil
982f555a21 Custom Reports: updateReport db Schema fix (#3127)
* updateReport db Schema fix

* notes

* error
2024-07-24 19:20:41 +01:00
Fran González
fe70ecb635 Fixes #3089: Dismiss pop-over on budget action (#3092)
* Fix no dismissal on budget action

* Add release notes file

* Correct tag

* Remove unnecessary callback

* Linting

* Apply same strategy on reportcomponents

* Rename to onMenuAction
2024-07-23 10:38:30 -07:00
Neil
5c0bee6031 Custom Reports: PlusOne (#3117)
* PlusOne

* notes

* add daterange filters
2024-07-22 19:02:21 +01:00
Bruno Ribeiro
4439bb6abe Enhance Autocomplete sorting, Payees tab filter, and Schedules tab filter to ignore characters with accents / diacritics (#3045)
* 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
2024-07-22 16:13:25 +01:00
Reece
b432204b4b modify fly.io url to point to correct documentation (#3113)
* modify fly.io url to point to correct documentation

* Create 3113.md
2024-07-21 15:27:13 -04:00
Matiss Janis Aboltins
9a85a72089 🔧 ping WIP PRs that have been inactive for a week (#3107)
* 🔧 ping WIP PRs that have been inactive for a week

* Bump the stale action version
2024-07-20 21:17:00 +01:00
Julian Dominguez-Schatz
a970a78932 Include more information in payee of split parent (#3049)
* 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)
2024-07-20 11:43:24 -07:00
Joel Jeremy Marquez
ed65805d53 Port finance modals to use new Modal component based on React Aria Modal (#2946)
* React Aria Modal POC

* Fix imports

* Use composition

* Fix typecheck and lint errors

* VRT

* Fix schedule details modal header

* Fix typecheck error + VRT

* Fix typecheck error

* Release notes

* Update release note

* Fix props

* Update modal props

* useModalState hook

* VRT

* VRT

* Fix typecheck error

* Fix modal close

* VRT

* Fix test

* Fix typecheck error
2024-07-20 09:03:58 -07:00
Matiss Janis Aboltins
88ae7e9375 📝 update some information in the README (#3106) 2024-07-20 17:03:25 +01:00
Matiss Janis Aboltins
0135a4d1b9 🔥 (preferences) remove unused user prefs (#3104) 2024-07-20 09:53:54 +01:00
Matiss Janis Aboltins
4af2c4f214 ⬆️ upgrade yarn to 4.3.1 (#3105) 2024-07-20 09:53:42 +01:00
Ryan Bianchi
89a8f102dc Recently used and favorite payees (#2814)
* 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>
2024-07-19 19:44:29 -06:00
Sreetam Das
d032fce7ea fix: number format config not being respected for graphs (#2832)
* 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
2024-07-18 13:02:01 -06:00
Joel Jeremy Marquez
2fdc7fef32 Add callouts to starting fresh and migration documentations in README (#3101)
* Add callouts to starting fresh and migration documentations

* README

* Update README
2024-07-18 09:24:21 -07:00
Michael Clark
1e41d695c5 :electron: Added keyboard shortcuts reference to Help menu (#3100)
* adding keyboard shortcuts reference to help menu

* add release notes
2024-07-18 09:13:50 -06:00
wdpk
12f91f7d86 update split transaction handling for csv export (#2973)
* 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>
2024-07-18 07:57:36 -07:00
Michael Clark
f75d0f8099 :electron: security.js and preload.js ➡️ .ts (#3066) 2024-07-17 22:31:09 +01:00
Robert Dyer
07bbe00059 Add additional hotkeys (#3061)
* Add account page hotkeys

* add release note

* fix linter

* change shortcut

* change hotkey

* fix lint

* add budget shortcuts

* update help page

* fix linter

* add privacy filter hotkey p

* update help modal

* fix deps

* slash the zero

* bound the month picker

* change privacy shortcut to ctrl+p

* remap keys to ctrl

* add select all hotkey

* fix linter

* change add hotkey to T

* update help modal

* resize help modal

* fix linter

* shrink modal size more

* change budget reset behavior

* change privacy to shift+ctrl+p

* move shift to front
2024-07-17 14:41:50 -06:00
Simon Schmidt
be0d363576 CAMT.053: Handle missing ValDt on entries with Sts Book (#3086)
* Replicate seen-in-the-wild camt.053 example

* Handle missing ValDt in camt

* Release notes for #3086
2024-07-17 14:41:06 -06:00
Joel Jeremy Marquez
c2e648c9d5 React Aria Button on Modals (#2918)
* React Aria Button on modals

* Release notes

* Remove tabIndex

* Remove aria-label
2024-07-17 13:38:41 -07:00
Joel Jeremy Marquez
33049a77e7 Fix rules not being applied in mobile transaction entry (#3073)
* Fix rules in mobile transaction entry

* Release notes

* Remove alert
2024-07-17 13:38:19 -07:00
Joel Jeremy Marquez
89241623f3 React Aria Button on Management App (#2916)
* React Aria Button on management app

* Release notes

* Update release notes

* Fix typecheck error

* Remove aria labels

* Apply suggestions from code review

Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>

* Remove aria-labels

* Remove aria-label

---------

Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
2024-07-17 12:20:12 -07:00
Robert Dyer
8434e8f5ce Fix "?" crashing on budget selection page. (#3084)
* Fix ? crashing on load budget page.

* add release note
2024-07-17 11:48:28 -06:00
Robert Dyer
9b99debacc Update running balances width to display large numbers. (#3080)
* Update running balances width to display large numbers.

* add release note

* update width

* update width
2024-07-17 10:20:22 -06:00
Austin Pearce
a23ec33591 Add autocapitalize (#3056) 2024-07-16 17:57:01 -07:00
Matiss Janis Aboltins
aaea04fc00 🔧 add lint-staged and husky to auto-patch formatting issues (#3058) 2024-07-16 19:10:57 +01:00
Austin Pearce
b4f0087eef increase mobile header label font weight (#3062) 2024-07-16 00:07:21 -07:00
746 changed files with 28598 additions and 18892 deletions

View File

@@ -14,6 +14,7 @@ packages/desktop-client/**/node_modules/*
packages/desktop-client/node_modules/
packages/desktop-client/src/icons/**/*
packages/desktop-client/test-results/
packages/desktop-client/playwright-report/
packages/desktop-electron/client-build/
packages/desktop-electron/dist/

View File

@@ -1,4 +1,3 @@
/* eslint-disable rulesdir/typography */
const path = require('path');
const rulesDirPlugin = require('eslint-plugin-rulesdir');
@@ -34,9 +33,23 @@ const restrictedImportColors = [
];
module.exports = {
plugins: ['prettier', 'import', 'rulesdir', '@typescript-eslint'],
root: true,
env: {
browser: true,
commonjs: true,
es6: true,
jest: true,
node: true,
},
plugins: [
'prettier',
'import',
'rulesdir',
'@typescript-eslint',
'jsx-a11y',
'react-hooks',
],
extends: [
'react-app',
'plugin:react/recommended',
'plugin:react/jsx-runtime',
'plugin:prettier/recommended',
@@ -51,6 +64,184 @@ module.exports = {
vi: true,
},
rules: {
// http://eslint.org/docs/rules/
'array-callback-return': 'warn',
'default-case': ['warn', { commentPattern: '^no default$' }],
'dot-location': ['warn', 'property'],
eqeqeq: ['warn', 'smart'],
'new-parens': 'warn',
'no-array-constructor': 'warn',
'no-caller': 'warn',
'no-cond-assign': ['warn', 'except-parens'],
'no-const-assign': 'warn',
'no-control-regex': 'warn',
'no-delete-var': 'warn',
'no-dupe-args': 'warn',
'no-dupe-class-members': 'warn',
'no-dupe-keys': 'warn',
'no-duplicate-case': 'warn',
'no-empty-character-class': 'warn',
'no-empty-pattern': 'warn',
'no-eval': 'warn',
'no-ex-assign': 'warn',
'no-extend-native': 'warn',
'no-extra-bind': 'warn',
'no-extra-label': 'warn',
'no-fallthrough': 'warn',
'no-func-assign': 'warn',
'no-implied-eval': 'warn',
'no-invalid-regexp': 'warn',
'no-iterator': 'warn',
'no-label-var': 'warn',
'no-labels': ['warn', { allowLoop: true, allowSwitch: false }],
'no-lone-blocks': 'warn',
'no-mixed-operators': [
'warn',
{
groups: [
['&', '|', '^', '~', '<<', '>>', '>>>'],
['==', '!=', '===', '!==', '>', '>=', '<', '<='],
['&&', '||'],
['in', 'instanceof'],
],
allowSamePrecedence: false,
},
],
'no-multi-str': 'warn',
'no-global-assign': 'warn',
'no-unsafe-negation': 'warn',
'no-new-func': 'warn',
'no-new-object': 'warn',
'no-new-symbol': 'warn',
'no-new-wrappers': 'warn',
'no-obj-calls': 'warn',
'no-octal': 'warn',
'no-octal-escape': 'warn',
'no-redeclare': 'warn',
'no-regex-spaces': 'warn',
'no-script-url': 'warn',
'no-self-assign': 'warn',
'no-self-compare': 'warn',
'no-sequences': 'warn',
'no-shadow-restricted-names': 'warn',
'no-sparse-arrays': 'warn',
'no-template-curly-in-string': 'warn',
'no-this-before-super': 'warn',
'no-throw-literal': 'warn',
'no-undef': 'error',
'no-unreachable': 'warn',
'no-unused-expressions': [
'error',
{
allowShortCircuit: true,
allowTernary: true,
allowTaggedTemplates: true,
},
],
'no-unused-labels': 'warn',
'no-use-before-define': [
'warn',
{
functions: false,
classes: false,
variables: false,
},
],
'no-useless-computed-key': 'warn',
'no-useless-concat': 'warn',
'no-useless-constructor': 'warn',
'no-useless-escape': 'warn',
'no-useless-rename': [
'warn',
{
ignoreDestructuring: false,
ignoreImport: false,
ignoreExport: false,
},
],
'no-with': 'warn',
'no-whitespace-before-property': 'warn',
'react-hooks/exhaustive-deps': 'warn',
'require-yield': 'warn',
'rest-spread-spacing': ['warn', 'never'],
strict: ['warn', 'never'],
'unicode-bom': ['warn', 'never'],
'use-isnan': 'warn',
'valid-typeof': 'warn',
'no-restricted-properties': [
'error',
{
object: 'require',
property: 'ensure',
message:
'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting',
},
{
object: 'System',
property: 'import',
message:
'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting',
},
],
'getter-return': 'warn',
// https://github.com/benmosher/eslint-plugin-import/tree/master/docs/rules
'import/first': 'error',
'import/no-amd': 'error',
'import/no-anonymous-default-export': 'warn',
'import/no-webpack-loader-syntax': 'error',
// https://github.com/yannickcr/eslint-plugin-react/tree/master/docs/rules
'react/forbid-foreign-prop-types': ['warn', { allowInPropTypes: true }],
'react/jsx-no-comment-textnodes': 'warn',
'react/jsx-no-duplicate-props': 'warn',
'react/jsx-no-target-blank': 'warn',
'react/jsx-no-undef': 'error',
'react/jsx-pascal-case': [
'warn',
{
allowAllCaps: true,
ignore: [],
},
],
'react/no-danger-with-children': 'warn',
// Disabled because of undesirable warnings
// See https://github.com/facebook/create-react-app/issues/5204 for
// blockers until its re-enabled
// 'react/no-deprecated': 'warn',
'react/no-direct-mutation-state': 'warn',
'react/no-is-mounted': 'warn',
'react/no-typos': 'error',
'react/require-render-return': 'error',
'react/style-prop-object': 'warn',
// https://github.com/evcohen/eslint-plugin-jsx-a11y/tree/master/docs/rules
'jsx-a11y/alt-text': 'warn',
'jsx-a11y/anchor-has-content': 'warn',
'jsx-a11y/anchor-is-valid': [
'warn',
{
aspects: ['noHref', 'invalidHref'],
},
],
'jsx-a11y/aria-activedescendant-has-tabindex': 'warn',
'jsx-a11y/aria-props': 'warn',
'jsx-a11y/aria-proptypes': 'warn',
'jsx-a11y/aria-role': ['warn', { ignoreNonDOM: true }],
'jsx-a11y/aria-unsupported-elements': 'warn',
'jsx-a11y/heading-has-content': 'warn',
'jsx-a11y/iframe-has-title': 'warn',
'jsx-a11y/img-redundant-alt': 'warn',
'jsx-a11y/no-access-key': 'warn',
'jsx-a11y/no-distracting-elements': 'warn',
'jsx-a11y/no-redundant-roles': 'warn',
'jsx-a11y/role-has-required-aria-props': 'warn',
'jsx-a11y/role-supports-aria-props': 'warn',
'jsx-a11y/scope': 'warn',
// https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks
'react-hooks/rules-of-hooks': 'error',
'prettier/prettier': 'warn',
// Note: base rule explicitly disabled in favor of the TS one
@@ -60,6 +251,7 @@ module.exports = {
{
varsIgnorePattern: '^(_|React)',
ignoreRestSiblings: true,
caughtErrors: 'none',
},
],
@@ -166,9 +358,63 @@ module.exports = {
'prefer-const': 'warn',
'prefer-spread': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-require-imports': 'off',
'import/no-default-export': 'warn',
},
overrides: [
{
files: ['**/*.ts?(x)'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
// typescript-eslint specific options
warnOnUnsupportedTypeScriptVersion: true,
},
plugins: ['@typescript-eslint'],
// If adding a typescript-eslint version of an existing ESLint rule,
// make sure to disable the ESLint rule here.
rules: {
// TypeScript's `noFallthroughCasesInSwitch` option is more robust (#6906)
'default-case': 'off',
// 'tsc' already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/291)
'no-dupe-class-members': 'off',
// 'tsc' already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/477)
'no-undef': 'off',
// Add TypeScript specific rules (and turn off ESLint equivalents)
'@typescript-eslint/consistent-type-assertions': 'warn',
'no-array-constructor': 'off',
'@typescript-eslint/no-array-constructor': 'warn',
'no-redeclare': 'off',
'@typescript-eslint/no-redeclare': 'warn',
'no-use-before-define': 'off',
'@typescript-eslint/no-use-before-define': [
'warn',
{
functions: false,
classes: false,
variables: false,
typedefs: false,
},
],
'no-unused-expressions': 'off',
'@typescript-eslint/no-unused-expressions': [
'error',
{
allowShortCircuit: true,
allowTernary: true,
allowTaggedTemplates: true,
},
],
'no-useless-constructor': 'off',
'@typescript-eslint/no-useless-constructor': 'warn',
},
},
{
files: ['.eslintrc.js', './**/.eslintrc.js'],
parserOptions: { project: null },
@@ -189,7 +435,7 @@ module.exports = {
'warn',
{ prefer: 'type-imports', fixStyle: 'inline-type-imports' },
],
'@typescript-eslint/ban-types': [
'@typescript-eslint/no-restricted-types': [
'warn',
{
types: {
@@ -197,7 +443,6 @@ module.exports = {
FunctionComponent: { message: ruleFCMsg },
FC: { message: ruleFCMsg },
},
extendDefaults: true,
},
],
},
@@ -281,8 +526,8 @@ module.exports = {
'./packages/desktop-client/src/components/budget/DynamicBudgetTable.tsx',
'./packages/desktop-client/src/components/budget/index.tsx',
'./packages/desktop-client/src/components/budget/MobileBudget.tsx',
'./packages/desktop-client/src/components/budget/rollover/HoldMenu.tsx',
'./packages/desktop-client/src/components/budget/rollover/TransferMenu.tsx',
'./packages/desktop-client/src/components/budget/envelope/HoldMenu.tsx',
'./packages/desktop-client/src/components/budget/envelope/TransferMenu.tsx',
'./packages/desktop-client/src/components/common/Menu.tsx',
'./packages/desktop-client/src/components/FinancesApp.tsx',
'./packages/desktop-client/src/components/GlobalKeys.ts',
@@ -332,8 +577,23 @@ module.exports = {
'react-hooks/exhaustive-deps': 'off',
},
},
{
files: [
'.eslintrc.js',
'*.test.js',
'*.test.ts',
'*.test.jsx',
'*.test.tsx',
],
rules: {
'rulesdir/typography': 'off',
},
},
],
settings: {
react: {
version: 'detect',
},
'import/resolver': {
typescript: {
alwaysTryTypes: true,

View File

@@ -40,6 +40,7 @@ jobs:
python3 -m pip install setuptools
- if: ${{ startsWith(matrix.os, 'ubuntu') }}
run: |
sudo apt-get update
sudo apt-get install flatpak -y
sudo apt-get install flatpak-builder -y
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
@@ -48,13 +49,17 @@ jobs:
sudo flatpak install org.electronjs.Electron2.BaseApp/x86_64/23.08 -y
- name: Set up environment
uses: ./.github/actions/setup
- name: Build Electron
- name: Build Electron for Mac
if: ${{ startsWith(matrix.os, 'macos') }}
run: ./bin/package-electron
env:
# CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
# CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
CSC_LINK: ${{ secrets.CSC_LINK }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
- name: Build Electron
if: ${{ ! startsWith(matrix.os, 'macos') }}
run: ./bin/package-electron
- name: Upload Build
uses: actions/upload-artifact@v4
with:
@@ -62,13 +67,22 @@ jobs:
path: |
packages/desktop-electron/dist/*.dmg
packages/desktop-electron/dist/*.exe
!packages/desktop-electron/dist/Actual-windows.exe
packages/desktop-electron/dist/*.AppImage
packages/desktop-electron/dist/*.flatpak
- name: Upload Windows Store Build
if: ${{ startsWith(matrix.os, 'windows') }}
uses: actions/upload-artifact@v4
with:
name: actual-electron-${{ matrix.os }}-appx
path: |
packages/desktop-electron/dist/*.appx
- name: Add to Release
uses: softprops/action-gh-release@v2
with:
files: |
packages/desktop-electron/dist/*.dmg
packages/desktop-electron/dist/*.exe
!packages/desktop-electron/dist/Actual-windows.exe
packages/desktop-electron/dist/*.AppImage
packages/desktop-electron/dist/*.flatpak

View File

@@ -35,6 +35,7 @@ jobs:
python3 -m pip install setuptools
- if: ${{ startsWith(matrix.os, 'ubuntu') }}
run: |
sudo apt-get update
sudo apt-get install flatpak -y
sudo apt-get install flatpak-builder -y
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
@@ -52,5 +53,13 @@ jobs:
path: |
packages/desktop-electron/dist/*.dmg
packages/desktop-electron/dist/*.exe
!packages/desktop-electron/dist/Actual-windows.exe
packages/desktop-electron/dist/*.AppImage
packages/desktop-electron/dist/*.flatpak
- name: Upload Windows Store Build
if: ${{ startsWith(matrix.os, 'windows') }}
uses: actions/upload-artifact@v4
with:
name: actual-electron-${{ matrix.os }}-appx
path: |
packages/desktop-electron/dist/*.appx

View File

@@ -7,10 +7,20 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v8
- uses: actions/stale@v9
with:
stale-pr-message: 'This PR is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
close-pr-message: 'This PR was closed because it has been stalled for 5 days with no activity.'
days-before-stale: 30
days-before-close: 5
days-before-issue-stale: -1
stale-wip:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-pr-message: ':wave: Hi! It looks like this PR has not had any changes for a week now. Would you like someone to review this PR? If so - please remove the "[WIP]" prefix from the PR title. That will let the community know that this PR is open for a review.'
days-before-stale: 7
any-of-labels: ':construction: WIP'
days-before-close: -1
days-before-issue-stale: -1

1
.husky/pre-commit Normal file
View File

@@ -0,0 +1 @@
yarn lint-staged

File diff suppressed because one or more lines are too long

894
.yarn/releases/yarn-4.3.1.cjs vendored Executable file

File diff suppressed because one or more lines are too long

View File

@@ -4,4 +4,4 @@ enableGlobalCache: false
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.0.2.cjs
yarnPath: .yarn/releases/yarn-4.3.1.cjs

View File

@@ -14,22 +14,40 @@ Want to say thanks? Click the ⭐ at the top of the page.
- Actual [discord](https://discord.gg/pRYNYr4W5A) community.
- Actual [Community Documentation](https://actualbudget.org/docs)
- [Frequently asked questions](https://actualbudget.org/docs/faq)
## Installation
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:
### The easy way: using a server (recommended)
1. One-click deployment [via PikaPods](https://www.pikapods.com/pods?run=actual) (~1.40 $/month) - recommended for non-technical users
1. Managed hosting [via Fly.io](https://actualbudget.org/docs/install/fly) (~1.50 $/month)
1. Self-hosted by using [a Docker image](https://actualbudget.org/docs/install/docker)
1. Local-only apps - [downloadable Windows, Mac and Linux apps](https://actualbudget.org/download/) you can run on your device
The easiest way to get Actual running is to use the [actual-server](https://github.com/actualbudget/actual-server) project. That is the server for syncing changes across devices, and it comes with the latest version of Actual. The server will provide both the web project and a server for syncing.
Learn more in the [installation instructions docs](https://actualbudget.org/docs/install/).
You can get up and running quickly and easily by following our [Running Actual Locally Guide](https://actualbudget.org/docs/install/local)
## Ready to Start Budgeting?
Read about [Envelope budgeting](https://actualbudget.org/docs/getting-started/envelope-budgeting) to know more about the idea behind Actual Budget.
### Are you new to budgeting or want to start fresh?
Check out the community's [Starting Fresh](https://actualbudget.org/docs/getting-started/starting-fresh) guide so you can quickly get up and running!
### Are you migrating from other budgeting apps?
Check out the community's [Migration](https://actualbudget.org/docs/migration/) guide to start jumping on the Actual Budget train!
## Documentation
We have a wide range of documentation on how to use Actual, this is all available in our [Community Documentation](https://actualbudget.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:
@@ -39,15 +57,23 @@ The Actual app is split up into a few packages:
More information on the project structure is available in our [community documentation](https://actualbudget.org/docs/contributing/project-details).
## Feature Requests
### 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).
## Repo Activity
![Alt](https://repobeats.axiom.co/api/embed/e20537dd8b74956f86736726ccfbc6f0565bec22.svg 'Repobeats analytics image')
## Sponsors
Thanks to our wonderful sponsors who make Actual budget possible!
Thanks to our wonderful sponsors who make Actual Budget possible!
<a href="https://www.netlify.com"> <img src="https://www.netlify.com/v3/img/components/netlify-color-accent.svg" alt="Deploys by Netlify" /> </a>

View File

@@ -34,8 +34,6 @@ if [ "$OSTYPE" == "msys" ]; then
fi
fi
yarn rebuild-electron
yarn workspace loot-core build:node
yarn workspace @actual-app/web build --mode=desktop
@@ -50,10 +48,10 @@ yarn workspace desktop-electron update-client
if [ -f ../../.secret-tokens ]; then
source ../../.secret-tokens
fi
yarn build --publish never --arm64 --x64
yarn build
echo "\nCreated release"
else
SKIP_NOTARIZATION=true yarn build --publish never --x64
SKIP_NOTARIZATION=true yarn build
fi
)

View File

@@ -28,5 +28,5 @@ echo "Running VRT tests with the following parameters:"
echo "E2E_START_URL: $E2E_START_URL"
echo "VRT_ARGS: $VRT_ARGS"
docker run --rm --network host -v "$(pwd)":/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.41.1-jammy /bin/bash \
MSYS_NO_PATHCONV=1 docker run --rm --network host -v "$(pwd)":/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.41.1-jammy /bin/bash \
-c "E2E_START_URL=$E2E_START_URL yarn vrt $VRT_ARGS"

View File

@@ -30,6 +30,7 @@
"build:browser": "./bin/package-browser",
"build:desktop": "./bin/package-electron",
"build:api": "yarn workspace @actual-app/api build",
"generate:i18n": "yarn workspace @actual-app/web generate:i18n",
"test": "yarn workspaces foreach --all --parallel --verbose run test",
"test:debug": "yarn workspaces foreach --all --verbose run test",
"e2e": "yarn workspaces foreach --all --parallel --verbose run e2e",
@@ -40,24 +41,31 @@
"lint": "eslint . --max-warnings 0 --ext .js,.jsx,.ts,.tsx",
"lint:verbose": "DEBUG=eslint:cli-engine eslint . --max-warnings 0",
"typecheck": "yarn tsc && tsc-strict",
"jq": "./node_modules/node-jq/bin/jq"
"jq": "./node_modules/node-jq/bin/jq",
"prepare": "husky"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^8.1.0",
"@typescript-eslint/parser": "^8.1.0",
"confusing-browser-globals": "^1.0.11",
"cross-env": "^7.0.3",
"eslint": "^8.37.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-react-app": "7.0.1",
"eslint-import-resolver-typescript": "3.5.5",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-prettier": "5.1.3",
"eslint-plugin-react": "7.32.2",
"eslint-import-resolver-typescript": "3.6.1",
"eslint-plugin-import": "2.29.1",
"eslint-plugin-jsx-a11y": "^6.9.0",
"eslint-plugin-prettier": "5.2.1",
"eslint-plugin-react": "7.35.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-rulesdir": "^0.2.2",
"husky": "^9.0.11",
"lint-staged": "^15.2.9",
"node-jq": "^4.0.1",
"npm-run-all": "^4.1.5",
"prettier": "3.2.4",
"prettier": "3.3.3",
"source-map-support": "^0.5.21",
"typescript": "^5.0.2",
"typescript-strict-plugin": "^2.2.2-beta.2"
"typescript": "^5.5.4",
"typescript-strict-plugin": "^2.4.4"
},
"resolutions": {
"rollup": "4.9.4"
@@ -65,7 +73,10 @@
"engines": {
"node": ">=18.0.0"
},
"packageManager": "yarn@4.0.2",
"lint-staged": {
"*.{js,jsx,ts,tsx,md,json}": "prettier --write"
},
"packageManager": "yarn@4.3.1",
"browserslist": [
"electron 24.0",
"defaults"

View File

@@ -81,28 +81,22 @@ describe('API CRUD operations', () => {
expect(groups).toEqual(
expect.arrayContaining([
expect.objectContaining({
hidden: 0,
hidden: false,
id: 'fc3825fd-b982-4b72-b768-5b30844cf832',
is_income: 0,
is_income: false,
name: 'Usual Expenses',
sort_order: 16384,
tombstone: 0,
}),
expect.objectContaining({
hidden: 0,
hidden: false,
id: 'a137772f-cf2f-4089-9432-822d2ddc1466',
is_income: 0,
is_income: false,
name: 'Investments and Savings',
sort_order: 32768,
tombstone: 0,
}),
expect.objectContaining({
hidden: 0,
hidden: false,
id: '2E1F5BDB-209B-43F9-AF2C-3CE28E380C00',
is_income: 1,
is_income: true,
name: 'Income',
sort_order: 32768,
tombstone: 0,
}),
]),
);
@@ -563,10 +557,10 @@ describe('API CRUD operations', () => {
);
// delete rules
await api.deleteRule(rules[1]);
await api.deleteRule(rules[1].id);
expect(await api.getRules()).toHaveLength(1);
await api.deleteRule(rules[0]);
await api.deleteRule(rules[0].id);
expect(await api.getRules()).toHaveLength(0);
});

View File

@@ -165,6 +165,10 @@ export function deleteCategory(id, transferCategoryId?) {
return send('api/category-delete', { id, transferCategoryId });
}
export function getCommonPayees() {
return send('api/common-payees-get');
}
export function getPayees() {
return send('api/payees-get');
}
@@ -201,6 +205,14 @@ export function updateRule(rule) {
return send('api/rule-update', { rule });
}
export function deleteRule(id) {
return send('api/rule-delete', { id });
export function deleteRule(id: string) {
return send('api/rule-delete', id);
}
export function holdBudgetForNextMonth(month, amount) {
return send('api/budget-hold-for-next-month', { month, amount });
}
export function resetBudgetHold(month) {
return send('api/budget-reset-hold', { month });
}

View File

@@ -1,6 +1,6 @@
{
"name": "@actual-app/api",
"version": "6.8.2",
"version": "24.10.0",
"license": "MIT",
"description": "An API for Actual",
"engines": {
@@ -35,6 +35,6 @@
"@types/uuid": "^9.0.2",
"jest": "^27.5.1",
"tsc-alias": "^1.8.8",
"typescript": "^5.0.2"
"typescript": "^5.5.4"
}
}

View File

@@ -26,6 +26,6 @@
"@types/uuid": "^9.0.2",
"jest": "^27.5.1",
"ts-protoc-gen": "^0.15.0",
"typescript": "^5.0.2"
"typescript": "^5.5.4"
}
}

View File

@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import * as merkle from './merkle';
import { Timestamp } from './timestamp';

View File

@@ -134,6 +134,7 @@ export function diff(trie1: TrieNode, trie2: TrieNode): number | null {
node2 = node2[diffkey] || emptyTrie();
}
// eslint-disable-next-line no-unreachable
return null;
}

View File

@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { Timestamp } from './timestamp';
describe('Timestamp', function () {

View File

@@ -154,7 +154,7 @@ export class Timestamp {
/**
* maximum timestamp
*/
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
static max = Timestamp.parse(
'9999-12-31T23:59:59.999Z-FFFF-FFFFFFFFFFFFFFFF',
)!;
@@ -294,7 +294,7 @@ export class Timestamp {
/**
* zero/minimum timestamp
*/
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
static zero = Timestamp.parse(
'1970-01-01T00:00:00.000Z-0000-0000000000000000',
)!;

View File

@@ -6,6 +6,7 @@ node_modules
# testing
coverage
test-results
playwright-report
# production
build

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -93,7 +93,9 @@ test.describe('Onboarding', () => {
test('navigates back to start page by clicking on “no server” in an empty budget file', async () => {
await configurationPage.clickOnNoServer();
await configurationPage.startFresh();
const accountPage = await configurationPage.startFresh();
await expect(accountPage.transactionTable).toBeVisible();
await navigation.clickOnNoServer();
await page.getByRole('button', { name: 'Start using a server' }).click();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 503 KiB

After

Width:  |  Height:  |  Size: 494 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 KiB

After

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 KiB

After

Width:  |  Height:  |  Size: 564 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 567 KiB

After

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 KiB

After

Width:  |  Height:  |  Size: 638 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 635 KiB

After

Width:  |  Height:  |  Size: 634 KiB

View File

@@ -16,8 +16,8 @@ export class AccountPage {
this.cancelTransactionButton = this.page.getByRole('button', {
name: 'Cancel',
});
this.menuButton = this.page.getByRole('button', {
name: 'Menu',
this.accountMenuButton = this.page.getByRole('button', {
name: 'Account menu',
});
this.transactionTable = this.page.getByTestId('transaction-table');
@@ -30,16 +30,28 @@ export class AccountPage {
this.selectTooltip = this.page.getByTestId('transactions-select-tooltip');
}
/**
* Enter details of a transaction
*/
async enterSingleTransaction(transaction) {
await this.addNewTransactionButton.click();
await this._fillTransactionFields(this.newTransactionRow, transaction);
}
/**
* Finish adding a transaction
*/
async addEnteredTransaction() {
await this.addTransactionButton.click();
await this.cancelTransactionButton.click();
}
/**
* Create a single transaction
*/
async createSingleTransaction(transaction) {
await this.addNewTransactionButton.click();
await this._fillTransactionFields(this.newTransactionRow, transaction);
await this.addTransactionButton.click();
await this.cancelTransactionButton.click();
await this.enterSingleTransaction(transaction);
await this.addEnteredTransaction();
}
/**
@@ -82,6 +94,15 @@ export class AccountPage {
*/
getNthTransaction(index) {
const row = this.transactionTableRow.nth(index);
return this._getTransactionDetails(row);
}
getEnteredTransaction() {
return this._getTransactionDetails(this.newTransactionRow);
}
_getTransactionDetails(row) {
const account = row.getByTestId('account');
return {
@@ -103,10 +124,10 @@ export class AccountPage {
* Open the modal for closing the account.
*/
async clickCloseAccount() {
await this.menuButton.click();
await this.accountMenuButton.click();
await this.page.getByRole('button', { name: 'Close Account' }).click();
return new CloseAccountModal(
this.page.locator('css=[aria-modal]'),
this.page.getByTestId('close-account-modal'),
this.page,
);
}

View File

@@ -1,3 +1,4 @@
import { AccountPage } from './account-page';
import { BudgetPage } from './budget-page';
export class ConfigurationPage {
@@ -18,6 +19,8 @@ export class ConfigurationPage {
async startFresh() {
await this.page.getByRole('button', { name: 'Start fresh' }).click();
return new AccountPage(this.page);
}
async importBudget(type, file) {

View File

@@ -0,0 +1,33 @@
export class CustomReportPage {
constructor(page) {
this.page = page;
this.pageContent = page.getByTestId('reports-page');
this.showLegendButton = this.pageContent.getByRole('button', {
name: 'Show Legend',
});
this.showSummaryButton = this.pageContent.getByRole('button', {
name: 'Show Summary',
});
this.showLabelsButton = this.pageContent.getByRole('button', {
name: 'Show Labels',
});
}
async selectViz(vizName) {
await this.pageContent.getByRole('button', { name: vizName }).click();
}
async selectMode(mode) {
switch (mode) {
case 'total':
await this.pageContent.getByRole('button', { name: 'Total' }).click();
break;
case 'time':
await this.pageContent.getByRole('button', { name: 'Time' }).click();
break;
default:
throw new Error(`Unrecognized mode: ${mode}`);
}
}
}

View File

@@ -23,7 +23,7 @@ export class MobileAccountsPage {
* Click on the n-th account to open it up
*/
async openNthAccount(idx) {
await this.accounts.nth(idx).getByRole('button').click();
await this.accounts.nth(idx).click();
return new MobileAccountPage(this.page);
}

View File

@@ -1,3 +1,5 @@
import { CustomReportPage } from './custom-report-page';
export class ReportsPage {
constructor(page) {
this.page = page;
@@ -5,22 +7,29 @@ export class ReportsPage {
}
async waitToLoad() {
return this.pageContent.getByRole('link', { name: /^Net/ }).waitFor();
return this.pageContent.getByRole('button', { name: /^Net/ }).waitFor();
}
async goToNetWorthPage() {
await this.pageContent.getByRole('link', { name: /^Net/ }).click();
await this.pageContent.getByRole('button', { name: /^Net/ }).click();
return new ReportsPage(this.page);
}
async goToCashFlowPage() {
await this.pageContent.getByRole('link', { name: /^Cash/ }).click();
await this.pageContent.getByRole('button', { name: /^Cash/ }).click();
return new ReportsPage(this.page);
}
async goToCustomReportPage() {
await this.pageContent
.getByRole('button', { name: 'Create new custom report' })
.click();
return new CustomReportPage(this.page);
}
async getAvailableReportList() {
return this.pageContent
.getByRole('link')
.getByRole('button')
.getByRole('heading')
.allTextContents();
}

View File

@@ -52,6 +52,7 @@ export class RulesPage {
await this._fillEditorFields(
data.conditions,
this.page.getByTestId('condition-list'),
true,
);
}
@@ -63,28 +64,19 @@ export class RulesPage {
}
if (data.splits) {
if (data.splits.beforeSplitActions) {
let idx = data.actions?.length ?? 0;
for (const splitActions of data.splits) {
await this.page.getByTestId('add-split-transactions').click();
await this._fillEditorFields(
data.splits.beforeSplitActions,
this.page.getByTestId('action-list'),
splitActions,
this.page.getByTestId('action-list').nth(idx),
);
}
if (data.splits.splitActions) {
let idx = data.splits?.beforeSplitActions.length ?? 0;
for (const splitActions of data.splits.splitActions) {
await this.page.getByTestId('add-split-transactions').click();
await this._fillEditorFields(
splitActions,
this.page.getByTestId('action-list').nth(idx),
);
idx++;
}
idx++;
}
}
}
async _fillEditorFields(data, rootElement) {
async _fillEditorFields(data, rootElement, fieldFirst = false) {
for (const idx in data) {
const { field, op, value } = data[idx];
@@ -94,15 +86,24 @@ export class RulesPage {
await rootElement.getByRole('button', { name: 'Add entry' }).click();
}
if (op && !fieldFirst) {
await row.getByTestId('op-select').getByRole('button').first().click();
await this.page.getByRole('button', { name: op, exact: true }).click();
}
if (field) {
await row.getByRole('button').first().click();
await row
.getByTestId('field-select')
.getByRole('button')
.first()
.click();
await this.page
.getByRole('button', { exact: true, name: field })
.getByRole('button', { name: field, exact: true })
.click();
}
if (op) {
await row.getByRole('button', { name: 'is' }).click();
if (op && fieldFirst) {
await row.getByTestId('op-select').getByRole('button').first().click();
await this.page.getByRole('button', { name: op, exact: true }).click();
}

View File

@@ -3,7 +3,7 @@ import { test, expect } from '@playwright/test';
import { ConfigurationPage } from './page-models/configuration-page';
import { Navigation } from './page-models/navigation';
test.describe('Reports', () => {
test.describe.parallel('Reports', () => {
let page;
let navigation;
let reportsPage;
@@ -43,4 +43,66 @@ test.describe('Reports', () => {
await reportsPage.goToCashFlowPage();
await expect(page).toMatchThemeScreenshots();
});
test.describe.parallel('custom reports', () => {
let customReportPage;
test.beforeEach(async () => {
customReportPage = await reportsPage.goToCustomReportPage();
});
test('Switches to Data Table and checks the visuals', async () => {
await customReportPage.selectMode('time');
await customReportPage.selectViz('Data Table');
await expect(page).toMatchThemeScreenshots();
});
test('Switches to Bar Graph and checks the visuals', async () => {
await customReportPage.selectMode('time');
await customReportPage.selectViz('Bar Graph');
await expect(page).toMatchThemeScreenshots();
});
test('Switches to Line Graph and checks the visuals', async () => {
await customReportPage.selectMode('time');
await customReportPage.selectViz('Line Graph');
await expect(page).toMatchThemeScreenshots();
});
test('Switches to Area Graph and checks the visuals', async () => {
await customReportPage.selectMode('total');
await customReportPage.selectViz('Area Graph');
await expect(page).toMatchThemeScreenshots();
});
test('Switches to Donut Graph and checks the visuals', async () => {
await customReportPage.selectMode('total');
await customReportPage.selectViz('Donut Graph');
await expect(page).toMatchThemeScreenshots();
});
test('Validates that "show legend" button shows the legend side-bar', async () => {
await customReportPage.selectViz('Bar Graph');
await customReportPage.showLegendButton.click();
await expect(page).toMatchThemeScreenshots();
await customReportPage.showLegendButton.click();
});
test('Validates that "show summary" button shows the summary', async () => {
await customReportPage.selectViz('Bar Graph');
await customReportPage.showSummaryButton.click();
await expect(page).toMatchThemeScreenshots();
await customReportPage.showSummaryButton.click();
});
test('Validates that "show labels" button shows the labels', async () => {
await customReportPage.selectViz('Bar Graph');
await customReportPage.showLabelsButton.click();
await expect(page).toMatchThemeScreenshots();
await customReportPage.showLabelsButton.click();
});
});
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -32,6 +32,7 @@ test.describe('Rules', () => {
});
test('creates a rule and makes sure it is applied when creating a transaction', async () => {
await rulesPage.searchFor('Fast Internet');
await rulesPage.createRule({
conditions: [
{
@@ -48,7 +49,6 @@ test.describe('Rules', () => {
],
});
await rulesPage.searchFor('Fast Internet');
const rule = rulesPage.getNthRule(0);
await expect(rule.conditions).toHaveText(['payee is Fast Internet']);
await expect(rule.actions).toHaveText(['set category to General']);
@@ -79,35 +79,34 @@ test.describe('Rules', () => {
value: 'Ikea',
},
],
splits: {
beforeSplitActions: [
actions: [
{
op: 'set',
field: 'notes',
value: 'food / entertainment',
},
],
splits: [
[
{
field: 'notes',
value: 'food / entertainment',
field: 'a fixed percent of the remainder',
value: '90',
},
{
field: 'category',
value: 'Entertainment',
},
],
splitActions: [
[
{
field: 'a fixed percent of the remainder',
value: '90',
},
{
field: 'category',
value: 'Entertainment',
},
],
[
{
field: 'an equal portion of the remainder',
},
{
field: 'category',
value: 'Food',
},
],
[
{
field: 'an equal portion of the remainder',
},
{
field: 'category',
value: 'Food',
},
],
},
],
});
const accountPage = await navigation.goToAccountPage(
@@ -120,7 +119,7 @@ test.describe('Rules', () => {
});
const transaction = accountPage.getNthTransaction(0);
await expect(transaction.payee).toHaveText('Split');
await expect(transaction.payee).toHaveText('Ikea');
await expect(transaction.notes).toHaveText('food / entertainment');
await expect(transaction.category).toHaveText('Split');
await expect(transaction.debit).toHaveText('100.00');

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Some files were not shown because too many files have changed in this diff Show More