Skip to content
Open
Show file tree
Hide file tree
Changes from all 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