Skip to content

fix(ios): resolve pending layer waiters - #4288

Open
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters
Open

fix(ios): resolve pending layer waiters#4288
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters

Conversation

@LukasB-DEV

Copy link
Copy Markdown

Description

On iOS, a layer mounted with belowLayerID before its anchor layer exists is queued by waitForLayerWithID. However, RNMBXMapView.layerAdded(_:) was left as a TODO, so the queued callbacks were never invoked after the anchor layer was added.

As a result, the dependent layer remained absent from the map.

This change removes and invokes the callbacks waiting for the newly added layer. It mirrors the existing Android implementation and also prevents fulfilled callbacks from remaining retained in layerWaiters.

This is a general iOS layer-ordering issue and is not specific to an application integration.

No linked issue.

Reproduction and verification

Tested against unmodified main

Environment:

  • @rnmapbox/maps 10.3.5
  • Mapbox Maps SDK v11.23.1
  • React Native New Architecture
  • iPhone 17 Pro Simulator
  • iOS 26.5
  • Xcode 26.6
  • Node.js 22.16.0

Before the fix:

  • FAIL: WAITING LAYER MISSING
  • The magenta anchor layer was visible.
  • The blue layer waiting for belowLayerID="anchor-layer" was absent.

After the fix:

  • PASS: WAITING LAYER RENDERED
  • Both the blue waiting layer and the magenta anchor layer were visible.

Checklist

  • I've read CONTRIBUTING.md
  • I updated the doc/other generated code with running yarn generate in the root folder
    • yarn generate completed successfully and produced no changes.
  • I have tested the fix on the /example app.
    • In V11 mode/ios
    • In New Architecture mode/ios
    • In V11 mode/android — not applicable to this iOS-only change
    • In New Architecture mode/android — not applicable to this iOS-only change
  • I added/updated a sample — not applicable; this is a bug fix and the temporary reproducer was intentionally kept out of the final commit.

Screenshot OR Video

Before — unfixed main:

image

After — commit 9af2571:

image

Tests

  • yarn generate — passed, generated tree remained unchanged
  • yarn test — passed, 22 test suites and 112 tests
  • ESLint — 0 errors; existing repository warnings only
  • yarn typecheck — passed
  • iOS Example Debug build — passed before and after the fix
  • Reproducer ESLint check — passed
  • git diff --check — passed

Component to reproduce the issue you're fixing

BugReportExample.js
importReactfrom'react';import{Text,View}from'react-native';import{Camera,LineLayer,MapView,ShapeSource,StyleURL,}from'@rnmapbox/maps';constroutes={type: 'FeatureCollection',features: [{type: 'Feature',properties: {kind: 'waiting'},geometry: {type: 'LineString',coordinates: [[-74.012,40.716],[-74.0,40.716],],},},{type: 'Feature',properties: {kind: 'anchor'},geometry: {type: 'LineString',coordinates: [[-74.012,40.713],[-74.0,40.713],],},},],};conststyles={map: {flex: 1},status: {position: 'absolute',top: 60,left: 12,right: 12,padding: 12,backgroundColor: 'white',},statusText: {color: 'black',fontWeight: '700'},};classBugReportExampleextendsReact.Component{state={status: 'CHECKING'};checkWaitingLayer=async()=>{try{constresult=awaitthis.map.queryRenderedFeaturesInRect([],null,['waiting-layer',]);this.setState({status: result?.features?.length
? 'PASS: WAITING LAYER RENDERED'
: 'FAIL: WAITING LAYER MISSING',});}catch{this.setState({status: 'FAIL: WAITING LAYER MISSING'});}};render(){return(<Viewstyle={styles.map}><MapViewref={(map)=>{this.map=map;}}style={styles.map}styleURL={StyleURL.Light}onMapIdle={this.checkWaitingLayer}><CameradefaultSettings={{centerCoordinate: [-74.006,40.7145],zoomLevel: 14,}}/><ShapeSourceid="layer-waiter-reproducer"shape={routes}><LineLayerid="waiting-layer"belowLayerID="anchor-layer"filter={['==',['get','kind'],'waiting']}style={{lineColor: '#0066ff',lineWidth: 12}}/><LineLayerid="anchor-layer"filter={['==',['get','kind'],'anchor']}style={{lineColor: '#ff0066',lineWidth: 12}}/></ShapeSource></MapView><Viewstyle={styles.status}><TexttestID="layer-waiter-status"style={styles.statusText}>{this.state.status}</Text></View></View>);}}exportdefaultBugReportExample;

@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@LukasB-DEV
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
fix(ios): resolve pending layer waiters by LukasB-DEV · Pull Request #4288 · rnmapbox/maps · GitHub
Skip to content

