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
51 changes: 26 additions & 25 deletions apps/roam/src/components/DiscourseNodeMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ import { getNewDiscourseNodeText } from "~/utils/formatUtils";
import { OnloadArgs } from "roamjs-components/types";
import { formatHexColor } from "./settings/DiscourseNodeCanvasSettings";
import posthog from "posthog-js";
import {
getPersonalSetting,
setPersonalSetting,
} from "./settings/utils/accessors";

type Props = {
textarea?: HTMLTextAreaElement;
Expand Down Expand Up @@ -395,7 +399,9 @@ const normalizeKeyCombo = (combo: string) => {
});
};

export const getModifiersFromCombo = (comboKey: IKeyCombo) => {
export const getModifiersFromCombo = (
comboKey: IKeyCombo | { key: string; modifiers: number } | undefined,
) => {
if (!comboKey) return [];
return [
comboKey.modifiers & MODIFIER_BIT_MASKS.alt && "alt",
Expand All @@ -405,32 +411,26 @@ export const getModifiersFromCombo = (comboKey: IKeyCombo) => {
].filter(Boolean);
};

export const NodeMenuTriggerComponent = ({
extensionAPI,
}: {
extensionAPI: OnloadArgs["extensionAPI"];
}) => {
export const NodeMenuTriggerComponent = () => {
const inputRef = useRef<HTMLInputElement>(null);
const [isActive, setIsActive] = useState(false);
const [comboKey, setComboKey] = useState<IKeyCombo>(
() =>
(extensionAPI.settings.get(
"personal-node-menu-trigger",
) as IKeyCombo) || { modifiers: 0, key: "" },
);
const [comboKey, setComboKey] = useState<IKeyCombo>(() => {
const saved = getPersonalSetting<{ key: string; modifiers: number }>([
"Personal Node Menu Trigger",
]);
return saved ?? { modifiers: 0, key: "" };
});

const handleKeyDown = useCallback(
(e: React.KeyboardEvent) => {
e.stopPropagation();
e.preventDefault();
const comboObj = getKeyCombo(e.nativeEvent);
if (!comboObj.key) return;
const handleKeyDown = useCallback((e: React.KeyboardEvent) => {
e.stopPropagation();
e.preventDefault();
const comboObj = getKeyCombo(e.nativeEvent);
if (!comboObj.key) return;

setComboKey({ key: comboObj.key, modifiers: comboObj.modifiers });
extensionAPI.settings.set("personal-node-menu-trigger", comboObj);
},
[extensionAPI],
);
const newCombo = { key: comboObj.key, modifiers: comboObj.modifiers };
setComboKey(newCombo);
setPersonalSetting(["Personal Node Menu Trigger"], newCombo);
}, []);

const shortcut = useMemo(() => {
if (!comboKey.key) return "";
Expand All @@ -453,8 +453,9 @@ export const NodeMenuTriggerComponent = ({
hidden={!comboKey.key}
icon={"remove"}
onClick={() => {
setComboKey({ modifiers: 0, key: "" });
extensionAPI.settings.set("personal-node-menu-trigger", "");
const emptyCombo = { modifiers: 0, key: "" };
setComboKey(emptyCombo);
setPersonalSetting(["Personal Node Menu Trigger"], emptyCombo);
}}
minimal
/>
Expand Down
19 changes: 9 additions & 10 deletions apps/roam/src/components/DiscourseNodeSearchMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ import getDiscourseNodes, { DiscourseNode } from "~/utils/getDiscourseNodes";
import getDiscourseNodeFormatExpression from "~/utils/getDiscourseNodeFormatExpression";
import { Result } from "~/utils/types";
import { getSetting } from "~/utils/extensionSettings";
import {
getPersonalSetting,
setPersonalSetting,
} from "~/components/settings/utils/accessors";
import fuzzy from "fuzzy";

type Props = {
Expand Down Expand Up @@ -605,14 +609,9 @@ export const renderDiscourseNodeSearchMenu = (props: Props) => {
);
};

export const NodeSearchMenuTriggerSetting = ({
onloadArgs,
}: {
onloadArgs: OnloadArgs;
}) => {
const extensionAPI = onloadArgs.extensionAPI;
const [nodeSearchTrigger, setNodeSearchTrigger] = useState<string>(
getSetting("node-search-trigger", "@"),
export const NodeSearchMenuTriggerSetting = () => {
const [nodeSearchTrigger, setNodeSearchTriggerState] = useState<string>(
() => getPersonalSetting<string>(["Node Search Menu Trigger"])!,
);

const handleNodeSearchTriggerChange = (
Expand All @@ -625,8 +624,8 @@ export const NodeSearchMenuTriggerSetting = ({
.replace(/\+/g, "\\+")
.trim();

setNodeSearchTrigger(trigger);
extensionAPI.settings.set("node-search-trigger", trigger);
setNodeSearchTriggerState(trigger);
setPersonalSetting(["Node Search Menu Trigger"], trigger);
};
return (
<InputGroup
Expand Down
14 changes: 4 additions & 10 deletions apps/roam/src/components/canvas/uiOverrides.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import {
useValue,
useToasts,
} from "tldraw";
import { IKeyCombo } from "@blueprintjs/core";
import { DiscourseNode } from "~/utils/getDiscourseNodes";
import { getNewDiscourseNodeText } from "~/utils/formatUtils";
import createDiscourseNode from "~/utils/createDiscourseNode";
Expand All @@ -44,8 +43,7 @@ import { AddReferencedNodeType } from "./DiscourseRelationShape/DiscourseRelatio
import { dispatchToastEvent } from "./ToastListener";
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";

const convertToDiscourseNode = async ({
Expand Down Expand Up @@ -301,13 +299,9 @@ export const createUiOverrides = ({
}): TLUiOverrides => ({
tools: (editor, tools) => {
// Get the custom keyboard shortcut for the discourse tool
const discourseToolCombo = getSetting(DISCOURSE_TOOL_SHORTCUT_KEY, {
key: "",
modifiers: 0,
}) as IKeyCombo;

// For discourse tool, just use the key directly since we don't allow modifiers
const discourseToolShortcut = discourseToolCombo?.key?.toUpperCase() || "";
const discourseToolShortcut =
getPersonalSetting<string>(["Discourse Tool Shortcut"])?.toUpperCase() ||
"";

tools["discourse-tool"] = {
id: "discourse-tool",
Expand Down
2 changes: 1 addition & 1 deletion apps/roam/src/components/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export { default as DefaultFilters } from "./settings/DefaultFilters";
export { default as DiscourseContext } from "./DiscourseContext";
export { default as DiscourseContextOverlay } from "./DiscourseContextOverlay";
export { default as DiscourseNodeAttributes } from "./settings/DiscourseNodeAttributes";
export { default as DiscourseNodeAttributes, DiscourseNodeAttributesTab } from "./settings/DiscourseNodeAttributes";
export { default as DiscourseNodeCanvasSettings } from "./settings/DiscourseNodeCanvasSettings";
export { default as DiscourseNodeIndex } from "./settings/DiscourseNodeIndex";
export { default as DiscourseNodeMenu } from "./DiscourseNodeMenu";
Expand Down
Loading
Loading