18ea4f82fd
支持 Bug/需求提交、截图与聊天同款语音输入,全站反馈分页浏览与详情页,并从聊天与空间页提供入口。 Co-authored-by: Cursor <cursoragent@cursor.com>
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { matchPath, useLocation, useNavigate, useSearchParams } from 'react-router-dom';
|
|
import { MindSpaceView } from '../components/MindSpaceView';
|
|
import type { MindSpaceSaveCategory, PortalUser } from '../types';
|
|
|
|
const CATEGORY_CODES = new Set<MindSpaceSaveCategory>(['draft', 'oa', 'private', 'public']);
|
|
|
|
function parseCategory(value: string | null): MindSpaceSaveCategory | null {
|
|
if (!value || !CATEGORY_CODES.has(value as MindSpaceSaveCategory)) return null;
|
|
return value as MindSpaceSaveCategory;
|
|
}
|
|
|
|
export function MindSpaceRoute({
|
|
user,
|
|
onLogout,
|
|
}: {
|
|
user: PortalUser;
|
|
onLogout: () => void;
|
|
}) {
|
|
const navigate = useNavigate();
|
|
const location = useLocation();
|
|
const [searchParams] = useSearchParams();
|
|
const pageMatch = matchPath('/space/page/:pageId', location.pathname);
|
|
const pageId = pageMatch?.params.pageId ?? null;
|
|
const categoryCode = parseCategory(searchParams.get('category'));
|
|
|
|
return (
|
|
<MindSpaceView
|
|
user={user}
|
|
initialPageId={pageId}
|
|
initialCategoryCode={categoryCode}
|
|
onBack={() => navigate('/')}
|
|
onLogout={onLogout}
|
|
onOpenFeedback={() => navigate('/feedback')}
|
|
routeSync={{
|
|
pushHome: () => navigate('/space'),
|
|
pushCategory: (code) => navigate(`/space?category=${code}`),
|
|
pushPage: (id) => navigate(`/space/page/${id}`),
|
|
}}
|
|
/>
|
|
);
|
|
}
|