Skip to content

feat(core): derive layer visibility from visibleWhenLayerIds - #233

Merged
pjeweb merged 1 commit into
mainfrom
feat/dependent-layer-visibility
Aug 28, 2026
Merged

feat(core): derive layer visibility from visibleWhenLayerIds#233
pjeweb merged 1 commit into
mainfrom
feat/dependent-layer-visibility

Conversation

@pjeweb

@pjeweb pjeweb commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add metaData.visibleWhenLayerIds so a layer stays visible only while every listed layer is on (AND).
  • Apply that rule after each map reduce, including exclusive base-layer toggles.
  • Align selection-overlay z-index on a shared Z_INDEX_OVERLAY constant so highlights stay above catalog layers.

Test plan

  • pnpm --filter @mapsight/core exec vitest run src/js/lib/map/lib/syncDependentLayerVisibility.test.ts src/js/lib/map/lib/WithLayers.test.ts src/js/lib/map/__tests__/schema.test.ts
  • pnpm --filter @mapsight/core typecheck
  • pnpm changeset status --since=origin/main reports a minor bump for @mapsight/core
  • Toggle a theme layer on and off and confirm a companion layer with visibleWhenLayerIds follows it
  • Switch exclusive base layers and confirm dependents hide when a required base turns off

Hosts can bind a layer to other layers so it stays on only while every listed layer is visible.
@changeset-bot

changeset-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 9926198

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@mapsight/core Minor
@mapsight/vector-style-compiler Major

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copilot AI 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.

Pull request overview

This PR introduces derived layer visibility based on metaData.visibleWhenLayerIds, ensuring dependent layers automatically show/hide based on the visibility of required layers after each map-controller reduce. It also centralizes overlay z-indexing via a shared Z_INDEX_OVERLAY constant so selection/highlight overlays reliably render above catalog layers.

Changes:

  • Add metaData.visibleWhenLayerIds to the map config schema and derive dependent layer visibility via syncDependentLayerVisibility.
  • Apply dependent-visibility derivation after each WithLayers.reduce (including after exclusive base-layer toggles).
  • Introduce a shared Z_INDEX_OVERLAY constant and reuse it across overlay layer implementations.

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/core/src/js/ol-proxy/definitions/layer/VectorOverlayLayer.ts Use shared Z_INDEX_OVERLAY for vector overlay layer z-index.
packages/core/src/js/lib/map/z-index.ts Add shared overlay z-index constant.
packages/core/src/js/lib/map/schema.ts Extend layer metadata schema with visibleWhenLayerIds.
packages/core/src/js/lib/map/lib/WithLayers.ts Apply dependent visibility derivation after each reduce.
packages/core/src/js/lib/map/lib/WithLayers.test.ts Add integration tests verifying derivation runs via WithLayers and MapController.
packages/core/src/js/lib/map/lib/WithLayerOverlays.ts Import/re-export shared Z_INDEX_OVERLAY and ensure overlay definition uses it.
packages/core/src/js/lib/map/lib/syncDependentLayerVisibility.ts Implement dependent-visibility derivation helper.
packages/core/src/js/lib/map/lib/syncDependentLayerVisibility.test.ts Add unit tests for dependent-visibility behavior.
packages/core/src/js/lib/map/tests/schema.test.ts Add schema test coverage for visibleWhenLayerIds.
.changeset/core-visible-when-layer-ids.md Record minor bump for @mapsight/core.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +19 to +40
const desired = requiredIds.every(
(requiredId) => layers[requiredId]?.options?.visible === true,
);
const current = layer.options?.visible === true;
if (desired === current) {
continue;
}

if (!copied) {
result = {...layers};
copied = true;
}
result[id] = {
...layer,
options: {
...layer.options,
visible: desired,
} as LayerState["options"],
};
}

return result;
@pjeweb
pjeweb merged commit bd11b3b into main Aug 28, 2026
22 checks passed
@pjeweb
pjeweb deleted the feat/dependent-layer-visibility branch August 28, 2026 12:15
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.

2 participants