Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion apps/roam/src/components/canvas/uiOverrides.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -396,13 +397,17 @@ export const createUiOverrides = ({
editor.setCurrentTool("discourse-tool");
},
};
const canvasNodeShortcuts =
getPersonalSetting<Record<string, string>>(["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);
},
Expand Down
37 changes: 37 additions & 0 deletions apps/roam/src/components/settings/CanvasShortcutSettings.tsx
Original file line number Diff line number Diff line change
@@ -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 (
<div className="flex flex-col gap-4 p-1">
{nodes.map((node) => (
<PersonalTextPanel
key={node.type}
title={node.text}
description={`Default: ${node.shortcut || "none"}. Changes take effect next time a canvas is opened.`}
settingKeys={[CANVAS_NODE_SHORTCUTS_KEY, node.type]}
initialValue={
getPersonalSetting<string>([
CANVAS_NODE_SHORTCUTS_KEY,
node.type,
]) || node.shortcut
}
placeholder={node.shortcut}
/>
))}
</div>
);
};

export default CanvasShortcutSettings;
7 changes: 7 additions & 0 deletions apps/roam/src/components/settings/Settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -170,6 +171,12 @@ export const SettingsDialog = ({
className="overflow-y-auto"
panel={<QuerySettings extensionAPI={extensionAPI} />}
/>
<Tab
id="canvas-shortcuts-personal-settings"
title="Canvas"
className="overflow-y-auto"
panel={<CanvasShortcutSettings />}
/>
<Tab
id="left-sidebar-personal-settings"
title="Left sidebar"
Expand Down
2 changes: 2 additions & 0 deletions apps/roam/src/components/settings/utils/zodSchema.example.ts
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ const personalSettings: PersonalSettings = {
"Auto canvas relations": true,
"Disable product diagnostics": false,
"Reified relation triples": true,
"Canvas node shortcuts": { "_CLM-node": "X", "_QUE-node": "W" },
Query: {
"Hide query metadata": true,
"Default page size": 25,
Expand Down Expand Up @@ -403,6 +404,7 @@ const defaultPersonalSettings: PersonalSettings = {
"Auto canvas relations": false,
"Disable product diagnostics": false,
"Reified relation triples": false,
"Canvas node shortcuts": {},
Query: {
"Hide query metadata": false,
"Default page size": 10,
Expand Down
1 change: 1 addition & 0 deletions apps/roam/src/components/settings/utils/zodSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ export const PersonalSettingsSchema = z.object({
"Streamline styling": z.boolean().default(false),
"Auto canvas relations": z.boolean().default(false),
"Disable product diagnostics": z.boolean().default(false),
"Canvas node shortcuts": z.record(z.string(), z.string()).default({}),
Query: QuerySettingsSchema.default({}),
});

Expand Down
Loading