Skip to content

Commit 40b63ec

Browse files
authored
ENG-636 Add auto canvas relations setting to user preferences (#363)
* Add auto canvas relations setting to user preferences * . * Update auto canvas relations setting to default to false * Refactor relation deletion logic in BaseDiscourseNodeUtil to ensure relations are deleted before creating existing relations when auto canvas relations are enabled.
1 parent 96544bc commit 40b63ec

4 files changed

Lines changed: 50 additions & 10 deletions

File tree

apps/roam/src/components/canvas/DiscourseNodeUtil.tsx

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ import calcCanvasNodeSizeAndImg from "~/utils/calcCanvasNodeSizeAndImg";
3838
import { createTextJsxFromSpans } from "./DiscourseRelationShape/helpers";
3939
import { loadImage } from "~/utils/loadImage";
4040
import { getRelationColor } from "./DiscourseRelationShape/DiscourseRelationUtil";
41+
import { AUTO_CANVAS_RELATIONS_KEY } from "~/data/userSettings";
42+
import { getSetting } from "~/utils/extensionSettings";
4143

4244
// TODO REPLACE WITH TLDRAW DEFAULTS
4345
// https://github.com/tldraw/tldraw/pull/1580/files
@@ -544,13 +546,19 @@ export class BaseDiscourseNodeUtil extends ShapeUtil<DiscourseNodeShape> {
544546
this.updateProps(shape.id, shape.type, { title: text, uid });
545547

546548
// Update Shape Relations
547-
const relationIds = getRelationIds();
548-
this.deleteRelationsInCanvas({ shape, relationIds });
549-
await this.createExistingRelations({
550-
shape,
551-
relationIds,
552-
finalUid: uid,
553-
});
549+
const autoCanvasRelations = getSetting<boolean>(
550+
AUTO_CANVAS_RELATIONS_KEY,
551+
false,
552+
);
553+
if (autoCanvasRelations) {
554+
const relationIds = getRelationIds();
555+
this.deleteRelationsInCanvas({ shape, relationIds });
556+
await this.createExistingRelations({
557+
shape,
558+
relationIds,
559+
finalUid: uid,
560+
});
561+
}
554562

555563
editor.setEditingShape(null);
556564
}}

apps/roam/src/components/canvas/Tldraw.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ import { createMigrations } from "./DiscourseRelationShape/discourseRelationMigr
8282
import ToastListener, { dispatchToastEvent } from "./ToastListener";
8383
import sendErrorEmail from "~/utils/sendErrorEmail";
8484
import { TLDRAW_DATA_ATTRIBUTE } from "./tldrawStyles";
85+
import { AUTO_CANVAS_RELATIONS_KEY } from "~/data/userSettings";
86+
import { getSetting } from "~/utils/extensionSettings";
8587

8688
declare global {
8789
interface Window {
@@ -829,9 +831,15 @@ const InsideEditorAndUiContext = ({
829831
editor.sideEffects.registerAfterCreateHandler("shape", (shape) => {
830832
const util = editor.getShapeUtil(shape);
831833
if (util instanceof BaseDiscourseNodeUtil) {
832-
void util.createExistingRelations({
833-
shape: shape as DiscourseNodeShape,
834-
});
834+
const autoCanvasRelations = getSetting<boolean>(
835+
AUTO_CANVAS_RELATIONS_KEY,
836+
false,
837+
);
838+
if (autoCanvasRelations) {
839+
void util.createExistingRelations({
840+
shape: shape as DiscourseNodeShape,
841+
});
842+
}
835843
}
836844
});
837845

apps/roam/src/components/settings/HomePersonalSettings.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
hideDiscourseFloatingMenu,
1414
} from "~/components/DiscourseFloatingMenu";
1515
import { NodeSearchMenuTriggerSetting } from "../DiscourseNodeSearchMenu";
16+
import { AUTO_CANVAS_RELATIONS_KEY } from "~/data/userSettings";
1617

1718
const HomePersonalSettings = ({ onloadArgs }: { onloadArgs: OnloadArgs }) => {
1819
const extensionAPI = onloadArgs.extensionAPI;
@@ -143,6 +144,28 @@ const HomePersonalSettings = ({ onloadArgs }: { onloadArgs: OnloadArgs }) => {
143144
</>
144145
}
145146
/>
147+
<Checkbox
148+
defaultChecked={
149+
extensionAPI.settings.get(AUTO_CANVAS_RELATIONS_KEY) === true
150+
}
151+
onChange={(e) => {
152+
const target = e.target as HTMLInputElement;
153+
void extensionAPI.settings.set(
154+
AUTO_CANVAS_RELATIONS_KEY,
155+
target.checked,
156+
);
157+
}}
158+
labelElement={
159+
<>
160+
Auto Canvas Relations
161+
<Description
162+
description={
163+
"Automatically add discourse relations to canvas when a node is added"
164+
}
165+
/>
166+
</>
167+
}
168+
/>
146169
</div>
147170
);
148171
};

apps/roam/src/data/userSettings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export const DEFAULT_CANVAS_PAGE_FORMAT_KEY = "default-canvas-page-format";
33
export const HIDE_METADATA_KEY = "hide-metadata";
44
export const DEFAULT_FILTERS_KEY = "default-filters";
55
export const QUERY_BUILDER_SETTINGS_KEY = "query-builder-settings";
6+
export const AUTO_CANVAS_RELATIONS_KEY = "auto-canvas-relations";

0 commit comments

Comments
 (0)