Skip to content

Commit 867643c

Browse files
committed
pass reference to global-state object when creating feature filter
1 parent c8581e8 commit 867643c

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

src/feature_filter/feature_filter.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ describe('filter', () => {
9797
expect(withinFilter.filter({zoom: 3}, featureInTile, canonical)).toBe(false);
9898
});
9999

100+
test('expression, global-state', () => {
101+
const {filter} = featureFilter(['==', ['global-state', 'x'], ['get', 'x']], {x: 1});
102+
expect(filter(undefined, {properties: {x: 1}} as any as Feature)).toBe(true);
103+
expect(filter(undefined, {properties: {x: 2}} as any as Feature)).toBe(false);
104+
});
105+
100106
legacyFilterTests(featureFilter);
101107

102108
});

src/feature_filter/index.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,11 @@ const filterSpec = {
7575
* passes its test.
7676
*
7777
* @private
78-
* @param {Array} filter MapLibre filter
79-
* @returns {Function} filter-evaluating function
78+
* @param filter MapLibre filter
79+
* @param [globalState] Global state object to be used for evaluating 'global-state' expressions
80+
* @returns filter-evaluating function
8081
*/
81-
export function featureFilter(filter: any): FeatureFilter {
82+
export function featureFilter(filter: any, globalState?: Record<string, any>): FeatureFilter {
8283
if (filter === null || filter === undefined) {
8384
return {filter: () => true, needGeometry: false, getGlobalStateRefs: () => new Set()};
8485
}
@@ -87,7 +88,7 @@ export function featureFilter(filter: any): FeatureFilter {
8788
filter = convertFilter(filter);
8889
}
8990

90-
const compiled = createExpression(filter, filterSpec as StylePropertySpecification);
91+
const compiled = createExpression(filter, filterSpec as StylePropertySpecification, globalState);
9192
if (compiled.result === 'error') {
9293
throw new Error(compiled.value.map(err => `${err.key}: ${err.message}`).join(', '));
9394
} else {

0 commit comments

Comments
 (0)