fix local folder resource lifecycle

This commit is contained in:
lix-2026
2026-05-24 01:49:51 +08:00
parent 5f97800489
commit 97953101a2
16 changed files with 1392 additions and 154 deletions
+12 -9
View File
@@ -222,6 +222,8 @@ pub async fn document_page_shell(
secondary_workspace_id={secondary_aggregate.as_ref().map(|aggregate| aggregate.identity.workspace_id.clone()).unwrap_or_default()}
secondary_page_subtree_json={secondary_page_subtree_json.unwrap_or_default()}
secondary_page_options_json={secondary_page_options_json.unwrap_or_default()}
primary_hide_title_header={is_local_folder}
secondary_hide_title_header={secondary_source_kind == Some("local_folder")}
show_admin_access_policy={is_local_access_policy_admin_context(&context)}
/>
});
@@ -653,7 +655,7 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str {
};
const panesBootstrap = parseJsonScript(PANES_BOOTSTRAP_ID);
if (!panesBootstrap || !Array.isArray(panesBootstrap.panes) || panesBootstrap.panes.length === 0) return;
if (!panesBootstrap || !Array.isArray(panesBootstrap.panes)) return;
const paneRouteConfig = {
primary: {
@@ -803,7 +805,6 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str {
};
const paneRuntimes = panesBootstrap.panes.map(buildPaneRuntime).filter(Boolean);
if (!paneRuntimes.length) return;
const loadRuntime = async () => {
if (window.__mnoteLeptosTiptapRuntimePromise) {
@@ -4298,9 +4299,11 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str {
});
}, { once: true });
Promise.all(paneRuntimes.map((paneRuntime) => mountPane(paneRuntime))).catch((error) => {
console.error('mnote multi-pane editor mount failed', error);
});
if (paneRuntimes.length) {
Promise.all(paneRuntimes.map((paneRuntime) => mountPane(paneRuntime))).catch((error) => {
console.error('mnote multi-pane editor mount failed', error);
});
}
})();
</script>"#
}
@@ -5282,8 +5285,8 @@ mod tests {
payload["result"]["identity"]["documentId"],
"local-md:Local~20Aggregate~2FLocal~20Aggregate.md"
);
// H1 "Local Heading" 优先于文件名标题 "Local Aggregate"
assert_eq!(payload["result"]["head"]["title"], "Local Heading");
// 本地 Markdown 标题来自文件名;正文 H1 只作为正文内容
assert_eq!(payload["result"]["head"]["title"], "Local Aggregate");
assert_eq!(payload["result"]["head"]["permissions"]["readOnly"], false);
assert_eq!(payload["result"]["body"]["revision"], 0);
assert!(payload["result"]["body"]["content"]
@@ -5423,8 +5426,8 @@ mod tests {
assert!(html.contains("localFolderEventRegistry"));
assert!(html
.contains("if (!response.ok) {\n if (session.sourceKind === 'local_folder')"));
assert!(html.contains("mayAffectMissingDocument"));
assert!(html.contains("eventKind.includes('Remove') || eventKind.includes('Name')"));
assert!(html.contains("shouldSuppressLocalFolderSelfChange"));
assert!(html.contains("kind.includes('Modify(Name')"));
assert!(html.contains("targetSession.views.size === 0"));
assert!(html.contains("session.views.size === 0"));
assert!(html.contains("targetSession.saving"));