diff --git a/apps/server/src/services/hidden_subtree.spec.ts b/apps/server/src/services/hidden_subtree.spec.ts index c40b397244..8033459500 100644 --- a/apps/server/src/services/hidden_subtree.spec.ts +++ b/apps/server/src/services/hidden_subtree.spec.ts @@ -158,5 +158,14 @@ describe("Hidden Subtree", () => { cls.init(() => hiddenSubtreeService.checkHiddenSubtree()); expect(hiddenSubtree.hasLabel("excludeFromNoteMap")).toBeFalsy(); }); + + it("cleans up attribute change in templates", () => { + const template = becca.getNoteOrThrow("_template_table"); + cls.init(() => { + template.setLabel("subtreeHidden", "foo"); + hiddenSubtreeService.checkHiddenSubtree(); + }); + expect(template.getLabelValue("subtreeHidden")).toBe("false"); + }); }); }); diff --git a/apps/server/src/services/hidden_subtree.ts b/apps/server/src/services/hidden_subtree.ts index a95955f466..0e5a25cb25 100644 --- a/apps/server/src/services/hidden_subtree.ts +++ b/apps/server/src/services/hidden_subtree.ts @@ -1,15 +1,15 @@ -import BAttribute from "../becca/entities/battribute.js"; -import BBranch from "../becca/entities/bbranch.js"; import type { HiddenSubtreeItem } from "@triliumnext/commons"; +import { t } from "i18next"; import becca from "../becca/becca.js"; -import noteService from "./notes.js"; -import log from "./log.js"; -import migrationService from "./migration.js"; -import { t } from "i18next"; -import { cleanUpHelp, getHelpHiddenSubtreeData } from "./in_app_help.js"; +import BAttribute from "../becca/entities/battribute.js"; +import BBranch from "../becca/entities/bbranch.js"; import buildLaunchBarConfig from "./hidden_subtree_launcherbar.js"; import buildHiddenSubtreeTemplates from "./hidden_subtree_templates.js"; +import { cleanUpHelp, getHelpHiddenSubtreeData } from "./in_app_help.js"; +import log from "./log.js"; +import migrationService from "./migration.js"; +import noteService from "./notes.js"; export const LBTPL_ROOT = "_lbTplRoot"; export const LBTPL_BASE = "_lbTplBase"; @@ -350,7 +350,7 @@ function checkHiddenSubtreeRecursively(parentNoteId: string, item: HiddenSubtree noteId: item.id, title: item.title, type: item.type, - parentNoteId: parentNoteId, + parentNoteId, content: item.content ?? "", ignoreForbiddenParents: true })); @@ -372,7 +372,7 @@ function checkHiddenSubtreeRecursively(parentNoteId: string, item: HiddenSubtree log.info(`Creating missing branch for note ${item.id} under parent ${parentNoteId}.`); branch = new BBranch({ noteId: item.id, - parentNoteId: parentNoteId, + parentNoteId, notePosition: item.notePosition !== undefined ? item.notePosition : undefined, isExpanded: item.isExpanded !== undefined ? item.isExpanded : false }).save(); @@ -454,6 +454,7 @@ function checkHiddenSubtreeRecursively(parentNoteId: string, item: HiddenSubtree // Remove unwanted attributes. const attrDef = attrs.find(a => a.name === attribute.name); if (!attrDef) { + console.log(`Removing unwanted attribute ${attribute.name} where expected attrs are ${attrs.map(a => a.name).join(", ")}`); attribute.markAsDeleted(); continue; } @@ -466,7 +467,7 @@ function checkHiddenSubtreeRecursively(parentNoteId: string, item: HiddenSubtree } for (const attr of attrs) { - const attrId = note.noteId + "_" + attr.type.charAt(0) + attr.name; + const attrId = `${note.noteId }_${ attr.type.charAt(0) }${attr.name}`; const existingAttribute = note.getAttributes().find((attr) => attr.attributeId === attrId); diff --git a/apps/server/src/services/hidden_subtree_templates.ts b/apps/server/src/services/hidden_subtree_templates.ts index 55999824c2..cbde1c1eee 100644 --- a/apps/server/src/services/hidden_subtree_templates.ts +++ b/apps/server/src/services/hidden_subtree_templates.ts @@ -4,7 +4,8 @@ import { t } from "i18next"; export default function buildHiddenSubtreeTemplates() { const hideSubtreeAttributes: HiddenSubtreeAttribute = { name: "subtreeHidden", - type: "label" + type: "label", + value: "false" }; const templates: HiddenSubtreeItem = { @@ -317,5 +318,11 @@ export default function buildHiddenSubtreeTemplates() { ] }; + // Enforce attributes. + templates.enforceAttributes = true; + for (const template of templates.children ?? []) { + template.enforceAttributes = true; + } + return templates; }