refactor: universele feature-level sets-filtering in buildPolygonLayer #69

Closed
opened 2026-04-12 16:09:42 +02:00 by Ghost · 1 comment
Ghost commented 2026-04-12 16:09:42 +02:00 (Migrated from codeberg.org)

Probleem

Feature-level sets-filtering werkt nu alleen in buildWaterLayer() (voor de dubbele Maas-oplossing). De filtering-logica verschilt per type:

  • water: feature.properties.sets + isPhased check
  • country: alleen activeNames (geen feature-level sets)
  • province: alleen activeNames (geen feature-level sets)

Dit geeft problemen als in de toekomst dezelfde naam in meerdere sets voorkomt (bijv. "Rijn" in NL-set én Duitsland-set, of een land met dezelfde naam in twee regio-quizzen).

Oplossing

Één universele filter in buildPolygonLayer() (na het polygonTypes-register uit #67):

filter: f => {
  const name = f.properties[t.nameKey];
  if (!activeNames.has(name)) return false;
  const fSets = f.properties.sets;
  if (fSets?.length) return fSets.includes(selectedSet);
  return !isPhased;  // features zonder sets: alleen voor enkelvoudige sets
}

Alle GeoJSON-features die set-specifiek zijn krijgen "sets": [n]. Features zonder sets = universeel beschikbaar (legacy/enkelvoudig gedrag).

Impact

  • ~15 regels verwijderd / vereenvoudigd
  • Maakt toekomstige dubbele feature-namen beheersbaar
  • Maakt de Maas-workaround in buildWaterLayer expliciet en schoon

Risico

Laag — is een uitbreiding van bestaand gedrag. Controleer set 57 (Maas/Rijn/IJssel) en set 72 (Maas Belgian section) na de wijziging.

Afhankelijkheid

Werkt na #67 (polygonTypes-register).

Zie REFACTORING.md voorstel #5

## Probleem Feature-level `sets`-filtering werkt nu alleen in `buildWaterLayer()` (voor de dubbele Maas-oplossing). De filtering-logica verschilt per type: - `water`: feature.properties.sets + isPhased check - `country`: alleen activeNames (geen feature-level sets) - `province`: alleen activeNames (geen feature-level sets) Dit geeft problemen als in de toekomst dezelfde naam in meerdere sets voorkomt (bijv. "Rijn" in NL-set én Duitsland-set, of een land met dezelfde naam in twee regio-quizzen). ## Oplossing Één universele filter in `buildPolygonLayer()` (na het polygonTypes-register uit #67): ```js filter: f => { const name = f.properties[t.nameKey]; if (!activeNames.has(name)) return false; const fSets = f.properties.sets; if (fSets?.length) return fSets.includes(selectedSet); return !isPhased; // features zonder sets: alleen voor enkelvoudige sets } ``` Alle GeoJSON-features die set-specifiek zijn krijgen `"sets": [n]`. Features zonder `sets` = universeel beschikbaar (legacy/enkelvoudig gedrag). ## Impact - ~15 regels verwijderd / vereenvoudigd - Maakt toekomstige dubbele feature-namen beheersbaar - Maakt de Maas-workaround in buildWaterLayer expliciet en schoon ## Risico Laag — is een uitbreiding van bestaand gedrag. Controleer set 57 (Maas/Rijn/IJssel) en set 72 (Maas Belgian section) na de wijziging. ## Afhankelijkheid Werkt na #67 (polygonTypes-register). _Zie REFACTORING.md voorstel #5_
Ghost commented 2026-04-12 21:20:53 +02:00 (Migrated from codeberg.org)

Geïmplementeerd in refactor-commit 96e1a18.

Geïmplementeerd in refactor-commit 96e1a18.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jelmer/topoquiz#69
No description provided.