From 213fe6ebf30db04618f6fad7c943d1adf3ec8720 Mon Sep 17 00:00:00 2001 From: Spencer Duran Date: Fri, 29 May 2026 17:57:21 -0400 Subject: [PATCH] feat: add setting to hide subtasks from task list root MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a "Hide subtasks in list root" toggle in Settings → Appearance. When enabled, tasks that belong to a parent project are hidden from the root level of task list views. They remain visible when their parent is expanded via the subtask chevron. Implemented as a pure CSS rule gated on a body class (tasknotes-hide-root-subtasks), which distinguishes root-level subtasks from nested ones using :has(.task-card__project-link) combined with :not(:has(.task-card__subtasks)) to avoid hiding expanded parent tasks. Closes #1715 --- src/i18n/resources/en.ts | 5 +++++ src/main.ts | 2 ++ src/settings/defaults.ts | 1 + src/settings/tabs/appearanceTab.ts | 13 +++++++++++++ src/types/settings.ts | 2 ++ 5 files changed, 23 insertions(+) diff --git a/src/i18n/resources/en.ts b/src/i18n/resources/en.ts index 12d41cf5..d8b08268 100644 --- a/src/i18n/resources/en.ts +++ b/src/i18n/resources/en.ts @@ -1566,6 +1566,11 @@ export const en: TranslationTree = { name: "Show expandable subtasks", description: "Allow expanding/collapsing subtask sections in task cards", }, + hideRootSubtasks: { + name: "Hide subtasks in list root", + description: + "In task list views, hide tasks that belong to a parent project from the root level. Subtasks remain visible when their parent is expanded.", + }, expandSubtasksByDefault: { name: "Expand subtasks by default", description: "Show project subtasks expanded when task cards are rendered", diff --git a/src/main.ts b/src/main.ts index f0ef26a6..f10c4ded 100644 --- a/src/main.ts +++ b/src/main.ts @@ -261,6 +261,7 @@ export default class TaskNotesPlugin extends Plugin { }); await this.loadSettings(); + document.body.classList.toggle("tasknotes-hide-root-subtasks", this.settings.hideRootSubtasks); this.performanceProfiler = createTaskNotesPerformanceProfiler({ isEnabled: () => this.settings?.enableDebugLogging === true, logger: createTaskNotesLogger({ @@ -590,6 +591,7 @@ export default class TaskNotesPlugin extends Plugin { } onunload() { + document.body.classList.remove("tasknotes-hide-root-subtasks"); void cleanupPluginRuntime(this); } diff --git a/src/settings/defaults.ts b/src/settings/defaults.ts index 1e66e6e7..baa39ad1 100644 --- a/src/settings/defaults.ts +++ b/src/settings/defaults.ts @@ -329,6 +329,7 @@ export const DEFAULT_SETTINGS: TaskNotesSettings = { // Task card expandable subtasks defaults showExpandableSubtasks: true, expandSubtasksByDefault: false, + hideRootSubtasks: false, // Subtask chevron position default subtaskChevronPosition: "right", // Filter toolbar layout defaults diff --git a/src/settings/tabs/appearanceTab.ts b/src/settings/tabs/appearanceTab.ts index 10c9a6c5..3f509a52 100644 --- a/src/settings/tabs/appearanceTab.ts +++ b/src/settings/tabs/appearanceTab.ts @@ -814,6 +814,19 @@ export function renderAppearanceTab( ); } + group.addSetting((setting) => + void configureToggleSetting(setting, { + name: translate("settings.appearance.uiElements.hideRootSubtasks.name"), + desc: translate("settings.appearance.uiElements.hideRootSubtasks.description"), + getValue: () => plugin.settings.hideRootSubtasks, + setValue: async (value: boolean) => { + plugin.settings.hideRootSubtasks = value; + document.body.classList.toggle("tasknotes-hide-root-subtasks", value); + save(); + }, + }) + ); + group.addSetting((setting) => void configureDropdownSetting(setting, { name: translate("settings.appearance.uiElements.viewsButtonAlignment.name"), diff --git a/src/types/settings.ts b/src/types/settings.ts index 9318badb..f9938511 100644 --- a/src/types/settings.ts +++ b/src/types/settings.ts @@ -180,6 +180,8 @@ export interface TaskNotesSettings { showExpandableSubtasks: boolean; // Expand project subtasks by default when task cards render expandSubtasksByDefault: boolean; + // Hide subtasks from root of task list views (only show under expanded parent) + hideRootSubtasks: boolean; // Subtask chevron position in task cards subtaskChevronPosition: "left" | "right"; // Filter toolbar layout