@@ -251,14 +251,19 @@ export function setTemporarySiteSpec(
251251 getState : ( ) => PlaygroundReduxState
252252 ) => {
253253 const siteSlug = deriveSlugFromSiteName ( siteName ) ;
254- // Filter out UI-only params so they don't cause unnecessary site recreation.
255- // This ensures existing temporary sites are reused when only route/modal changed.
256- const newSiteUrlParams = {
257- searchParams : filterUIOnlyParams (
258- parseSearchParams ( playgroundUrlWithQueryApiArgs . searchParams )
254+ // Store the full URL params including UI params like route/modal.
255+ const fullUrlParams = {
256+ searchParams : parseSearchParams (
257+ playgroundUrlWithQueryApiArgs . searchParams
259258 ) ,
260259 hash : playgroundUrlWithQueryApiArgs . hash ,
261260 } ;
261+ // For comparison, filter out UI-only params so we don't recreate
262+ // the site when only route/modal changed.
263+ const paramsForComparison = {
264+ searchParams : filterUIOnlyParams ( fullUrlParams . searchParams ) ,
265+ hash : fullUrlParams . hash ,
266+ } ;
262267
263268 const showTemporarySiteError = ( params : {
264269 error : SiteError ;
@@ -267,7 +272,7 @@ export function setTemporarySiteSpec(
267272 // Create a mock temporary site to associate the error with.
268273 const errorSite : SiteInfo = {
269274 slug : siteSlug ,
270- originalUrlParams : newSiteUrlParams ,
275+ originalUrlParams : fullUrlParams ,
271276 metadata : {
272277 name : siteName ,
273278 id : crypto . randomUUID ( ) ,
@@ -318,11 +323,17 @@ export function setTemporarySiteSpec(
318323
319324 const currentTemporarySite = selectTemporarySite ( getState ( ) ) ;
320325 if ( currentTemporarySite ) {
321- // If the current temporary site is the same as the site we're setting,
322- // then we don't need to create a new site.
326+ // If the current temporary site has the same non-UI params,
327+ // we don't need to create a new site.
328+ const currentParamsForComparison = {
329+ searchParams : filterUIOnlyParams (
330+ currentTemporarySite . originalUrlParams ?. searchParams || { }
331+ ) ,
332+ hash : currentTemporarySite . originalUrlParams ?. hash || '' ,
333+ } ;
323334 if (
324- JSON . stringify ( currentTemporarySite . originalUrlParams ) ===
325- JSON . stringify ( newSiteUrlParams )
335+ JSON . stringify ( currentParamsForComparison ) ===
336+ JSON . stringify ( paramsForComparison )
326337 ) {
327338 return currentTemporarySite ;
328339 }
@@ -373,7 +384,7 @@ export function setTemporarySiteSpec(
373384 // Compute the runtime configuration based on the resolved Blueprint:
374385 const newSiteInfo : SiteInfo = {
375386 slug : siteSlug ,
376- originalUrlParams : newSiteUrlParams ,
387+ originalUrlParams : fullUrlParams ,
377388 metadata : {
378389 name : siteName ,
379390 id : crypto . randomUUID ( ) ,
0 commit comments