Skip to content

Commit bbb37d8

Browse files
authored
ENG-1267: Separate duplicate node alert feature flag from suggestivemode (#898)
* ENG-1267: Separate duplicate node alert feature flag from suggestive mode * Default duplicate node alert flag to false * Disable duplicate node alert toggle when suggestive mode is off * Add suggestive mode runtime guard and fix incidental blank line * Remove legacy block sync props from duplicate node alert panel
1 parent 954355b commit bbb37d8

5 files changed

Lines changed: 24 additions & 2 deletions

File tree

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,11 @@ import { getFormattedConfigTree } from "~/utils/discourseConfigRef";
3333
import refreshConfigTree from "~/utils/refreshConfigTree";
3434
import createBlock from "roamjs-components/writes/createBlock";
3535
import deleteBlock from "roamjs-components/writes/deleteBlock";
36-
import { setFeatureFlag } from "~/components/settings/utils/accessors";
36+
import {
37+
setFeatureFlag,
38+
getFeatureFlag,
39+
} from "~/components/settings/utils/accessors";
40+
import { FeatureFlagPanel } from "./components/BlockPropSettingPanels";
3741

3842
const NodeRow = ({ node }: { node: PConceptFull }) => {
3943
return (
@@ -346,6 +350,14 @@ const FeatureFlagsTab = (): React.ReactElement => {
346350
</p>
347351
</Alert>
348352

353+
<FeatureFlagPanel
354+
title="Duplicate node alert"
355+
description="Show possible duplicate nodes when viewing a discourse node page. Requires Suggestive mode to be enabled."
356+
featureKey="Duplicate node alert enabled"
357+
initialValue={getFeatureFlag("Duplicate node alert enabled")}
358+
disabled={!suggestiveModeEnabled}
359+
/>
360+
349361
<Button
350362
className="w-96"
351363
icon="send-message"

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,7 @@ export const FeatureFlagPanel = ({
501501
description,
502502
featureKey,
503503
initialValue,
504+
disabled,
504505
onBeforeEnable,
505506
onAfterChange,
506507
parentUid,
@@ -511,6 +512,7 @@ export const FeatureFlagPanel = ({
511512
description: string;
512513
featureKey: keyof FeatureFlags;
513514
initialValue?: boolean;
515+
disabled?: boolean;
514516
onBeforeEnable?: () => Promise<boolean>;
515517
onAfterChange?: (checked: boolean) => void;
516518
} & RoamBlockSyncProps) => {
@@ -532,6 +534,7 @@ export const FeatureFlagPanel = ({
532534
settingKeys={[featureKey as string]}
533535
setter={featureFlagSetter}
534536
initialValue={initialValue}
537+
disabled={disabled}
535538
onBeforeChange={handleBeforeChange}
536539
onChange={onAfterChange}
537540
parentUid={parentUid}

apps/roam/src/components/settings/utils/zodSchema.example.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,13 @@ const discourseNodeSettings: DiscourseNodeSettings = {
8989
const featureFlags: FeatureFlags = {
9090
"Enable left sidebar": true,
9191
"Suggestive mode enabled": true,
92+
"Duplicate node alert enabled": true,
9293
};
9394

9495
const defaultFeatureFlags: FeatureFlags = {
9596
"Enable left sidebar": false,
9697
"Suggestive mode enabled": false,
98+
"Duplicate node alert enabled": false,
9799
};
98100

99101
const exportSettings: ExportSettings = {

apps/roam/src/components/settings/utils/zodSchema.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ export const DiscourseRelationSchema = z.object({
156156
export const FeatureFlagsSchema = z.object({
157157
"Enable left sidebar": z.boolean().default(false),
158158
"Suggestive mode enabled": z.boolean().default(false),
159+
"Duplicate node alert enabled": z.boolean().default(false),
159160
});
160161

161162
export const ExportSettingsSchema = z.object({

apps/roam/src/utils/initializeObserversAndListeners.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import { formatHexColor } from "~/components/settings/DiscourseNodeCanvasSetting
5454
import { getSetting } from "./extensionSettings";
5555
import { mountLeftSidebar } from "~/components/LeftSidebarView";
5656
import { getUidAndBooleanSetting } from "./getExportSettings";
57+
import { getFeatureFlag } from "~/components/settings/utils/accessors";
5758
import { getCleanTagText } from "~/components/settings/NodeConfig";
5859
import getPleasingColors from "@repo/utils/getPleasingColors";
5960
import { colord } from "colord";
@@ -116,7 +117,10 @@ export const initObservers = async ({
116117
const isDiscourseNode = node && node.backedBy !== "default";
117118
if (isDiscourseNode) {
118119
renderDiscourseContext({ h1, uid });
119-
if (isSuggestiveModeEnabled) {
120+
if (
121+
isSuggestiveModeEnabled &&
122+
getFeatureFlag("Duplicate node alert enabled")
123+
) {
120124
renderPossibleDuplicates(h1, title, node);
121125
}
122126
const linkedReferencesDiv = document.querySelector(

0 commit comments

Comments
 (0)