From 4c777713608b6dc7dcd3e4f7eee8eff641e96a3b Mon Sep 17 00:00:00 2001 From: Michael Douchin Date: Tue, 10 Dec 2024 09:12:12 +0100 Subject: [PATCH] Attribute table - Fix bugs --- assets/src/legacy/attributeTable.js | 82 ++++++++++++++++++----------- 1 file changed, 51 insertions(+), 31 deletions(-) diff --git a/assets/src/legacy/attributeTable.js b/assets/src/legacy/attributeTable.js index b1f7ee8345..4eaa8ceba1 100644 --- a/assets/src/legacy/attributeTable.js +++ b/assets/src/legacy/attributeTable.js @@ -576,12 +576,15 @@ var lizAttributeTable = function() { // Create button var canCreate = false; - if( 'editionLayers' in config && cleanName in config.editionLayers ) { + if ('editionLayers' in config + && cleanName in attributeLayersDic + && attributeLayersDic[cleanName] in config.editionLayers) { var al = config.editionLayers[attributeLayersDic[cleanName]]; - if( al.capabilities.createFeature == "True" ) + if (al.capabilities.createFeature == "True") { canCreate = true; + } } - if( canCreate ){ + if (canCreate) { html+= ' '; } @@ -635,8 +638,9 @@ var lizAttributeTable = function() { html+= ''; // attribute-layer-action-bar - if( childHtml ) + if( childHtml ) { alc= ' showChildren'; + } html+= '
'; html+= ' '; html+= '
'; @@ -826,22 +830,34 @@ var lizAttributeTable = function() { }); // Bind click on createFeature button + // BEWARE - This is used for creating a new line in the displayed attribute table + // and for creating a new child item $('#attribute-layer-'+ cleanName + ' button.btn-createFeature-attributeTable') .click(function(){ - if ( $('#attribute-layer-'+ cleanName + ' tr.active').length != 1) { + // Ask the user to click on a table line + // before trying to create a child feature + const creationContext = ($(this).hasClass('new-child')) ? 'child' : 'parent'; + if (creationContext == 'child' + && $('#attribute-layer-'+ cleanName + ' tr.active').length != 1) { $('#lizmap-edition-message').remove(); lizMap.addMessage( lizDict['attributeLayers.toolbar.btn.data.createChildFeature.no.actived'], 'info', true).attr('id','lizmap-edition-message'); return false; } - var parentFeatId = document.querySelector('#attribute-layer-'+ cleanName + ' tr.active lizmap-feature-toolbar').fid; + const parentFidElement = document.querySelector('#attribute-layer-'+ cleanName + ' tr.active lizmap-feature-toolbar'); + var parentFeatId = (parentFidElement) ? parentFidElement.fid : null; var parentLayerName = attributeLayersDic[ cleanName ]; var parentLayerId = config.layers[parentLayerName]['id']; var aName = attributeLayersDic[ $(this).val() ]; var pivotId = $(this).attr("data-pivot"); - lizMap.getLayerFeature(parentLayerName, parentFeatId, function(parentFeat) { - var lid = config.layers[aName]['id']; - lizMap.launchEdition( lid, null, {layerId:parentLayerId, feature:parentFeat, pivotId:pivotId}); - }); + var lid = config.layers[aName]['id']; + if (creationContext == 'parent') { + lizMap.launchEdition( lid, null, null); + } else { + lizMap.getLayerFeature(parentLayerName, parentFeatId, function(parentFeat) { + lizMap.launchEdition( lid, null, {layerId:parentLayerId, feature:parentFeat, pivotId:pivotId}); + }); + } + return false; }) .hover( @@ -1122,11 +1138,12 @@ var lizAttributeTable = function() { // Add create child feature button var canCreateChild = false; - if( 'editionLayers' in config ){ - if( childLayerName in config.editionLayers ) { + if ('editionLayers' in config) { + if (childLayerName in config.editionLayers) { var al = config.editionLayers[childLayerName]; - if( al.capabilities.createFeature == "True" ) + if (al.capabilities.createFeature == "True") { canCreateChild = true; + } } // if the m layer is displayed then check also the edition capabilities on pivot if(canCreateChild && isNToM){ @@ -1137,7 +1154,7 @@ var lizAttributeTable = function() { if( canCreateChild ){ // Add a button to create a new feature for this child layer let childButtonItem = ` - `; @@ -1192,16 +1209,16 @@ var lizAttributeTable = function() { */ function refreshChildrenLayersContent( sourceTable, featureType, featId ) { var feat = config.layers[featureType]['features'][featId]; - - if(!feat) + if(!feat) { return false; + } var fp = feat.properties; var lConfig = config.layers[featureType]; - if ( !lConfig ) + if ( !lConfig ) { return false; + } var parentLayerId = lConfig['id']; - // Refresh recursively for direct children and other parent if( 'relations' in config && parentLayerId in config.relations) { var layerRelations = config.relations[parentLayerId]; @@ -1411,12 +1428,11 @@ var lizAttributeTable = function() { var highlightedFeature = null; if (fromEditionForm) { // get fid of current layer on editing - highlightedFeature = $('#edition-form-container form input[name="liz_featureId"]').val() - - } else highlightedFeature = config.layers[parentLayerConfig[1].cleanname].highlightedFeature; - + highlightedFeature = $('#edition-form-container form input[name="liz_featureId"]').val(); + } else { + highlightedFeature = config.layers[attributeLayersDic[parentLayerConfig[1].cleanname]].highlightedFeature; + } if (parentLayerConfig && parentLayerConfig[1] && parentLayerConfig[1].cleanname && highlightedFeature) { - var childLayerId = lConfig.id; var pivotId = getPivotIdFromRelatedLayers(parentLayerID, childLayerId); if (pivotId) { @@ -1424,6 +1440,7 @@ var lizAttributeTable = function() { } } } + // Hidden fields var hiddenFields = []; if( aName in config.attributeLayers @@ -1496,8 +1513,9 @@ var lizAttributeTable = function() { refillFeatures = true; } } - if( refillFeatures ) + if( refillFeatures ) { lConfig['features'] = foundFeatures; + } lConfig['alias'] = cAliases; // Datatable configuration @@ -1944,14 +1962,16 @@ var lizAttributeTable = function() { function getEditionChildData( childLayerName, filter, childTable, forceEmptyTable = false ){ getDataAndFillAttributeTable(childLayerName, filter, childTable, forceEmptyTable, () => { // Check edition capabilities - var canCreate = false; + var canCreateChildren = false; var canEdit = false; - if ('editionLayers' in config && childLayerName in config.editionLayers ) { + if ('editionLayers' in config && childLayerName in config.editionLayers) { var al = config.editionLayers[childLayerName]; - if( al.capabilities.createFeature == "True" ) - canCreate = true; - if( al.capabilities.modifyAttribute == "True" || al.capabilities.modifyGeometry == "True" ) + if (al.capabilities.createFeature == "True") { + canCreateChildren = true; + } + if (al.capabilities.modifyAttribute == "True" || al.capabilities.modifyGeometry == "True") { canEdit = true; + } } // Bind events when drawing table @@ -1965,7 +1985,7 @@ var lizAttributeTable = function() { .to$().children('lizmap-feature-toolbar').attr('parent-feature-id', parentFeatId); } - if ( canCreate ) { + if ( canCreateChildren ) { // Button to create feature linked to parent const createHeader = $($(childTable).DataTable().column(1).header()); if ( createHeader.find('button.attribute-layer-feature-create').length == 0 ) { @@ -2457,7 +2477,7 @@ var lizAttributeTable = function() { // **5** Add other parent to pile when typeName is a pivot if( pivotParam ){ - console.log(pivotParam); + // console.log(pivotParam); // Add a Filter to the "other parent" layers config.layers[ pivotParam['otherParentTypeName'] ]['request_params']['filter'] = null; config.layers[ pivotParam['otherParentTypeName'] ]['request_params']['exp_filter'] = null;