-
Notifications
You must be signed in to change notification settings - Fork 3
Wire up polyline options for polygon and linestring using data-options #42
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -1,12 +1,17 @@ | ||||||||||||||||||||||||||||||
| import { GeoJSON, marker, polygon, polyline } from 'leaflet'; | ||||||||||||||||||||||||||||||
| import { GeoJSON, icon, marker, polygon, polyline } from 'leaflet'; | ||||||||||||||||||||||||||||||
| import { setPointEvents, setPolyGeometryEvents } from './events'; | ||||||||||||||||||||||||||||||
| import hyperleafletConfig from '../config'; | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| const createPointGeometry = (parsedGeometry, options) => { | ||||||||||||||||||||||||||||||
| const { reverseOrderAll, reverseOrder } = options; | ||||||||||||||||||||||||||||||
| const { reverseOrderAll, reverseOrder, icon: iconSettings } = options; | ||||||||||||||||||||||||||||||
| const isLonLat = reverseOrderAll || reverseOrder !== undefined; | ||||||||||||||||||||||||||||||
| const geometry = isLonLat ? [...parsedGeometry].reverse() : parsedGeometry; | ||||||||||||||||||||||||||||||
| const leafletGeometry = marker(geometry); | ||||||||||||||||||||||||||||||
| let leafletGeometry; | ||||||||||||||||||||||||||||||
| if (options.icon) { | ||||||||||||||||||||||||||||||
| leafletGeometry = marker(geometry, { icon: icon(JSON.parse(options.icon)) }); | ||||||||||||||||||||||||||||||
| } else { | ||||||||||||||||||||||||||||||
| leafletGeometry = marker(geometry); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
| if (options.popup) { | ||||||||||||||||||||||||||||||
| leafletGeometry.bindPopup(options.popup); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
@@ -26,10 +31,10 @@ function changePointGeometry(leafletObject, parsedGeometry, options) { | |||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| const createLineGeometry = (parsedGeometry, options) => { | ||||||||||||||||||||||||||||||
| const { reverseOrderAll, reverseOrder } = options; | ||||||||||||||||||||||||||||||
| const { reverseOrderAll, reverseOrder, options: polylineOptions } = options; | ||||||||||||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The destructuring of Consider refactoring the common logic for handling |
||||||||||||||||||||||||||||||
| const isLonLat = reverseOrderAll || reverseOrder !== undefined; | ||||||||||||||||||||||||||||||
| const geometry = isLonLat ? GeoJSON.coordsToLatLngs(parsedGeometry, 0) : parsedGeometry; | ||||||||||||||||||||||||||||||
| const leafletGeometry = polyline(geometry); | ||||||||||||||||||||||||||||||
| const leafletGeometry = polyline(geometry, polylineOptions); | ||||||||||||||||||||||||||||||
|
Comment on lines
+34
to
+37
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Refactor the handling of polyline options to reduce code duplication between line and polygon geometries. - const { reverseOrderAll, reverseOrder, options: polylineOptions } = options;
+ const { reverseOrderAll, reverseOrder, polylineOptions } = extractPolylineOptions(options);Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||
| if (options.popup) { | ||||||||||||||||||||||||||||||
| leafletGeometry.bindPopup(options.popup); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
@@ -49,10 +54,10 @@ function changeLineGeometry(leafletObject, parsedGeometry, options) { | |||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| const createPolygonGeometry = (parsedGeometry, options) => { | ||||||||||||||||||||||||||||||
| const { reverseOrderAll, reverseOrder } = options; | ||||||||||||||||||||||||||||||
| const { reverseOrderAll, reverseOrder, options: polylineOptions } = options; | ||||||||||||||||||||||||||||||
| const isLonLat = reverseOrderAll || reverseOrder !== undefined; | ||||||||||||||||||||||||||||||
| const geometry = isLonLat ? GeoJSON.coordsToLatLngs(parsedGeometry, 1) : parsedGeometry; | ||||||||||||||||||||||||||||||
| const leafletGeometry = polygon(geometry); | ||||||||||||||||||||||||||||||
| const leafletGeometry = polygon(geometry, polylineOptions); | ||||||||||||||||||||||||||||||
| if (options.popup) { | ||||||||||||||||||||||||||||||
| leafletGeometry.bindPopup(options.popup); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
@@ -105,19 +110,36 @@ function changeGeometry(leafletObject, change) { | |||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| function changeOptions(leafletObject, change) { | ||||||||||||||||||||||||||||||
| const { to: options } = change; | ||||||||||||||||||||||||||||||
| return leafletObject.setStyle(JSON.parse(options)); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
Comment on lines
+113
to
+116
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Refine the implementation of function changeOptions(leafletObject, change) {
const { to: options } = change;
+ try {
+ const parsedOptions = JSON.parse(options);
+ return leafletObject.setStyle(parsedOptions);
+ } catch (error) {
+ console.error('Failed to parse options:', error);
+ return leafletObject; // Or handle the error as appropriate
+ }
}Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| export function createLeafletObject(dataset) { | ||||||||||||||||||||||||||||||
| const { geometry, popup, tooltip, geometryType, id, reverseOrder } = dataset; | ||||||||||||||||||||||||||||||
| const { geometry, popup, tooltip, geometryType, id, reverseOrder, options = '{}', icon } = dataset; | ||||||||||||||||||||||||||||||
| const parsedGeometry = JSON.parse(geometry); | ||||||||||||||||||||||||||||||
| const parsedOptions = JSON.parse(options); | ||||||||||||||||||||||||||||||
| const { reverseOrderAll } = hyperleafletConfig; | ||||||||||||||||||||||||||||||
| const createGeometryFn = createGeometry(geometryType); | ||||||||||||||||||||||||||||||
| return createGeometryFn(parsedGeometry, { popup, tooltip, id, reverseOrderAll, reverseOrder }); | ||||||||||||||||||||||||||||||
| return createGeometryFn(parsedGeometry, { | ||||||||||||||||||||||||||||||
| popup, | ||||||||||||||||||||||||||||||
| tooltip, | ||||||||||||||||||||||||||||||
| id, | ||||||||||||||||||||||||||||||
| reverseOrderAll, | ||||||||||||||||||||||||||||||
| reverseOrder, | ||||||||||||||||||||||||||||||
| options: parsedOptions, | ||||||||||||||||||||||||||||||
| icon, | ||||||||||||||||||||||||||||||
| }); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| export function changeLeafletObject(leafletObject, change) { | ||||||||||||||||||||||||||||||
| switch (change.attribute) { | ||||||||||||||||||||||||||||||
| case 'data-geometry': { | ||||||||||||||||||||||||||||||
| return changeGeometry(leafletObject, change); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
| case 'data-options': { | ||||||||||||||||||||||||||||||
| return changeOptions(leafletObject, change); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
| default: { | ||||||||||||||||||||||||||||||
| throw new Error('Parameter is not a number!'); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ensure consistency in the presentation of JSON data in documentation.
The JSON data in the
data-optionsattribute example is not formatted consistently with other similar examples in the document. Consider formatting it with proper indentation to improve readability and maintain consistency across the documentation.Committable suggestion
Valid format: JSON representing options compatible with L.polyline and L.polygon leaflet methods.