From 6472c70960d41d1a765048bff295d0f841749096 Mon Sep 17 00:00:00 2001
From: alcroito <alcroito.code@pm.me>
Date: Sat, 3 Aug 2024 20:18:33 +0200
Subject: [PATCH] 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>
---
 .../loot-core/src/server/importers/ynab4.ts    | 18 +++++++++++++++++-
 upcoming-release-notes/3122.md                 |  6 ++++++
 2 files changed, 23 insertions(+), 1 deletion(-)
 create mode 100644 upcoming-release-notes/3122.md

diff --git a/packages/loot-core/src/server/importers/ynab4.ts b/packages/loot-core/src/server/importers/ynab4.ts
index 97e04c97c..e6c474e67 100644
--- a/packages/loot-core/src/server/importers/ynab4.ts
+++ b/packages/loot-core/src/server/importers/ynab4.ts
@@ -71,8 +71,24 @@ async function importCategories(
           // on insertion order
           for (const category of subCategories) {
             if (!category.isTombstone) {
+              let categoryName = category.name;
+
+              // Hidden categories have the parent category entity id
+              // appended to the end of the sub category name.
+              // The format is 'MasterCategory ` SubCategory ` entityId'.
+              // Remove the id to shorten the name.
+              if (masterCategory.name === 'Hidden Categories') {
+                const categoryNameParts = categoryName.split(' ` ');
+
+                // Remove the last part, which is the entityId.
+                categoryNameParts.pop();
+
+                // Join the remaining parts with a slash between them.
+                categoryName = categoryNameParts.join('/').trim();
+              }
+
               const id = await actual.createCategory({
-                name: category.name,
+                name: categoryName,
                 group_id: entityIdMap.get(category.masterCategoryId),
               });
               entityIdMap.set(category.entityId, id);
diff --git a/upcoming-release-notes/3122.md b/upcoming-release-notes/3122.md
new file mode 100644
index 000000000..b60b2e12d
--- /dev/null
+++ b/upcoming-release-notes/3122.md
@@ -0,0 +1,6 @@
+---
+category: Enhancements
+authors: [alcroito]
+---
+
+Shorten hidden category names imported from YNAB4.
-- 
GitLab