From ce8298bf9f0396d64f8b656c857632e2dc9be86c Mon Sep 17 00:00:00 2001 From: Bogdan Chadkin Date: Tue, 14 May 2024 18:36:49 +0300 Subject: [PATCH] fix: settings panel breaks when resource url is an expression (#3353) JSON.parse is not safe to parse expressions. Better execute it with try/catch. --- .../features/settings-panel/variable-popover.tsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/builder/app/builder/features/settings-panel/variable-popover.tsx b/apps/builder/app/builder/features/settings-panel/variable-popover.tsx index 36d112fe18..32674b74a8 100644 --- a/apps/builder/app/builder/features/settings-panel/variable-popover.tsx +++ b/apps/builder/app/builder/features/settings-panel/variable-popover.tsx @@ -33,7 +33,11 @@ import { Tooltip, theme, } from "@webstudio-is/design-system"; -import { isLocalResource, transpileExpression } from "@webstudio-is/sdk"; +import { + executeExpression, + isLocalResource, + transpileExpression, +} from "@webstudio-is/sdk"; import type { DataSource } from "@webstudio-is/sdk"; import { ExpressionEditor, @@ -388,7 +392,9 @@ const VariablePanel = forwardRef< const [variableType, setVariableType] = useState(() => { if ( variable?.type === "resource" && - isLocalResource(JSON.parse(resources.get(variable.resourceId)?.url ?? "")) + isLocalResource( + String(executeExpression(resources.get(variable.resourceId)?.url) ?? "") + ) ) { return "system-resource"; } @@ -642,7 +648,11 @@ export const VariablePopoverTrigger = forwardRef< variable?.type === "resource" && ( <> {isLocalResource( - JSON.parse(resources.get(variable.resourceId)?.url ?? "") + String( + executeExpression( + resources.get(variable.resourceId)?.url + ) ?? "" + ) ) === false && (