fix(ios): resolve pending layer waiters - #4288

Open
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters
Open

fix(ios): resolve pending layer waiters#4288
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters

Conversation

@LukasB-DEV

Copy link
Copy Markdown

Description

On iOS, a layer mounted with belowLayerID before its anchor layer exists is queued by waitForLayerWithID. However, RNMBXMapView.layerAdded(_:) was left as a TODO, so the queued callbacks were never invoked after the anchor layer was added.

As a result, the dependent layer remained absent from the map.

This change removes and invokes the callbacks waiting for the newly added layer. It mirrors the existing Android implementation and also prevents fulfilled callbacks from remaining retained in layerWaiters.

This is a general iOS layer-ordering issue and is not specific to an application integration.

No linked issue.

Reproduction and verification

Tested against unmodified main

Environment:

  • @rnmapbox/maps 10.3.5
  • Mapbox Maps SDK v11.23.1
  • React Native New Architecture
  • iPhone 17 Pro Simulator
  • iOS 26.5
  • Xcode 26.6
  • Node.js 22.16.0

Before the fix:

  • FAIL: WAITING LAYER MISSING
  • The magenta anchor layer was visible.
  • The blue layer waiting for belowLayerID="anchor-layer" was absent.

After the fix:

  • PASS: WAITING LAYER RENDERED
  • Both the blue waiting layer and the magenta anchor layer were visible.

Checklist

  • I've read CONTRIBUTING.md
  • I updated the doc/other generated code with running yarn generate in the root folder
    • yarn generate completed successfully and produced no changes.
  • I have tested the fix on the /example app.
    • In V11 mode/ios
    • In New Architecture mode/ios
    • In V11 mode/android — not applicable to this iOS-only change
    • In New Architecture mode/android — not applicable to this iOS-only change
  • I added/updated a sample — not applicable; this is a bug fix and the temporary reproducer was intentionally kept out of the final commit.

Screenshot OR Video

Before — unfixed main:

image

After — commit 9af2571:

image

Tests

  • yarn generate — passed, generated tree remained unchanged
  • yarn test — passed, 22 test suites and 112 tests
  • ESLint — 0 errors; existing repository warnings only
  • yarn typecheck — passed
  • iOS Example Debug build — passed before and after the fix
  • Reproducer ESLint check — passed
  • git diff --check — passed

Component to reproduce the issue you're fixing

BugReportExample.js
importReactfrom'react';import{Text,View}from'react-native';import{Camera,LineLayer,MapView,ShapeSource,StyleURL,}from'@rnmapbox/maps';constroutes={type: 'FeatureCollection',features: [{type: 'Feature',properties: {kind: 'waiting'},geometry: {type: 'LineString',coordinates: [[-74.012,40.716],[-74.0,40.716],],},},{type: 'Feature',properties: {kind: 'anchor'},geometry: {type: 'LineString',coordinates: [[-74.012,40.713],[-74.0,40.713],],},},],};conststyles={map: {flex: 1},status: {position: 'absolute',top: 60,left: 12,right: 12,padding: 12,backgroundColor: 'white',},statusText: {color: 'black',fontWeight: '700'},};classBugReportExampleextendsReact.Component{state={status: 'CHECKING'};checkWaitingLayer=async()=>{try{constresult=awaitthis.map.queryRenderedFeaturesInRect([],null,['waiting-layer',]);this.setState({status: result?.features?.length
? 'PASS: WAITING LAYER RENDERED'
: 'FAIL: WAITING LAYER MISSING',});}catch{this.setState({status: 'FAIL: WAITING LAYER MISSING'});}};render(){return(<Viewstyle={styles.map}><MapViewref={(map)=>{this.map=map;}}style={styles.map}styleURL={StyleURL.Light}onMapIdle={this.checkWaitingLayer}><CameradefaultSettings={{centerCoordinate: [-74.006,40.7145],zoomLevel: 14,}}/><ShapeSourceid="layer-waiter-reproducer"shape={routes}><LineLayerid="waiting-layer"belowLayerID="anchor-layer"filter={['==',['get','kind'],'waiting']}style={{lineColor: '#0066ff',lineWidth: 12}}/><LineLayerid="anchor-layer"filter={['==',['get','kind'],'anchor']}style={{lineColor: '#ff0066',lineWidth: 12}}/></ShapeSource></MapView><Viewstyle={styles.status}><TexttestID="layer-waiter-status"style={styles.statusText}>{this.state.status}</Text></View></View>);}}exportdefaultBugReportExample;

@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@LukasB-DEV
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ios): resolve pending layer waiters by LukasB-DEV · Pull Request #4288 · rnmapbox/maps · GitHub
Skip to content

