Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/add_show_all_rooms.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add toggle to list all rooms inside of the home sidebar.
24 changes: 20 additions & 4 deletions src/app/pages/client/home/Home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ type HomeMenuProps = {
const HomeMenu = forwardRef<HTMLDivElement, HomeMenuProps>(({ requestClose }, ref) => {
const orphanRooms = useHomeRooms();
const [hideReads] = useSetting(settingsAtom, 'hideReads');
const [isShowingAllRoomsInHome, setIsShowingAllRoomsInHome] = useSetting(
settingsAtom,
'isShowingAllRoomsInHome'
);
const unread = useRoomsUnread(orphanRooms, roomToUnreadAtom);
const mx = useMatrixClient();

Expand All @@ -94,6 +98,16 @@ const HomeMenu = forwardRef<HTMLDivElement, HomeMenuProps>(({ requestClose }, re
Mark as Read
</Text>
</MenuItem>
<MenuItem
onClick={() => setIsShowingAllRoomsInHome(!isShowingAllRoomsInHome)}
size="300"
after={<Icon size="100" src={isShowingAllRoomsInHome ? Icons.Home : Icons.Globe} />}
radii="300"
>
<Text style={{ flexGrow: 1 }} as="span" size="T300" truncate>
{isShowingAllRoomsInHome ? 'Show Home Rooms' : 'Show All Rooms'}
</Text>
</MenuItem>
</Box>
</Menu>
);
Expand Down Expand Up @@ -205,7 +219,8 @@ export function Home() {
const mx = useMatrixClient();
useNavToActivePathMapper('home');
const scrollRef = useRef<HTMLDivElement>(null);
const rooms = useHomeRooms();
const [isShowingAllRoomsInHome] = useSetting(settingsAtom, 'isShowingAllRoomsInHome');
const rooms = useHomeRooms(isShowingAllRoomsInHome);
const notificationPreferences = useRoomsNotificationPreferencesContext();
const roomToUnread = useAtomValue(roomToUnreadAtom);
const navigate = useNavigate();
Expand Down Expand Up @@ -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)
);
Expand All @@ -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,
Expand Down Expand Up @@ -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 (
<VirtualTile
Expand All @@ -436,7 +452,7 @@ export function Home() {
selected={selected}
showAvatar={showIcons()}
hideText={hideText}
linkPath={getHomeRoomPath(getCanonicalAliasOrRoomId(mx, roomId))}
linkPath={getHomeRoomPath(canonicalName)}
notificationMode={getRoomNotificationMode(
notificationPreferences,
room.roomId
Expand Down
5 changes: 4 additions & 1 deletion src/app/pages/client/home/RoomProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@ import { useMatrixClient } from '$hooks/useMatrixClient';
import { JoinBeforeNavigate } from '$features/join-before-navigate';
import { useSearchParamsViaServers } from '$hooks/router/useSearchParamsViaServers';
import { useHomeRooms } from './useHomeRooms';
import { useSetting } from '$state/hooks/settings';
import { settingsAtom } from '$state/settings';

export function HomeRouteRoomProvider({ children }: { children: ReactNode }) {
const mx = useMatrixClient();
const [isShowingAllRoomsInHome] = useSetting(settingsAtom, 'isShowingAllRoomsInHome');
const rooms = useHomeRooms();

const { roomIdOrAlias: encodedRoomIdOrAlias, eventId: encodedEventId } = useParams();
Expand All @@ -18,7 +21,7 @@ export function HomeRouteRoomProvider({ children }: { children: ReactNode }) {
const roomId = useSelectedRoom();
const room = mx.getRoom(roomId);

if (!room || !rooms.includes(room.roomId)) {
if (!room || (!isShowingAllRoomsInHome && !rooms.includes(room.roomId))) {
return (
<JoinBeforeNavigate
roomIdOrAlias={roomIdOrAlias!}
Expand Down
4 changes: 2 additions & 2 deletions src/app/pages/client/home/useHomeRooms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
10 changes: 7 additions & 3 deletions src/app/state/hooks/roomList.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,11 +152,15 @@ export const useOrphanRooms = (
mx: MatrixClient,
roomsAtom: RoomsAtom,
mDirects: Set<string>,
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);
};
Expand Down
2 changes: 2 additions & 0 deletions src/app/state/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ export interface Settings {
threadRootHeight: number;
vcmsgSidebarWidth: number;
widgetSidebarWidth: number;
isShowingAllRoomsInHome: boolean;

// furry stuff
renderAnimals: boolean;
Expand Down Expand Up @@ -321,6 +322,7 @@ export const defaultSettings: Settings = {
threadRootHeight: 220,
vcmsgSidebarWidth: 399,
widgetSidebarWidth: 420,
isShowingAllRoomsInHome: false,
// furry stuff
renderAnimals: true,

Expand Down
Loading