feat: Integrate forum layout support across various components and enhance room handling logic
This commit is contained in:
30
src/app/features/forum/ForumSpaceLayout.tsx
Normal file
30
src/app/features/forum/ForumSpaceLayout.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
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';
|
||||
|
||||
/** Shares forum board state between space sidebar and lobby/room outlet. */
|
||||
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 (
|
||||
<ForumBoardProvider forumSpace={space} scope={scope}>
|
||||
{children}
|
||||
</ForumBoardProvider>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user