fix(ios): resolve pending layer waiters - #4288

Open
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters
Open

fix(ios): resolve pending layer waiters#4288
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters

Conversation

@LukasB-DEV

Copy link
Copy Markdown

Description

On iOS, a layer mounted with belowLayerID before its anchor layer exists is queued by waitForLayerWithID. However, RNMBXMapView.layerAdded(_:) was left as a TODO, so the queued callbacks were never invoked after the anchor layer was added.

As a result, the dependent layer remained absent from the map.

This change removes and invokes the callbacks waiting for the newly added layer. It mirrors the existing Android implementation and also prevents fulfilled callbacks from remaining retained in layerWaiters.

This is a general iOS layer-ordering issue and is not specific to an application integration.

No linked issue.

Reproduction and verification

Tested against unmodified main

Environment:

  • @rnmapbox/maps 10.3.5
  • Mapbox Maps SDK v11.23.1
  • React Native New Architecture
  • iPhone 17 Pro Simulator
  • iOS 26.5
  • Xcode 26.6
  • Node.js 22.16.0

Before the fix:

  • FAIL: WAITING LAYER MISSING
  • The magenta anchor layer was visible.
  • The blue layer waiting for belowLayerID="anchor-layer" was absent.

After the fix:

  • PASS: WAITING LAYER RENDERED
  • Both the blue waiting layer and the magenta anchor layer were visible.

Checklist

  • I've read CONTRIBUTING.md
  • I updated the doc/other generated code with running yarn generate in the root folder
    • yarn generate completed successfully and produced no changes.
  • I have tested the fix on the /example app.
    • In V11 mode/ios
    • In New Architecture mode/ios
    • In V11 mode/android — not applicable to this iOS-only change
    • In New Architecture mode/android — not applicable to this iOS-only change
  • I added/updated a sample — not applicable; this is a bug fix and the temporary reproducer was intentionally kept out of the final commit.

Screenshot OR Video

Before — unfixed main:

image

After — commit 9af2571:

image

Tests

  • yarn generate — passed, generated tree remained unchanged
  • yarn test — passed, 22 test suites and 112 tests
  • ESLint — 0 errors; existing repository warnings only
  • yarn typecheck — passed
  • iOS Example Debug build — passed before and after the fix
  • Reproducer ESLint check — passed
  • git diff --check — passed

Component to reproduce the issue you're fixing

BugReportExample.js
importReactfrom'react';import{Text,View}from'react-native';import{Camera,LineLayer,MapView,ShapeSource,StyleURL,}from'@rnmapbox/maps';constroutes={type: 'FeatureCollection',features: [{type: 'Feature',properties: {kind: 'waiting'},geometry: {type: 'LineString',coordinates: [[-74.012,40.716],[-74.0,40.716],],},},{type: 'Feature',properties: {kind: 'anchor'},geometry: {type: 'LineString',coordinates: [[-74.012,40.713],[-74.0,40.713],],},},],};conststyles={map: {flex: 1},status: {position: 'absolute',top: 60,left: 12,right: 12,padding: 12,backgroundColor: 'white',},statusText: {color: 'black',fontWeight: '700'},};classBugReportExampleextendsReact.Component{state={status: 'CHECKING'};checkWaitingLayer=async()=>{try{constresult=awaitthis.map.queryRenderedFeaturesInRect([],null,['waiting-layer',]);this.setState({status: result?.features?.length
? 'PASS: WAITING LAYER RENDERED'
: 'FAIL: WAITING LAYER MISSING',});}catch{this.setState({status: 'FAIL: WAITING LAYER MISSING'});}};render(){return(<Viewstyle={styles.map}><MapViewref={(map)=>{this.map=map;}}style={styles.map}styleURL={StyleURL.Light}onMapIdle={this.checkWaitingLayer}><CameradefaultSettings={{centerCoordinate: [-74.006,40.7145],zoomLevel: 14,}}/><ShapeSourceid="layer-waiter-reproducer"shape={routes}><LineLayerid="waiting-layer"belowLayerID="anchor-layer"filter={['==',['get','kind'],'waiting']}style={{lineColor: '#0066ff',lineWidth: 12}}/><LineLayerid="anchor-layer"filter={['==',['get','kind'],'anchor']}style={{lineColor: '#ff0066',lineWidth: 12}}/></ShapeSource></MapView><Viewstyle={styles.status}><TexttestID="layer-waiter-status"style={styles.statusText}>{this.state.status}</Text></View></View>);}}exportdefaultBugReportExample;

@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@LukasB-DEV
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ios): resolve pending layer waiters by LukasB-DEV · Pull Request #4288 · rnmapbox/maps · GitHub
Skip to content

fix(ios): resolve pending layer waiters - #4288

