diff --git a/sandpack-react/src/common/OpenInCodeSandboxButton/UnstyledOpenInCodeSandboxButton.tsx b/sandpack-react/src/common/OpenInCodeSandboxButton/UnstyledOpenInCodeSandboxButton.tsx index e0a8d23f7..9092d41be 100644 --- a/sandpack-react/src/common/OpenInCodeSandboxButton/UnstyledOpenInCodeSandboxButton.tsx +++ b/sandpack-react/src/common/OpenInCodeSandboxButton/UnstyledOpenInCodeSandboxButton.tsx @@ -38,23 +38,32 @@ const getFileParameters = ( export const UnstyledOpenInCodeSandboxButton: React.FC< React.HtmlHTMLAttributes > = ({ children, ...props }) => { - const [paramsValues, setParamsValues] = React.useState(""); const { sandpack } = useSandpack(); const formRef = React.useRef(null); + const [paramsValues, setParamsValues] = React.useState(); + React.useEffect( function debounce() { const timer = setTimeout(() => { const params = getFileParameters(sandpack.files, sandpack.environment); - setParamsValues(params); + const searchParams = new URLSearchParams({ + parameters: params, + query: new URLSearchParams({ + file: sandpack.activePath, + "from-sandpack": "true", + }).toString(), + }); + + setParamsValues(searchParams); }, 600); return (): void => { clearTimeout(timer); }; }, - [sandpack.environment, sandpack.files] + [sandpack.activePath, sandpack.environment, sandpack.files] ); // Register the usage of the codesandbox link @@ -63,19 +72,11 @@ export const UnstyledOpenInCodeSandboxButton: React.FC< // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - const searchParams = new URLSearchParams({ - parameters: paramsValues, - query: new URLSearchParams({ - file: sandpack.activePath, - "from-sandpack": "true", - }).toString(), - }); - /** * This is a safe limit to avoid too long requests (401), * as all parameters are attached in the URL */ - if (paramsValues.length > 1500) { + if ((paramsValues?.get?.("parameters")?.length ?? 0) > 1500) { return (