Files
testing-tool/src/components/RouterContainer.tsx
T
rsgltzyd 9aa7a51f0b refactor: 移除 Dashboard 页面及相关功能,更新路由和组件逻辑
- 移除 Dashboard 相关的组件、特性和测试代码,简化项目结构。
- 更新 PageSkeleton 组件,默认渲染工具页面骨架。
- 修改 RouterContainer 和 RouterProvider 以适应新的默认路由策略,确保用户直接访问 timestamp 页面。
- 更新测试用例,确保在新结构下的功能正常。
2026-07-05 22:02:25 +08:00

70 lines
2.1 KiB
TypeScript

import { getFeatureByKey } from '@/config/features';
import { loadPage } from '@/config/pageLoaders/index';
import { useRouter } from '@/providers/RouterProvider';
import type { PageType } from '@/types/storage';
import { type ComponentType, useEffect, useState } from 'react';
import PageErrorBoundary from '@/components/PageErrorBoundary';
import PageSkeleton from '@/components/PageSkeleton';
import { cn } from '@/lib/utils';
import { AlertTriangle } from 'lucide-react';
function LoadedPage({ pageKey }: { pageKey: PageType }) {
const [Page, setPage] = useState<ComponentType | null>(null);
useEffect(() => {
let cancelled = false;
loadPage(pageKey)
.then((mod) => {
if (!cancelled) {
setPage(() => mod.default);
}
})
.catch((err) => {
console.error('[Router Page Load Error]', err);
});
return () => {
cancelled = true;
};
}, [pageKey]);
if (!Page) {
return <PageSkeleton />;
}
return <Page />;
}
export default function RouterContainer() {
const { currentPage } = useRouter();
const currentFeature = getFeatureByKey(currentPage);
return (
<div
key={currentPage}
className={cn(
'flex-1 flex flex-col overflow-x-hidden overflow-y-auto',
'motion-reduce:transition-none page-transition-enter',
)}
>
<PageErrorBoundary resetKey={currentPage}>
{currentFeature ? (
<LoadedPage key={currentPage} pageKey={currentPage} />
) : (
<div className="flex-1 flex flex-col items-center justify-center p-8 text-center fade-in-300">
<div className="flex h-12 w-12 items-center justify-center rounded-xl bg-destructive/10 text-destructive mb-4">
<AlertTriangle className="h-6 w-6" />
</div>
<h3 className="text-sm font-semibold text-foreground">页面未找到</h3>
<p className="text-xs text-muted-foreground mt-1 max-w-[240px]">
该功能不存在或已被移除。
</p>
</div>
)}
</PageErrorBoundary>
</div>
);
}