Open
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters
Open

fix(ios): resolve pending layer waiters#4288
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters

Conversation

@LukasB-DEV

Copy link
Copy Markdown

Description

On iOS, a layer mounted with belowLayerID before its anchor layer exists is queued by waitForLayerWithID. However, RNMBXMapView.layerAdded(_:) was left as a TODO, so the queued callbacks were never invoked after the anchor layer was added.

As a result, the dependent layer remained absent from the map.

This change removes and invokes the callbacks waiting for the newly added layer. It mirrors the existing Android implementation and also prevents fulfilled callbacks from remaining retained in layerWaiters.

This is a general iOS layer-ordering issue and is not specific to an application integration.

No linked issue.

Reproduction and verification

Tested against unmodified main

Environment:

  • @rnmapbox/maps 10.3.5
  • Mapbox Maps SDK v11.23.1
  • React Native New Architecture
  • iPhone 17 Pro Simulator
  • iOS 26.5
  • Xcode 26.6
  • Node.js 22.16.0

Before the fix:

  • FAIL: WAITING LAYER MISSING
  • The magenta anchor layer was visible.
  • The blue layer waiting for belowLayerID="anchor-layer" was absent.

After the fix:

  • PASS: WAITING LAYER RENDERED
  • Both the blue waiting layer and the magenta anchor layer were visible.

Checklist

  • I've read CONTRIBUTING.md
  • I updated the doc/other generated code with running yarn generate in the root folder
    • yarn generate completed successfully and produced no changes.
  • I have tested the fix on the /example app.
    • In V11 mode/ios
    • In New Architecture mode/ios
    • In V11 mode/android — not applicable to this iOS-only change
    • In New Architecture mode/android — not applicable to this iOS-only change
  • I added/updated a sample — not applicable; this is a bug fix and the temporary reproducer was intentionally kept out of the final commit.

Screenshot OR Video

Before — unfixed main:

image

After — commit 9af2571:

image

Tests

  • yarn generate — passed, generated tree remained unchanged
  • yarn test — passed, 22 test suites and 112 tests
  • ESLint — 0 errors; existing repository warnings only
  • yarn typecheck — passed
  • iOS Example Debug build — passed before and after the fix
  • Reproducer ESLint check — passed
  • git diff --check — passed

Component to reproduce the issue you're fixing

BugReportExample.js
importReactfrom'react';import{Text,View}from'react-native';import{Camera,LineLayer,MapView,ShapeSource,StyleURL,}from'@rnmapbox/maps';constroutes={type: 'FeatureCollection',features: [{type: 'Feature',properties: {kind: 'waiting'},geometry: {type: 'LineString',coordinates: [[-74.012,40.716],[-74.0,40.716],],},},{type: 'Feature',properties: {kind: 'anchor'},geometry: {type: 'LineString',coordinates: [[-74.012,40.713],[-74.0,40.713],],},},],};conststyles={map: {flex: 1},status: {position: 'absolute',top: 60,left: 12,right: 12,padding: 12,backgroundColor: 'white',},statusText: {color: 'black',fontWeight: '700'},};classBugReportExampleextendsReact.Component{state={status: 'CHECKING'};checkWaitingLayer=async()=>{try{constresult=awaitthis.map.queryRenderedFeaturesInRect([],null,['waiting-layer',]);this.setState({status: result?.features?.length
? 'PASS: WAITING LAYER RENDERED'
: 'FAIL: WAITING LAYER MISSING',});}catch{this.setState({status: 'FAIL: WAITING LAYER MISSING'});}};render(){return(<Viewstyle={styles.map}><MapViewref={(map)=>{this.map=map;}}style={styles.map}styleURL={StyleURL.Light}onMapIdle={this.checkWaitingLayer}><CameradefaultSettings={{centerCoordinate: [-74.006,40.7145],zoomLevel: 14,}}/><ShapeSourceid="layer-waiter-reproducer"shape={routes}><LineLayerid="waiting-layer"belowLayerID="anchor-layer"filter={['==',['get','kind'],'waiting']}style={{lineColor: '#0066ff',lineWidth: 12}}/><LineLayerid="anchor-layer"filter={['==',['get','kind'],'anchor']}style={{lineColor: '#ff0066',lineWidth: 12}}/></ShapeSource></MapView><Viewstyle={styles.status}><TexttestID="layer-waiter-status"style={styles.statusText}>{this.state.status}</Text></View></View>);}}exportdefaultBugReportExample;

@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@LukasB-DEV
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' fix(ios): resolve pending layer waiters by LukasB-DEV · Pull Request #4288 · rnmapbox/maps · GitHub
Skip to content

fix(ios): resolve pending layer waiters - #4288

Open
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters
Open

