From 5b64af57818ddc57167079d16d8ea929c62c2be9 Mon Sep 17 00:00:00 2001 From: SB-virendrasolanke Date: Wed, 10 Dec 2025 15:24:25 +0530 Subject: [PATCH 1/3] fix : enum selector for try block --- .../TryIt/Parameters/parameter-utils.ts | 28 +++++++++++-------- .../TryIt/Servers/VariableEditor.tsx | 2 +- packages/elements-dev-portal/src/version.ts | 2 +- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/packages/elements-core/src/components/TryIt/Parameters/parameter-utils.ts b/packages/elements-core/src/components/TryIt/Parameters/parameter-utils.ts index 625fb9cfd..1c9169b56 100644 --- a/packages/elements-core/src/components/TryIt/Parameters/parameter-utils.ts +++ b/packages/elements-core/src/components/TryIt/Parameters/parameter-utils.ts @@ -14,7 +14,12 @@ const booleanOptions = [ ]; function enumOptions(enumValues: JSONSchema7Type[], required?: boolean) { - const options = map(enumValues, v => ({ value: typeof v === 'number' ? v : String(v) })); + const options = map(enumValues, v => { + // Handle objects and arrays by stringifying them + const value = + typeof v === 'object' && v !== null ? safeStringify(v) ?? String(v) : typeof v === 'number' ? v : String(v); + return { value, label: String(value) }; + }); return required ? options : [{ label: 'Not Set', value: '' }, ...options]; } @@ -48,7 +53,10 @@ export function parameterSupportsFileUpload(parameter?: Pick | Omit) { @@ -56,10 +64,6 @@ function exampleValue(example: Omit | Omit { return { value: stringifyValue(defaultValue), isDefault: true }; } - const examples = parameter.examples ?? []; - if (examples.length > 0) { - return { value: exampleValue(examples[0]) }; - } - + // If the parameter has enums, prioritize using the first enum value + // over examples, as examples might not match the enum values const enums = parameter.schema?.enum ?? []; if (enums.length > 0) { return { value: stringifyValue(enums[0]) }; } + const examples = parameter.examples ?? []; + if (examples.length > 0) { + return { value: exampleValue(examples[0]) }; + } + return { value: '' }; }; diff --git a/packages/elements-core/src/components/TryIt/Servers/VariableEditor.tsx b/packages/elements-core/src/components/TryIt/Servers/VariableEditor.tsx index d1206d04b..855982f7a 100644 --- a/packages/elements-core/src/components/TryIt/Servers/VariableEditor.tsx +++ b/packages/elements-core/src/components/TryIt/Servers/VariableEditor.tsx @@ -25,7 +25,7 @@ export const VariableEditor: React.FC = ({ variable, value, onCha ({ value: s, label: String(s) }))} - value={value || variable.default} - onChange={onChange} + options={encodedOptions} + value={encodedValue} + onChange={val => onChange && onChange(decodeSafeSelectorValue(String(val)))} /> ) : ( From 864f33e5f13e8b87281d55b3ee2597e17fd1904f Mon Sep 17 00:00:00 2001 From: SB-virendrasolanke Date: Fri, 19 Dec 2025 15:58:22 +0530 Subject: [PATCH 3/3] fix : removed redundunt code --- .../TryIt/Parameters/parameter-utils.ts | 2 +- .../TryIt/Servers/VariableEditor.tsx | 44 +------------------ 2 files changed, 2 insertions(+), 44 deletions(-) diff --git a/packages/elements-core/src/components/TryIt/Parameters/parameter-utils.ts b/packages/elements-core/src/components/TryIt/Parameters/parameter-utils.ts index a4e0f1211..8182e5bf7 100644 --- a/packages/elements-core/src/components/TryIt/Parameters/parameter-utils.ts +++ b/packages/elements-core/src/components/TryIt/Parameters/parameter-utils.ts @@ -18,7 +18,7 @@ const booleanOptions = [ * Special characters like quotes, brackets, etc. can break querySelector, * so we encode them using base64. */ -function encodeSafeSelectorValue(value: string | number): string | number { +export function encodeSafeSelectorValue(value: string | number): string | number { // Numbers are safe to use as-is if (typeof value === 'number') { return value; diff --git a/packages/elements-core/src/components/TryIt/Servers/VariableEditor.tsx b/packages/elements-core/src/components/TryIt/Servers/VariableEditor.tsx index 7fd038ac7..428eb4648 100644 --- a/packages/elements-core/src/components/TryIt/Servers/VariableEditor.tsx +++ b/packages/elements-core/src/components/TryIt/Servers/VariableEditor.tsx @@ -3,49 +3,7 @@ import * as React from 'react'; import { useUniqueId } from '../../../hooks/useUniqueId'; import { ServerVariable } from '../../../utils/http-spec/IServer'; - -/** - * Encodes a value to be safe for use in CSS selectors (data-key attributes). - * Special characters like quotes, brackets, etc. can break querySelector. - */ -function encodeSafeSelectorValue(value: string): string { - // Check if the value contains characters that would break CSS selectors - const hasSpecialChars = /["'\[\]\\(){}]/.test(value); - if (!hasSpecialChars) { - return value; - } - - // Encode to base64 to make it safe for CSS selectors - try { - return 'b64:' + btoa(value); - } catch (e) { - // If btoa fails (e.g., with unicode), fallback to encodeURIComponent - return 'enc:' + encodeURIComponent(value); - } -} - -/** - * Decodes a value that was encoded by encodeSafeSelectorValue - */ -function decodeSafeSelectorValue(value: string): string { - if (value.startsWith('b64:')) { - try { - return atob(value.substring(4)); - } catch (e) { - return value; - } - } - - if (value.startsWith('enc:')) { - try { - return decodeURIComponent(value.substring(4)); - } catch (e) { - return value; - } - } - - return value; -} +import { decodeSafeSelectorValue, encodeSafeSelectorValue } from '../Parameters/parameter-utils'; interface VariableProps { variable: ServerVariable;