From bce5aa72c81eac85620063a3b2ae1d02342f9bd6 Mon Sep 17 00:00:00 2001 From: Ovidiu U Date: Wed, 8 Apr 2026 08:46:33 +0100 Subject: [PATCH] feat: extract fuel.map component and wire Leaflet to map-update browser event --- app/Livewire/Public/Fuel/Map.php | 21 ++++++++++++ resources/js/maps/station-map.js | 8 +++-- .../components/fuel/station-map.blade.php | 6 ++-- .../views/livewire/public/fuel/map.blade.php | 3 ++ tests/Feature/Livewire/Fuel/MapTest.php | 33 +++++++++++++++++++ 5 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 app/Livewire/Public/Fuel/Map.php create mode 100644 resources/views/livewire/public/fuel/map.blade.php create mode 100644 tests/Feature/Livewire/Fuel/MapTest.php diff --git a/app/Livewire/Public/Fuel/Map.php b/app/Livewire/Public/Fuel/Map.php new file mode 100644 index 0000000..768a7ee --- /dev/null +++ b/app/Livewire/Public/Fuel/Map.php @@ -0,0 +1,21 @@ +dispatch('map-update', results: $results, meta: $meta, radius: $radius); + } + + public function render(): View + { + return view('livewire.public.fuel.map'); + } +} diff --git a/resources/js/maps/station-map.js b/resources/js/maps/station-map.js index 9b335d4..b87ac88 100644 --- a/resources/js/maps/station-map.js +++ b/resources/js/maps/station-map.js @@ -65,11 +65,13 @@ export function stationMap(results, meta, radius) { maxZoom: 19, }).addTo(this._map); - if (this.results && this.results.length > 0) { + window.addEventListener('map-update', (e) => { + this.results = e.detail.results; + this.meta = e.detail.meta; + this.radius = e.detail.radius; this._plotMarkers(); - } + }); - this.$watch('results', () => this._plotMarkers()); this.locateUser(); }, diff --git a/resources/views/components/fuel/station-map.blade.php b/resources/views/components/fuel/station-map.blade.php index 27ffd7e..77f7d4e 100644 --- a/resources/views/components/fuel/station-map.blade.php +++ b/resources/views/components/fuel/station-map.blade.php @@ -1,6 +1,4 @@ -@props(['results' => []]) -
diff --git a/resources/views/livewire/public/fuel/map.blade.php b/resources/views/livewire/public/fuel/map.blade.php new file mode 100644 index 0000000..5423f63 --- /dev/null +++ b/resources/views/livewire/public/fuel/map.blade.php @@ -0,0 +1,3 @@ +
+ +
diff --git a/tests/Feature/Livewire/Fuel/MapTest.php b/tests/Feature/Livewire/Fuel/MapTest.php new file mode 100644 index 0000000..74b41fc --- /dev/null +++ b/tests/Feature/Livewire/Fuel/MapTest.php @@ -0,0 +1,33 @@ +assertStatus(200); +}); + +it('dispatches map-update browser event when stations-found is received', function () { + Livewire::test(Map::class) + ->dispatch('stations-found', + results: [['name' => 'BP Garage']], + meta: ['lat' => 51.5, 'lng' => -0.1, 'count' => 1], + radius: 5, + prediction: null + ) + ->assertDispatched('map-update'); +}); + +it('passes radius in map-update payload', function () { + Livewire::test(Map::class) + ->dispatch('stations-found', + results: [], + meta: ['lat' => 51.5, 'lng' => -0.1, 'count' => 0], + radius: 10, + prediction: null + ) + ->assertDispatched('map-update', fn ($event, $params) => + $params['radius'] === 10 + ); +});