fix(ios): resolve pending layer waiters#4288
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters

Conversation

@LukasB-DEV

Copy link
Copy Markdown

Description

On iOS, a layer mounted with belowLayerID before its anchor layer exists is queued by waitForLayerWithID. However, RNMBXMapView.layerAdded(_:) was left as a TODO, so the queued callbacks were never invoked after the anchor layer was added.

As a result, the dependent layer remained absent from the map.

This change removes and invokes the callbacks waiting for the newly added layer. It mirrors the existing Android implementation and also prevents fulfilled callbacks from remaining retained in layerWaiters.

This is a general iOS layer-ordering issue and is not specific to an application integration.

No linked issue.

Reproduction and verification

Tested against unmodified main

Environment:

  • @rnmapbox/maps 10.3.5
  • Mapbox Maps SDK v11.23.1
  • React Native New Architecture
  • iPhone 17 Pro Simulator
  • iOS 26.5
  • Xcode 26.6
  • Node.js 22.16.0

Before the fix:

  • FAIL: WAITING LAYER MISSING
  • The magenta anchor layer was visible.
  • The blue layer waiting for belowLayerID="anchor-layer" was absent.

After the fix:

  • PASS: WAITING LAYER RENDERED
  • Both the blue waiting layer and the magenta anchor layer were visible.

Checklist

  • I've read CONTRIBUTING.md
  • I updated the doc/other generated code with running yarn generate in the root folder
    • yarn generate completed successfully and produced no changes.
  • I have tested the fix on the /example app.
    • In V11 mode/ios
    • In New Architecture mode/ios
    • In V11 mode/android — not applicable to this iOS-only change
    • In New Architecture mode/android — not applicable to this iOS-only change
  • I added/updated a sample — not applicable; this is a bug fix and the temporary reproducer was intentionally kept out of the final commit.

Screenshot OR Video

Before — unfixed main:

image

After — commit 9af2571:

image

Tests

  • yarn generate — passed, generated tree remained unchanged
  • yarn test — passed, 22 test suites and 112 tests
  • ESLint — 0 errors; existing repository warnings only
  • yarn typecheck — passed
  • iOS Example Debug build — passed before and after the fix
  • Reproducer ESLint check — passed
  • git diff --check — passed

Component to reproduce the issue you're fixing

BugReportExample.js
importReactfrom'react';import{Text,View}from'react-native';import{Camera,LineLayer,MapView,ShapeSource,StyleURL,}from'@rnmapbox/maps';constroutes={type: 'FeatureCollection',features: [{type: 'Feature',properties: {kind: 'waiting'},geometry: {type: 'LineString',coordinates: [[-74.012,40.716],[-74.0,40.716],],},},{type: 'Feature',properties: {kind: 'anchor'},geometry: {type: 'LineString',coordinates: [[-74.012,40.713],[-74.0,40.713],],},},],};conststyles={map: {flex: 1},status: {position: 'absolute',top: 60,left: 12,right: 12,padding: 12,backgroundColor: 'white',},statusText: {color: 'black',fontWeight: '700'},};classBugReportExampleextendsReact.Component{state={status: 'CHECKING'};checkWaitingLayer=async()=>{try{constresult=awaitthis.map.queryRenderedFeaturesInRect([],null,['waiting-layer',]);this.setState({status: result?.features?.length
? 'PASS: WAITING LAYER RENDERED'
: 'FAIL: WAITING LAYER MISSING',});}catch{this.setState({status: 'FAIL: WAITING LAYER MISSING'});}};render(){return(<Viewstyle={styles.map}><MapViewref={(map)=>{this.map=map;}}style={styles.map}styleURL={StyleURL.Light}onMapIdle={this.checkWaitingLayer}><CameradefaultSettings={{centerCoordinate: [-74.006,40.7145],zoomLevel: 14,}}/><ShapeSourceid="layer-waiter-reproducer"shape={routes}><LineLayerid="waiting-layer"belowLayerID="anchor-layer"filter={['==',['get','kind'],'waiting']}style={{lineColor: '#0066ff',lineWidth: 12}}/><LineLayerid="anchor-layer"filter={['==',['get','kind'],'anchor']}style={{lineColor: '#ff0066',lineWidth: 12}}/></ShapeSource></MapView><Viewstyle={styles.status}><TexttestID="layer-waiter-status"style={styles.statusText}>{this.state.status}</Text></View></View>);}}exportdefaultBugReportExample;

@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@LukasB-DEV
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ios): resolve pending layer waiters by LukasB-DEV · Pull Request #4288 · rnmapbox/maps · GitHub
Skip to content

fix(ios): resolve pending layer waiters - #4288

Open
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters
Open

