Skip to content

Let clearOverlays() clear the marker controllers extensions register - #29

Open
wf9a5m75 wants to merge 1 commit into
developfrom
fix/clear-strategy
Open

wf9a5m75 wants to merge 1 commit into
developfrom
fix/clear-strategy

Conversation

@wf9a5m75

@wf9a5m75 wf9a5m75 commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

なぜ

clearOverlays() は、各プロバイダが自分で持つコントローラ(マーカー・ポリゴンなど)しか clear していませんでした。クラスタリングなどの拡張が登録する Strategy のコントローラ(StrategyMarkerController)は対象外で、clearOverlays() の後もクラスタのマーカーが地図に残っていました。

何を変えたか

  • BaseMapViewController.clearOverlayControllers(own)(@internal)を足しました。own に渡したプロバイダ自身のコントローラを渡した順に clear し、続いて登録されている他のコントローラのうちオーバーレイのスロットに参加するもの(kind を持つもの)を登録順に clear します。カメラだけを聞く登録(ヒートマップ)は触りません。
  • OverlayControllerLike に省略可能な clear?() を足しました(公開 API の追加はこれだけ)。
  • MapDriverConformance.checkClearOverlaysReachesExtensions()(@internal)を足しました。プロバイダがこの経路を通っていないと検出します。通らなくてもコンパイルは通り、マーカーが黙って残るため。
  • ClearOverlaysStrategy.test.mjs を足しました。前の core では落ち、今は通ります。

検証

2026-11-08 に develop(fix/mapview-teardown、fix/geodesic-polygon-fill、fix/clear-followups、refactor/polygon-controller などのマージ後)の上に載せ直してから確かめています。

  • 合成した react-sdk のツリーで、clear-strategy だけの構成(core・15 プロバイダ・template)と、develop + clear-strategy + stacking の構成の両方で、全パッケージのビルド・テスト(core 251 件など)・api-surface check が通りました。公開 API は OverlayControllerLike.clear?() の追加のみ。
  • ClearOverlaysStrategy.test.mjs は前の core で落ち、今は通ります。template の conformance テスト(checkClearOverlaysReachesExtensions)も通ります。
  • Playwright(develop + 両方の構成)で 15 プロバイダ・17 ルートを開き、Strategy のマーカーを 3 本足して clearOverlays すると 0 本になることを確かめました(MapTiler を除く。下記)。

確認できていないもの

  • CI: react-sdk(template)の Unit tests は、submodule の js-sdk-core が develop の版に固定されているため checkClearOverlaysReachesExtensions が無く落ちます。js-sdk-core の PR のマージと submodule の引き上げの後に通る見込みです。
  • MapTiler は検証ページで Strategy のマーカーがもともと描かれず(直す前も同じ)、ブラウザでは確かめられていません。
  • web のプロバイダは js-sdk-core の新しい版(clearOverlayControllers)が要ります。npm 公開と依存の引き上げまでは、公開済みの core に対してビルドできません。

関連 PR(fix/clear-strategy の一式)

マージの順番:

  1. 各プラットフォームの core(android-sdk-core / ios-sdk-core / js-sdk-core)
  2. そのプラットフォームのプロバイダ(core の新しい API を呼ぶので、core より先に入れるとビルドが通りません)
  • web はさらに js-sdk-core の npm 公開と、各 react-for-* の依存の引き上げが前提です(npm 公開はまだしない、という決定なので、web のプロバイダ PR はそれまで保留です)。
  • fix/overlay-stacking-order の PR 一式とは衝突しません(git merge-tree で確認済み)。順番は clear-strategy → stacking を想定しています。

Providers' clearOverlays() cleared their own six controllers only. The
StrategyMarkerController that MarkerClusterGroup (and anything built on
MarkerRenderingSupport) creates and registers with
registerOverlayController() was never cleared, so clustered markers
stayed on the map after clearOverlays().

BaseMapViewController.clearOverlayControllers(own) is the one place to
call from clearOverlays(): it clears `own` in the order given (what the
providers listed before), then every other registered controller that
takes part in the overlay slots (has a `kind`), in registration order.
Camera-only registrations such as the heatmap's are left alone.
OverlayControllerLike gains an optional clear() for this.

MapDriverConformance.checkClearOverlaysReachesExtensions() catches a
provider that does not route through it, which would otherwise compile
and silently keep the markers.

ClearOverlaysStrategy.test.mjs fails on the previous core (no such
helper; the old provider shape leaves the strategy's markers drawn) and
passes now. Public API: additions only (optional clear?() on
OverlayControllerLike); the helper and the check are @internal.
This was referenced Nov 8, 2026
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.

1 participant