mirror of
				https://github.com/KevinMidboe/nova-map-fields.git
				synced 2025-10-29 17:50:27 +00:00 
			
		
		
		
	Testing new navigation route
This commit is contained in:
		
							
								
								
									
										62
									
								
								resources/js/components/fields/NavigationRoute.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								resources/js/components/fields/NavigationRoute.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <Polyline | ||||||
|  |       :edit="edit" | ||||||
|  |       :field="field" | ||||||
|  |       :value="value" | ||||||
|  |       @input="triggerChange" | ||||||
|  |     /> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { Polyline } from "vue2-leaflet"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   props: { | ||||||
|  |     value: { | ||||||
|  |       type: Object, | ||||||
|  |       default: null, | ||||||
|  |     }, | ||||||
|  |     field: { | ||||||
|  |       type: Object, | ||||||
|  |       required: true, | ||||||
|  |     }, | ||||||
|  |     edit: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       startBounds: undefined, | ||||||
|  |       markerBeingDragged: undefined, | ||||||
|  |       lastMarkerAddedTime: 0, | ||||||
|  |     }; | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   methods: { | ||||||
|  |     queryNavigation(markers) { | ||||||
|  |       const cords = | ||||||
|  |         "6.985908836799895,61.28541170467011;7.092996407603286,61.23027059410228;10.761970380502788,59.927108594277456"; | ||||||
|  |       const URL = `https://api.mapbox.com/directions/v5/mapbox/driving/${cords}/geometries=geojson&access_token=pk.eyJ1Ijoia2V2aW5taWRib2UiLCJhIjoiY2pydWhlamQyMHJ2NTRhdGN1em5ndXVyMyJ9.Ejdo_3iuuGOD662Bh6es4w`; | ||||||
|  |       fetch(URL) | ||||||
|  |         .then((resp) => resp.json()) | ||||||
|  |         .then((response) => { | ||||||
|  |           const { coordinates } = response.routes.geometry; | ||||||
|  |           console.log("got coordinates:", coordinates); | ||||||
|  |         }); | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     triggerChange(markers) { | ||||||
|  |       console.log("forwarding markers:", markers); | ||||||
|  |       this.$emit("input", markers); | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   components: { | ||||||
|  |     Polyline, | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
| @@ -1,13 +1,21 @@ | |||||||
| Nova.booting((Vue, router) => { | Nova.booting((Vue, router) => { | ||||||
|     Vue.component('index-nova-map-fields', require('./components/IndexField')); |     Vue.component("index-nova-map-fields", require("./components/IndexField")); | ||||||
|     Vue.component('detail-nova-map-fields', require('./components/DetailField')); |     Vue.component( | ||||||
|     Vue.component('form-nova-map-fields', require('./components/FormField')); |         "detail-nova-map-fields", | ||||||
|  |         require("./components/DetailField") | ||||||
|  |     ); | ||||||
|  |     Vue.component("form-nova-map-fields", require("./components/FormField")); | ||||||
|  |  | ||||||
|     Vue.component('field-map', require('./components/FieldMap')); |     Vue.component("field-map", require("./components/FieldMap")); | ||||||
|     Vue.component('field-marker', require('./components/fields/Marker')); |     Vue.component("field-marker", require("./components/fields/Marker")); | ||||||
|     Vue.component('field-polyline', require('./components/fields/Polyline')); |     Vue.component("field-polyline", require("./components/fields/Polyline")); | ||||||
|     Vue.component('field-polygon', require('./components/fields/Polygon')); |     Vue.component("field-polygon", require("./components/fields/Polygon")); | ||||||
|  |     Vue.component( | ||||||
|  |         "field-navigation-route", | ||||||
|  |         require("./components/fields/NavigationRoute") | ||||||
|  |     ); | ||||||
|  |  | ||||||
|     // Config leaflet images to load images from CDN |     // Config leaflet images to load images from CDN | ||||||
|     L.Icon.Default.imagePath = 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.4/images/'; |     L.Icon.Default.imagePath = | ||||||
| }) |         "https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.4/images/"; | ||||||
|  | }); | ||||||
|   | |||||||
							
								
								
									
										40
									
								
								src/NavigationRoute.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/NavigationRoute.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Lassehaslev\NovaMapFields; | ||||||
|  |  | ||||||
|  | class Polyline extends MapField | ||||||
|  | { | ||||||
|  |     /** | ||||||
|  |      * Create a new field. | ||||||
|  |      * And set default properties. | ||||||
|  |      * | ||||||
|  |      * @param string      $name | ||||||
|  |      * @param string|null $attribute | ||||||
|  |      * @param mixed|null  $resolveCallback | ||||||
|  |      */ | ||||||
|  |     public function __construct($name, $attribute = null, $resolveCallback = null) | ||||||
|  |     { | ||||||
|  |         $this->help('Click on the map to create a new point. Drag a marker to change the point. When the map is selected, you can press [backspace] to remove markers.'); | ||||||
|  |  | ||||||
|  |         parent::__construct($name, $attribute = null, $resolveCallback); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Resolve the attribute before sending to frontend. | ||||||
|  |      * | ||||||
|  |      * @param mixed      $resource | ||||||
|  |      * @param mixed|null $attribute | ||||||
|  |      * | ||||||
|  |      * @return array | ||||||
|  |      */ | ||||||
|  |     public function resolveAttribute($resource, $attribute = null) | ||||||
|  |     { | ||||||
|  |         $value = $resource->{$attribute}; | ||||||
|  |  | ||||||
|  |         if (is_array($value)) { | ||||||
|  |             return $value; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return json_decode($value); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user