From b14c77aed7098ecbcd056937ffd342922c7dd61c Mon Sep 17 00:00:00 2001 From: Koen van Staveren Date: Sun, 2 Feb 2025 17:56:04 +0100 Subject: [PATCH 01/15] report sorting on dashboard (#4276) * fix: report sorting on dashboard * chore: note * chore: feedback * chore: fix vrt's * Update packages/loot-core/migrations/1736640000000__custom_report_sorting.sql Co-authored-by: Matt Fiddaman * chore: use new migration * Update packages/loot-core/migrations/1738491452000__sorting_rename.sql Co-authored-by: Matt Fiddaman --------- Co-authored-by: Matt Fiddaman --- .../src/components/reports/ReportOptions.ts | 8 ++++++-- .../src/components/reports/ReportSidebar.tsx | 14 +++++++++----- .../src/components/reports/disabledList.ts | 18 ++++++++++-------- .../reports/reports/CustomReport.tsx | 2 +- .../components/reports/reports/GetCardData.tsx | 2 ++ .../1738491452000__sorting_rename.sql | 13 +++++++++++++ .../loot-core/src/types/models/reports.d.ts | 2 +- upcoming-release-notes/4276.md | 6 ++++++ 8 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 packages/loot-core/migrations/1738491452000__sorting_rename.sql create mode 100644 upcoming-release-notes/4276.md diff --git a/packages/desktop-client/src/components/reports/ReportOptions.ts b/packages/desktop-client/src/components/reports/ReportOptions.ts index b71d4ebe040..864554c33d7 100644 --- a/packages/desktop-client/src/components/reports/ReportOptions.ts +++ b/packages/desktop-client/src/components/reports/ReportOptions.ts @@ -7,6 +7,7 @@ import { type CategoryEntity, type CategoryGroupEntity, type PayeeEntity, + type sortByOpType, } from 'loot-core/src/types/models'; const startDate = monthUtils.subMonths(monthUtils.currentMonth(), 5) + '-01'; @@ -23,7 +24,7 @@ export const defaultReport: CustomReportEntity = { groupBy: 'Category', interval: 'Monthly', balanceType: 'Payment', - sortBy: 'Descending', + sortBy: 'desc', showEmpty: false, showOffBudget: false, showHiddenCategories: false, @@ -50,7 +51,10 @@ const groupByOptions = [ { description: 'Interval' }, ]; -const sortByOptions = [ +const sortByOptions: { + description: string; + format: sortByOpType; +}[] = [ { description: t('Ascending'), format: 'asc' as const }, { description: t('Descending'), format: 'desc' as const }, { description: t('Name'), format: 'name' as const }, diff --git a/packages/desktop-client/src/components/reports/ReportSidebar.tsx b/packages/desktop-client/src/components/reports/ReportSidebar.tsx index e4bc7ccf529..80f876bf080 100644 --- a/packages/desktop-client/src/components/reports/ReportSidebar.tsx +++ b/packages/desktop-client/src/components/reports/ReportSidebar.tsx @@ -5,7 +5,10 @@ import * as monthUtils from 'loot-core/src/shared/months'; import { type CategoryEntity } from 'loot-core/types/models/category'; import { type CategoryGroupEntity } from 'loot-core/types/models/category-group'; import { type TimeFrame } from 'loot-core/types/models/dashboard'; -import { type CustomReportEntity } from 'loot-core/types/models/reports'; +import { + type CustomReportEntity, + type sortByOpType, +} from 'loot-core/types/models/reports'; import { type SyncedPrefs } from 'loot-core/types/prefs'; import { styles } from '../../style/styles'; @@ -143,7 +146,8 @@ export function ReportSidebar({ setBalanceType(cond); }; - const onChangeSortBy = (cond: string) => { + const onChangeSortBy = (cond?: sortByOpType) => { + cond ??= 'desc'; setSessionReport('sortBy', cond); onReportChange({ type: 'modify' }); setSortBy(cond); @@ -297,12 +301,12 @@ export function ReportSidebar({ onChangeSplit(e)} - options={ReportOptions.groupBy.map(option => [option, option])} + options={ReportOptions.groupBy.map(option => [ + option.key, + option.description, + ])} disabledKeys={disabledItems('split')} /> @@ -249,7 +252,7 @@ export function ReportSidebar({ value={customReportItems.balanceType} onChange={e => onChangeBalanceType(e)} options={ReportOptions.balanceType.map(option => [ - option.description, + option.key, option.description, ])} disabledKeys={disabledItems('type')} @@ -274,14 +277,14 @@ export function ReportSidebar({ if ( ReportOptions.dateRange .filter(d => !d[e as keyof dateRangeProps]) - .map(int => int.description) + .map(int => int.key) .includes(customReportItems.dateRange) ) { onSelectRange(defaultsList.intervalRange.get(e) || ''); } }} options={ReportOptions.interval.map(option => [ - option.description, + option.key, option.description, ])} disabledKeys={[]} diff --git a/packages/desktop-client/src/components/reports/disabledList.ts b/packages/desktop-client/src/components/reports/disabledList.ts index 7fba582c40b..57339f62fb5 100644 --- a/packages/desktop-client/src/components/reports/disabledList.ts +++ b/packages/desktop-client/src/components/reports/disabledList.ts @@ -5,18 +5,22 @@ import { type sortByOpType } from 'loot-core/types/models'; const intervalOptions = [ { description: t('Daily'), + key: 'Daily', defaultRange: 'This month', }, { description: t('Weekly'), + key: 'Weekly', defaultRange: 'Last 3 months', }, { description: t('Monthly'), + key: 'Monthly', defaultRange: 'Last 6 months', }, { description: t('Yearly'), + key: 'Yearly', defaultRange: 'Year to date', }, ]; @@ -215,6 +219,6 @@ export const defaultsList = { modeOptions.map(item => [item.description, item.defaultGraph]), ), intervalRange: new Map( - intervalOptions.map(item => [item.description, item.defaultRange]), + intervalOptions.map(item => [item.key, item.defaultRange]), ), }; diff --git a/packages/desktop-client/src/components/reports/reports/CustomReport.tsx b/packages/desktop-client/src/components/reports/reports/CustomReport.tsx index c75a059005f..4e6515b664e 100644 --- a/packages/desktop-client/src/components/reports/reports/CustomReport.tsx +++ b/packages/desktop-client/src/components/reports/reports/CustomReport.tsx @@ -524,7 +524,7 @@ function CustomReportInner({ report: initialReport }: CustomReportInnerProps) { }; const defaultItems = (item: string) => { - const chooseGraph = ReportOptions.groupBy.includes(item) ? graphType : item; + const chooseGraph = ReportOptions.groupByItems.has(item) ? graphType : item; if ( (disabledGraphList(mode, chooseGraph, 'disabledSplit') || []).includes( groupBy, diff --git a/upcoming-release-notes/4303.md b/upcoming-release-notes/4303.md new file mode 100644 index 00000000000..ab2db1a5507 --- /dev/null +++ b/upcoming-release-notes/4303.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [jfdoming] +--- + +Fix crashes on reports page with translations enabled From 4a7b0e7365856282ae2926fed7f199246d73a6b4 Mon Sep 17 00:00:00 2001 From: Julian Dominguez-Schatz Date: Thu, 6 Feb 2025 08:37:42 -0500 Subject: [PATCH 09/15] Add an action to automatically generate release PRs (#4306) * Add an action to automatically generate release PRs * Add release notes * PR feedback: error handling --- .github/actions/bump-package-versions | 26 +++++++++++++++++ .github/workflows/generate-release-pr.yml | 35 +++++++++++++++++++++++ upcoming-release-notes/4306.md | 6 ++++ 3 files changed, 67 insertions(+) create mode 100755 .github/actions/bump-package-versions create mode 100644 .github/workflows/generate-release-pr.yml create mode 100644 upcoming-release-notes/4306.md diff --git a/.github/actions/bump-package-versions b/.github/actions/bump-package-versions new file mode 100755 index 00000000000..5249e7064fd --- /dev/null +++ b/.github/actions/bump-package-versions @@ -0,0 +1,26 @@ +#!/bin/bash +set -euo pipefail + +version="${1#v}" + +files_to_bump=( + packages/api/package.json + packages/desktop-client/package.json + packages/desktop-electron/package.json +) + +for file in "${files_to_bump[@]}"; do + if [ -z "$version" ]; then + # version format: YY.MM.patch + # logic: if before the 25th, bump patch, else set minor/major to next month + version="$(jq -r .version "$file" | perl -e '($y,$m,$p)=split/\./,<>;$d=(localtime)[3];$d>25?($p=0,++$m,$m>12&&($m=1,++$y)):$p++;print"$y.$m.$p\n"')" + if [ -z "$version" ]; then + echo "Error: Failed to calculate new version" >&2 + exit 1 + fi + fi + + echo "Bumping $file to version $version" + jq '.version = "'"$version"'"' "$file" > "$file.tmp" + mv "$file.tmp" "$file" +done diff --git a/.github/workflows/generate-release-pr.yml b/.github/workflows/generate-release-pr.yml new file mode 100644 index 00000000000..4665f4690d7 --- /dev/null +++ b/.github/workflows/generate-release-pr.yml @@ -0,0 +1,35 @@ +name: Generate release PR + +on: + workflow_dispatch: + inputs: + ref: + description: 'Commit or branch to release' + required: true + default: 'master' + version: + description: 'Version number for the release (optional)' + required: false + default: '' + +jobs: + generate-release-pr: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.ref }} + - name: Bump package versions + id: bump_package_versions + shell: bash + run: | + .github/actions/bump-package-versions ${{ github.event.inputs.version }} + echo "version=$(jq -r .version packages/desktop-client/package.json)" > $GITHUB_OUTPUT + - name: Create PR + uses: peter-evans/create-pull-request@v7 + with: + commit-message: '🔖 (${{ steps.bump_package_versions.outputs.version }})' + title: '🔖 (${{ steps.bump_package_versions.outputs.version }})' + body: 'Generated by [generate-release-pr.yml](../tree/master/.github/workflows/generate-release-pr.yml)' + branch: 'release/v${{ steps.bump_package_versions.outputs.version }}' diff --git a/upcoming-release-notes/4306.md b/upcoming-release-notes/4306.md new file mode 100644 index 00000000000..277bfa812d7 --- /dev/null +++ b/upcoming-release-notes/4306.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [jfdoming] +--- + +Add an action to automatically generate release PRs From e8b4a750ed5221f2aedb2c49a065d03545c3e541 Mon Sep 17 00:00:00 2001 From: youngcw Date: Thu, 6 Feb 2025 07:36:31 -0700 Subject: [PATCH 10/15] Handle duplicate categories/groups in nYNAB importer. (#4293) * add error handler * lint * note * rabbit * handle groups --- .../loot-core/src/server/importers/ynab5.ts | 54 +++++++++++++++---- upcoming-release-notes/4293.md | 6 +++ 2 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 upcoming-release-notes/4293.md diff --git a/packages/loot-core/src/server/importers/ynab5.ts b/packages/loot-core/src/server/importers/ynab5.ts index 2595d5957b6..acec98bd2de 100644 --- a/packages/loot-core/src/server/importers/ynab5.ts +++ b/packages/loot-core/src/server/importers/ynab5.ts @@ -79,13 +79,30 @@ async function importCategories( if ( !equalsIgnoreCase(group.name, 'Internal Master Category') && !equalsIgnoreCase(group.name, 'Credit Card Payments') && + !equalsIgnoreCase(group.name, 'Hidden Categories') && !equalsIgnoreCase(group.name, 'Income') ) { - groupId = await actual.createCategoryGroup({ - name: group.name, - is_income: false, - }); - entityIdMap.set(group.id, groupId); + let run = true; + const MAX_RETRY = 10; + let count = 1; + const origName = group.name; + while (run) { + try { + groupId = await actual.createCategoryGroup({ + name: group.name, + is_income: false, + }); + entityIdMap.set(group.id, groupId); + run = false; + } catch (e) { + group.name = origName + '-' + count.toString(); + count += 1; + if (count >= MAX_RETRY) { + run = false; + throw Error(e.message); + } + } + } } if (equalsIgnoreCase(group.name, 'Income')) { @@ -112,12 +129,27 @@ async function importCategories( case 'internal': // uncategorized is ignored too, handled by actual break; default: { - const id = await actual.createCategory({ - name: cat.name, - group_id: groupId, - }); - entityIdMap.set(cat.id, id); - break; + let run = true; + const MAX_RETRY = 10; + let count = 1; + const origName = cat.name; + while (run) { + try { + const id = await actual.createCategory({ + name: cat.name, + group_id: groupId, + }); + entityIdMap.set(cat.id, id); + run = false; + } catch (e) { + cat.name = origName + '-' + count.toString(); + count += 1; + if (count >= MAX_RETRY) { + run = false; + throw Error(e.message); + } + } + } } } } diff --git a/upcoming-release-notes/4293.md b/upcoming-release-notes/4293.md new file mode 100644 index 00000000000..1d11fc07476 --- /dev/null +++ b/upcoming-release-notes/4293.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [youngcw] +--- + +Fix nynab importer failing on duplicate categories From 7096d00fc606ad24d6fda72f6d7404e0c70314a6 Mon Sep 17 00:00:00 2001 From: youngcw Date: Thu, 6 Feb 2025 07:56:14 -0700 Subject: [PATCH 11/15] nYNAB import - properly handle hidden categories and groups (#4294) * add error handler * lint * note * rabbit * handle groups * handle hidden right * cleanup mock file * lint;note --- .../e2e/data/ynab5-demo-budget.json | 78 +++++++++++++++++++ packages/loot-core/src/server/api.ts | 5 +- .../src/server/importers/ynab5-types.d.ts | 2 + .../loot-core/src/server/importers/ynab5.ts | 2 + packages/loot-core/src/server/main.ts | 2 + .../loot-core/src/types/server-handlers.d.ts | 1 + upcoming-release-notes/4294.md | 6 ++ 7 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 upcoming-release-notes/4294.md diff --git a/packages/desktop-client/e2e/data/ynab5-demo-budget.json b/packages/desktop-client/e2e/data/ynab5-demo-budget.json index 3539fb56b41..384211e5460 100644 --- a/packages/desktop-client/e2e/data/ynab5-demo-budget.json +++ b/packages/desktop-client/e2e/data/ynab5-demo-budget.json @@ -165,9 +165,39 @@ "name": "Hidden Categories", "hidden": false, "deleted": false + }, + { + "id": "F5751985-3290-41E7-B17F-6DBE979F315D", + "name": "Bills", + "hidden": true, + "deleted": false } ], "categories": [ + { + "id": "36120000-6c61-4402-985a-891a8d267858", + "category_group_id": "F5751985-3290-41E7-B17F-6DBE979F315D", + "name": "Under extra Bills", + "hidden": false, + "original_category_group_id": null, + "note": null, + "budgeted": 0, + "activity": 0, + "balance": 0, + "goal_type": null, + "goal_day": null, + "goal_cadence": null, + "goal_cadence_frequency": null, + "goal_creation_month": null, + "goal_target": 0, + "goal_target_month": null, + "goal_percentage_complete": null, + "goal_months_to_budget": null, + "goal_under_funded": null, + "goal_overall_funded": null, + "goal_overall_left": null, + "deleted": false + }, { "id": "36120d44-6c61-4402-985a-891a8d267858", "category_group_id": "d5c355c2-3b77-4a7f-b8b3-c832b10cfec9", @@ -240,6 +270,30 @@ "goal_overall_left": null, "deleted": false }, + { + "id": "54280000-b567-4cff-8a94-d9d65491990f", + "category_group_id": "53c9d1fc-dc5b-4021-8255-463fa19065e4", + "name": "Sneaky Category", + "hidden": true, + "original_category_group_id": null, + "note": null, + "budgeted": 0, + "activity": 0, + "balance": 0, + "goal_type": "NEED", + "goal_day": null, + "goal_cadence": 1, + "goal_cadence_frequency": 1, + "goal_creation_month": null, + "goal_target": 0, + "goal_target_month": null, + "goal_percentage_complete": null, + "goal_months_to_budget": null, + "goal_under_funded": null, + "goal_overall_funded": null, + "goal_overall_left": null, + "deleted": false + }, { "id": "ca7f02c3-7801-4a5a-a07d-ab90ca1e6360", "category_group_id": "53c9d1fc-dc5b-4021-8255-463fa19065e4", @@ -576,6 +630,30 @@ "goal_overall_left": null, "deleted": false }, + { + "id": "6a45b700-0624-4673-a705-830732976846", + "category_group_id": "ce2bff41-c8a3-4845-b14d-3f72f48075ed", + "name": "Hobbies", + "hidden": true, + "original_category_group_id": null, + "note": null, + "budgeted": 0, + "activity": 0, + "balance": 0, + "goal_type": "NEED", + "goal_day": null, + "goal_cadence": 1, + "goal_cadence_frequency": 1, + "goal_creation_month": null, + "goal_target": 0, + "goal_target_month": null, + "goal_percentage_complete": null, + "goal_months_to_budget": null, + "goal_under_funded": null, + "goal_overall_funded": null, + "goal_overall_left": null, + "deleted": false + }, { "id": "0431a8df-183f-4820-acc4-255138918710", "category_group_id": "ce2bff41-c8a3-4845-b14d-3f72f48075ed", diff --git a/packages/loot-core/src/server/api.ts b/packages/loot-core/src/server/api.ts index 72ae7b35d84..6a39dd5b5e1 100644 --- a/packages/loot-core/src/server/api.ts +++ b/packages/loot-core/src/server/api.ts @@ -628,7 +628,10 @@ handlers['api/category-group-create'] = withMutation(async function ({ group, }) { checkFileOpen(); - return handlers['category-group-create']({ name: group.name }); + return handlers['category-group-create']({ + name: group.name, + hidden: group.hidden, + }); }); handlers['api/category-group-update'] = withMutation(async function ({ diff --git a/packages/loot-core/src/server/importers/ynab5-types.d.ts b/packages/loot-core/src/server/importers/ynab5-types.d.ts index 1001f8fa8bb..d43cc36b154 100644 --- a/packages/loot-core/src/server/importers/ynab5-types.d.ts +++ b/packages/loot-core/src/server/importers/ynab5-types.d.ts @@ -30,6 +30,7 @@ export namespace YNAB5 { id: string; name: string; deleted: boolean; + hidden: boolean; } interface Category { @@ -37,6 +38,7 @@ export namespace YNAB5 { category_group_id: string; name: string; deleted: boolean; + hidden: boolean; } interface Transaction { diff --git a/packages/loot-core/src/server/importers/ynab5.ts b/packages/loot-core/src/server/importers/ynab5.ts index acec98bd2de..c595d015849 100644 --- a/packages/loot-core/src/server/importers/ynab5.ts +++ b/packages/loot-core/src/server/importers/ynab5.ts @@ -91,6 +91,7 @@ async function importCategories( groupId = await actual.createCategoryGroup({ name: group.name, is_income: false, + hidden: group.hidden, }); entityIdMap.set(group.id, groupId); run = false; @@ -138,6 +139,7 @@ async function importCategories( const id = await actual.createCategory({ name: cat.name, group_id: groupId, + hidden: cat.hidden, }); entityIdMap.set(cat.id, id); run = false; diff --git a/packages/loot-core/src/server/main.ts b/packages/loot-core/src/server/main.ts index 7657dbd8289..8d8044b297a 100644 --- a/packages/loot-core/src/server/main.ts +++ b/packages/loot-core/src/server/main.ts @@ -371,11 +371,13 @@ handlers['get-category-groups'] = async function () { handlers['category-group-create'] = mutator(async function ({ name, isIncome, + hidden, }) { return withUndo(async () => { return db.insertCategoryGroup({ name, is_income: isIncome ? 1 : 0, + hidden, }); }); }); diff --git a/packages/loot-core/src/types/server-handlers.d.ts b/packages/loot-core/src/types/server-handlers.d.ts index 7156ce2eb6f..8facdf8f037 100644 --- a/packages/loot-core/src/types/server-handlers.d.ts +++ b/packages/loot-core/src/types/server-handlers.d.ts @@ -93,6 +93,7 @@ export interface ServerHandlers { 'category-group-create': (arg: { name; isIncome?: boolean; + hidden?: boolean; }) => Promise; 'category-group-update': (group) => Promise; diff --git a/upcoming-release-notes/4294.md b/upcoming-release-notes/4294.md new file mode 100644 index 00000000000..6db400a2dd0 --- /dev/null +++ b/upcoming-release-notes/4294.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [youngcw] +--- + +Properly handle nynab hidden categories/groups on import From 15298703ac3f33b931b6a6dcea21c4c308f95e90 Mon Sep 17 00:00:00 2001 From: Matt Fiddaman Date: Thu, 6 Feb 2025 15:00:56 +0000 Subject: [PATCH 12/15] fix Weblate URL if language has never been changed (#4312) * fix weblate URL if language has never been changed * note --- .../src/components/settings/LanguageSettings.tsx | 2 +- upcoming-release-notes/4312.md | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 upcoming-release-notes/4312.md diff --git a/packages/desktop-client/src/components/settings/LanguageSettings.tsx b/packages/desktop-client/src/components/settings/LanguageSettings.tsx index 28aec19f048..b2af482687a 100644 --- a/packages/desktop-client/src/components/settings/LanguageSettings.tsx +++ b/packages/desktop-client/src/components/settings/LanguageSettings.tsx @@ -59,7 +59,7 @@ export function LanguageSettings() { variant="external" to={ 'https://hosted.weblate.org/projects/actualbudget/actual/' + - language + (language ?? '') } linkColor="purple" > diff --git a/upcoming-release-notes/4312.md b/upcoming-release-notes/4312.md new file mode 100644 index 00000000000..45354823c34 --- /dev/null +++ b/upcoming-release-notes/4312.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [matt-fidd] +--- + +Fix broken Weblate URL in settings if the language option has never been set From f5b9a5b23dbaedf8b92e5ed6995f7acd7fe3353d Mon Sep 17 00:00:00 2001 From: Michael Clark <5285928+MikesGlitch@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:16:17 +0000 Subject: [PATCH 13/15] Fix electron translations (#4317) * fix electron translations --- bin/package-electron | 10 ++++++++++ packages/desktop-client/src/i18n.ts | 4 ++++ upcoming-release-notes/4317.md | 6 ++++++ 3 files changed, 20 insertions(+) create mode 100644 upcoming-release-notes/4317.md diff --git a/bin/package-electron b/bin/package-electron index 8203cc99df6..74c0e87e29a 100755 --- a/bin/package-electron +++ b/bin/package-electron @@ -36,6 +36,16 @@ fi yarn workspace loot-core build:node +# Get translations +echo "Updating translations..." +if ! [ -d packages/desktop-client/locale ]; then + git clone https://github.com/actualbudget/translations packages/desktop-client/locale +fi +pushd packages/desktop-client/locale > /dev/null +git pull +popd > /dev/null +packages/desktop-client/bin/remove-untranslated-languages + yarn workspace @actual-app/web build --mode=desktop # electron specific build yarn workspace desktop-electron update-client diff --git a/packages/desktop-client/src/i18n.ts b/packages/desktop-client/src/i18n.ts index 73728666970..5955197e5fa 100644 --- a/packages/desktop-client/src/i18n.ts +++ b/packages/desktop-client/src/i18n.ts @@ -77,5 +77,9 @@ export const setI18NextLanguage = (language: string) => { return; } + if (language === i18n.language) { + return; // language is already set + } + i18n.changeLanguage(language || 'en'); }; diff --git a/upcoming-release-notes/4317.md b/upcoming-release-notes/4317.md new file mode 100644 index 00000000000..32541d97e95 --- /dev/null +++ b/upcoming-release-notes/4317.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [MikesGlitch] +--- + +Fix Electron language support From c4ad24eddec867e8ff9cbddce72a46d39431afe9 Mon Sep 17 00:00:00 2001 From: Matt Fiddaman Date: Thu, 6 Feb 2025 19:01:37 +0000 Subject: [PATCH 14/15] bump versions to v25.2.1 (#4319) --- packages/api/package.json | 2 +- packages/desktop-client/package.json | 2 +- packages/desktop-electron/package.json | 2 +- upcoming-release-notes/4303.md | 6 ------ upcoming-release-notes/4312.md | 6 ------ upcoming-release-notes/4317.md | 6 ------ 6 files changed, 3 insertions(+), 21 deletions(-) delete mode 100644 upcoming-release-notes/4303.md delete mode 100644 upcoming-release-notes/4312.md delete mode 100644 upcoming-release-notes/4317.md diff --git a/packages/api/package.json b/packages/api/package.json index 48bbb7d0c42..c2f7be0d00a 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@actual-app/api", - "version": "25.2.0", + "version": "25.2.1", "license": "MIT", "description": "An API for Actual", "engines": { diff --git a/packages/desktop-client/package.json b/packages/desktop-client/package.json index ab5d097abf1..453de87d5ab 100644 --- a/packages/desktop-client/package.json +++ b/packages/desktop-client/package.json @@ -1,6 +1,6 @@ { "name": "@actual-app/web", - "version": "25.2.0", + "version": "25.2.1", "license": "MIT", "files": [ "build" diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json index ccc2d4d4ae2..d1e2be750a2 100644 --- a/packages/desktop-electron/package.json +++ b/packages/desktop-electron/package.json @@ -3,7 +3,7 @@ "author": "Actual", "productName": "Actual", "description": "A simple and powerful personal finance system", - "version": "25.2.0", + "version": "25.2.1", "scripts": { "clean": "rm -rf dist", "update-client": "bin/update-client", diff --git a/upcoming-release-notes/4303.md b/upcoming-release-notes/4303.md deleted file mode 100644 index ab2db1a5507..00000000000 --- a/upcoming-release-notes/4303.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [jfdoming] ---- - -Fix crashes on reports page with translations enabled diff --git a/upcoming-release-notes/4312.md b/upcoming-release-notes/4312.md deleted file mode 100644 index 45354823c34..00000000000 --- a/upcoming-release-notes/4312.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [matt-fidd] ---- - -Fix broken Weblate URL in settings if the language option has never been set diff --git a/upcoming-release-notes/4317.md b/upcoming-release-notes/4317.md deleted file mode 100644 index 32541d97e95..00000000000 --- a/upcoming-release-notes/4317.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: Bugfix -authors: [MikesGlitch] ---- - -Fix Electron language support From 5f1fadb7ccf804763f1bbdfa74ab7640ea909222 Mon Sep 17 00:00:00 2001 From: Michael Clark <5285928+MikesGlitch@users.noreply.github.com> Date: Thu, 6 Feb 2025 21:49:07 +0000 Subject: [PATCH 15/15] Fix hard crash when closing budget thats synced to cloud file (#4322) * fix hard crash when closing budget thats synced to cloud file * release notes --- packages/desktop-client/src/components/App.tsx | 4 +++- upcoming-release-notes/4322.md | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 upcoming-release-notes/4322.md diff --git a/packages/desktop-client/src/components/App.tsx b/packages/desktop-client/src/components/App.tsx index 675d01b9f8c..7e6fe0d7c16 100644 --- a/packages/desktop-client/src/components/App.tsx +++ b/packages/desktop-client/src/components/App.tsx @@ -124,7 +124,9 @@ function AppInner() { } initAll().catch(showErrorBoundary); - }, [cloudFileId, dispatch, showErrorBoundary, t]); + // Removed cloudFileId from dependencies to prevent hard crash when closing budget in Electron + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dispatch, showErrorBoundary, t]); useEffect(() => { global.Actual.updateAppMenu(budgetId); diff --git a/upcoming-release-notes/4322.md b/upcoming-release-notes/4322.md new file mode 100644 index 00000000000..0a3b7b79c38 --- /dev/null +++ b/upcoming-release-notes/4322.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [MikesGlitch] +--- + +Fix hard crash when closing cloud budget on Electron