diff --git a/apps/roam/src/components/canvas/uiOverrides.tsx b/apps/roam/src/components/canvas/uiOverrides.tsx index c503ae44d..521becdce 100644 --- a/apps/roam/src/components/canvas/uiOverrides.tsx +++ b/apps/roam/src/components/canvas/uiOverrides.tsx @@ -53,6 +53,7 @@ import { getRelationColor } from "./DiscourseRelationShape/DiscourseRelationUtil import DiscourseGraphPanel from "./DiscourseToolPanel"; import { DISCOURSE_TOOL_SHORTCUT_KEY } from "~/data/userSettings"; import { getSetting } from "~/utils/extensionSettings"; +import { getPersonalSetting } from "~/components/settings/utils/accessors"; import { CustomDefaultToolbar } from "./CustomDefaultToolbar"; import { renderModifyNodeDialog } from "~/components/ModifyNodeDialog"; import { CanvasSyncMode } from "./canvasSyncMode"; @@ -396,13 +397,17 @@ export const createUiOverrides = ({ editor.setCurrentTool("discourse-tool"); }, }; + const canvasNodeShortcuts = + getPersonalSetting>(["Canvas node shortcuts"]) ?? + {}; + allNodes.forEach((node, index) => { const nodeId = node.type; tools[nodeId] = { id: nodeId, icon: "color", label: `shape.node.${node.type}` as TLUiTranslationKey, - kbd: node.shortcut, + kbd: canvasNodeShortcuts[nodeId] || node.shortcut, onSelect: () => { editor.setCurrentTool(nodeId); }, diff --git a/apps/roam/src/components/settings/CanvasShortcutSettings.tsx b/apps/roam/src/components/settings/CanvasShortcutSettings.tsx new file mode 100644 index 000000000..02a0a9c3d --- /dev/null +++ b/apps/roam/src/components/settings/CanvasShortcutSettings.tsx @@ -0,0 +1,37 @@ +import React, { useMemo } from "react"; +import getDiscourseNodes, { + excludeDefaultNodes, +} from "~/utils/getDiscourseNodes"; +import { getPersonalSetting } from "~/components/settings/utils/accessors"; +import { PersonalTextPanel } from "./components/BlockPropSettingPanels"; + +const CANVAS_NODE_SHORTCUTS_KEY = "Canvas node shortcuts"; + +const CanvasShortcutSettings = () => { + const nodes = useMemo( + () => getDiscourseNodes().filter(excludeDefaultNodes), + [], + ); + + return ( +
+ {nodes.map((node) => ( + ([ + CANVAS_NODE_SHORTCUTS_KEY, + node.type, + ]) || node.shortcut + } + placeholder={node.shortcut} + /> + ))} +
+ ); +}; + +export default CanvasShortcutSettings; diff --git a/apps/roam/src/components/settings/Settings.tsx b/apps/roam/src/components/settings/Settings.tsx index 3e836328b..f5c472744 100644 --- a/apps/roam/src/components/settings/Settings.tsx +++ b/apps/roam/src/components/settings/Settings.tsx @@ -23,6 +23,7 @@ import getDiscourseNodes, { } from "~/utils/getDiscourseNodes"; import NodeConfig from "./NodeConfig"; import HomePersonalSettings from "./HomePersonalSettings"; +import CanvasShortcutSettings from "./CanvasShortcutSettings"; import refreshConfigTree from "~/utils/refreshConfigTree"; import { FeedbackWidget } from "~/components/BirdEatsBugs"; import { getVersionWithDate } from "~/utils/getVersion"; @@ -170,6 +171,12 @@ export const SettingsDialog = ({ className="overflow-y-auto" panel={} /> + } + />