feat: Integrate forum layout support across various components and enhance room handling logic

This commit is contained in:
2026-07-06 01:06:20 +10:00
parent d1626e3585
commit c57797ffe4
62 changed files with 6876 additions and 385 deletions

View File

@@ -0,0 +1,53 @@
import React, { CSSProperties } from 'react';
import { Outlet } from 'react-router-dom';
import { Box } from 'folds';
import classNames from 'classnames';
import { useSpace } from '../../hooks/useSpace';
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 { shouldShowForumLobby } from '../../utils/room';
import { ContainerColor } from '../../styles/ContainerColor.css';
import * as theme from './forumTheme.css';
const forumOutletShell: CSSProperties = {
display: 'flex',
flex: 1,
flexDirection: 'column',
minHeight: 0,
minWidth: 0,
overflow: 'hidden',
};
/**
* Forum: server list only — forum fills main pane.
* Other spaces: space sidebar + outlet.
*/
export function ForumAwareSpaceLayout() {
const space = useSpace();
const isForum = shouldShowForumLobby(space);
if (isForum) {
return (
<Box grow="Yes" className={classNames(ContainerColor({ variant: 'Background' }), theme.ForumAppRoot)}>
<div style={forumOutletShell}>
<Outlet />
</div>
</Box>
);
}
return (
<PageRoot
nav={
<MobileFriendlyPageNav path={SPACE_PATH}>
<Space />
</MobileFriendlyPageNav>
}
>
<AnimatedOutlet />
</PageRoot>
);
}