From 3a51a1bff4ee85bd2ccc5b618a9c11646f8b47d2 Mon Sep 17 00:00:00 2001 From: Nina Date: Wed, 22 Jan 2025 14:49:09 +0100 Subject: [PATCH 1/3] feature: add max zoom to google options --- src/Map/src/Bridge/Google/README.md | 1 + .../src/Bridge/Google/assets/dist/map_controller.d.ts | 2 +- src/Map/src/Bridge/Google/assets/src/map_controller.ts | 1 + src/Map/src/Bridge/Google/src/GoogleOptions.php | 9 +++++++++ src/Map/src/Bridge/Google/tests/GoogleOptionsTest.php | 1 + 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Map/src/Bridge/Google/README.md b/src/Map/src/Bridge/Google/README.md index 94a6ae8fd1b..4d1e83ed1b1 100644 --- a/src/Map/src/Bridge/Google/README.md +++ b/src/Map/src/Bridge/Google/README.md @@ -54,6 +54,7 @@ $googleOptions = (new GoogleOptions()) ->gestureHandling(GestureHandling::GREEDY) ->backgroundColor('#f00') + ->maxZoom(10) ->doubleClickZoom(true) ->zoomControlOptions(new ZoomControlOptions( position: ControlPosition::BLOCK_START_INLINE_END, diff --git a/src/Map/src/Bridge/Google/assets/dist/map_controller.d.ts b/src/Map/src/Bridge/Google/assets/dist/map_controller.d.ts index 14fab318737..132a26e5646 100644 --- a/src/Map/src/Bridge/Google/assets/dist/map_controller.d.ts +++ b/src/Map/src/Bridge/Google/assets/dist/map_controller.d.ts @@ -1,7 +1,7 @@ import type { LoaderOptions } from '@googlemaps/js-api-loader'; import AbstractMapController from '@symfony/ux-map'; import type { InfoWindowWithoutPositionDefinition, MarkerDefinition, Point, PolygonDefinition, PolylineDefinition } from '@symfony/ux-map'; -type MapOptions = Pick; +type MapOptions = Pick; export default class extends AbstractMapController { providerOptionsValue: Pick; map: google.maps.Map; diff --git a/src/Map/src/Bridge/Google/assets/src/map_controller.ts b/src/Map/src/Bridge/Google/assets/src/map_controller.ts index ff2df70a624..8a22c62e84e 100644 --- a/src/Map/src/Bridge/Google/assets/src/map_controller.ts +++ b/src/Map/src/Bridge/Google/assets/src/map_controller.ts @@ -23,6 +23,7 @@ type MapOptions = Pick< | 'mapId' | 'gestureHandling' | 'backgroundColor' + | 'maxZoom' | 'disableDoubleClickZoom' | 'zoomControl' | 'zoomControlOptions' diff --git a/src/Map/src/Bridge/Google/src/GoogleOptions.php b/src/Map/src/Bridge/Google/src/GoogleOptions.php index 68d6bbd6810..4c978f07fec 100644 --- a/src/Map/src/Bridge/Google/src/GoogleOptions.php +++ b/src/Map/src/Bridge/Google/src/GoogleOptions.php @@ -27,6 +27,7 @@ public function __construct( private ?string $mapId = null, private GestureHandling $gestureHandling = GestureHandling::AUTO, private ?string $backgroundColor = null, + private ?int $maxZoom = null, private bool $disableDoubleClickZoom = false, private bool $zoomControl = true, private ZoomControlOptions $zoomControlOptions = new ZoomControlOptions(), @@ -58,6 +59,13 @@ public function gestureHandling(GestureHandling $gestureHandling): self return $this; } + public function maxZoom(?int $maxZoom): self + { + $this->maxZoom = $maxZoom; + + return $this; + } + public function backgroundColor(?string $backgroundColor): self { $this->backgroundColor = $backgroundColor; @@ -173,6 +181,7 @@ public function toArray(): array 'mapId' => $this->mapId, 'gestureHandling' => $this->gestureHandling->value, 'backgroundColor' => $this->backgroundColor, + 'maxZoom' => $this->maxZoom, 'disableDoubleClickZoom' => $this->disableDoubleClickZoom, ]; diff --git a/src/Map/src/Bridge/Google/tests/GoogleOptionsTest.php b/src/Map/src/Bridge/Google/tests/GoogleOptionsTest.php index b5ed565dae0..15ce3040e4a 100644 --- a/src/Map/src/Bridge/Google/tests/GoogleOptionsTest.php +++ b/src/Map/src/Bridge/Google/tests/GoogleOptionsTest.php @@ -27,6 +27,7 @@ public function testWithMinimalConfiguration(): void 'mapId' => null, 'gestureHandling' => 'auto', 'backgroundColor' => null, + 'maxZoom' => null, 'disableDoubleClickZoom' => false, 'zoomControlOptions' => [ 'position' => ControlPosition::INLINE_END_BLOCK_END->value, From c347e0f9114dbc2a38281280a162d2e74767ae00 Mon Sep 17 00:00:00 2001 From: Nina Date: Wed, 22 Jan 2025 16:03:49 +0100 Subject: [PATCH 2/3] docs: update changelog --- src/Map/src/Bridge/Google/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Map/src/Bridge/Google/CHANGELOG.md b/src/Map/src/Bridge/Google/CHANGELOG.md index 48478b9806b..bee003959ea 100644 --- a/src/Map/src/Bridge/Google/CHANGELOG.md +++ b/src/Map/src/Bridge/Google/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## Unreleased + +- Add support for the maxZoom option + ## 2.22 - Add support for configuring a default Map ID From 63fd4c865e440a7f40015c9665a652eee904bd1f Mon Sep 17 00:00:00 2001 From: Nina Date: Wed, 22 Jan 2025 16:13:17 +0100 Subject: [PATCH 3/3] test: fix --- .../Google/assets/test/map_controller.test.ts | 2 +- .../Bridge/Google/tests/GoogleOptionsTest.php | 2 ++ .../Google/tests/GoogleRendererTest.php | 22 +++++++++---------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Map/src/Bridge/Google/assets/test/map_controller.test.ts b/src/Map/src/Bridge/Google/assets/test/map_controller.test.ts index ff5d31d041a..b83e0abf6e5 100644 --- a/src/Map/src/Bridge/Google/assets/test/map_controller.test.ts +++ b/src/Map/src/Bridge/Google/assets/test/map_controller.test.ts @@ -43,7 +43,7 @@ describe('GoogleMapsController', () => { data-symfony--ux-google-map--map-center-value="{"lat":48.8566,"lng":2.3522}" data-symfony--ux-google-map--map-zoom-value="7" data-symfony--ux-google-map--map-fit-bounds-to-markers-value="false" - data-symfony--ux-google-map--map-options-value="{"mapId":null,"gestureHandling":"auto","backgroundColor":null,"disableDoubleClickZoom":false,"zoomControlOptions":{"position":22},"mapTypeControlOptions":{"mapTypeIds":[],"position":14,"style":0},"streetViewControlOptions":{"position":22},"fullscreenControlOptions":{"position":20},"@provider":"google"}" + data-symfony--ux-google-map--map-options-value="{"mapId":null,"gestureHandling":"auto","backgroundColor":null,"maxZoom":null,"disableDoubleClickZoom":false,"zoomControlOptions":{"position":22},"mapTypeControlOptions":{"mapTypeIds":[],"position":14,"style":0},"streetViewControlOptions":{"position":22},"fullscreenControlOptions":{"position":20},"@provider":"google"}" data-symfony--ux-google-map--map-markers-value="[]" data-symfony--ux-google-map--map-polygons-value="[]" data-symfony--ux-google-map--map-polylines-value="[]" diff --git a/src/Map/src/Bridge/Google/tests/GoogleOptionsTest.php b/src/Map/src/Bridge/Google/tests/GoogleOptionsTest.php index 15ce3040e4a..30accfac355 100644 --- a/src/Map/src/Bridge/Google/tests/GoogleOptionsTest.php +++ b/src/Map/src/Bridge/Google/tests/GoogleOptionsTest.php @@ -54,6 +54,7 @@ public function testWithMinimalConfigurationAndWithoutControls(): void mapId: 'abcdefgh12345678', gestureHandling: GestureHandling::GREEDY, backgroundColor: '#f00', + maxZoom: 10, disableDoubleClickZoom: true, zoomControl: false, mapTypeControl: false, @@ -65,6 +66,7 @@ public function testWithMinimalConfigurationAndWithoutControls(): void 'mapId' => 'abcdefgh12345678', 'gestureHandling' => GestureHandling::GREEDY->value, 'backgroundColor' => '#f00', + 'maxZoom' => 10, 'disableDoubleClickZoom' => true, ], $options->toArray()); diff --git a/src/Map/src/Bridge/Google/tests/GoogleRendererTest.php b/src/Map/src/Bridge/Google/tests/GoogleRendererTest.php index d8695096141..9f930e1ef18 100644 --- a/src/Map/src/Bridge/Google/tests/GoogleRendererTest.php +++ b/src/Map/src/Bridge/Google/tests/GoogleRendererTest.php @@ -31,26 +31,26 @@ public function provideTestRenderMap(): iterable ->zoom(12); yield 'simple map, with minimum options' => [ - 'expected_render' => '
', + 'expected_render' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), apiKey: 'api_key'), 'map' => $map, ]; yield 'with every options' => [ - 'expected_render' => '
', + 'expected_render' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), apiKey: 'api_key', id: 'gmap', language: 'fr', region: 'FR', nonce: 'abcd', retries: 10, url: 'https://maps.googleapis.com/maps/api/js', version: 'quarterly'), 'map' => $map, ]; yield 'with custom attributes' => [ - 'expected_render' => '
', + 'expected_render' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), apiKey: 'api_key'), 'map' => $map, 'attributes' => ['data-controller' => 'my-custom-controller', 'class' => 'map'], ]; yield 'with markers and infoWindows' => [ - 'expected_render' => '
', + 'expected_render' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), apiKey: 'api_key'), 'map' => (clone $map) ->addMarker(new Marker(new Point(48.8566, 2.3522), 'Paris')) @@ -58,7 +58,7 @@ public function provideTestRenderMap(): iterable ]; yield 'with polygons and infoWindows' => [ - 'expected_render' => '
', + 'expected_render' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), apiKey: 'api_key'), 'map' => (clone $map) ->addPolygon(new Polygon(points: [new Point(48.8566, 2.3522), new Point(48.8566, 2.3522), new Point(48.8566, 2.3522)])) @@ -66,7 +66,7 @@ public function provideTestRenderMap(): iterable ]; yield 'with polylines and infoWindows' => [ - 'expected_render' => '
', + 'expected_render' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), apiKey: 'api_key'), 'map' => (clone $map) ->addPolyline(new Polyline(points: [new Point(48.8566, 2.3522), new Point(48.8566, 2.3522), new Point(48.8566, 2.3522)])) @@ -74,7 +74,7 @@ public function provideTestRenderMap(): iterable ]; yield 'with controls enabled' => [ - 'expected_render' => '
', + 'expected_render' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), apiKey: 'api_key'), 'map' => (clone $map) ->options(new GoogleOptions( @@ -86,7 +86,7 @@ public function provideTestRenderMap(): iterable ]; yield 'without controls enabled' => [ - 'expected_render' => '
', + 'expected_render' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), apiKey: 'api_key'), 'map' => (clone $map) ->options(new GoogleOptions( @@ -98,18 +98,18 @@ public function provideTestRenderMap(): iterable ]; yield 'with default map id' => [ - 'expected_renderer' => '
', + 'expected_renderer' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), 'my_api_key', defaultMapId: 'DefaultMapId'), 'map' => (clone $map), ]; yield 'with default map id, when passing options (except the "mapId")' => [ - 'expected_renderer' => '
', + 'expected_renderer' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), 'my_api_key', defaultMapId: 'DefaultMapId'), 'map' => (clone $map) ->options(new GoogleOptions()), ]; yield 'with default map id overridden by option "mapId"' => [ - 'expected_renderer' => '
', + 'expected_renderer' => '
', 'renderer' => new GoogleRenderer(new StimulusHelper(null), 'my_api_key', defaultMapId: 'DefaultMapId'), 'map' => (clone $map) ->options(new GoogleOptions(mapId: 'CustomMapId')),