is it possible to remove a map service (or single layer) from the layer list?
It seems to me that in the WAB previous version this option was avaiable in the layer list widget.
Thank youEnrico
We worked on the issue and we seem to have found a a workaround.
It works also if we are sure that it could be ehanced and otimized.
The only problem we notice is this message in firebug,. We don't know what it means but it do not impact on the functionality:
Any suggestion is appreciated
..\widgets\LayerList\PopupMenu.js
..._initDeniedItems: function() { var deniedItemsFromConfigKeys = []; var menuItemDictionary = { "ZoomTo": "zoomto", "Transparency": "transparency", "EnableOrDisablePopup": "controlPopup", "MoveupOrMovedown": "moveup movedown", "OpenAttributeTable": "table", "DescriptionOrShowItemDetailsOrDownload": "url", "RemoveLayer": "removelayer", // };...
..\widgets\LayerList\PopupMenuInfo.js
...constructor: function(layerInfo, displayItemInfos, layerType, layerListWidget) {var l = displayItemInfos.length;if (l > 5) { displayItemInfos = { key: 'removelayer' }; //}...
Enrico,
OK to add the remove layer option to only root layers you need to make these changes:
PopupMenuInfo.js (i.e. lines 24- 28, 51 - 55, 66 - 70):
clazz<SPAN class="punctuation token">.</SPAN>create <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">function</SPAN><SPAN class="punctuation token">(</SPAN>layerInfo<SPAN class="punctuation token">,</SPAN> layerListWidget<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> <SPAN class="keyword token">var</SPAN> retDef <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Deferred</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> isRootLayer <SPAN class="operator token">=</SPAN> layerInfo<SPAN class="punctuation token">.</SPAN><SPAN class="token function">isRootLayer</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> defaultItemInfos <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'url'</SPAN><SPAN class="punctuation token">,</SPAN> onClick<SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">null</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> itemInfoCategoreList <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN> <SPAN class="string token">'RootLayer'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'zoomto'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'transparency'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'moveup'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'movedown'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'url'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'removelayer'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'RootLayerAndFeatureLayer'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'zoomto'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'transparency'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'controlPopup'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'moveup'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'movedown'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'table'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'url'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'removelayer'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'FeatureLayer'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'controlPopup'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'table'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'url'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'removelayer'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'GroupLayer'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'url'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Table'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'table'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'separator'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'url'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'default'</SPAN><SPAN class="punctuation token">:</SPAN> defaultItemInfos <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">;</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
PopupMenuInfo.js (lines 25 - 30):
getDeniedItems<SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">function</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> <SPAN class="comment token">// summary:</SPAN> <SPAN class="comment token">// the items that will be denied.</SPAN> <SPAN class="comment token">// description:</SPAN> <SPAN class="comment token">// return Object = [{</SPAN> <SPAN class="comment token">// key: String, popupMenuInfo key,</SPAN> <SPAN class="comment token">// denyType: String, "disable" or "hidden"</SPAN> <SPAN class="comment token">// }]</SPAN> <SPAN class="keyword token">var</SPAN> defRet <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Deferred</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> dynamicDeniedItems <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">this</SPAN><SPAN class="punctuation token">.</SPAN>layerListWidget<SPAN class="punctuation token">.</SPAN>layerListView<SPAN class="punctuation token">.</SPAN><SPAN class="token function">isFirstDisplayedLayerInfo</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">this</SPAN><SPAN class="punctuation token">.</SPAN>_layerInfo<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> dynamicDeniedItems<SPAN class="punctuation token">.</SPAN><SPAN class="token function">push</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">{</SPAN> <SPAN class="string token">'key'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'moveup'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'denyType'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'disable'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN> <SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">this</SPAN><SPAN class="punctuation token">.</SPAN>layerListWidget<SPAN class="punctuation token">.</SPAN>layerListView<SPAN class="punctuation token">.</SPAN><SPAN class="token function">isLastDisplayedLayerInfo</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">this</SPAN><SPAN class="punctuation token">.</SPAN>_layerInfo<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> dynamicDeniedItems<SPAN class="punctuation token">.</SPAN><SPAN class="token function">push</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">{</SPAN> <SPAN class="string token">'key'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'movedown'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'denyType'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'disable'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN> <SPAN class="keyword token">if</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">this</SPAN><SPAN class="punctuation token">.</SPAN>_layerInfo<SPAN class="punctuation token">.</SPAN><SPAN class="token function">isLeaf</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> dynamicDeniedItems<SPAN class="punctuation token">.</SPAN><SPAN class="token function">push</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">{</SPAN> <SPAN class="string token">'key'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'removelayer'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'denyType'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'hidden'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Then remove your addition to the constructor method:
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>l <SPAN class="operator token">></SPAN> <SPAN class="number token">5</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> displayItemInfos<SPAN class="punctuation token">[</SPAN>l<SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN> key<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'removelayer'</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="comment token">//</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Robert, we need to distinguish the mapservice element (father) from its single layers because the remove option seems to work only on the entire map service element.
The only way that we found to distinguish form these two cases was to count the options shown in layer list if the elementi is a map service (5 options) or a single layer (only 3).
Maybe there is a cleaver way but we haven't found it...
Here the images from previous post.
Options in layerlist:
ERROR
For some reason you images are not showing in your post. What are you using to determine if the remove layer option should be shown?
Yes It was an error due to cut&paste...Thank you
Enrico & Manuela
enrico,
Nice work and thanks for sharing the code, however, there is a small query that might be a typo, see image below:
The Add Data widget has a remove button when you add a layer. I also think I remember a remove layer option on the Layer List widget but there was likely a reason it was removed.
Devon, I totally agree.
If the app has "Add" functions (Add data, Geoportal search, addshapefile etc) SHOULD have a Remove tool.
We investigated the code but we haven't found any solution... but we are JS programming newbie ...
Hope someone could contribute !
Maybe you're right : the specific example refers to an old customized app, based on some older version of WAB, but iIt seems me that the remove option was available in the past by default..(.?)
Anyway , i think this is a fundamental feature that "layer list widget " should have.
Do you think it is possible add this function in layer list?
thank you
Thread bump. Having this feature would be a fantastic addition as we have users who will add Operational Layers "by mistake" to the application and then confuse themselves. Keeping a clean interface is ideal - especially for users who are not particularly tech-savvy.
I wonder if that was a custom feature as I do not see the "Remove Layer" anywhere in the LayerList widgets code in version 2.0.
Robert,
my question was not so clear, sorry.
I ask if it is possible to remove a map service that has been added before by other widget (ie Geoportal serach, add data widgets)
In one of the previous versions of WAB this option was available right-clicking on the layer, while now (WAB dev 2.1) is not visible.
Thank youenrico
Sure in the LayerList widgets settings you choose which layer are visible in the widgets list:
Přihlášení členové mohou přispívat, sledovat aktualizace a další. Jste tu noví? Zaregistrujte si bezplatný účet.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.