From 6eae929cd9cb7f9d1b54b8d64333e0ffb020b875 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 31 Oct 2026 17:50:52 +0100 Subject: [PATCH] Estate: narrow parentId before the Space route lookup; prettier; ignore harness Co-Authored-By: Claude Sonnet 5.5 --- .prettierignore | 3 ++- src/app/features/estate/EstateNavigator.tsx | 2 +- src/app/features/estate/buildEstate.test.ts | 28 ++++++++++++++------- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/.prettierignore b/.prettierignore index 3a4d7da1..036ee8bc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,4 +2,5 @@ dist node_modules package.json package-lock.json -LICENSEharness +LICENSE +harness diff --git a/src/app/features/estate/EstateNavigator.tsx b/src/app/features/estate/EstateNavigator.tsx index 1087c015..f65ba827 100644 --- a/src/app/features/estate/EstateNavigator.tsx +++ b/src/app/features/estate/EstateNavigator.tsx @@ -53,7 +53,7 @@ const estateRoomPath = (mx: ReturnType, room: EstateRoom const alias = getCanonicalAliasOrRoomId(mx, room.roomId); if (room.direct) return getDirectRoomPath(alias); // A Space the user has not joined has no Space route; the room still resolves from Home. - if (mx.getRoom(room.parentId)?.getMyMembership() === 'join') { + if (room.parentId && mx.getRoom(room.parentId)?.getMyMembership() === 'join') { return getSpaceRoomPath(getCanonicalAliasOrRoomId(mx, room.parentId), alias); } return getHomeRoomPath(alias); diff --git a/src/app/features/estate/buildEstate.test.ts b/src/app/features/estate/buildEstate.test.ts index 29c58048..8f898a0f 100644 --- a/src/app/features/estate/buildEstate.test.ts +++ b/src/app/features/estate/buildEstate.test.ts @@ -196,12 +196,10 @@ describe('buildEstate', () => { input({ hierarchy: [ ...hierarchy.slice(0, 2), - space( - PROJECTS, - 'Projects', - ['!cultlib:gamecult.org', '!aeth:gamecult.org'], - { '!cultlib:gamecult.org': 'eureka', '!aeth:gamecult.org': 'eureka' } - ), + space(PROJECTS, 'Projects', ['!cultlib:gamecult.org', '!aeth:gamecult.org'], { + '!cultlib:gamecult.org': 'eureka', + '!aeth:gamecult.org': 'eureka', + }), ...hierarchy.slice(3, 5), ], }) @@ -268,10 +266,20 @@ describe('Elsewhere', () => { ); it('lists a joined non-DM room the hierarchy does not return, named from the store', () => { - const t = strays({ strayRoomIds: ['!adhoc:x'], roomNames: new Map([['!adhoc:x', 'Meeting']]) })!; + const t = strays({ + strayRoomIds: ['!adhoc:x'], + roomNames: new Map([['!adhoc:x', 'Meeting']]), + })!; expect(t.label).toBe('Elsewhere'); expect(t.loose).toEqual([ - { roomId: '!adhoc:x', name: 'Meeting', state: 'joined', via: [], parentId: null, direct: false }, + { + roomId: '!adhoc:x', + name: 'Meeting', + state: 'joined', + via: [], + parentId: null, + direct: false, + }, ]); }); @@ -292,7 +300,9 @@ describe('Elsewhere', () => { }); it('never lists a room the user has not joined', () => { - expect(strays({ membership: new Map([['!adhoc:x', 'invite']]), strayRoomIds: ['!adhoc:x'] })).toBeUndefined(); + expect( + strays({ membership: new Map([['!adhoc:x', 'invite']]), strayRoomIds: ['!adhoc:x'] }) + ).toBeUndefined(); }); it('is absent when there are no strays', () => {