|
@@ -1,13 +1,14 @@
|
|
import { useCallback, useContext, useMemo } from 'react';
|
|
import { useCallback, useContext, useMemo } from 'react';
|
|
import { TextBlockKeyEventHandlerParams } from '$app/interfaces/document';
|
|
import { TextBlockKeyEventHandlerParams } from '$app/interfaces/document';
|
|
import { keyBoardEventKeyMap } from '$app/constants/document/text_block';
|
|
import { keyBoardEventKeyMap } from '$app/constants/document/text_block';
|
|
-import { canHandleToHeadingBlock } from '$app/utils/document/slate/markdown';
|
|
|
|
|
|
+import { canHandleToHeadingBlock, canHandleToCheckboxBlock } from '$app/utils/document/slate/markdown';
|
|
import { useAppDispatch } from '$app/stores/store';
|
|
import { useAppDispatch } from '$app/stores/store';
|
|
import { DocumentControllerContext } from '$app/stores/effects/document/document_controller';
|
|
import { DocumentControllerContext } from '$app/stores/effects/document/document_controller';
|
|
import { turnToHeadingBlockThunk } from '$app_reducers/document/async-actions/blocks/heading';
|
|
import { turnToHeadingBlockThunk } from '$app_reducers/document/async-actions/blocks/heading';
|
|
|
|
+import { turnToTodoListBlockThunk } from '$app_reducers/document/async-actions/blocks/todo_list';
|
|
|
|
|
|
export function useMarkDown(id: string) {
|
|
export function useMarkDown(id: string) {
|
|
- const { toHeadingBlockAction } = useActions(id);
|
|
|
|
|
|
+ const { toHeadingBlockAction, toCheckboxBlockAction } = useActions(id);
|
|
const toHeadingBlockEvent = useMemo(() => {
|
|
const toHeadingBlockEvent = useMemo(() => {
|
|
return {
|
|
return {
|
|
triggerEventKey: keyBoardEventKeyMap.Space,
|
|
triggerEventKey: keyBoardEventKeyMap.Space,
|
|
@@ -16,7 +17,18 @@ export function useMarkDown(id: string) {
|
|
};
|
|
};
|
|
}, [toHeadingBlockAction]);
|
|
}, [toHeadingBlockAction]);
|
|
|
|
|
|
- const markdownEvents = useMemo(() => [toHeadingBlockEvent], [toHeadingBlockEvent]);
|
|
|
|
|
|
+ const toCheckboxBlockEvent = useMemo(() => {
|
|
|
|
+ return {
|
|
|
|
+ triggerEventKey: keyBoardEventKeyMap.Space,
|
|
|
|
+ canHandle: canHandleToCheckboxBlock,
|
|
|
|
+ handler: toCheckboxBlockAction,
|
|
|
|
+ };
|
|
|
|
+ }, [toCheckboxBlockAction]);
|
|
|
|
+
|
|
|
|
+ const markdownEvents = useMemo(
|
|
|
|
+ () => [toHeadingBlockEvent, toCheckboxBlockEvent],
|
|
|
|
+ [toHeadingBlockEvent, toCheckboxBlockEvent]
|
|
|
|
+ );
|
|
|
|
|
|
return {
|
|
return {
|
|
markdownEvents,
|
|
markdownEvents,
|
|
@@ -35,7 +47,17 @@ function useActions(id: string) {
|
|
[controller, dispatch, id]
|
|
[controller, dispatch, id]
|
|
);
|
|
);
|
|
|
|
|
|
|
|
+ const toCheckboxBlockAction = useCallback(
|
|
|
|
+ (...args: TextBlockKeyEventHandlerParams) => {
|
|
|
|
+ if (!controller) return;
|
|
|
|
+ const [_event, editor] = args;
|
|
|
|
+ dispatch(turnToTodoListBlockThunk({ id, controller, editor }));
|
|
|
|
+ },
|
|
|
|
+ [controller, dispatch, id]
|
|
|
|
+ );
|
|
|
|
+
|
|
return {
|
|
return {
|
|
toHeadingBlockAction,
|
|
toHeadingBlockAction,
|
|
|
|
+ toCheckboxBlockAction,
|
|
};
|
|
};
|
|
}
|
|
}
|