fix(ios): resolve pending layer waiters#4288
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters

Conversation

@LukasB-DEV

Copy link
Copy Markdown

Description

On iOS, a layer mounted with belowLayerID before its anchor layer exists is queued by waitForLayerWithID. However, RNMBXMapView.layerAdded(_:) was left as a TODO, so the queued callbacks were never invoked after the anchor layer was added.

As a result, the dependent layer remained absent from the map.

This change removes and invokes the callbacks waiting for the newly added layer. It mirrors the existing Android implementation and also prevents fulfilled callbacks from remaining retained in layerWaiters.

This is a general iOS layer-ordering issue and is not specific to an application integration.

No linked issue.

Reproduction and verification

Tested against unmodified main

Environment:

  • @rnmapbox/maps 10.3.5
  • Mapbox Maps SDK v11.23.1
  • React Native New Architecture
  • iPhone 17 Pro Simulator
  • iOS 26.5
  • Xcode 26.6
  • Node.js 22.16.0

Before the fix:

  • FAIL: WAITING LAYER MISSING
  • The magenta anchor layer was visible.
  • The blue layer waiting for belowLayerID="anchor-layer" was absent.

After the fix:

  • PASS: WAITING LAYER RENDERED
  • Both the blue waiting layer and the magenta anchor layer were visible.

Checklist

  • I've read CONTRIBUTING.md
  • I updated the doc/other generated code with running yarn generate in the root folder
    • yarn generate completed successfully and produced no changes.
  • I have tested the fix on the /example app.
    • In V11 mode/ios
    • In New Architecture mode/ios
    • In V11 mode/android — not applicable to this iOS-only change
    • In New Architecture mode/android — not applicable to this iOS-only change
  • I added/updated a sample — not applicable; this is a bug fix and the temporary reproducer was intentionally kept out of the final commit.

Screenshot OR Video

Before — unfixed main:

image

After — commit 9af2571:

image

Tests

  • yarn generate — passed, generated tree remained unchanged
  • yarn test — passed, 22 test suites and 112 tests
  • ESLint — 0 errors; existing repository warnings only
  • yarn typecheck — passed
  • iOS Example Debug build — passed before and after the fix
  • Reproducer ESLint check — passed
  • git diff --check — passed

Component to reproduce the issue you're fixing

BugReportExample.js
importReactfrom'react';import{Text,View}from'react-native';import{Camera,LineLayer,MapView,ShapeSource,StyleURL,}from'@rnmapbox/maps';constroutes={type: 'FeatureCollection',features: [{type: 'Feature',properties: {kind: 'waiting'},geometry: {type: 'LineString',coordinates: [[-74.012,40.716],[-74.0,40.716],],},},{type: 'Feature',properties: {kind: 'anchor'},geometry: {type: 'LineString',coordinates: [[-74.012,40.713],[-74.0,40.713],],},},],};conststyles={map: {flex: 1},status: {position: 'absolute',top: 60,left: 12,right: 12,padding: 12,backgroundColor: 'white',},statusText: {color: 'black',fontWeight: '700'},};classBugReportExampleextendsReact.Component{state={status: 'CHECKING'};checkWaitingLayer=async()=>{try{constresult=awaitthis.map.queryRenderedFeaturesInRect([],null,['waiting-layer',]);this.setState({status: result?.features?.length
? 'PASS: WAITING LAYER RENDERED'
: 'FAIL: WAITING LAYER MISSING',});}catch{this.setState({status: 'FAIL: WAITING LAYER MISSING'});}};render(){return(<Viewstyle={styles.map}><MapViewref={(map)=>{this.map=map;}}style={styles.map}styleURL={StyleURL.Light}onMapIdle={this.checkWaitingLayer}><CameradefaultSettings={{centerCoordinate: [-74.006,40.7145],zoomLevel: 14,}}/><ShapeSourceid="layer-waiter-reproducer"shape={routes}><LineLayerid="waiting-layer"belowLayerID="anchor-layer"filter={['==',['get','kind'],'waiting']}style={{lineColor: '#0066ff',lineWidth: 12}}/><LineLayerid="anchor-layer"filter={['==',['get','kind'],'anchor']}style={{lineColor: '#ff0066',lineWidth: 12}}/></ShapeSource></MapView><Viewstyle={styles.status}><TexttestID="layer-waiter-status"style={styles.statusText}>{this.state.status}</Text></View></View>);}}exportdefaultBugReportExample;

@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@LukasB-DEV
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ios): resolve pending layer waiters by LukasB-DEV · Pull Request #4288 · rnmapbox/maps · GitHub
Skip to content

fix(ios): resolve pending layer waiters - #4288

Open
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters
Open

fix(ios): resolve pending layer waiters#4288
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters

