Compare commits

...

65 Commits

Author SHA1 Message Date
Joel Jeremy Marquez
2a27fffc7a Add types to QueryState 2024-10-13 19:46:37 -07:00
youngcw
c25e97b0f6 [Goals] Add copy template (#3617)
* add copy template

* note, lint

* note
2024-10-17 09:28:09 -07:00
Samuel Barnes
e775306f81 [WIP] Add info text to Upcoming Length control (#3639)
* added info circle and box on click

* hover working

* moved title

* release notes

* updated release notes category

* split info bubble into its own component

* text longer than 500px will be split

* extracted text width into its own file

* wip tests

* wip testing

* removed separate method and tests

* added textWidth option to Info Bubble

* updated shadow
2024-10-17 09:27:49 -07:00
scojo
02824ad240 recalculateSplit one last time to clear any erroneous errors (#3624) 2024-10-15 13:58:52 -07:00
Greggory Rothmeier
1a13e98f49 Explicitly disable 1Password on table inputs (#3674)
* Explicitly disable 1Password on table inputs

* Add release notes

* Update packages/desktop-client/src/components/autocomplete/Autocomplete.tsx

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>

---------

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
2024-10-15 13:48:43 -07:00
Koen van Staveren
3d9e90f797 feat: templating on payee_name (#3619)
* feat: templating on payee_name

* chore: release note

* fix: create test budget

* fix: transaction-rules tests

* fix: transaction-rules tests
2024-10-15 12:22:25 -07:00
Greg Lorenzen
b253246fe2 Translation: desktop-client/components/payees/ManagePayees (#3623)
* Translation: desktop-client/components/payees/ManagePayees

* Move react-i18next import before memoize-one

* Add release notes

* Add prettier formatting

* Fix eslint import/order warning

* Add translation support for "No payees" text
2024-10-14 22:20:27 +01:00
Julian Dominguez-Schatz
778fc713f3 Move help-related items under one single menu (#3648)
* Remove previous help-related elements

* Add new 'Help' menu with multiple options

* Fix alignment of popovers

* Better types

* Add release notes

* PR feedback

* Update vrt
2024-10-14 12:25:04 -04:00
Tim
e0f0d8e241 make BudgetTable Budgeted value positive on mobile (#3602)
* make BudgetTable Budgeted value positive on mobile

To match the desktop behaviour.

* add release notes

* update vrt snapshots

* fix tracking budget
2024-10-13 20:05:28 -07:00
Joel Jeremy Marquez
310d299ebd Use a toggle on mobile transaction's Cleared flag (#3622)
* Use a toggle on mobile transaction's Cleared flag

* Release notes

* Cleanup

* VRT

* Cleanup

* Remove glamor import

* Update light theme toggle color
2024-10-13 15:44:22 -07:00
Dreptschar
130f357bab Translation: desktop-client/src/components/common/search.tsx (#3659)
* Translation: desktop-client/src/components/common/search.tsx

* add release note

---------

Co-authored-by: dreptschar <dreptschar@gmail.com>
2024-10-13 20:00:27 +01:00
dependabot[bot]
f89817170a Bump word-wrap from 1.2.3 to 1.2.5 (#3657)
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.5.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.5)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 21:11:09 -04:00
dependabot[bot]
ec37b39e34 Bump micromatch from 4.0.7 to 4.0.8 (#3655)
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.7 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.7...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 20:45:23 -04:00
dependabot[bot]
23f75a6b6a Bump tough-cookie from 4.1.2 to 4.1.4 (#3654)
Bumps [tough-cookie](https://github.com/salesforce/tough-cookie) from 4.1.2 to 4.1.4.
- [Release notes](https://github.com/salesforce/tough-cookie/releases)
- [Changelog](https://github.com/salesforce/tough-cookie/blob/master/CHANGELOG.md)
- [Commits](https://github.com/salesforce/tough-cookie/compare/v4.1.2...v4.1.4)

---
updated-dependencies:
- dependency-name: tough-cookie
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 20:33:27 -04:00
dependabot[bot]
f206ba2f0f Bump tar from 6.2.0 to 6.2.1 (#3653)
Bumps [tar](https://github.com/isaacs/node-tar) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.2.0...v6.2.1)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 20:32:18 -04:00
dependabot[bot]
bd5c0cb981 Bump webpack from 5.90.0 to 5.95.0 (#3652)
Bumps [webpack](https://github.com/webpack/webpack) from 5.90.0 to 5.95.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.90.0...v5.95.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 20:13:07 -04:00
dependabot[bot]
3635c8c88a Bump webpack from 5.90.0 to 5.94.0 (#3649)
Bumps [webpack](https://github.com/webpack/webpack) from 5.90.0 to 5.94.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.90.0...v5.94.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 20:01:48 -04:00
dependabot[bot]
5cb97d6f2f Bump vite from 5.2.11 to 5.4.8 (#3647)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.2.11 to 5.4.8.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.8/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.8/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 19:03:26 -04:00
Julian Dominguez-Schatz
e8af5b9014 Bump yargs to newer version (#3645)
* Bump `yargs` to newer version

* Add release notes
2024-10-12 18:18:36 -04:00
dependabot[bot]
328196c485 Bump vite from 5.2.11 to 5.2.14 (#3646)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.2.11 to 5.2.14.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.2.14/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.2.14/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 16:10:42 -04:00
dependabot[bot]
644fe8bdc6 Bump ejs from 3.1.9 to 3.1.10 (#3644)
Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10.
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10)

---
updated-dependencies:
- dependency-name: ejs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 15:50:16 -04:00
Matiss Janis Aboltins
15b1b73379 polishing report responsitivity (#3636) 2024-10-12 20:39:21 +01:00
dependabot[bot]
8c7e93616f Bump semver from 5.7.1 to 5.7.2 (#3643)
Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 15:31:09 -04:00
dependabot[bot]
a56d6f9e05 Bump ws from 7.5.9 to 7.5.10 (#3642)
Bumps [ws](https://github.com/websockets/ws) from 7.5.9 to 7.5.10.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.5.9...7.5.10)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-12 15:21:17 -04:00
Koen van Staveren
75acfc79e1 fix: run rules on reconciliation transaction (#3625) 2024-10-12 19:19:47 +01:00
Vincenzo Di Biase
300ddc6311 Fixes #3585 - Fixes Rule Conditions Removal (#3607) 2024-10-12 17:49:01 +01:00
Koen van Staveren
05dda5f9d7 fix: escaping in action rule templating (#3632)
* fix: escaping in action rule templating

* chore: release note
2024-10-11 20:07:57 +01:00
Samuel Barnes
37ad584826 Add option to set how far out the upcoming scheduled transactions are shown in the account view. (#3310)
* initial poking around

* ui changes and setting

* wip

* null check

* removed more than a month

* prettier

* todo

* get status tests

* added prefs to app.ts

* updated to use LocalPrefs bc of limitation of app.ts

* updated schedules component to use localPrefs

* removed console.log

* release notes

* renamed release noted md

* eslint fixes

* import fix

* update useEffect dependencies

* removed a comment

* moved upcoming length setting to schedule page

* removed import

* made setting collapsible and moved to the top

* fixed breaking change

* updated to work with updated synced prefs methodology

* pulled preference from db

* updated tests with mock reset

* update vrt

* per coderabbit: upcoming length null value prevention

* update test to use number inputs rather than string

* aria label added to close button

* moved before/after each blocks per coderabbitai

* fixed default value typo

* updated edit button to use slimmer style

* vrt

* vrt

* vrt

---------

Co-authored-by: youngcw <calebyoung94@gmail.com>
2024-10-11 07:43:37 -07:00
Ryan Bianchi
f9c08a995d Fix ability to have duplicate account names (#3527)
* add duplicate name validation to sidebar, and both narrow/wide Account pages

* unify error messages and styles

* keep state for the current account name on the mobile account modal

* add release notes

* remove extra validation function

* fix typo in AccountSyncSidebar params

* don't set current account name to empty string and prevent further changes on AccountMenuModal

* lint imports

* update error message to Name x already exists

* use proper translation functions

---------

Co-authored-by: youngcw <calebyoung94@gmail.com>
2024-10-10 20:53:17 -07:00
Matt Fiddaman
e37a42faf9 make import button reflect accurate number of transactions to be added (#3613) 2024-10-10 20:19:35 +01:00
Matt Fiddaman
9f279486ce save csv inOutMode settings (#3543) 2024-10-10 20:19:14 +01:00
Michael Clark
0b3155608c :electron: Migrations out of sync modal (#3600)
* add a modal to say client is wrong version, accept the risks to continue using

* user friendly error

* hooking parts up - untested

* changed approach

* release notes

* removing old comments

* cleanup old code

* feedback
2024-10-10 19:39:09 +01:00
Koen van Staveren
3301cfa2fd fix: import meta of non custom report widgets (#3626) 2024-10-10 18:46:25 +01:00
Matiss Janis Aboltins
23de23bd4e ♻️ (typescript) migrate parts of ImportTransactionModal to TS (#3570) 2024-10-09 22:40:38 +01:00
Matiss Janis Aboltins
79f640cbc0 show the 'import transactions' button even if accounts have banksync (#3615) 2024-10-09 22:36:42 +01:00
David Martos
f786bdcec3 Fix rules not checking "category is nothing" when reconciling (#3572)
* Fix rules not checking "category is nothing" when reconciling

* release notes

* Apply suggestions from code review

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>

---------

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
2024-10-09 18:18:28 +01:00
Matiss Janis Aboltins
f3ae31055e ♻️ (typescript) migrated ManagePayees and LoadBackupModal files (#3507) 2024-10-09 18:04:36 +01:00
Travis Lesicka
21cb684b26 Update sidebar scrolling (#3554) 2024-10-09 18:03:46 +01:00
Matt Fiddaman
e455369443 Don't consider payees used in rules as orphaned (#3609)
* don't consider payees in rules as orphaned

* release note

* lint

* indentation

* ignore deleted rules
2024-10-09 16:44:37 +01:00
Koen van Staveren
6d122c898d test: csv import e2e tests (#3499)
* test: csv import e2e tests

* chore: release note

* chore: lint

* chore: remove .only

* fix: csv import e2e tests

there was an issue with css precedent which I don't understand why but this fixes this

* chore: release note

* fix: flakiness e2e test

* Update bin/run-vrt

* fix: flakiness e2e test

* chore: lint

* chore: fix merge

---------

Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
2024-10-09 08:34:59 +01:00
Koen van Staveren
e6024f7a8b fix: csv import with less than 5 columns (#3605)
* fix: csv import with less than 5 columns

* chore: release note

* Apply suggestions from code review

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>

* Update packages/desktop-client/src/components/modals/ImportTransactionsModal/FieldMappings.jsx

---------

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
2024-10-09 08:33:47 +01:00
Koen van Staveren
1485d9c871 refactor: fill in basic types in rules.ts (#3365)
* refactor: fill in basic types in rules.ts

* chore: release note

* chore: implement pr feedback

---------

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
2024-10-08 22:22:56 +01:00
Matiss Janis Aboltins
85b3c5714e 🔖 (24.10.1) fix synced prefs (#3596) 2024-10-08 18:02:07 +01:00
Koen van Staveren
ce4b80f499 feat(rules): templating actions (#3305)
* feat(rules): templating actions

* chore: update snapshots

* fix: date functions templating

* chore: lint

* fix: put action templating behind feature flag

* fix: template syntax checking

* test: handle bar functions

* chore: pr feedback

* feat: add `{{debug x}}` handler
2024-10-08 17:43:04 +01:00
Michael Clark
464d9878c6 :electron: Remove unneeded logger and add reload functionality (#3599)
* remove unneeded logger and add reload functionality

* release notes
2024-10-08 16:46:09 +01:00
wysinder
71c208e444 Fixes #2703 - Fixes inaccurate running balance when hiding reconciled transactions (#3603)
* Show accurate balances when hiding reconciled transactions.

* Linting

* Add release notes
2024-10-08 07:59:22 -07:00
Joel Jeremy Marquez
1dce3183e5 [Mobile] Allow updating existing transaction's account (#3549)
* [Mobile]  Allow updating existing transaction's account

* Release notes

* Update packages/desktop-client/src/components/mobile/transactions/TransactionEdit.jsx

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

* Update packages/desktop-client/src/components/mobile/transactions/TransactionEdit.jsx

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

* Update packages/desktop-client/src/components/mobile/transactions/TransactionEdit.jsx

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

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2024-10-08 07:57:03 -07:00
Tim
051c8a6ed0 remove package.tgz file (#3601) 2024-10-08 07:54:46 -07:00
Matiss Janis Aboltins
bdeb19424b (dashboards) making "all widget" button always visible (#3588) 2024-10-07 21:07:58 +01:00
Matiss Janis Aboltins
5369494925 (dashboards) ability to quick-edit widget names from inner report pages (#3587) 2024-10-07 21:07:22 +01:00
Vincenzo Di Biase
e653ad33a6 Fixes #3597 first day of week on calendar transaction (#3598)
* fix 3597 first day of week on calendar transactin

* added release note

* fixed release note filename
2024-10-07 12:20:19 -07:00
Michael Clark
a7b8d1251c :electron: Move file settings to the file management area (#3584)
* move settings to the file management area

* more settings

* giving users option to automatically move files when changing dir

* trueee

* updates

* does this fix the type issue

* weird

* translating

* release notes

* release notes

* a bit extra safety

* updating wording

* parameterising backup params

* text update

* parameterise vals

* add a notification to ensure the user knows the dir has changed

* pencil icon to save real estate

* ordering

* Rename 3500.md to 3584.md

* Update packages/desktop-client/src/components/manager/BudgetList.tsx

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

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2024-10-07 19:34:25 +01:00
Matiss Janis Aboltins
d5e0b7da5d (synced-prefs) preloading in redux state to improve perf (#3544) 2024-10-07 18:07:31 +01:00
Matt Fiddaman
279d545a28 fix size comparison workflow (#3594)
* fix size comparison workflow

* note
2024-10-07 17:37:08 +01:00
Matiss Janis Aboltins
0b6ea52d9b 🐛 (reports) fix reports page having empty blocks (#3566) 2024-10-07 08:33:53 +01:00
Matiss Janis Aboltins
38c5f89c41 ♻️ (typescript) migrated NetWorth component to TS (#3576) 2024-10-06 20:09:11 +01:00
Michael Clark
b774a3b216 :electron: Removing electron-is-dev dependency (#3580)
* removing is-dev dependency

* release notes

* release notes
2024-10-06 17:36:18 +01:00
Matiss Janis Aboltins
dc5d1174c7 ⬆️ upgrade some github actions (#3577) 2024-10-06 07:06:10 +01:00
Joel Jeremy Marquez
33a7524cd7 [Mobile] Fix budget list on mobile auto selecting a budget file under the Switch budget file menu (#3574)
* Fix budget list on mobile

* Releast notes
2024-10-05 08:31:25 -07:00
Joel Jeremy Marquez
0a0e26372b [Mobile] Update to Budgeted to match the column name in mobile budget table (#3573)
* Update to Budgeted to match the column name in mobile budget table

* Release notes

* VRT

* VRT
2024-10-05 08:30:45 -07:00
Joel Jeremy Marquez
a28fb93cec Mobile VRTs (#3506)
* More Mobile VRTs

* Mobile VRTs

* Fix mobile budget page

* Updated VRT

* VRT fix

* Update VRT

* [skip ci] Release notes

* Cleanup tests

* Fix VRT

* VRT

* Extend timeout

* Clean screenshots

* Updated VRT

* Category / group VRTs

* Mobile budget page menu VRT

* Updated VRT

* Prevous and next budget month tests

* Code Rabbit suggestions

* Feedback

* VRT

* Fix getSelectedMonth

* Fix selectedBudgetMonthButton locator

* Fix flaky tests

* Update VRT
2024-10-04 12:09:29 -07:00
Matiss Janis Aboltins
365da79783 ♻️ split ImportTransactionsModal into smaller component files (#3552) 2024-10-04 18:23:25 +01:00
Michael Clark
df92c80c27 :electron: Reduce electron package size (#3553)
* remove unneeded loot core ref and keeping better-sqlite external

* release notes

* putting the package config back

* cleaning up

* add missing db files

* updates

* window state updates
2024-10-04 17:16:24 +01:00
Austin Pearce
d0caf9f521 fix yearly schedule templates (#3511)
Co-authored-by: Austin Pearce <austin@apearce.dev>
2024-10-03 11:49:21 -07:00
Ali Gradina
3f85aedd0b Marked files for translation (#3444)
* marked files for translation

* added release note

* fixed linting warnings

* 🐛 fix account filters being overridden (#3441)

* :electron: Reduce package size  (#3443)

* reduce package size of all packages

* release notes

* Update beforePackHook.ts

* [Maintenance] Cleanup react aria packages and dedupe (#3450)

* Cleanup react aria packages and dedupe

* Release notes

* ♻️ (synced-prefs) moving the prefs from metadata.json to the db (#3423)

* :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

* ♻️ (synced-prefs) move budget type to synced prefs (#3427)

* update synced account balance in db if available (#3452)

* 🐛 (synced-prefs) fix bulk-reading not working in import modal (#3460)

* fix: csv import deduplication (#3456)

*  release simplefin as a first-party feature (#3459)

Closes #2272

* 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

* [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

* Fix reports form submit handlers (#3462)

* Fix form submit handlers

* Release notes

* :electron: Remove some old updater code (#3468)

* remove some old updater code

* remove old updater logic

* CSV import e2e tests (#3467)

* 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

* 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

* 🐛 (reports) deleting custom report should remove it from the dashboard (#3469)

* Revert "CSV import e2e tests (#3467)" (#3474)

This reverts commit 5e12d4013a.

* ♻️ (synced-prefs) separate metadata and local prefs out (#3458)

* :electron: Replace deprecated file protocol registration (#3475)

* replace deprecated file handler in electron

* release notes

* types eh

* types

* update sql regexp to default to empty string when field is null (#3480)

* ♻️ rename report/rollover budget to tracking/envelope (#3483)

* 🐛 (import) fix csv import checkboxes not working (#3478)

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

* fix modals on mobile BudgetTable (#3487)

* Fix privacy filter (#3472)

* Fix privacy filter

* Release notes

* Coderabbit suggestion

* VRT

* VRT

* Revert VRT

* VRT

* VRT

* VRT

* VRT

* Delete VRT

* VRT

* Revert VRT

* 🐛 fix custom reports crashing when opening table (#3484)

* 🧪 (tests) adding custom report e2e tests (#3493)

*  (dashboards) ability to save filters & timeframes on spending widgets (#3432)

* marked files for translation

* Revert "🐛 fix account filters being overridden (#3441)"

This reverts commit 7336badffd.

* Revert "Revert "🐛 fix account filters being overridden (#3441)""

This reverts commit 5cbadc41bb.

* Revert changes due to failed rebase

* removed import of t

* fixed lint warning

* added PayeeTableRow.tsx

* needed changes

* bugfix: pluralization

* variables adjustments

* removed doubled trans

---------

Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Michael Clark <5285928+MikesGlitch@users.noreply.github.com>
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: Koen van Staveren <koenvanstaveren@hotmail.com>
Co-authored-by: Ryan Bianchi <1435081+qedi-r@users.noreply.github.com>
Co-authored-by: Robert Dyer <rdyer@unl.edu>
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>
Co-authored-by: Tim <hello@timsmart.co>
2024-10-03 18:39:40 +01:00
466 changed files with 6736 additions and 3536 deletions

View File

@@ -25,7 +25,7 @@ jobs:
pull-requests: write
steps:
- name: Wait for ${{github.base_ref}} build to succeed
uses: fountainhead/action-wait-for-check@v1.1.0
uses: fountainhead/action-wait-for-check@v1.2.0
id: master-build
with:
token: ${{ secrets.GITHUB_TOKEN }}
@@ -33,7 +33,7 @@ jobs:
ref: ${{github.base_ref}}
- name: Wait for PR build to succeed
uses: fountainhead/action-wait-for-check@v1.1.0
uses: fountainhead/action-wait-for-check@v1.2.0
id: wait-for-build
with:
token: ${{ secrets.GITHUB_TOKEN }}
@@ -46,7 +46,7 @@ jobs:
echo "Build failed on PR branch or ${{github.base_ref}}"
exit 1
- name: Download build artifact from ${{github.base_ref}}
uses: dawidd6/action-download-artifact@v3
uses: dawidd6/action-download-artifact@v6
id: pr-build
with:
branch: ${{github.base_ref}}
@@ -55,12 +55,13 @@ jobs:
path: base
- name: Download build artifact from PR
uses: dawidd6/action-download-artifact@v3
uses: dawidd6/action-download-artifact@v6
with:
pr: ${{github.event.pull_request.number}}
workflow: build.yml
name: build-stats
path: head
allow_forks: true
- name: Strip content hashes from stats files
run: |
@@ -70,14 +71,14 @@ jobs:
sed -i -E 's/index\.[0-9a-zA-Z_-]{8,}\./index./g' ./base/web-stats.json
sed -i -E 's/\.[0-9a-zA-Z_-]{8,}\.chunk\././g' ./base/web-stats.json
sed -i -E 's/\.[0-9a-f]{8,}\././g' ./base/*.json
- uses: twk3/rollup-size-compare-action@v1.0.0
- uses: twk3/rollup-size-compare-action@v1.1.1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
current-stats-json-path: ./head/web-stats.json
base-stats-json-path: ./base/web-stats.json
title: desktop-client
- uses: github/webpack-bundlesize-compare-action@v1.8.2
- uses: github/webpack-bundlesize-compare-action@v2.1.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
current-stats-json-path: ./head/loot-core-stats.json

3
.gitignore vendored
View File

@@ -50,3 +50,6 @@ bundle.mobile.js.map
# Local Netlify folder
.netlify
# build output
package.tgz

View File

@@ -1,6 +1,6 @@
{
"name": "@actual-app/api",
"version": "24.10.0",
"version": "24.10.1",
"license": "MIT",
"description": "An API for Actual",
"engines": {

View File

@@ -0,0 +1,57 @@
import { test, expect } from '@playwright/test';
import { ConfigurationPage } from './page-models/configuration-page';
import { MobileNavigation } from './page-models/mobile-navigation';
test.describe('Mobile Accounts', () => {
let page;
let navigation;
let configurationPage;
test.beforeEach(async ({ browser }) => {
page = await browser.newPage();
navigation = new MobileNavigation(page);
configurationPage = new ConfigurationPage(page);
await page.setViewportSize({
width: 350,
height: 600,
});
await page.goto('/');
await configurationPage.createTestFile();
});
test.afterEach(async () => {
await page.close();
});
test('opens the accounts page and asserts on balances', async () => {
const accountsPage = await navigation.goToAccountsPage();
const account = await accountsPage.getNthAccount(1);
await expect(account.name).toHaveText('Ally Savings');
await expect(account.balance).toHaveText('7,653.00');
await expect(page).toMatchThemeScreenshots();
});
test('opens individual account page and checks that filtering is working', async () => {
const accountsPage = await navigation.goToAccountsPage();
const accountPage = await accountsPage.openNthAccount(0);
await expect(accountPage.heading).toHaveText('Bank of America');
await expect(accountPage.transactionList).toBeVisible();
await expect(await accountPage.getBalance()).toBeGreaterThan(0);
await expect(accountPage.noTransactionsMessage).not.toBeVisible();
await expect(page).toMatchThemeScreenshots();
await accountPage.searchByText('nothing should be found');
await expect(accountPage.noTransactionsMessage).toBeVisible();
await expect(accountPage.transactions).toHaveCount(0);
await expect(page).toMatchThemeScreenshots();
await accountPage.searchByText('Kroger');
await expect(accountPage.transactions).not.toHaveCount(0);
await expect(page).toMatchThemeScreenshots();
});
});

View File

@@ -1,3 +1,5 @@
import { join } from 'path';
import { test, expect } from '@playwright/test';
import { ConfigurationPage } from './page-models/configuration-page';
@@ -9,7 +11,7 @@ test.describe('Accounts', () => {
let configurationPage;
let accountPage;
test.beforeAll(async ({ browser }) => {
test.beforeEach(async ({ browser }) => {
page = await browser.newPage();
navigation = new Navigation(page);
configurationPage = new ConfigurationPage(page);
@@ -18,7 +20,7 @@ test.describe('Accounts', () => {
await configurationPage.createTestFile();
});
test.afterAll(async () => {
test.afterEach(async () => {
await page.close();
});
@@ -99,4 +101,60 @@ test.describe('Accounts', () => {
await expect(transaction.account).toHaveText('Ally Savings');
});
});
test.describe('Import Transactions', () => {
test.beforeEach(async () => {
accountPage = await navigation.createAccount({
name: 'CSV import',
offBudget: false,
balance: 0,
});
});
async function importCsv(screenshot = false) {
const fileChooserPromise = page.waitForEvent('filechooser');
await accountPage.page.getByRole('button', { name: 'Import' }).click();
const fileChooser = await fileChooserPromise;
await fileChooser.setFiles(join(__dirname, 'data/test.csv'));
if (screenshot) await expect(page).toMatchThemeScreenshots();
const importButton = accountPage.page.getByRole('button', {
name: /Import \d+ transactions/,
});
await importButton.click();
await expect(importButton).not.toBeVisible();
}
test('imports transactions from a CSV file', async () => {
await importCsv(true);
});
test('import csv file twice', async () => {
await importCsv(false);
const fileChooserPromise = page.waitForEvent('filechooser');
await accountPage.page.getByRole('button', { name: 'Import' }).click();
const fileChooser = await fileChooserPromise;
await fileChooser.setFiles(join(__dirname, 'data/test.csv'));
await expect(page).toMatchThemeScreenshots();
const importButton = accountPage.page.getByRole('button', {
name: /Import \d+ transactions/,
});
await expect(importButton).toBeDisabled();
await expect(await importButton.innerText()).toMatch(
/Import 0 transactions/,
);
await accountPage.page.getByRole('button', { name: 'Close' }).click();
await expect(importButton).not.toBeVisible();
});
});
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View File

@@ -0,0 +1,281 @@
import { test, expect } from '@playwright/test';
import * as monthUtils from 'loot-core/src/shared/months';
import { ConfigurationPage } from './page-models/configuration-page';
import { MobileNavigation } from './page-models/mobile-navigation';
const budgetTypes = ['Envelope', 'Tracking'];
budgetTypes.forEach(budgetType => {
test.describe(`Mobile Budget [${budgetType}]`, () => {
let page;
let navigation;
let configurationPage;
let previousGlobalIsTesting;
test.beforeAll(() => {
// TODO: Hack, properly mock the currentMonth function
previousGlobalIsTesting = global.IS_TESTING;
global.IS_TESTING = true;
});
test.afterAll(() => {
// TODO: Hack, properly mock the currentMonth function
global.IS_TESTING = previousGlobalIsTesting;
});
test.beforeEach(async ({ browser }) => {
page = await browser.newPage();
navigation = new MobileNavigation(page);
configurationPage = new ConfigurationPage(page);
await page.setViewportSize({
width: 350,
height: 600,
});
await page.goto('/');
await configurationPage.createTestFile();
if (budgetType === 'Tracking') {
// Set budget type to tracking
const settingsPage = await navigation.goToSettingsPage();
await settingsPage.useBudgetType('tracking');
}
});
test.afterEach(async () => {
await page.close();
});
test('loads the budget page with budgeted amounts', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
await expect(budgetPage.categoryNames).toHaveText([
'Food',
'Restaurants',
'Entertainment',
'Clothing',
'General',
'Gift',
'Medical',
'Savings',
'Cell',
'Internet',
'Mortgage',
'Water',
'Power',
'Starting Balances',
'Misc',
'Income',
]);
await expect(page).toMatchThemeScreenshots();
});
// Page Header Tests
test('checks that clicking the Actual logo in the page header opens the budget page menu', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
await budgetPage.openBudgetPageMenu();
const budgetPageMenuModal = page.getByRole('dialog');
await expect(budgetPageMenuModal).toBeVisible();
await expect(page).toMatchThemeScreenshots();
});
test("checks that clicking the left arrow in the page header shows the previous month's budget", async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
const selectedMonth = await budgetPage.getSelectedMonth();
const displayMonth = monthUtils.format(
selectedMonth,
budgetPage.MONTH_HEADER_DATE_FORMAT,
);
await expect(budgetPage.heading).toHaveText(displayMonth);
const previousMonth = await budgetPage.goToPreviousMonth();
const previousDisplayMonth = monthUtils.format(
previousMonth,
budgetPage.MONTH_HEADER_DATE_FORMAT,
);
await expect(budgetPage.heading).toHaveText(previousDisplayMonth);
await expect(page).toMatchThemeScreenshots();
});
test('checks that clicking the month in the page header opens the month menu modal', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
const selectedMonth = await budgetPage.getSelectedMonth();
await budgetPage.openMonthMenu();
const monthMenuModal = page.getByRole('dialog');
const monthMenuModalHeading = monthMenuModal.getByRole('heading');
const displayMonth = monthUtils.format(
selectedMonth,
budgetPage.MONTH_HEADER_DATE_FORMAT,
);
await expect(monthMenuModalHeading).toHaveText(displayMonth);
await expect(page).toMatchThemeScreenshots();
});
test("checks that clicking the right arrow in the page header shows the next month's budget", async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
const selectedMonth = await budgetPage.getSelectedMonth();
const displayMonth = monthUtils.format(
selectedMonth,
budgetPage.MONTH_HEADER_DATE_FORMAT,
);
await expect(budgetPage.heading).toHaveText(displayMonth);
const nextMonth = await budgetPage.goToNextMonth();
const nextDisplayMonth = monthUtils.format(
nextMonth,
budgetPage.MONTH_HEADER_DATE_FORMAT,
);
await expect(budgetPage.heading).toHaveText(nextDisplayMonth);
await expect(page).toMatchThemeScreenshots();
});
// Category / Category Group Menu Tests
test('checks that clicking the category group name opens the category group menu modal', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
const categoryGroupName = await budgetPage.getCategoryGroupNameForRow(0);
await budgetPage.openCategoryGroupMenu(categoryGroupName);
const categoryMenuModalHeading = page
.getByRole('dialog')
.getByRole('heading');
await expect(categoryMenuModalHeading).toHaveText(categoryGroupName);
await expect(page).toMatchThemeScreenshots();
});
test('checks that clicking the category name opens the category menu modal', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
const categoryName = await budgetPage.getCategoryNameForRow(0);
await budgetPage.openCategoryMenu(categoryName);
const categoryMenuModalHeading = page
.getByRole('dialog')
.getByRole('heading');
await expect(categoryMenuModalHeading).toHaveText(categoryName);
await expect(page).toMatchThemeScreenshots();
});
// Budgeted Cell Tests
test('checks that clicking the budgeted cell opens the budget menu modal', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
const categoryName = await budgetPage.getCategoryNameForRow(0);
await budgetPage.openBudgetMenu(categoryName);
const budgetMenuModalHeading = page
.getByRole('dialog')
.getByRole('heading');
await expect(budgetMenuModalHeading).toHaveText(categoryName);
await expect(page).toMatchThemeScreenshots();
});
test('updates the budgeted amount', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
const categoryName = await budgetPage.getCategoryNameForRow(0);
// Set to 100.00
await budgetPage.setBudget(categoryName, 10000);
const budgetedButton =
await budgetPage.getButtonForBudgeted(categoryName);
await expect(budgetedButton).toHaveText('100.00');
await expect(page).toMatchThemeScreenshots();
});
// Spent Cell Tests
test('checks that clicking spent cell redirects to the category transactions page', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
const categoryName = await budgetPage.getCategoryNameForRow(0);
const accountPage = await budgetPage.openSpentPage(categoryName);
await expect(accountPage.heading).toContainText(categoryName);
await expect(accountPage.transactionList).toBeVisible();
await expect(page).toMatchThemeScreenshots();
});
// Balance Cell Tests
test('checks that clicking the balance cell opens the balance menu modal', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
const categoryName = await budgetPage.getCategoryNameForRow(0);
await budgetPage.openBalanceMenu(categoryName);
const balanceMenuModalHeading = page
.getByRole('dialog')
.getByRole('heading');
await expect(balanceMenuModalHeading).toHaveText(categoryName);
await expect(page).toMatchThemeScreenshots();
});
if (budgetType === 'Envelope') {
test('checks that clicking the To Budget/Overbudgeted amount opens the budget summary menu modal', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
await budgetPage.openEnvelopeBudgetSummaryMenu();
const summaryModalHeading = page
.getByRole('dialog')
.getByRole('heading');
await expect(summaryModalHeading).toHaveText('Budget Summary');
await expect(page).toMatchThemeScreenshots();
});
}
if (budgetType === 'Tracking') {
test('checks that clicking the Saved/Projected Savings/Overspent amount opens the budget summary menu modal', async () => {
const budgetPage = await navigation.goToBudgetPage();
await budgetPage.waitForBudgetTable();
await budgetPage.openTrackingBudgetSummaryMenu();
const summaryModalHeading = page
.getByRole('dialog')
.getByRole('heading');
await expect(summaryModalHeading).toHaveText('Budget Summary');
await expect(page).toMatchThemeScreenshots();
});
}
});
});

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