Skip to content

fix: unset removed marker style properties - #2601

Open
chrisgervang wants to merge 3 commits into
masterfrom
chr/review-pr-2596-edge-cases
Open

fix: unset removed marker style properties#2601
chrisgervang wants to merge 3 commits into
masterfrom
chr/review-pr-2596-edge-cases

Conversation

@chrisgervang

@chrisgervang chrisgervang commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Fixes #2595 with a fresh implementation of the intent behind #2596 on current master.

Applied style keys are tracked per element; removed or nullish keys are cleared before new values so shorthand transitions work and unrelated inline styles remain untouched.

Mapbox and MapLibre have matching regression coverage for undefined, null, omission, whole-style removal, reapplication, and shorthand/longhand transitions.

Tested with yarn lint, yarn test ci, and both module TypeScript checks.


Note

Low Risk
Localized DOM styling helper change with broad regression tests; no auth, data, or API surface changes.

Overview
applyReactStyle now tracks which style keys it applied per DOM element (via a WeakMap) and clears keys that disappear from the next style object—undefined, null, omission, or null/undefined for the whole style—so marker/control inline styles don’t stick after React updates.

The same logic is applied in react-mapbox and react-maplibre. null/undefined styles are treated as empty updates (only previously managed keys are cleared). Inline properties not set by this helper are left unchanged. Shorthand/longhand transitions (e.g. padding vs paddingTop) are handled by clearing dropped keys before applying new ones.

Regression tests cover unset behavior, shorthand transitions, and unmanaged inline styles in both modules.

Reviewed by Cursor Bugbot for commit c9fe608. Bugbot is set up for automated code reviews on this repo. Configure here.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit c9fe608. Configure here.


t.is(div.style.opacity, '0.5', 'does not clear properties it did not apply');
t.end();
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests use incompatible tape assertions

Medium Severity

The new regression tests call tape-style t.is and t.end, but this suite runs on Vitest and the existing test in the same file uses expect. Vitest's test context has no those methods, so these cases throw at runtime and never validate the unset behavior.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c9fe608. Configure here.

Sign up for free to 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.

[Bug] Prop style does not unset properties that become undefined

1 participant