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 b7739d529..b4f684d56 100644 --- a/src/app/pages/client/home/Home.tsx +++ b/src/app/pages/client/home/Home.tsx @@ -71,6 +71,10 @@ 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 +98,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 +219,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 +251,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 +263,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, @@ -411,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 ( { +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,