@@ -7,10 +7,12 @@ import {
7
7
type Resource ,
8
8
type Resources ,
9
9
type WebstudioData ,
10
+ Pages ,
10
11
ROOT_INSTANCE_ID ,
11
12
SYSTEM_VARIABLE_ID ,
12
13
decodeDataVariableId ,
13
14
encodeDataVariableId ,
15
+ findTreeInstanceIds ,
14
16
findTreeInstanceIdsExcludingSlotDescendants ,
15
17
systemParameter ,
16
18
transpileExpression ,
@@ -19,6 +21,7 @@ import {
19
21
createJsonStringifyProxy ,
20
22
isPlainObject ,
21
23
} from "@webstudio-is/sdk/runtime" ;
24
+ import { setUnion } from "./shim" ;
22
25
23
26
const allowedJsChars = / [ A - Z a - z _ ] / ;
24
27
@@ -258,23 +261,35 @@ export const findAvailableVariables = ({
258
261
259
262
const traverseExpressions = ( {
260
263
startingInstanceId,
264
+ pages,
261
265
instances,
262
266
props,
263
267
dataSources,
264
268
resources,
265
269
update,
266
270
} : {
267
271
startingInstanceId : Instance [ "id" ] ;
272
+ pages : undefined | Pages ;
268
273
instances : Instances ;
269
274
props : Props ;
270
275
dataSources : DataSources ;
271
276
resources : Resources ;
272
277
update : ( expression : string , args ?: string [ ] ) => void | string ;
273
278
} ) => {
274
- const instanceIds = findTreeInstanceIdsExcludingSlotDescendants (
279
+ const pagesList = pages ? [ pages . homePage , ...pages . pages ] : [ ] ;
280
+ let instanceIds = findTreeInstanceIdsExcludingSlotDescendants (
275
281
instances ,
276
282
startingInstanceId
277
283
) ;
284
+ // global variables can be accessed on all pages and inside of slots
285
+ if ( startingInstanceId === ROOT_INSTANCE_ID ) {
286
+ for ( const page of pagesList ) {
287
+ instanceIds = setUnion (
288
+ instanceIds ,
289
+ findTreeInstanceIds ( instances , page . rootInstanceId )
290
+ ) ;
291
+ }
292
+ }
278
293
const resourceIds = new Set < Resource [ "id" ] > ( ) ;
279
294
280
295
for ( const instance of instances . values ( ) ) {
@@ -365,6 +380,7 @@ export const findUnsetVariableNames = ({
365
380
const unsetVariables = new Set < DataSource [ "name" ] > ( ) ;
366
381
traverseExpressions ( {
367
382
startingInstanceId : startingInstanceId ,
383
+ pages : undefined ,
368
384
instances,
369
385
props,
370
386
dataSources,
@@ -408,6 +424,7 @@ export const rebindTreeVariablesMutable = ({
408
424
}
409
425
traverseExpressions ( {
410
426
startingInstanceId,
427
+ pages : undefined ,
411
428
instances,
412
429
props,
413
430
dataSources,
@@ -434,7 +451,7 @@ export const rebindTreeVariablesMutable = ({
434
451
} ;
435
452
436
453
export const deleteVariableMutable = (
437
- data : Omit < WebstudioData , "pages" > ,
454
+ data : Omit < WebstudioData , "pages" > & { pages ?: Pages } ,
438
455
variableId : DataSource [ "id" ]
439
456
) => {
440
457
const dataSource = data . dataSources . get ( variableId ) ;
@@ -456,6 +473,7 @@ export const deleteVariableMutable = (
456
473
// unset deleted variable in expressions
457
474
traverseExpressions ( {
458
475
...data ,
476
+ pages : data . pages ,
459
477
startingInstanceId,
460
478
update : ( expression ) => {
461
479
expression = unsetExpressionVariables ( {
0 commit comments