diff --git a/src/app/features/forum/ForumAwareSpaceLayout.tsx b/src/app/features/forum/ForumAwareSpaceLayout.tsx
index 8dfa98c..30750a9 100644
--- a/src/app/features/forum/ForumAwareSpaceLayout.tsx
+++ b/src/app/features/forum/ForumAwareSpaceLayout.tsx
@@ -1,15 +1,31 @@
-import React from 'react';
+import React, { useMemo } from 'react';
import { PageRoot } from '../../components/page';
import { AnimatedOutlet } from '../../components/AnimatedOutlet';
import { MobileFriendlyPageNav } from '../../pages/MobileFriendly';
import { SPACE_PATH } from '../../pages/paths';
import { Space } from '../../pages/client/space/Space';
+import { useMatrixClient } from '../../hooks/useMatrixClient';
+import { useSelectedRoom } from '../../hooks/router/useSelectedRoom';
+import { useSpace } from '../../hooks/useSpace';
+import { isForumContainer, shouldShowForumLobby } from '../../utils/room';
+import { ForumBoardProvider } from './ForumBoardContext';
/**
* Space sidebar + outlet. Forum spaces render ForumFeedSidebar in Space.tsx.
*/
export function ForumAwareSpaceLayout() {
- return (
+ const mx = useMatrixClient();
+ const space = useSpace();
+ const selectedRoomId = useSelectedRoom();
+
+ const scope = useMemo(() => {
+ const room = selectedRoomId ? mx.getRoom(selectedRoomId) : null;
+ const topicRoomId =
+ room && room.roomId !== space.roomId && !isForumContainer(room) ? room.roomId : undefined;
+ return { forumSpaceId: space.roomId, topicRoomId };
+ }, [mx, selectedRoomId, space.roomId]);
+
+ const layout = (
@@ -20,4 +36,14 @@ export function ForumAwareSpaceLayout() {
);
+
+ if (!shouldShowForumLobby(space)) {
+ return layout;
+ }
+
+ return (
+
+ {layout}
+
+ );
}
diff --git a/src/app/features/forum/ForumFeedPage.tsx b/src/app/features/forum/ForumFeedPage.tsx
new file mode 100644
index 0000000..c36a371
--- /dev/null
+++ b/src/app/features/forum/ForumFeedPage.tsx
@@ -0,0 +1,6 @@
+import { ForumBoardDetail } from './ForumBoardDetail';
+
+/** Forum post feed in the main pane (sidebar holds filters + post list). */
+export function ForumFeedPage() {
+ return ;
+}
diff --git a/src/app/features/forum/ForumSpaceLayout.tsx b/src/app/features/forum/ForumSpaceLayout.tsx
index fe3ee78..538e267 100644
--- a/src/app/features/forum/ForumSpaceLayout.tsx
+++ b/src/app/features/forum/ForumSpaceLayout.tsx
@@ -1,30 +1,8 @@
-import React, { ReactNode, useMemo } from 'react';
-import { useMatrixClient } from '../../hooks/useMatrixClient';
-import { useSelectedRoom } from '../../hooks/router/useSelectedRoom';
-import { useSpace } from '../../hooks/useSpace';
-import { isForumContainer, shouldShowForumLobby } from '../../utils/room';
-import { ForumBoardProvider } from './ForumBoardContext';
+import React, { ReactNode } from 'react';
-/** Shares forum board state between space sidebar and lobby/room outlet. */
+/**
+ * @deprecated Forum board context now lives in ForumAwareSpaceLayout.
+ */
export function ForumSpaceLayout({ children }: { children: ReactNode }) {
- const mx = useMatrixClient();
- const space = useSpace();
- const selectedRoomId = useSelectedRoom();
-
- const scope = useMemo(() => {
- const room = selectedRoomId ? mx.getRoom(selectedRoomId) : null;
- const topicRoomId =
- room && room.roomId !== space.roomId && !isForumContainer(room) ? room.roomId : undefined;
- return { forumSpaceId: space.roomId, topicRoomId };
- }, [mx, selectedRoomId, space.roomId]);
-
- if (!shouldShowForumLobby(space)) {
- return children;
- }
-
- return (
-
- {children}
-
- );
+ return children;
}
diff --git a/src/app/features/forum/index.ts b/src/app/features/forum/index.ts
index 304cadb..e6d69c1 100644
--- a/src/app/features/forum/index.ts
+++ b/src/app/features/forum/index.ts
@@ -3,6 +3,7 @@ export { ForumBoardDetail } from './ForumBoardDetail';
export { ForumSortIcons } from './forumLucideIcons';
export { ForumSpaceShell } from './ForumSpaceShell';
export { ForumThreadDetail } from './ForumThreadDetail';
+export { ForumFeedPage } from './ForumFeedPage';
export { ForumAwareSpaceLayout } from './ForumAwareSpaceLayout';
export { ForumSpaceLayout } from './ForumSpaceLayout';
export type { ForumBoardScope } from './useForumBoard';
diff --git a/src/app/features/lobby/Lobby.tsx b/src/app/features/lobby/Lobby.tsx
index 9c26484..2207888 100644
--- a/src/app/features/lobby/Lobby.tsx
+++ b/src/app/features/lobby/Lobby.tsx
@@ -41,8 +41,7 @@ import { getSpaceRoomPath } from '../../pages/pathUtils';
import { StateEvent } from '../../../types/matrix/room';
import { CanDropCallback, useDnDMonitor } from './DnD';
import { ASCIILexicalTable, orderKeys } from '../../utils/ASCIILexicalTable';
-import { getStateEvent, shouldShowForumLobby } from '../../utils/room';
-import { ForumBoardDetail } from '../forum/ForumBoardDetail';
+import { getStateEvent } from '../../utils/room';
import { useClosedLobbyCategoriesAtom } from '../../state/hooks/closedLobbyCategories';
import {
makeCinnySpacesContent,
@@ -151,15 +150,7 @@ const useCanDropLobbyItem = (
return canDrop;
};
-function ForumSpaceLobby() {
- return ;
-}
-
export function Lobby() {
- const space = useSpace();
- if (shouldShowForumLobby(space)) {
- return ;
- }
return ;
}
diff --git a/src/app/features/lobby/LobbyHeader.tsx b/src/app/features/lobby/LobbyHeader.tsx
index 0a8540d..6bec403 100644
--- a/src/app/features/lobby/LobbyHeader.tsx
+++ b/src/app/features/lobby/LobbyHeader.tsx
@@ -27,8 +27,12 @@ import { AddExistingModal } from '../add-existing';
import { SpeechBubble } from '../../components/speech-bubble/SpeechBubble';
import { SpaceOptionsMenu, type OpenAddExistingOptions } from '../space/SpaceOptionsMenu';
import type { HierarchyItemSpace } from '../../hooks/useSpaceHierarchy';
-import { StateEvent } from '../../../types/matrix/room';
+import { useNavigate } from 'react-router-dom';
+import { getCanonicalAliasOrRoomId } from '../../utils/matrix';
+import { getSpaceFeedPath } from '../../pages/pathUtils';
+import { shouldShowForumLobby } from '../../utils/room';
import { useForumBoardContextOptionally } from '../forum/ForumBoardContext';
+import { StateEvent } from '../../../types/matrix/room';
type LobbyMenuProps = {
powerLevels: IPowerLevels;
@@ -37,7 +41,9 @@ type LobbyMenuProps = {
const LobbyMenu = forwardRef(
({ powerLevels, requestClose }, ref) => {
const mx = useMatrixClient();
+ const navigate = useNavigate();
const space = useSpace();
+ const isForum = shouldShowForumLobby(space);
const creators = useRoomCreators(space);
const permissions = useRoomPermissions(creators, powerLevels);
@@ -55,6 +61,11 @@ const LobbyMenu = forwardRef(
requestClose();
};
+ const handleOpenFeed = () => {
+ navigate(getSpaceFeedPath(getCanonicalAliasOrRoomId(mx, space.roomId)));
+ requestClose();
+ };
+
return (