@@ -51,13 +51,19 @@ const lmeState = {
managerHighlight : null ,
managerHighlightedObjectId : null ,
managerHighlightedCategoryKey : null ,
managerHighlightedParentKey : null ,
managerHighlightedParentRecords : null ,
managerHoveredParentKey : null ,
managerHoveredParentRecords : null ,
managerOutsideSelectionBound : false ,
managerHiddenObjects : new Map ( ) ,
managerHiddenObjectIds : new Set ( ) ,
managerHiddenMeasurementSummaryIds : new Set ( ) ,
managerHiddenMeasurementSideIds : new Set ( ) ,
managerHiddenCategories : new Set ( ) ,
managerRemovedCategories : new Set ( ) ,
managerObjectOrder : { } ,
managerCategoryNames : { } ,
managerExpandedRows : new Set ( ) ,
dotNetReference : null
} ;
@@ -223,11 +229,13 @@ function init(dotNetReference) {
} ) ;
if ( ! lmeState . managerOutsideSelectionBound ) {
document . addEventListener ( "pointerdown" , event => {
if ( ! lmeState . managerHighlightedObjectId ) {
if ( ! lmeState . managerHighlightedObjectId && ! lmeState . managerHighlightedParentKey ) {
return ;
}
const selectedRow = event . target ? . closest ? . ( ".layer-manager-object" ) ;
if ( selectedRow ? . dataset . objectId === lmeState . managerHighlightedObjectId ) {
const selectedObject = event . target ? . closest ? . ( ".layer-manager-object" ) ;
const selectedParent = event . target ? . closest ? . ( "[data-highlight-key]" ) ;
if ( selectedObject ? . dataset . objectId === lmeState . managerHighlightedObjectId
|| selectedParent ? . dataset . highlightKey === lmeState . managerHighlightedParentKey ) {
return ;
}
clearManagerHighlight ( ) ;
@@ -1181,6 +1189,143 @@ function renameManagedObject(record, index) {
setInfo ( ` Oggetto rinominato: ${ name } . ` ) ;
}
function managedCategoryName ( category , records ) {
const storedName = lmeState . managerCategoryNames [ category . key ] ;
const featureName = records
. map ( record => record . layer ? . feature ? . properties ? . _lmeCategoryName )
. find ( Boolean ) ;
const name = String ( storedName || featureName || category . label ) . trim ( ) ;
if ( name !== category . label ) {
lmeState . managerCategoryNames [ category . key ] = name ;
}
return name ;
}
function managedCategoryCanRename ( category ) {
return [ "drawings" , "imported" , "importedSheets" ] . includes ( category . key ) ;
}
function renameManagedCategory ( category , records ) {
const currentName = managedCategoryName ( category , records ) ;
const requestedName = window . prompt ( "Nuovo nome gruppo" , currentName ) ;
if ( requestedName === null ) {
return ;
}
const name = requestedName . trim ( ) . slice ( 0 , 120 ) ;
if ( ! name ) {
setInfo ( "Nome non modificato: inserisci un testo." ) ;
return ;
}
lmeState . managerCategoryNames [ category . key ] = name ;
records . forEach ( record => {
if ( record . layer ? . feature ? . properties ) {
record . layer . feature . properties . _lmeCategoryName = name ;
}
} ) ;
refreshLayerManager ( ) ;
setInfo ( ` Gruppo rinominato: ${ name } . ` ) ;
}
function managedBlockName ( source , records ) {
return String ( records
. map ( record => record . layer ? . feature ? . properties ? . _lmeGroupName )
. find ( Boolean ) || source ) ;
}
function renameManagedBlock ( category , source , records ) {
const currentName = managedBlockName ( source , records ) ;
const requestedName = window . prompt ( "Nuovo nome gruppo" , currentName ) ;
if ( requestedName === null ) {
return ;
}
const name = requestedName . trim ( ) . slice ( 0 , 120 ) ;
if ( ! name ) {
setInfo ( "Nome non modificato: inserisci un testo." ) ;
return ;
}
records . forEach ( record => {
if ( record . layer ? . feature ? . properties ) {
record . layer . feature . properties . _lmeGroupName = name ;
}
} ) ;
refreshLayerManager ( ) ;
setInfo ( ` Gruppo rinominato: ${ name } . ` ) ;
}
function managedCategoryCanRemove ( category , records ) {
return records . length > 0
&& [ "drawings" , "imported" , "importedSheets" , "selectedParcels" , "gpsParcels" ] . includes ( category . key ) ;
}
function managedObjectCanRemove ( record ) {
return [ "drawings" , "imported" , "importedSheets" , "selectedParcels" , "gpsParcels" ] . includes ( record . categoryKey ) ;
}
function layerManagerRowActions ( renameButton , removeButton ) {
if ( ! renameButton && ! removeButton ) {
return "" ;
}
return ` <span class="layer-row-actions"> ${ renameButton } ${ removeButton } </span> ` ;
}
const layerManagerPalettes = [
{ surface : "#f0fdf4" , parent : "#dcfce7" , border : "#86efac" , accent : "#166534" } ,
{ surface : "#eff6ff" , parent : "#dbeafe" , border : "#93c5fd" , accent : "#1d4ed8" } ,
{ surface : "#fffbeb" , parent : "#fef3c7" , border : "#fcd34d" , accent : "#92400e" } ,
{ surface : "#fff1f2" , parent : "#ffe4e6" , border : "#fda4af" , accent : "#be123c" } ,
{ surface : "#f5f3ff" , parent : "#ede9fe" , border : "#c4b5fd" , accent : "#6d28d9" } ,
{ surface : "#ecfeff" , parent : "#cffafe" , border : "#67e8f9" , accent : "#0e7490" } ,
{ surface : "#f7fee7" , parent : "#ecfccb" , border : "#bef264" , accent : "#3f6212" }
] ;
function applyLayerManagerPalette ( row , key ) {
const hash = [ ... String ( key ) ] . reduce ( ( value , character ) =>
( ( value * 31 ) + character . charCodeAt ( 0 ) ) >>> 0 , 0 ) ;
const palette = layerManagerPalettes [ hash % layerManagerPalettes . length ] ;
row . style . setProperty ( "--layer-group-surface" , palette . surface ) ;
row . style . setProperty ( "--layer-group-parent" , palette . parent ) ;
row . style . setProperty ( "--layer-group-border" , palette . border ) ;
row . style . setProperty ( "--layer-group-accent" , palette . accent ) ;
}
function removeManagedRecords ( records , subject ) {
if ( ! records . length ) {
return ;
}
const message = records . length === 1
? ` Rimuovere ${ subject } dal progetto? Non verra incluso nel prossimo salvataggio. `
: ` Rimuovere ${ subject } e tutti i suoi ${ records . length } oggetti dal progetto? Non verranno inclusi nel prossimo salvataggio. ` ;
if ( ! window . confirm ( message ) ) {
return ;
}
const removedIds = new Set ( records . map ( record => record . id ) ) ;
const categoryKeys = new Set ( records . map ( record => record . categoryKey ) ) ;
records . forEach ( record => {
if ( record . parent ? . hasLayer ? . ( record . layer ) ) {
record . parent . removeLayer ( record . layer ) ;
}
lmeState . managerHiddenObjects . delete ( record . id ) ;
lmeState . managerHiddenObjectIds . delete ( record . id ) ;
lmeState . managerHiddenMeasurementSummaryIds . delete ( record . id ) ;
lmeState . managerHiddenMeasurementSideIds . delete ( record . id ) ;
} ) ;
categoryKeys . forEach ( categoryKey => {
const order = lmeState . managerObjectOrder [ categoryKey ] || [ ] ;
lmeState . managerObjectOrder [ categoryKey ] = order . filter ( id => ! removedIds . has ( id ) ) ;
const category = layerManagerCategories ( ) . find ( item => item . key === categoryKey ) ;
if ( category && managedRecordsForCategory ( category ) . length === 0 ) {
lmeState . managerRemovedCategories . add ( categoryKey ) ;
delete lmeState . managerCategoryNames [ categoryKey ] ;
}
} ) ;
clearManagerHighlight ( ) ;
refreshImportedMeasurements ( ) ;
refreshDrawingMeasurements ( ) ;
updateGpsInsideState ( ) ;
refreshLayerManager ( ) ;
setInfo ( ` ${ records . length === 1 ? "Oggetto rimosso" : ` ${ records . length } oggetti rimossi ` } dal progetto. ` ) ;
}
function managedObjectDetails ( layer ) {
const details = [ ] ;
const properties = layer ? . feature ? . properties || { } ;
@@ -1236,6 +1381,11 @@ function refreshLayerManager() {
return ;
}
const records = managedRecordsForCategory ( category ) ;
if ( records . length ) {
lmeState . managerRemovedCategories . delete ( category . key ) ;
} else if ( lmeState . managerRemovedCategories . has ( category . key ) ) {
return ;
}
const savedOrder = lmeState . managerObjectOrder [ category . key ] || [ ] ;
const positions = new Map ( savedOrder . map ( ( id , index ) => [ id , index ] ) ) ;
records . sort ( ( left , right ) =>
@@ -1258,17 +1408,39 @@ function renderLayerManagerCategory(category, records) {
const group = document . createElement ( "details" ) ;
group . className = "layer-manager-group" ;
group . dataset . dragType = "category" ;
group . dataset . layerDepth = "0" ;
group . dataset . categoryKey = category . key ;
applyLayerManagerPalette ( group , ` category: ${ category . key } ` ) ;
bindLayerManagerExpansion ( group , ` category: ${ category . key } ` ) ;
const categoryName = managedCategoryName ( category , records ) ;
const renameButton = managedCategoryCanRename ( category )
? ` <button type="button" class="layer-rename-button" aria-label="Rinomina gruppo" title="Rinomina">Rinomina</button> `
: "" ;
const removeButton = managedCategoryCanRemove ( category , records )
? ` <button type="button" class="layer-remove-button" aria-label="Rimuovi gruppo dal progetto" title="Rimuovi dal progetto">Rimuovi</button> `
: "" ;
const rowActions = layerManagerRowActions ( renameButton , removeButton ) ;
group . classList . toggle ( "layer-manager-with-actions" , Boolean ( rowActions ) ) ;
const visibleCount = records . filter ( record => ! lmeState . managerHiddenObjectIds . has ( record . id ) ) . length ;
const categoryVisible = ! lmeState . managerHiddenCategories . has ( category . key )
&& ( ! category . roots . length || category . roots . some ( layer => lmeState . map . hasLayer ( layer ) ) ) ;
const visible = categoryVisible ;
group . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina gruppo">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra ${ escapeHtml ( category . label ) } "><span class="layer-manager-title"> ${ escapeHtml ( category . label ) } </span> ${ layerManagerMoveButtons ( "gruppo" ) } <span class="layer-manager-count"> ${ records . length } </span></summary><div class="layer-manager-children"></div> ` ;
group . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina gruppo">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra ${ escapeHtml ( categoryName ) } "><span class="layer-manager-title"> ${ escapeHtml ( categoryName ) } </span> ${ rowActions } ${ layerManagerMoveButtons ( "gruppo" ) } <span class="layer-manager-count"> ${ records . length } </span></summary><div class="layer-manager-children"></div> ` ;
const checkbox = group . querySelector ( "input" ) ;
checkbox . indeterminate = categoryVisible && records . length > 0 && visibleCount < records . length ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
checkbox . addEventListener ( "change" , ( ) => setManagedCategoryVisible ( category , checkbox . checked ) ) ;
group . querySelector ( ".layer-rename-button" ) ? . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
renameManagedCategory ( category , records ) ;
} ) ;
group . querySelector ( ".layer-remove-button" ) ? . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
removeManagedRecords ( records , ` il gruppo ' ${ categoryName } ' ` ) ;
} ) ;
bindManagedParentHighlight ( group , ` category: ${ category . key } ` , records ) ;
const children = group . querySelector ( ".layer-manager-children" ) ;
if ( category . blocks ) {
const blocks = new Map ( ) ;
@@ -1288,12 +1460,19 @@ function renderLayerManagerBlock(category, source, records) {
const block = document . createElement ( "details" ) ;
block . className = "layer-manager-block" ;
block . dataset . dragType = "block" ;
block . dataset . layerDepth = "1" ;
block . dataset . categoryKey = category . key ;
block . dataset . blockKey = source ;
applyLayerManagerPalette ( block , ` block: ${ category . key } : ${ source } ` ) ;
bindLayerManagerExpansion ( block , ` block: ${ category . key } : ${ source } ` ) ;
const visibleCount = records . filter ( record => ! lmeState . managerHiddenObjectIds . has ( record . id ) ) . length ;
const visible = visibleCount === records . length ;
block . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina blocco">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra blocco"><span class="layer-manager-title"> ${ escapeHtml ( source ) } </span> ${ layerManagerMoveButtons ( "blocco" ) } <span class="layer-manager-count"> ${ records . length } </span></summary><div class="layer-manager-children"></div> ` ;
const blockName = managedBlockName ( source , records ) ;
const rowActions = layerManagerRowActions (
` <button type="button" class="layer-rename-button" aria-label="Rinomina gruppo" title="Rinomina">Rinomina</button> ` ,
` <button type="button" class="layer-remove-button" aria-label="Rimuovi gruppo dal progetto" title="Rimuovi dal progetto">Rimuovi</button> ` ) ;
block . classList . add ( "layer-manager-with-actions" ) ;
block . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina blocco">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra ${ escapeHtml ( blockName ) } "><span class="layer-manager-title"> ${ escapeHtml ( blockName ) } </span> ${ rowActions } ${ layerManagerMoveButtons ( "blocco" ) } <span class="layer-manager-count"> ${ records . length } </span></summary><div class="layer-manager-children"></div> ` ;
const checkbox = block . querySelector ( "input" ) ;
checkbox . indeterminate = visibleCount > 0 && ! visible ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
@@ -1301,6 +1480,17 @@ function renderLayerManagerBlock(category, source, records) {
records . forEach ( record => setManagedObjectVisible ( record , checkbox . checked , false ) ) ;
refreshLayerManager ( ) ;
} ) ;
block . querySelector ( ".layer-rename-button" ) . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
renameManagedBlock ( category , source , records ) ;
} ) ;
block . querySelector ( ".layer-remove-button" ) . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
removeManagedRecords ( records , ` il gruppo ' ${ blockName } ' ` ) ;
} ) ;
bindManagedParentHighlight ( block , ` block: ${ category . key } : ${ source } ` , records ) ;
const children = block . querySelector ( ".layer-manager-children" ) ;
records . forEach ( ( record , index ) => children . appendChild ( renderLayerManagerObject ( record , index ) ) ) ;
return block ;
@@ -1313,13 +1503,20 @@ function renderLayerManagerObject(record, index) {
object . classList . add ( "layer-manager-object-selected" ) ;
}
object . dataset . dragType = "object" ;
object . dataset . layerDepth = "2" ;
object . dataset . objectId = record . id ;
bindLayerManagerExpansion ( object , ` object: ${ record . id } ` ) ;
const visible = ! lmeState . managerHiddenObjectIds . has ( record . id ) ;
const renameButton = managedObjectCanRename ( record )
? ` <button type="button" class="layer-rename-button" aria-label="Rinomina oggetto" title="Rinomina">Rinomina</button> `
: "" ;
object . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina oggetto">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra oggetto"><span class="layer-manager-title"> ${ escapeHtml ( managedObjectLabel ( record , index ) ) } </span> ${ renameButton } ${ layerManagerMoveButtons ( "oggetto" ) } <span class="layer-manager-count">› </span></summary><div class="layer-manager-details"></div> ` ;
const removeButton = managedObjectCanRemove ( record )
? ` <button type="button" class="layer-remove-button" aria-label="Rimuovi oggetto dal progetto" title="Rimuovi dal progetto">Rimuovi</button> `
: "" ;
const rowActions = layerManagerRowActions ( renameButton , removeButton ) ;
object . classList . toggle ( "layer-manager-with-actions" , Boolean ( rowActions ) ) ;
const objectName = managedObjectLabel ( record , index ) ;
object . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina oggetto">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra oggetto"><span class="layer-manager-title"> ${ escapeHtml ( objectName ) } </span> ${ rowActions } ${ layerManagerMoveButtons ( "oggetto" ) } <span class="layer-manager-count">› </span></summary><div class="layer-manager-details"></div> ` ;
const checkbox = object . querySelector ( "input" ) ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
checkbox . addEventListener ( "change" , ( ) => setManagedObjectVisible ( record , checkbox . checked , true ) ) ;
@@ -1328,6 +1525,11 @@ function renderLayerManagerObject(record, index) {
event . stopPropagation ( ) ;
renameManagedObject ( record , index ) ;
} ) ;
object . querySelector ( ".layer-remove-button" ) ? . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
removeManagedRecords ( [ record ] , ` ' ${ objectName } ' ` ) ;
} ) ;
object . querySelector ( ".layer-manager-title" ) . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
@@ -1559,33 +1761,107 @@ function highlightManagedObject(record) {
document . querySelectorAll ( ".layer-manager-object" ) . forEach ( row => {
row . classList . toggle ( "layer-manager-object-selected" , row . dataset . objectId === record . id ) ;
} ) ;
const geojson = record . layer . toGeoJSON ? . ( ) ;
if ( geojson ) {
L . geoJSON ( geojson , {
pane : "managerHighlightPane" ,
interactive : false ,
style : { color : "#ff00d4" , weight : 8 , opacity : 1 , fillColor : "#00fff0" , fillOpacity : 0.16 } ,
pointToLayer : ( feature , latlng ) => L . circleMarker ( latlng , {
pane : "managerHighlightPane" ,
radius : 12 ,
color : "#ff00d4" ,
weight : 5 ,
fillColor : "#00fff0" ,
fillOpacity : 0.9 ,
interactive : false
} )
} ) . addTo ( lmeState . managerHighlight ) ;
}
renderManagerHighlight ( [ record ] ) ;
fitLayer ( record . layer ) ;
}
function bindManagedParentHighlight ( row , key , records ) {
const summary = row . querySelector ( ":scope > summary" ) ;
row . dataset . highlightKey = key ;
row . classList . toggle ( "layer-manager-parent-selected" , lmeState . managerHighlightedParentKey === key ) ;
if ( lmeState . managerHighlightedParentKey === key ) {
lmeState . managerHighlightedParentRecords = records ;
}
row . querySelector ( ":scope > summary > .layer-manager-title" ) . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
row . open = true ;
highlightManagedParent ( row , key , records ) ;
} ) ;
summary . addEventListener ( "pointerenter" , ( ) => {
lmeState . managerHoveredParentKey = key ;
lmeState . managerHoveredParentRecords = records ;
row . classList . add ( "layer-manager-parent-highlighted" ) ;
renderManagerHighlight ( records ) ;
} ) ;
summary . addEventListener ( "pointerleave" , ( ) => {
if ( lmeState . managerHoveredParentKey !== key ) {
return ;
}
lmeState . managerHoveredParentKey = null ;
lmeState . managerHoveredParentRecords = null ;
row . classList . remove ( "layer-manager-parent-highlighted" ) ;
renderSelectedManagerHighlight ( ) ;
} ) ;
}
function highlightManagedParent ( row , key , records ) {
if ( lmeState . managerHighlightedParentKey === key ) {
clearManagerHighlight ( ) ;
return ;
}
clearManagerHighlight ( ) ;
lmeState . managerHighlightedParentKey = key ;
lmeState . managerHighlightedParentRecords = records ;
lmeState . managerHighlightedCategoryKey = records [ 0 ] ? . categoryKey || null ;
row . classList . add ( "layer-manager-parent-selected" ) ;
renderManagerHighlight ( records ) ;
}
function renderSelectedManagerHighlight ( ) {
if ( lmeState . managerHighlightedParentRecords ? . length ) {
renderManagerHighlight ( lmeState . managerHighlightedParentRecords ) ;
return ;
}
const selected = lmeState . managerRecords . get ( lmeState . managerHighlightedObjectId ) ;
renderManagerHighlight ( selected ? [ selected ] : [ ] ) ;
}
function renderManagerHighlight ( records ) {
lmeState . managerHighlight ? . clearLayers ( ) ;
const features = records . flatMap ( record => {
const geojson = record . layer ? . toGeoJSON ? . ( ) ;
if ( ! geojson ) {
return [ ] ;
}
return geojson . type === "FeatureCollection" ? geojson . features : [ geojson ] ;
} ) ;
if ( ! features . length ) {
return ;
}
L . geoJSON ( { type : "FeatureCollection" , features } , {
pane : "managerHighlightPane" ,
interactive : false ,
style : { color : "#ff00d4" , weight : 8 , opacity : 1 , fillColor : "#00fff0" , fillOpacity : 0.16 } ,
pointToLayer : ( feature , latlng ) => L . circleMarker ( latlng , {
pane : "managerHighlightPane" ,
radius : 12 ,
color : "#ff00d4" ,
weight : 5 ,
fillColor : "#00fff0" ,
fillOpacity : 0.9 ,
interactive : false
} )
} ) . addTo ( lmeState . managerHighlight ) ;
}
function clearManagerHighlight ( ) {
lmeState . managerHighlight ? . clearLayers ( ) ;
lmeState . managerHighlightedObjectId = null ;
lmeState . managerHighlightedCategoryKey = null ;
lmeState . managerHighlightedParentKey = null ;
lmeState . managerHighlightedParentRecords = null ;
lmeState . managerHoveredParentKey = null ;
lmeState . managerHoveredParentRecords = null ;
document . querySelectorAll ( ".layer-manager-object-selected" ) . forEach ( row => {
row . classList . remove ( "layer-manager-object-selected" ) ;
} ) ;
document . querySelectorAll ( ".layer-manager-parent-highlighted" ) . forEach ( row => {
row . classList . remove ( "layer-manager-parent-highlighted" ) ;
} ) ;
document . querySelectorAll ( ".layer-manager-parent-selected" ) . forEach ( row => {
row . classList . remove ( "layer-manager-parent-selected" ) ;
} ) ;
}
function layerManagerMoveButtons ( label ) {
@@ -2531,6 +2807,8 @@ function captureDisplayOptions() {
selectedParcelsVisible : lmeState . selectedParcelsVisible ,
layerOrder : [ ... lmeState . layerOrder ] ,
layerObjectOrder : { ... lmeState . managerObjectOrder } ,
layerCategoryNames : { ... lmeState . managerCategoryNames } ,
removedLayerCategories : [ ... lmeState . managerRemovedCategories ] ,
hiddenLayerObjects : [ ... lmeState . managerHiddenObjectIds ] ,
hiddenLayerMeasurementSummaries : [ ... lmeState . managerHiddenMeasurementSummaryIds ] ,
hiddenLayerMeasurementSides : [ ... lmeState . managerHiddenMeasurementSideIds ] ,
@@ -2567,6 +2845,12 @@ function applyProjectDisplayOptions(options) {
if ( options . layerObjectOrder && typeof options . layerObjectOrder === "object" ) {
lmeState . managerObjectOrder = options . layerObjectOrder ;
}
if ( options . layerCategoryNames && typeof options . layerCategoryNames === "object" ) {
lmeState . managerCategoryNames = { ... options . layerCategoryNames } ;
}
if ( Array . isArray ( options . removedLayerCategories ) ) {
lmeState . managerRemovedCategories = new Set ( options . removedLayerCategories ) ;
}
if ( Array . isArray ( options . hiddenLayerObjects ) ) {
lmeState . managerHiddenObjectIds = new Set ( options . hiddenLayerObjects ) ;
}
@@ -2653,6 +2937,12 @@ function managedGroupGeoJson(group, categoryKey) {
}
} ) ;
} ) ;
const categoryName = lmeState . managerCategoryNames [ categoryKey ] ;
if ( categoryName ) {
features . forEach ( feature => {
feature . properties = { ... ( feature . properties || { } ) , _lmeCategoryName : categoryName } ;
} ) ;
}
return { type : "FeatureCollection" , features } ;
}
@@ -2662,7 +2952,9 @@ function resetLayerManagerProjectState() {
lmeState . managerHiddenMeasurementSummaryIds . clear ( ) ;
lmeState . managerHiddenMeasurementSideIds . clear ( ) ;
lmeState . managerHiddenCategories . clear ( ) ;
lmeState . managerRemovedCategories . clear ( ) ;
lmeState . managerObjectOrder = { } ;
lmeState . managerCategoryNames = { } ;
clearManagerHighlight ( ) ;
}