//! MNOTE 首页组件(Wolai 风格) use super::{ document::{DocumentPane, DocumentPaneViewModel}, layout::PageLayout, }; use leptos::prelude::*; /// MNOTE 首页。 #[component] pub fn HomePage( /// 侧栏页面树 HTML(可选) #[prop(optional)] sidebar_tree_html: Option, /// 工作区名称(可选) #[prop(optional)] workspace_name: Option, /// 工作区 id(可选) #[prop(optional)] workspace_id: Option, /// workspace shell 侧栏 sections HTML(可选) #[prop(optional)] workspace_sidebar_html: Option, /// 顶栏页面祖先链 HTML(可选) #[prop(optional)] breadcrumb_html: Option, /// 当前选中的页面 id(可选) #[prop(optional)] active_page_id: Option, /// 当前选中的页面标题(可选) #[prop(optional)] active_page_title: Option, /// 导航页主体 HTML(可选) #[prop(optional)] navigation_html: String, /// 是否显示管理员授权入口 #[prop(optional)] show_admin_access_policy: bool, /// 是否启用树实时流 #[prop(optional, default = true)] enable_tree_live: bool, /// 密码箱导航 SSR href(含 local_folder 上下文) #[prop(optional)] vault_nav_href: Option, ) -> impl IntoView { let active_page_id = active_page_id.unwrap_or_default(); let active_page_title = active_page_title .map(|value| value.trim().to_string()) .filter(|value| !value.is_empty()) .unwrap_or_else(|| "个人".to_string()); let has_active_page = !active_page_id.trim().is_empty(); let navigation_html = Some(navigation_html) .map(|value| value.trim().to_string()) .filter(|value| !value.is_empty()); let workspace_id = workspace_id .map(|value| value.trim().to_string()) .filter(|value| !value.is_empty()); let active_href = workspace_id .as_deref() .map(|workspace_id| format!("/documents/{active_page_id}?workspaceId={workspace_id}")) .unwrap_or_else(|| format!("/documents/{active_page_id}")); view! { {move || if has_active_page { view! {

{active_page_title.clone()}

"个人空间" "工作区首页"
"打开当前页面"
}.into_any() } else if let Some(navigation_html) = navigation_html.clone() { view! {
}.into_any() } else { let empty_primary_model = DocumentPaneViewModel { pane_role: "primary", title: "文件夹".to_string(), document_id: String::new(), workspace_id: workspace_id.clone().unwrap_or_default(), page_wide_layout: false, page_small_text: false, page_layout_density: "normal".to_string(), page_font: "default".to_string(), page_show_heading_numbers: false, has_page_subtree: false, primary_legacy_ids: true, visible: true, hide_title_header: true, }; view! {
}.into_any() }}
} }