diff --git a/assets/src/legacy/attributeTable.js b/assets/src/legacy/attributeTable.js index 6f1e57ca58..b69f28bfbc 100644 --- a/assets/src/legacy/attributeTable.js +++ b/assets/src/legacy/attributeTable.js @@ -587,12 +587,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+= ' '; } @@ -647,8 +650,9 @@ var lizAttributeTable = function() { html+= ''; // attribute-layer-action-bar - if( childHtml ) + if( childHtml ) { alc= ' showChildren'; + } html+= '
'; html+= ' '; html+= '
'; @@ -843,21 +847,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() ]; - lizMap.getLayerFeature(parentLayerName, parentFeatId, function(parentFeat) { - var lid = config.layers[aName]['id']; - lizMap.launchEdition( lid, null, {layerId:parentLayerId,feature:parentFeat}); - }); + + 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}); + }); + } + return false; }) .hover( @@ -1115,23 +1132,19 @@ var lizAttributeTable = function() { // Add create child feature button var canCreateChild = false; - if( 'editionLayers' in config ){ - var editionConfig = lizMap.getLayerConfigById( - relation.referencingLayer, - config.editionLayers, - 'layerId' - ); - 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( canCreateChild ){ // Add a button to create a new feature for this child layer let childButtonItem = ` - `; @@ -1186,16 +1199,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]; @@ -1456,8 +1469,9 @@ var lizAttributeTable = function() { refillFeatures = true; } } - if( refillFeatures ) + if( refillFeatures ) { lConfig['features'] = foundFeatures; + } lConfig['alias'] = cAliases; // Datatable configuration @@ -1902,14 +1916,16 @@ var lizAttributeTable = function() { function getEditionChildData( childLayerName, filter, childTable ){ getDataAndFillAttributeTable(childLayerName, filter, childTable, () => { // 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 @@ -1923,7 +1939,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 ) { @@ -2412,7 +2428,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;