Conversation

@LukasB-DEV

Copy link
Copy Markdown

Description

On iOS, a layer mounted with belowLayerID before its anchor layer exists is queued by waitForLayerWithID. However, RNMBXMapView.layerAdded(_:) was left as a TODO, so the queued callbacks were never invoked after the anchor layer was added.

As a result, the dependent layer remained absent from the map.

This change removes and invokes the callbacks waiting for the newly added layer. It mirrors the existing Android implementation and also prevents fulfilled callbacks from remaining retained in layerWaiters.

This is a general iOS layer-ordering issue and is not specific to an application integration.

No linked issue.

Reproduction and verification

Tested against unmodified main

Environment:

  • @rnmapbox/maps 10.3.5
  • Mapbox Maps SDK v11.23.1
  • React Native New Architecture
  • iPhone 17 Pro Simulator
  • iOS 26.5
  • Xcode 26.6
  • Node.js 22.16.0

Before the fix:

  • FAIL: WAITING LAYER MISSING
  • The magenta anchor layer was visible.
  • The blue layer waiting for belowLayerID="anchor-layer" was absent.

After the fix:

  • PASS: WAITING LAYER RENDERED
  • Both the blue waiting layer and the magenta anchor layer were visible.

Checklist

  • I've read CONTRIBUTING.md
  • I updated the doc/other generated code with running yarn generate in the root folder
    • yarn generate completed successfully and produced no changes.
  • I have tested the fix on the /example app.
    • In V11 mode/ios
    • In New Architecture mode/ios
    • In V11 mode/android — not applicable to this iOS-only change
    • In New Architecture mode/android — not applicable to this iOS-only change
  • I added/updated a sample — not applicable; this is a bug fix and the temporary reproducer was intentionally kept out of the final commit.

Screenshot OR Video

Before — unfixed main:

image

After — commit 9af2571:

image

Tests

  • yarn generate — passed, generated tree remained unchanged
  • yarn test — passed, 22 test suites and 112 tests
  • ESLint — 0 errors; existing repository warnings only
  • yarn typecheck — passed
  • iOS Example Debug build — passed before and after the fix
  • Reproducer ESLint check — passed
  • git diff --check — passed

Component to reproduce the issue you're fixing

BugReportExample.js
importReactfrom'react';import{Text,View}from'react-native';import{Camera,LineLayer,MapView,ShapeSource,StyleURL,}from'@rnmapbox/maps';constroutes={type: 'FeatureCollection',features: [{type: 'Feature',properties: {kind: 'waiting'},geometry: {type: 'LineString',coordinates: [[-74.012,40.716],[-74.0,40.716],],},},{type: 'Feature',properties: {kind: 'anchor'},geometry: {type: 'LineString',coordinates: [[-74.012,40.713],[-74.0,40.713],],},},],};conststyles={map: {flex: 1},status: {position: 'absolute',top: 60,left: 12,right: 12,padding: 12,backgroundColor: 'white',},statusText: {color: 'black',fontWeight: '700'},};classBugReportExampleextendsReact.Component{state={status: 'CHECKING'};checkWaitingLayer=async()=>{try{constresult=awaitthis.map.queryRenderedFeaturesInRect([],null,['waiting-layer',]);this.setState({status: result?.features?.length
? 'PASS: WAITING LAYER RENDERED'
: 'FAIL: WAITING LAYER MISSING',});}catch{this.setState({status: 'FAIL: WAITING LAYER MISSING'});}};render(){return(<Viewstyle={styles.map}><MapViewref={(map)=>{this.map=map;}}style={styles.map}styleURL={StyleURL.Light}onMapIdle={this.checkWaitingLayer}><CameradefaultSettings={{centerCoordinate: [-74.006,40.7145],zoomLevel: 14,}}/><ShapeSourceid="layer-waiter-reproducer"shape={routes}><LineLayerid="waiting-layer"belowLayerID="anchor-layer"filter={['==',['get','kind'],'waiting']}style={{lineColor: '#0066ff',lineWidth: 12}}/><LineLayerid="anchor-layer"filter={['==',['get','kind'],'anchor']}style={{lineColor: '#ff0066',lineWidth: 12}}/></ShapeSource></MapView><Viewstyle={styles.status}><TexttestID="layer-waiter-status"style={styles.statusText}>{this.state.status}</Text></View></View>);}}exportdefaultBugReportExample;

@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@LukasB-DEV
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); fix(ios): resolve pending layer waiters by LukasB-DEV · Pull Request #4288 · rnmapbox/maps · GitHub
Skip to content

fix(ios): resolve pending layer waiters - #4288

Open
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters
Open

