diff --git a/components/PageHeader.tsx b/components/PageHeader.tsx index 13481a1..b08050d 100644 --- a/components/PageHeader.tsx +++ b/components/PageHeader.tsx @@ -1,5 +1,6 @@ import { alpha, Box, Stack, SxProps, Theme, Typography, useTheme } from '@mui/material'; -import { ReactNode } from 'react'; +import { ReactNode, useMemo } from 'react'; +import { getEntryPointType } from '@/config/features'; /** * PageHeader 组件属性接口 @@ -64,6 +65,11 @@ export default function PageHeader({ }: PageHeaderProps) { const theme = useTheme(); const resolvedIconColor = iconColor ?? theme.palette.primary.main; + const entryPointType = useMemo(() => getEntryPointType(), []); + + if (entryPointType === 'popup') { + return null; + } return ( diff --git a/components/__tests__/PageHeader.test.tsx b/components/__tests__/PageHeader.test.tsx index e567199..00908df 100644 --- a/components/__tests__/PageHeader.test.tsx +++ b/components/__tests__/PageHeader.test.tsx @@ -5,6 +5,10 @@ import { render, screen } from '@testing-library/react'; import { ThemeProvider, createTheme } from '@mui/material/styles'; import PageHeader, { type PageHeaderProps } from '@/components/PageHeader'; +vi.mock('@/config/features', () => ({ + getEntryPointType: vi.fn(() => 'sidepanel'), +})); + const theme = createTheme(); function renderWithTheme(ui: React.ReactElement) { @@ -117,4 +121,14 @@ describe('PageHeader 组件系统', () => { expect(outerElement).toBeTruthy(); }); }); + + describe('PageHeader 入口点隐藏', () => { + it('popup 模式下应返回 null', async () => { + const { getEntryPointType } = await import('@/config/features'); + vi.mocked(getEntryPointType).mockReturnValue('popup'); + + const { container } = renderWithTheme(); + expect(container.innerHTML).toBe(''); + }); + }); });