diff --git a/packages/todo/src/todoKeymap.ts b/packages/todo/src/todoKeymap.ts index d8c92d6..962cfa6 100644 --- a/packages/todo/src/todoKeymap.ts +++ b/packages/todo/src/todoKeymap.ts @@ -130,10 +130,9 @@ const moveToDone = (view: EditorView) => { const doneTodos: Todo[] = [] todoList.forEach((header) => { header.todos = header.todos.filter((todo) => { - if (typeof todo === "string" || !todo.done) return true - - doneTodos.push(todo) - return false + if (typeof todo === "string") return true + doneTodos.push(...collectDoneTodos(todo)) + return !todo.done }) }) @@ -147,6 +146,24 @@ const moveToDone = (view: EditorView) => { }) } +const collectDoneTodos = (todo: Todo | string): Todo[] => { + if (typeof todo === "string") return [] + + const doneTodos: Todo[] = [] + if (todo.done) { + todo.indent = "" + doneTodos.push(todo) + } else { + todo.children = todo.children.filter((child) => { + if (typeof child === "string") return true + doneTodos.push(...collectDoneTodos(child)) + return !child.done + }) + } + + return doneTodos +} + const toggleDone = (view: EditorView) => { const { state } = view const { head } = state.selection.main