Skip to content

Commit a2d9782

Browse files
committed
feat: 添加全局GlobalHeader组件
1 parent a0b77f1 commit a2d9782

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import DarkModeContainer from '@/components/DarkModeContainer';
2+
import FullScreen from '@/components/FullScreen';
3+
import { GLOBAL_HEADER_MENU_ID } from '@/constants/app';
4+
import { LangSwitch } from '@/features/lang';
5+
import { MenuToggler } from '@/features/menu';
6+
import { ThemeSchemaSwitch } from '@/features/themeSchema';
7+
8+
import GlobalLogo from '../GlobalLogo';
9+
// import GlobalBreadcrumb from '../global-breadcrumb';
10+
11+
import GlobalSearch from '../global-search/GlobalSearch';
12+
13+
import ThemeButton from './components/ThemeButton';
14+
import UserAvatar from './components/UserAvatar';
15+
16+
interface Props {
17+
isMobile: boolean;
18+
mode: UnionKey.ThemeLayoutMode;
19+
reverse?: boolean;
20+
siderWidth: number;
21+
}
22+
23+
const HEADER_PROPS_CONFIG: Record<UnionKey.ThemeLayoutMode, App.Global.HeaderProps> = {
24+
horizontal: {
25+
showLogo: true,
26+
showMenu: true,
27+
showMenuToggler: false
28+
},
29+
'horizontal-mix': {
30+
showLogo: true,
31+
showMenu: true,
32+
showMenuToggler: false
33+
},
34+
vertical: {
35+
showLogo: false,
36+
showMenu: false,
37+
showMenuToggler: true
38+
},
39+
'vertical-mix': {
40+
showLogo: false,
41+
showMenu: false,
42+
showMenuToggler: false
43+
}
44+
};
45+
46+
const GlobalHeader: FC<Props> = memo(({ isMobile, mode, reverse, siderWidth }) => {
47+
const [isFullscreen, { toggleFullscreen }] = useFullscreen(document.body);
48+
49+
const { showLogo, showMenu, showMenuToggler } = HEADER_PROPS_CONFIG[mode];
50+
51+
const showToggler = reverse ? true : showMenuToggler;
52+
53+
return (
54+
<DarkModeContainer className="h-full flex-y-center px-12px shadow-header">
55+
{showLogo && (
56+
<GlobalLogo
57+
className="h-full"
58+
style={{ width: `${siderWidth}px` }}
59+
/>
60+
)}
61+
<div>{reverse ? true : showMenuToggler}</div>
62+
63+
{showToggler && <MenuToggler />}
64+
65+
<div
66+
className="h-full flex-y-center flex-1-hidden"
67+
id={GLOBAL_HEADER_MENU_ID}
68+
>
69+
{/* {!isMobile && !showMenu && <GlobalBreadcrumb className="ml-12px" />} */}
70+
</div>
71+
72+
<div className="h-full flex-y-center justify-end">
73+
<GlobalSearch />
74+
75+
{!isMobile && (
76+
<FullScreen
77+
className="px-12px"
78+
full={isFullscreen}
79+
toggleFullscreen={toggleFullscreen}
80+
/>
81+
)}
82+
83+
<LangSwitch className="px-12px" />
84+
85+
<ThemeSchemaSwitch className="px-12px" />
86+
87+
<ThemeButton />
88+
89+
<UserAvatar />
90+
</div>
91+
</DarkModeContainer>
92+
);
93+
});
94+
95+
export default GlobalHeader;

0 commit comments

Comments
 (0)