@@ -32,6 +32,7 @@ class Toolbar extends React.Component {
3232 settings : PropTypes . object ,
3333 layerMetadata : PropTypes . object ,
3434 wfsdownload : PropTypes . object ,
35+ maxDepth : PropTypes . number ,
3536 metadataTemplate : PropTypes . oneOfType ( [ PropTypes . string , PropTypes . array , PropTypes . object , PropTypes . func ] )
3637 } ;
3738
@@ -52,11 +53,13 @@ class Toolbar extends React.Component {
5253 onHideSettings : ( ) => { } ,
5354 onReload : ( ) => { } ,
5455 onAddLayer : ( ) => { } ,
56+ onAddGroup : ( ) => { } ,
5557 onDownload : ( ) => { } ,
5658 onGetMetadataRecord : ( ) => { } ,
5759 onHideLayerMetadata : ( ) => { } ,
5860 onShow : ( ) => { }
5961 } ,
62+ maxDepth : 3 ,
6063 text : {
6164 settingsText : '' ,
6265 opacityText : '' ,
@@ -67,6 +70,10 @@ class Toolbar extends React.Component {
6770 confirmDeleteMessage : '' ,
6871 confirmDeleteCancelText : '' ,
6972 createWidgetTooltip : '' ,
73+ addLayerTooltip : '' ,
74+ addLayerToGroupTooltip : '' ,
75+ addGroupTooltip : '' ,
76+ addSubGroupTooltip : '' ,
7077 zoomToTooltip : {
7178 LAYER : '' ,
7279 LAYERS : ''
@@ -96,6 +103,7 @@ class Toolbar extends React.Component {
96103 activateDownloadTool : true ,
97104 activateSettingsTool : true ,
98105 activateAddLayer : true ,
106+ activateAddGroup : true ,
99107 includeDeleteButtonInSettings : false ,
100108 activateMetedataTool : true
101109 } ,
@@ -145,7 +153,23 @@ class Toolbar extends React.Component {
145153 status = this . props . selectedLayers . length > 0 && this . props . selectedLayers . filter ( l => l . loadingError === 'Error' ) . length === this . props . selectedLayers . length ? `${ status } _LOAD_ERROR` : status ;
146154 return status ;
147155 }
148-
156+ getSelectedGroup = ( ) => {
157+ return this . props . selectedGroups . length > 0 && this . props . selectedGroups [ this . props . selectedGroups . length - 1 ] ;
158+ } ;
159+ getSelectedNodeDepth = ( ) => {
160+ if ( this . getStatus ( ) === 'DESELECT' ) {
161+ return 0 ;
162+ }
163+ return this . getSelectedGroup ( ) . id . split ( '.' ) . length + 1 ;
164+ } ;
165+ addLayer = ( ) => {
166+ const group = this . getSelectedGroup ( ) ;
167+ this . props . onToolsActions . onAddLayer ( group && group . id ) ;
168+ } ;
169+ addGroup = ( ) => {
170+ const group = this . getSelectedGroup ( ) ;
171+ this . props . onToolsActions . onAddGroup ( group && group . id ) ;
172+ } ;
149173 render ( ) {
150174 const status = this . getStatus ( ) ;
151175 const currentEPSG = this . checkBbox ( ) ;
@@ -163,11 +187,26 @@ class Toolbar extends React.Component {
163187 transitionName = "toc-toolbar-btn-transition"
164188 transitionEnterTimeout = { 300 }
165189 transitionLeaveTimeout = { 300 } >
166- { this . props . activateTool . activateAddLayer && status === 'DESELECT' ?
167- < Button key = "addLayer" bsStyle = "primary" bsSize = "small" onClick = { this . props . onToolsActions . onAddLayer } >
168- { this . props . text . addLayer }
169- </ Button >
190+ { this . props . activateTool . activateAddLayer && ( status === 'DESELECT' || status === 'GROUP' ) ?
191+ < OverlayTrigger
192+ key = "addLayer"
193+ placement = "top"
194+ overlay = { < Tooltip id = "toc-tooltip-addLayer" > { status === 'GROUP' ? this . props . text . addLayerToGroupTooltip : this . props . text . addLayerTooltip } </ Tooltip > } >
195+ < Button key = "addLayer" bsStyle = "primary" className = "square-button-md" onClick = { this . addLayer } >
196+ < Glyphicon glyph = "add-layer" />
197+ </ Button >
198+ </ OverlayTrigger >
170199 : null }
200+ { this . props . activateTool . activateAddGroup && ( status === 'DESELECT' || status === 'GROUP' ) && this . getSelectedNodeDepth ( ) <= this . props . maxDepth ?
201+ < OverlayTrigger
202+ key = "addGroup"
203+ placement = "top"
204+ overlay = { < Tooltip id = "toc-tooltip-addGroup" > { status === 'GROUP' ? this . props . text . addSubGroupTooltip : this . props . text . addGroupTooltip } </ Tooltip > } >
205+ < Button key = "addGroup" bsStyle = "primary" className = "square-button-md" onClick = { this . addGroup } >
206+ < Glyphicon glyph = "add-folder" />
207+ </ Button >
208+ </ OverlayTrigger >
209+ : null }
171210 { this . props . activateTool . activateZoomTool && ( status === 'LAYER' || status === 'GROUP' || status === 'LAYERS' || status === 'GROUPS' ) && currentEPSG ?
172211 < OverlayTrigger
173212 key = "zoomTo"
@@ -189,7 +228,7 @@ class Toolbar extends React.Component {
189228 < OverlayTrigger
190229 key = "settings"
191230 placement = "top"
192- overlay = { < Tooltip id = "toc-tooltip-settings" > { this . props . text . settingsTooltip [ status ? 'LAYER_LOAD_ERROR' && 'LAYER' : status ] } </ Tooltip > } >
231+ overlay = { < Tooltip id = "toc-tooltip-settings" > { this . props . text . settingsTooltip [ status === 'LAYER_LOAD_ERROR' ? 'LAYER' : status ] } </ Tooltip > } >
193232 < Button active = { this . props . settings . expanded } bsStyle = { this . props . settings . expanded ? 'success' : 'primary' } className = "square-button-md" onClick = { ( ) => { this . showSettings ( status ) ; } } >
194233 < Glyphicon glyph = "wrench" />
195234 </ Button >
@@ -328,7 +367,7 @@ class Toolbar extends React.Component {
328367
329368 removeNodes = ( ) => {
330369 this . props . selectedLayers . forEach ( ( layer ) => {
331- this . props . onToolsActions . onRemove ( layer . id , 'layers' , layer ) ;
370+ this . props . onToolsActions . onRemove ( layer . id , 'layers' ) ;
332371 } ) ;
333372 this . props . onToolsActions . onClear ( ) ;
334373 this . closeDeleteDialog ( ) ;
0 commit comments