diff --git a/app/assets/javascripts/map.js b/app/assets/javascripts/map.js index 2315ae1cf..4b2e4a5a2 100644 --- a/app/assets/javascripts/map.js +++ b/app/assets/javascripts/map.js @@ -211,7 +211,10 @@ className: "map-polygon" }); - polygon.bindPopup(geozone.headings.join("
")); + if (geozone.headings !== undefined) { + polygon.bindPopup(geozone.headings.join("
")); + } + polygon.addTo(map); }, openMarkerPopup: function(e) { diff --git a/app/components/budgets/investments/map_component.html.erb b/app/components/budgets/investments/map_component.html.erb index d8961a740..7e2d99ebb 100644 --- a/app/components/budgets/investments/map_component.html.erb +++ b/app/components/budgets/investments/map_component.html.erb @@ -1,3 +1,3 @@
- <%= render_map(map_location, investments_coordinates: coordinates) %> + <%= render_map(map_location, investments_coordinates: coordinates, geozones_data: geozones_data) %>
diff --git a/app/components/budgets/investments/map_component.rb b/app/components/budgets/investments/map_component.rb index c843c38a4..897524ca2 100644 --- a/app/components/budgets/investments/map_component.rb +++ b/app/components/budgets/investments/map_component.rb @@ -20,4 +20,15 @@ class Budgets::Investments::MapComponent < ApplicationComponent def coordinates MapLocation.where(investment: investments).map(&:json_data) end + + def geozones_data + return unless heading.geozone.present? + + [ + { + outline_points: heading.geozone.outline_points, + color: heading.geozone.color + } + ] + end end diff --git a/spec/system/budgets/investments_spec.rb b/spec/system/budgets/investments_spec.rb index ddb01b30d..0aa50b97a 100644 --- a/spec/system/budgets/investments_spec.rb +++ b/spec/system/budgets/investments_spec.rb @@ -1698,6 +1698,27 @@ describe "Budget Investments" do end end + scenario "Shows the polygon associated to the current heading" do + triangle = '{ "geometry": { "type": "Polygon", "coordinates": [[-0.1,51.5],[-0.2,51.4],[-0.3,51.6]] } }' + rectangle = '{ "geometry": { "type": "Polygon", "coordinates": [[-0.1,51.5],[-0.2,51.5],[-0.2,51.6],[-0.1,51.6]] } }' + + park = create(:geozone, geojson: triangle, color: "#03ee03") + square = create(:geozone, geojson: rectangle, color: "#ff04ff") + + group = create(:budget_group) + green_areas = create(:budget_heading, group: group, geozone: park, latitude: 51.5, longitude: -0.2) + create(:budget_heading, group: group, geozone: square, latitude: 51.5, longitude: -0.2) + + visit budget_investments_path(group.budget, heading_id: green_areas) + + expect(page).to have_css ".map-polygon[fill='#03ee03']" + expect(page).not_to have_css ".map-polygon[fill='#ff04ff']" + + find(".map-polygon").click + + expect(page).not_to have_css ".leaflet-popup" + end + scenario "Shows all investments and not only the ones on the current page" do stub_const("#{Budgets::InvestmentsController}::PER_PAGE", 2)