diff --git a/apps/roam/src/components/SuggestionsBody.tsx b/apps/roam/src/components/SuggestionsBody.tsx index f2b0de587..da87182cb 100644 --- a/apps/roam/src/components/SuggestionsBody.tsx +++ b/apps/roam/src/components/SuggestionsBody.tsx @@ -24,10 +24,12 @@ import getDiscourseRelations from "~/utils/getDiscourseRelations"; import getDiscourseNodes from "~/utils/getDiscourseNodes"; import normalizePageTitle from "roamjs-components/queries/normalizePageTitle"; import { type RelationDetails } from "~/utils/hyde"; -import { getFormattedConfigTree } from "~/utils/discourseConfigRef"; import { render as renderToast } from "roamjs-components/components/Toast"; -import { getSetting } from "~/utils/extensionSettings"; -import { USE_REIFIED_RELATIONS } from "~/data/userSettings"; +import { + getFeatureFlag, + getGlobalSetting, +} from "~/components/settings/utils/accessors"; +import type { PageGroup } from "~/components/settings/utils/zodSchema"; import { createReifiedRelation } from "~/utils/createReifiedBlock"; import posthog from "posthog-js"; @@ -310,7 +312,7 @@ const SuggestionsBody = ({ }; const handleCreateBlock = async (node: SuggestedNode) => { - if (getSetting(USE_REIFIED_RELATIONS, false)) { + if (getFeatureFlag("Reified relation triples")) { if (discourseNode === false) { renderToast({ id: "suggestions-create-block-error", @@ -374,7 +376,7 @@ const SuggestionsBody = ({ tag, nodeType: node.type, nodeText: node.text, - useReifiedRelations: getSetting(USE_REIFIED_RELATIONS, false), + useReifiedRelations: getFeatureFlag("Reified relation triples"), }); setHydeFilteredNodes((prev) => prev.filter((n) => n.uid !== node.uid)); }; @@ -417,12 +419,12 @@ const SuggestionsBody = ({ }; useEffect(() => { - const config = getFormattedConfigTree(); - const groups = config.suggestiveMode.pageGroups.groups; + const groups = + getGlobalSetting(["Suggestive mode", "Page groups"]) ?? []; const groupsRecord = groups.reduce( (acc, group) => { - acc[group.name] = group.pages.map((p) => p.name); + acc[group.name] = group.pages; return acc; }, {} as Record, diff --git a/apps/roam/src/components/settings/AdminPanel.tsx b/apps/roam/src/components/settings/AdminPanel.tsx index 6466aafb2..99300149b 100644 --- a/apps/roam/src/components/settings/AdminPanel.tsx +++ b/apps/roam/src/components/settings/AdminPanel.tsx @@ -14,7 +14,11 @@ import { } from "@blueprintjs/core"; import Description from "roamjs-components/components/Description"; import { Select } from "@blueprintjs/select"; -import { getSetting, setSetting } from "~/utils/extensionSettings"; +import { setSetting } from "~/utils/extensionSettings"; +import { + getFeatureFlag, + setFeatureFlag, +} from "~/components/settings/utils/accessors"; import { getSupabaseContext, getLoggedInClient, @@ -38,11 +42,8 @@ import createBlock from "roamjs-components/writes/createBlock"; import deleteBlock from "roamjs-components/writes/deleteBlock"; import { USE_REIFIED_RELATIONS } from "~/data/userSettings"; import posthog from "posthog-js"; -<<<<<<< HEAD -======= -import { setFeatureFlag } from "~/components/settings/utils/accessors"; + import { FeatureFlagPanel } from "./components/BlockPropSettingPanels"; ->>>>>>> c0943ec1 (ENG-1454: Enable dual read feature flag) const NodeRow = ({ node }: { node: PConceptFull }) => { return ( @@ -267,7 +268,7 @@ const MigrationTab = (): React.ReactElement => { const [useMigrationResults, setMigrationResults] = useState(""); const [useOngoing, setOngoing] = useState(false); const [useDryRun, setDryRun] = useState(false); - const enabled = getSetting(USE_REIFIED_RELATIONS, false); + const enabled = getFeatureFlag("Reified relation triples"); const doMigrateRelations = async () => { setOngoing(true); try { @@ -352,7 +353,7 @@ const MigrationTab = (): React.ReactElement => { const FeatureFlagsTab = (): React.ReactElement => { const [useReifiedRelations, setUseReifiedRelations] = useState( - getSetting(USE_REIFIED_RELATIONS, false), + getFeatureFlag("Reified relation triples"), ); const settings = useMemo(() => { refreshConfigTree(); diff --git a/apps/roam/src/components/settings/DiscourseRelationConfigPanel.tsx b/apps/roam/src/components/settings/DiscourseRelationConfigPanel.tsx index e86681692..b8e5af2dc 100644 --- a/apps/roam/src/components/settings/DiscourseRelationConfigPanel.tsx +++ b/apps/roam/src/components/settings/DiscourseRelationConfigPanel.tsx @@ -50,7 +50,7 @@ import { getConditionLabels } from "~/utils/conditionToDatalog"; import { formatHexColor } from "./DiscourseNodeCanvasSettings"; import posthog from "posthog-js"; import { getSetting, setSetting } from "~/utils/extensionSettings"; -import { USE_REIFIED_RELATIONS } from "~/data/userSettings"; +import { getFeatureFlag } from "~/components/settings/utils/accessors"; const DEFAULT_SELECTED_RELATION = { display: "none", @@ -101,7 +101,7 @@ export const RelationEditPanel = ({ ), [nodes], ); - const useReifiedRelations = getSetting(USE_REIFIED_RELATIONS, false); + const useReifiedRelations = getFeatureFlag("Reified relation triples"); const containerRef = useRef(null); const idRef = useRef(0); const cyRef = useRef(); @@ -983,10 +983,7 @@ const DiscourseRelationConfigPanel: CustomField["options"]["component"] = ({ const [deleteConfirmation, setDeleteConfirmation] = useState( null, ); - const shouldHideCanvasRelation = getSetting( - USE_REIFIED_RELATIONS, - false, - ); + const shouldHideCanvasRelation = getFeatureFlag("Reified relation triples"); const visibleRelations = useMemo(() => { if (!shouldHideCanvasRelation) { return relations; diff --git a/apps/roam/src/components/settings/ExportSettings.tsx b/apps/roam/src/components/settings/ExportSettings.tsx index e6787af5c..6dadc405d 100644 --- a/apps/roam/src/components/settings/ExportSettings.tsx +++ b/apps/roam/src/components/settings/ExportSettings.tsx @@ -20,7 +20,6 @@ const DiscourseGraphExport = () => { title="remove special characters" description="Whether or not to remove the special characters in a file name" settingKeys={["Export", "Remove special characters"]} - initialValue={exportSettings.removeSpecialCharacters.value} order={1} uid={exportSettings.removeSpecialCharacters.uid} parentUid={parentUid} @@ -30,7 +29,6 @@ const DiscourseGraphExport = () => { title="resolve block references" description="Replaces block references in the markdown content with the block's content" settingKeys={["Export", "Resolve block references"]} - initialValue={exportSettings.optsRefs.value} order={3} uid={exportSettings.optsRefs.uid} parentUid={parentUid} @@ -39,7 +37,6 @@ const DiscourseGraphExport = () => { title="resolve block embeds" description="Replaces block embeds in the markdown content with the block's content tree" settingKeys={["Export", "Resolve block embeds"]} - initialValue={exportSettings.optsEmbeds.value} order={4} uid={exportSettings.optsEmbeds.uid} parentUid={parentUid} @@ -49,7 +46,6 @@ const DiscourseGraphExport = () => { title="append referenced node" description="If a referenced node is defined in a node's format, it will be appended to the discourse context" settingKeys={["Export", "Append referenced node"]} - initialValue={exportSettings.appendRefNodeContext.value} order={6} uid={exportSettings.appendRefNodeContext.uid} parentUid={parentUid} @@ -60,7 +56,6 @@ const DiscourseGraphExport = () => { title="link type" description="How to format links that appear in your export." settingKeys={["Export", "Link type"]} - initialValue={exportSettings.linkType.value || "alias"} order={5} options={["alias", "wikilinks", "roam url"]} uid={exportSettings.linkType.uid} @@ -71,7 +66,6 @@ const DiscourseGraphExport = () => { title="max filename length" description="Set the maximum name length for markdown file exports" settingKeys={["Export", "Max filename length"]} - initialValue={exportSettings.maxFilenameLength.value || 64} order={0} uid={exportSettings.maxFilenameLength.uid} parentUid={parentUid} @@ -80,7 +74,6 @@ const DiscourseGraphExport = () => { title="frontmatter" description="Specify all the lines that should go to the Frontmatter of the markdown file" settingKeys={["Export", "Frontmatter"]} - initialValue={exportSettings.frontmatter.values} order={2} uid={exportSettings.frontmatter.uid} parentUid={parentUid} diff --git a/apps/roam/src/components/settings/GeneralSettings.tsx b/apps/roam/src/components/settings/GeneralSettings.tsx index f28631ba8..4f277d5be 100644 --- a/apps/roam/src/components/settings/GeneralSettings.tsx +++ b/apps/roam/src/components/settings/GeneralSettings.tsx @@ -1,7 +1,7 @@ import React, { useMemo, useState } from "react"; import { getFormattedConfigTree } from "~/utils/discourseConfigRef"; import refreshConfigTree from "~/utils/refreshConfigTree"; -import { DEFAULT_CANVAS_PAGE_FORMAT } from "~/index"; + import { Alert, Intent } from "@blueprintjs/core"; import { GlobalTextPanel, @@ -24,7 +24,6 @@ const DiscourseGraphHome = () => { title="trigger" description="The trigger to create the node menu." settingKeys={["Trigger"]} - initialValue={settings.trigger.value || "\\"} order={0} uid={settings.trigger.uid} parentUid={settings.settingsUid} @@ -33,9 +32,6 @@ const DiscourseGraphHome = () => { title="Canvas Page Format" description="The page format for canvas pages" settingKeys={["Canvas page format"]} - initialValue={ - settings.canvasPageFormat.value || DEFAULT_CANVAS_PAGE_FORMAT - } order={1} uid={settings.canvasPageFormat.uid} parentUid={settings.settingsUid} @@ -43,7 +39,6 @@ const DiscourseGraphHome = () => { { const extensionAPI = onloadArgs.extensionAPI; const overlayHandler = getOverlayHandler(onloadArgs); - const settings = useMemo(() => getFormattedConfigTree(), []); return (
@@ -74,7 +73,7 @@ const HomePersonalSettings = ({ onloadArgs }: { onloadArgs: OnloadArgs }) => { }); }} /> - {settings.suggestiveModeEnabled?.value && ( + {getFeatureFlag("Suggestive mode enabled") && ( { - const settings = useMemo(() => { - refreshConfigTree(); - return getFormattedConfigTree(); - }, []); const getUid = (key: string) => getSubTree({ parentUid: node.type, @@ -395,7 +384,7 @@ const NodeConfig = ({
} /> - {settings.suggestiveModeEnabled.value && ( + {getFeatureFlag("Suggestive mode enabled") && ( void, delay = 250) => { let timeout: number; @@ -105,12 +106,7 @@ export const initObservers = async ({ const { title, uid } = getTitleAndUidFromHeader(h1); const props = { title, h1, onloadArgs }; - const isSuggestiveModeEnabled = getUidAndBooleanSetting({ - tree: getBasicTreeByParentUid( - getPageUidByPageTitle(DISCOURSE_CONFIG_PAGE_TITLE), - ), - text: "(BETA) Suggestive Mode Enabled", - }).value; + const isSuggestiveModeEnabled = getFeatureFlag("Suggestive mode enabled"); const node = findDiscourseNode({ uid, title }); const isDiscourseNode = node && node.backedBy !== "default"; @@ -256,12 +252,7 @@ export const initObservers = async ({ } }; - const configTree = getBasicTreeByParentUid(configPageUid); - const globalTrigger = getSettingValueFromTree({ - tree: configTree, - key: "trigger", - defaultValue: "\\", - }).trim(); + const globalTrigger = (getGlobalSetting(["Trigger"]) ?? "\\").trim(); const personalTriggerCombo = getPersonalSetting([ "Personal node menu trigger", ]); @@ -276,10 +267,7 @@ export const initObservers = async ({ className: "starred-pages-wrapper", callback: (el) => { void (async () => { - const isLeftSidebarEnabled = getUidAndBooleanSetting({ - tree: configTree, - text: "(BETA) Left Sidebar", - }).value; + const isLeftSidebarEnabled = getFeatureFlag("Enable left sidebar"); const container = el as HTMLDivElement; if (isLeftSidebarEnabled) { container.style.padding = "0"; diff --git a/apps/roam/src/utils/isCanvasPage.ts b/apps/roam/src/utils/isCanvasPage.ts index 591ccea5c..447002cf3 100644 --- a/apps/roam/src/utils/isCanvasPage.ts +++ b/apps/roam/src/utils/isCanvasPage.ts @@ -1,9 +1,10 @@ import { DEFAULT_CANVAS_PAGE_FORMAT } from ".."; -import { getFormattedConfigTree } from "./discourseConfigRef"; +import { getGlobalSetting } from "~/components/settings/utils/accessors"; export const isCanvasPage = ({ title }: { title: string }) => { - const { canvasPageFormat } = getFormattedConfigTree(); - const format = canvasPageFormat.value || DEFAULT_CANVAS_PAGE_FORMAT; + const format = + getGlobalSetting(["Canvas page format"]) || + DEFAULT_CANVAS_PAGE_FORMAT; const canvasRegex = new RegExp(`^${format}$`.replace(/\*/g, ".+")); return canvasRegex.test(title); }; diff --git a/apps/roam/src/utils/registerDiscourseDatalogTranslators.ts b/apps/roam/src/utils/registerDiscourseDatalogTranslators.ts index f7528c415..b707596de 100644 --- a/apps/roam/src/utils/registerDiscourseDatalogTranslators.ts +++ b/apps/roam/src/utils/registerDiscourseDatalogTranslators.ts @@ -19,9 +19,8 @@ import replaceDatalogVariables from "./replaceDatalogVariables"; import parseQuery from "./parseQuery"; import { fireQuerySync, getWhereClauses } from "./fireQuery"; import { toVar } from "./compileDatalog"; -import { getSetting } from "./extensionSettings"; +import { getFeatureFlag } from "~/components/settings/utils/accessors"; import { getExistingRelationPageUid } from "./createReifiedBlock"; -import { USE_REIFIED_RELATIONS } from "~/data/userSettings"; const hasTag = (node: DiscourseNode): node is DiscourseNode & { tag: string } => !!node.tag; @@ -410,9 +409,8 @@ const registerDiscourseDatalogTranslators = () => { registerDatalogTranslator({ key: label, callback: ({ source, target, uid }) => { - const useReifiedRelations = getSetting( - USE_REIFIED_RELATIONS, - false, + const useReifiedRelations = getFeatureFlag( + "Reified relation triples", ); const relationPageUid = getExistingRelationPageUid();