From 230c2e719a0958bae2955757231d48fbe09bd988 Mon Sep 17 00:00:00 2001 From: Shea Duma Date: Tue, 19 May 2026 06:27:11 +0300 Subject: [PATCH 1/2] add option and sorted list --- src/app/pages/client/home/Home.tsx | 18 +++++++++++++++--- src/app/pages/client/home/useHomeRooms.ts | 4 ++-- src/app/state/hooks/roomList.ts | 10 +++++++--- src/app/state/settings.ts | 2 ++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/app/pages/client/home/Home.tsx b/src/app/pages/client/home/Home.tsx index b7739d529..7aede7aa3 100644 --- a/src/app/pages/client/home/Home.tsx +++ b/src/app/pages/client/home/Home.tsx @@ -71,6 +71,7 @@ type HomeMenuProps = { const HomeMenu = forwardRef(({ requestClose }, ref) => { const orphanRooms = useHomeRooms(); const [hideReads] = useSetting(settingsAtom, 'hideReads'); + const [isShowingAllRoomsInHome, setIsShowingAllRoomsInHome] = useSetting(settingsAtom, 'isShowingAllRoomsInHome'); const unread = useRoomsUnread(orphanRooms, roomToUnreadAtom); const mx = useMatrixClient(); @@ -94,6 +95,16 @@ const HomeMenu = forwardRef(({ requestClose }, re Mark as Read + setIsShowingAllRoomsInHome(!isShowingAllRoomsInHome)} + size="300" + after={} + radii="300" + > + + {isShowingAllRoomsInHome? 'Show Home Rooms' : 'Show All Rooms'} + + ); @@ -205,7 +216,8 @@ export function Home() { const mx = useMatrixClient(); useNavToActivePathMapper('home'); const scrollRef = useRef(null); - const rooms = useHomeRooms(); + const [isShowingAllRoomsInHome] = useSetting(settingsAtom, 'isShowingAllRoomsInHome'); + const rooms = useHomeRooms(isShowingAllRoomsInHome); const notificationPreferences = useRoomsNotificationPreferencesContext(); const roomToUnread = useAtomValue(roomToUnreadAtom); const navigate = useNavigate(); @@ -236,7 +248,7 @@ export function Home() { const sortedRooms = useMemo(() => { const items = Array.from(rooms).toSorted( - closedCategories.has(DEFAULT_CATEGORY_ID) + closedCategories.has(DEFAULT_CATEGORY_ID) || isShowingAllRoomsInHome ? factoryRoomIdByActivity(mx) : factoryRoomIdByAtoZ(mx) ); @@ -248,7 +260,7 @@ export function Home() { return items.filter((rId) => hasUnread(rId) || rId === selectedRoomId); } return items; - }, [mx, rooms, closedCategories, roomToUnread, selectedRoomId]); + }, [mx, rooms, closedCategories, roomToUnread, selectedRoomId, isShowingAllRoomsInHome]); const virtualizer = useVirtualizer({ count: sortedRooms.length, diff --git a/src/app/pages/client/home/useHomeRooms.ts b/src/app/pages/client/home/useHomeRooms.ts index fd6de07af..a24c38e86 100644 --- a/src/app/pages/client/home/useHomeRooms.ts +++ b/src/app/pages/client/home/useHomeRooms.ts @@ -5,10 +5,10 @@ import { roomToParentsAtom } from '$state/room/roomToParents'; import { allRoomsAtom } from '$state/room-list/roomList'; import { useOrphanRooms } from '$state/hooks/roomList'; -export const useHomeRooms = () => { +export const useHomeRooms = (isShowingAllRoomsInHome?: boolean) => { const mx = useMatrixClient(); const mDirects = useAtomValue(mDirectAtom); const roomToParents = useAtomValue(roomToParentsAtom); - const rooms = useOrphanRooms(mx, allRoomsAtom, mDirects, roomToParents); + const rooms = useOrphanRooms(mx, allRoomsAtom, mDirects, roomToParents, isShowingAllRoomsInHome); return rooms; }; diff --git a/src/app/state/hooks/roomList.ts b/src/app/state/hooks/roomList.ts index f1bc6dc07..b82aa0450 100644 --- a/src/app/state/hooks/roomList.ts +++ b/src/app/state/hooks/roomList.ts @@ -152,11 +152,15 @@ export const useOrphanRooms = ( mx: MatrixClient, roomsAtom: RoomsAtom, mDirects: Set, - roomToParents: RoomToParents + roomToParents: RoomToParents, + isShowingAllRoomsInHome?: boolean ) => { const selector: RoomSelector = useCallback( - (roomId) => isRoom(mx.getRoom(roomId)) && !mDirects.has(roomId) && !roomToParents.has(roomId), - [mx, mDirects, roomToParents] + (roomId) => + isRoom(mx.getRoom(roomId)) && + !mDirects.has(roomId) && + (isShowingAllRoomsInHome || !roomToParents.has(roomId)), + [mx, mDirects, roomToParents, isShowingAllRoomsInHome] ); return useSelectedRooms(roomsAtom, selector); }; diff --git a/src/app/state/settings.ts b/src/app/state/settings.ts index 5efe57552..5d1231d89 100644 --- a/src/app/state/settings.ts +++ b/src/app/state/settings.ts @@ -187,6 +187,7 @@ export interface Settings { threadRootHeight: number; vcmsgSidebarWidth: number; widgetSidebarWidth: number; + isShowingAllRoomsInHome: boolean; // furry stuff renderAnimals: boolean; @@ -321,6 +322,7 @@ export const defaultSettings: Settings = { threadRootHeight: 220, vcmsgSidebarWidth: 399, widgetSidebarWidth: 420, + isShowingAllRoomsInHome: false, // furry stuff renderAnimals: true, From d448c752ef3363e9284a45829ccabcfa10f51681 Mon Sep 17 00:00:00 2001 From: Shea Duma Date: Tue, 19 May 2026 07:43:00 +0300 Subject: [PATCH 2/2] add routing --- .changeset/add_show_all_rooms.md | 5 +++++ src/app/pages/client/home/Home.tsx | 12 ++++++++---- src/app/pages/client/home/RoomProvider.tsx | 5 ++++- 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 .changeset/add_show_all_rooms.md diff --git a/.changeset/add_show_all_rooms.md b/.changeset/add_show_all_rooms.md new file mode 100644 index 000000000..ad795a604 --- /dev/null +++ b/.changeset/add_show_all_rooms.md @@ -0,0 +1,5 @@ +--- +default: minor +--- + +Add toggle to list all rooms inside of the home sidebar. diff --git a/src/app/pages/client/home/Home.tsx b/src/app/pages/client/home/Home.tsx index 7aede7aa3..b4f684d56 100644 --- a/src/app/pages/client/home/Home.tsx +++ b/src/app/pages/client/home/Home.tsx @@ -71,7 +71,10 @@ type HomeMenuProps = { const HomeMenu = forwardRef(({ requestClose }, ref) => { const orphanRooms = useHomeRooms(); const [hideReads] = useSetting(settingsAtom, 'hideReads'); - const [isShowingAllRoomsInHome, setIsShowingAllRoomsInHome] = useSetting(settingsAtom, 'isShowingAllRoomsInHome'); + const [isShowingAllRoomsInHome, setIsShowingAllRoomsInHome] = useSetting( + settingsAtom, + 'isShowingAllRoomsInHome' + ); const unread = useRoomsUnread(orphanRooms, roomToUnreadAtom); const mx = useMatrixClient(); @@ -98,11 +101,11 @@ const HomeMenu = forwardRef(({ requestClose }, re setIsShowingAllRoomsInHome(!isShowingAllRoomsInHome)} size="300" - after={} + after={} radii="300" > - {isShowingAllRoomsInHome? 'Show Home Rooms' : 'Show All Rooms'} + {isShowingAllRoomsInHome ? 'Show Home Rooms' : 'Show All Rooms'} @@ -423,6 +426,7 @@ export function Home() { const room = mx.getRoom(roomId); if (!room) return null; const selected = selectedRoomId === roomId; + const canonicalName = getCanonicalAliasOrRoomId(mx, roomId); return (