Toggle current todo item with Mod-Enter
This commit is contained in:
@@ -3,6 +3,13 @@ import { NodeType } from "prosemirror-model";
|
||||
import { Command } from "prosemirror-state";
|
||||
import isNodeActive from "../queries/isNodeActive";
|
||||
|
||||
/**
|
||||
* Toggles the block type of the current selection between the given type and the toggle type.
|
||||
*
|
||||
* @param type The node type
|
||||
* @param toggleType The toggle node type
|
||||
* @returns A prosemirror command.
|
||||
*/
|
||||
export default function toggleBlockType(
|
||||
type: NodeType,
|
||||
toggleType: NodeType,
|
||||
|
||||
34
shared/editor/commands/toggleCheckboxItem.ts
Normal file
34
shared/editor/commands/toggleCheckboxItem.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { Command } from "prosemirror-state";
|
||||
import { findParentNode } from "@shared/editor/queries/findParentNode";
|
||||
|
||||
/**
|
||||
* A prosemirror command to toggle the checkbox item at the current selection.
|
||||
*
|
||||
* @returns A prosemirror command.
|
||||
*/
|
||||
export default function toggleCheckboxItem(): Command {
|
||||
return (state, dispatch) => {
|
||||
const { empty } = state.selection;
|
||||
|
||||
// if the selection has anything in it then use standard behavior
|
||||
if (!empty) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// check we're in a matching node
|
||||
const listItem = findParentNode(
|
||||
(node) => node.type === state.schema.nodes.checkbox_item
|
||||
)(state.selection);
|
||||
|
||||
if (!listItem) {
|
||||
return false;
|
||||
}
|
||||
|
||||
dispatch?.(
|
||||
state.tr.setNodeMarkup(listItem.pos, undefined, {
|
||||
checked: !listItem.node.attrs.checked,
|
||||
})
|
||||
);
|
||||
return true;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user