diff --git a/src/maps/tests/test_views.py b/src/maps/tests/test_views.py index 38137e6d9..8f545fc94 100644 --- a/src/maps/tests/test_views.py +++ b/src/maps/tests/test_views.py @@ -176,6 +176,12 @@ def test_map_views(self) -> None: response = self.client.get(url) assert response.status_code == 200 + def test_map_layer_json_view(self) -> None: + """Test the map layers json view.""" + url = reverse("maps:map_layers_json") + response = self.client.get(url) + assert response.status_code == 200 + def test_marker_views(self) -> None: """Test the marker view.""" good = ["ffffff", "ffffff00"] diff --git a/src/maps/urls.py b/src/maps/urls.py index f00104982..a6b8d73e5 100644 --- a/src/maps/urls.py +++ b/src/maps/urls.py @@ -7,6 +7,7 @@ from django.urls import re_path from .views import LayerGeoJSONView +from .views import LayerJsonView from .views import MapMarkerView from .views import MapProxyView @@ -14,6 +15,7 @@ urlpatterns = [ path("marker//", MapMarkerView.as_view(), name="marker"), + path("layers/", LayerJsonView.as_view(), name="map_layers_json"), path( "/", include( diff --git a/src/maps/views.py b/src/maps/views.py index 73c18bc5f..e534cbb95 100644 --- a/src/maps/views.py +++ b/src/maps/views.py @@ -123,6 +123,47 @@ def render_to_response(self, context: dict, **kwargs) -> TemplateResponse: ) +class LayerJsonView(JsonView): + """View for returning all available layers in json.""" + + def get_context_data(self, **kwargs) -> list: + """Return the GeoJSON Data to the client.""" + layers = [] + for layer in Layer.objects.filter(public=True): + url = reverse( + "maps:map_layer_geojson", + kwargs={"layer_slug": layer.slug}, + ) + layers.append( + { + "name": layer.name, + "team": layer.responsible_team.name if layer.responsible_team else "None", + "camp": layer.responsible_team.camp.slug if layer.responsible_team else "all", + "url": self.request.build_absolute_uri(url), + "type": "layer", + }, + ) + for facility_type in FacilityType.objects.all(): + url = reverse( + "facilities:facility_list_geojson", + kwargs={ + "camp_slug": facility_type.responsible_team.camp.slug, + "facility_type_slug": facility_type.slug, + }, + ) + layers.append( + { + "name": facility_type.name, + "team": facility_type.responsible_team.name, + "camp": facility_type.responsible_team.camp.slug, + "url": self.request.build_absolute_uri(url), + "type": "facility", + }, + ) + + return layers + + class MapView(CampViewMixin, TemplateView): """Global map view."""