Skip to main content

yggdrasil/components/
nav.rs

1//! 前台导航项配置
2//!
3//! 根据当前路由生成前台 Header 所需的导航项列表。
4
5use crate::components::header::NavItemConfig;
6use crate::router::Route;
7
8/// 生成前台导航项列表,当前访问的路由会被标记为激活。
9///
10/// 纯数据转换函数(非 Dioxus hook——不调用 use_signal/use_effect 等,不受 hook
11/// 调用顺序约束,可在渲染体内任意位置调用),故不用易生歧义的 `use_` 前缀命名。
12///
13/// 参数:
14/// - `route`:当前路由
15///
16/// 返回:包含首页、归档(含标签)、友链、关于的导航配置数组。
17/// 搜索以图标形式置于 Header 右侧(主题切换左边),不在此文本导航中。
18pub fn build_nav_items(route: Route) -> Vec<NavItemConfig> {
19    vec![
20        NavItemConfig {
21            route: Route::Home {},
22            label: "首页",
23            is_active: matches!(route, Route::Home {} | Route::HomePage { .. }),
24        },
25        NavItemConfig {
26            route: Route::Archives {},
27            label: "归档",
28            is_active: matches!(route, Route::Archives {} | Route::TagDetail { .. }),
29        },
30        NavItemConfig {
31            route: Route::Friends {},
32            label: "友链",
33            is_active: matches!(route, Route::Friends {}),
34        },
35        NavItemConfig {
36            route: Route::About {},
37            label: "关于",
38            is_active: matches!(route, Route::About {}),
39        },
40    ]
41}