对齐 Wolai 侧栏体验并收拢设计入库

This commit is contained in:
lix-2026
2026-04-30 16:18:54 +08:00
parent 8c895b3dc0
commit afb2a5b8a0
89 changed files with 23188 additions and 84 deletions
+27 -3
View File
@@ -36,7 +36,7 @@ use bridge_runtime::RuntimeCommandEnvelopeWire;
use core_protocol::KernelProjectionKind;
use serde::Deserialize;
use serde_json::{json, Value};
use std::collections::BTreeSet;
use std::collections::{BTreeMap, BTreeSet};
use std::sync::atomic::{AtomicU64, Ordering};
use std::time::{SystemTime, UNIX_EPOCH};
@@ -209,7 +209,7 @@ fn collect_expanded_ids(projection: &Value) -> BTreeSet<String> {
}
pub(crate) fn collect_page_tree_render_rows(projection: &Value) -> Vec<PageTreeRenderRow> {
projection
let mut rows: Vec<PageTreeRenderRow> = projection
.get("items")
.and_then(Value::as_array)
.map(|items| {
@@ -232,6 +232,7 @@ pub(crate) fn collect_page_tree_render_rows(projection: &Value) -> Vec<PageTreeR
node_id: node_id.to_string(),
parent_node_id: item
.get("parentNodeId")
.or_else(|| item.get("parentId"))
.and_then(Value::as_str)
.map(str::trim)
.filter(|value| !value.is_empty())
@@ -261,7 +262,30 @@ pub(crate) fn collect_page_tree_render_rows(projection: &Value) -> Vec<PageTreeR
})
.collect()
})
.unwrap_or_default()
.unwrap_or_default();
let parent_by_id = rows
.iter()
.map(|row| (row.node_id.clone(), row.parent_node_id.clone()))
.collect::<BTreeMap<_, _>>();
for row in &mut rows {
if row.depth == 0 && row.parent_node_id.is_some() {
let mut depth = 0_u32;
let mut cursor = row.parent_node_id.as_deref();
while let Some(parent_id) = cursor {
depth += 1;
cursor = parent_by_id
.get(parent_id)
.and_then(|parent| parent.as_deref());
if depth > 32 {
break;
}
}
row.depth = depth;
}
}
rows
}
pub(crate) fn collect_filetree_render_rows(