fix(ios): resolve pending layer waiters#4288
LukasB-DEV wants to merge 1 commit into
rnmapbox:mainfrom
LukasB-DEV:codex/fix-ios-layer-waiters

Conversation

@LukasB-DEV

Copy link
Copy Markdown

Description

On iOS, a layer mounted with belowLayerID before its anchor layer exists is queued by waitForLayerWithID. However, RNMBXMapView.layerAdded(_:) was left as a TODO, so the queued callbacks were never invoked after the anchor layer was added.

As a result, the dependent layer remained absent from the map.

This change removes and invokes the callbacks waiting for the newly added layer. It mirrors the existing Android implementation and also prevents fulfilled callbacks from remaining retained in layerWaiters.

This is a general iOS layer-ordering issue and is not specific to an application integration.

No linked issue.

Reproduction and verification

Tested against unmodified main

Environment:

  • @rnmapbox/maps 10.3.5
  • Mapbox Maps SDK v11.23.1
  • React Native New Architecture
  • iPhone 17 Pro Simulator
  • iOS 26.5
  • Xcode 26.6
  • Node.js 22.16.0

Before the fix:

  • FAIL: WAITING LAYER MISSING
  • The magenta anchor layer was visible.
  • The blue layer waiting for belowLayerID="anchor-layer" was absent.

After the fix:

  • PASS: WAITING LAYER RENDERED
  • Both the blue waiting layer and the magenta anchor layer were visible.

Checklist

  • I've read CONTRIBUTING.md
  • I updated the doc/other generated code with running yarn generate in the root folder
    • yarn generate completed successfully and produced no changes.
  • I have tested the fix on the /example app.
    • In V11 mode/ios
    • In New Architecture mode/ios
    • In V11 mode/android — not applicable to this iOS-only change
    • In New Architecture mode/android — not applicable to this iOS-only change
  • I added/updated a sample — not applicable; this is a bug fix and the temporary reproducer was intentionally kept out of the final commit.

Screenshot OR Video

Before — unfixed main:

image

After — commit 9af2571:

image

Tests

  • yarn generate — passed, generated tree remained unchanged
  • yarn test — passed, 22 test suites and 112 tests
  • ESLint — 0 errors; existing repository warnings only
  • yarn typecheck — passed
  • iOS Example Debug build — passed before and after the fix
  • Reproducer ESLint check — passed
  • git diff --check — passed

Component to reproduce the issue you're fixing

BugReportExample.js
importReactfrom'react';import{Text,View}from'react-native';import{Camera,LineLayer,MapView,ShapeSource,StyleURL,}from'@rnmapbox/maps';constroutes={type: 'FeatureCollection',features: [{type: 'Feature',properties: {kind: 'waiting'},geometry: {type: 'LineString',coordinates: [[-74.012,40.716],[-74.0,40.716],],},},{type: 'Feature',properties: {kind: 'anchor'},geometry: {type: 'LineString',coordinates: [[-74.012,40.713],[-74.0,40.713],],},},],};conststyles={map: {flex: 1},status: {position: 'absolute',top: 60,left: 12,right: 12,padding: 12,backgroundColor: 'white',},statusText: {color: 'black',fontWeight: '700'},};classBugReportExampleextendsReact.Component{state={status: 'CHECKING'};checkWaitingLayer=async()=>{try{constresult=awaitthis.map.queryRenderedFeaturesInRect([],null,['waiting-layer',]);this.setState({status: result?.features?.length
? 'PASS: WAITING LAYER RENDERED'
: 'FAIL: WAITING LAYER MISSING',});}catch{this.setState({status: 'FAIL: WAITING LAYER MISSING'});}};render(){return(<Viewstyle={styles.map}><MapViewref={(map)=>{this.map=map;}}style={styles.map}styleURL={StyleURL.Light}onMapIdle={this.checkWaitingLayer}><CameradefaultSettings={{centerCoordinate: [-74.006,40.7145],zoomLevel: 14,}}/><ShapeSourceid="layer-waiter-reproducer"shape={routes}><LineLayerid="waiting-layer"belowLayerID="anchor-layer"filter={['==',['get','kind'],'waiting']}style={{lineColor: '#0066ff',lineWidth: 12}}/><LineLayerid="anchor-layer"filter={['==',['get','kind'],'anchor']}style={{lineColor: '#ff0066',lineWidth: 12}}/></ShapeSource></MapView><Viewstyle={styles.status}><TexttestID="layer-waiter-status"style={styles.statusText}>{this.state.status}</Text></View></View>);}}exportdefaultBugReportExample;

@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
@LukasB-DEV
LukasB-DEVrequested a deployment to CI with Mapbox Tokens August 27, 2026 08:15 — with GitHub Actions Waiting
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@LukasB-DEV