by Hatim El Oufir
Implementation of LeafLet GeoSearch as a Filament Form Field
This package provides a Filament Form Field integration of the LeafLet GeoSearch package https://github.com/smeijer/leaflet-geosearch
You can install the package via composer:
composer require heloufir/filament-leaflet-geosearch
You need to publish assets used by this package:
php artisan vendor:publish --tag=filament-leaflet-geosearch-assets
In your model you need to add the location column cast:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class MyModel extends Model{ // ... protected $casts = [ 'location' => 'object' ];}
Important: The location
column must have the longText
type in your migration (see the example below)
// ...Schema::create('my_models', function (Blueprint $table) { // ... $table->longText('location'); // ...});// ...
Now that you have configured your model, you can use the LeafletInput
into your Filament Resource form schema:
use Heloufir\FilamentLeafLetGeoSearch\Forms\Components\LeafletInput; public static function form(Form $form): Form{ return $form ->schema([ // ... LeafletInput::make('location') ->setMapHeight(300) // Here you can specify a map height in pixels, by default the height is equal to 200 ->setZoomControl(false) // Here you can enable/disable zoom control on the map (default: true) ->setScrollWheelZoom(false) // Here you can enable/disable zoom on wheel scroll (default: true) ->setZoomLevel(3) // Here you can change the default zoom level (when the map is loaded for the first time), default value is 10 ->required() // ... ]);}
The object stored into the location
database column have the following format:
{ x: Number, // lon, y: Number, // lat, label: String, // formatted address bounds: [ [Number, Number], // s, w - lat, lon [Number, Number], // n, e - lat, lon ], raw: {}, // raw provider result}
The MIT License (MIT). Please see License File for more information.