ui: MainView: adapt router to add changer/drive entries
by generalizing the isDataStorePath logic to a 'parseRouterPath'. We still have to keep the isDataStore logic for tabpanel handling, If we add tabs to changer-/drivestatus panels, we have to adapt that too. Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
		
				
					committed by
					
						 Dietmar Maurer
						Dietmar Maurer
					
				
			
			
				
	
			
			
			
						parent
						
							7b60850334
						
					
				
				
					commit
					3e182fd828
				
			| @ -17,16 +17,27 @@ Ext.define('PBS.MainView', { | |||||||
| 	    }, | 	    }, | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
|  | 	parseRouterPath: function(path) { | ||||||
|  | 	    let xtype = path; | ||||||
|  | 	    let config = {}; | ||||||
|  | 	    if (PBS.Utils.isDataStorePath(path)) { | ||||||
|  | 		config.datastore = PBS.Utils.getDataStoreFromPath(path); | ||||||
|  | 		xtype = 'pbsDataStorePanel'; | ||||||
|  | 	    } else if (path.indexOf('Changer-') === 0) { | ||||||
|  | 		config.changer = path.slice('Changer-'.length); | ||||||
|  | 		xtype = 'pbsChangerStatus'; | ||||||
|  | 	    } else if (path.indexOf('Drive-') === 0) { | ||||||
|  | 		config.drive = path.slice('Drive-'.length); | ||||||
|  | 		xtype = 'pbsDriveStatus'; | ||||||
|  | 	    } | ||||||
|  |  | ||||||
|  | 	    return [xtype, config]; | ||||||
|  | 	}, | ||||||
|  |  | ||||||
| 	beforeChangePath: function(path, subpath, action) { | 	beforeChangePath: function(path, subpath, action) { | ||||||
| 	    var me = this; | 	    var me = this; | ||||||
|  |  | ||||||
| 	    let xtype = path; | 	    let [xtype, config] = me.parseRouterPath(path); | ||||||
| 	    let datastore; |  | ||||||
| 	    let isDataStore = PBS.Utils.isDataStorePath(path); |  | ||||||
| 	    if (isDataStore) { |  | ||||||
| 		xtype = 'pbsDataStorePanel'; |  | ||||||
| 		datastore = PBS.Utils.getDataStoreFromPath(path); |  | ||||||
| 	    } |  | ||||||
|  |  | ||||||
| 	    if (!Ext.ClassManager.getByAlias(`widget.${xtype}`)) { | 	    if (!Ext.ClassManager.getByAlias(`widget.${xtype}`)) { | ||||||
| 		console.warn(`xtype ${xtype} not found`); | 		console.warn(`xtype ${xtype} not found`); | ||||||
| @ -36,27 +47,26 @@ Ext.define('PBS.MainView', { | |||||||
|  |  | ||||||
| 	    var lastpanel = me.lookupReference('contentpanel').getLayout().getActiveItem(); | 	    var lastpanel = me.lookupReference('contentpanel').getLayout().getActiveItem(); | ||||||
| 	    if (lastpanel && lastpanel.xtype === xtype) { | 	    if (lastpanel && lastpanel.xtype === xtype) { | ||||||
| 		if (isDataStore) { | 		for (const [prop, value] of Object.entries(config)) { | ||||||
| 		    if (datastore === lastpanel.datastore) { | 		    if (lastpanel[prop] !== value) { | ||||||
| 			action.stop(); | 			action.resume(); | ||||||
| 			return; | 			return; | ||||||
| 		    } | 		    } | ||||||
| 		} else { |  | ||||||
| 		    // we have the right component already, |  | ||||||
| 		    // we just need to select the correct tab |  | ||||||
| 		    // default to the first |  | ||||||
| 		    subpath = subpath || 0; |  | ||||||
| 		    if (lastpanel.getActiveTab) { |  | ||||||
| 			// we assume lastpanel is a tabpanel |  | ||||||
| 			if (lastpanel.getActiveTab().getItemId() !== subpath) { |  | ||||||
| 			    // set the active tab |  | ||||||
| 			    lastpanel.setActiveTab(subpath); |  | ||||||
| 			} |  | ||||||
| 			// else we are already there |  | ||||||
| 		    } |  | ||||||
| 		    action.stop(); |  | ||||||
| 		    return; |  | ||||||
| 		} | 		} | ||||||
|  | 		// we have the right component already, | ||||||
|  | 		// we just need to select the correct tab | ||||||
|  | 		// default to the first | ||||||
|  | 		subpath = subpath || 0; | ||||||
|  | 		if (lastpanel.getActiveTab) { | ||||||
|  | 		    // we assume lastpanel is a tabpanel | ||||||
|  | 		    if (lastpanel.getActiveTab().getItemId() !== subpath) { | ||||||
|  | 			// set the active tab | ||||||
|  | 			lastpanel.setActiveTab(subpath); | ||||||
|  | 		    } | ||||||
|  | 		    // else we are already there | ||||||
|  | 		} | ||||||
|  | 		action.stop(); | ||||||
|  | 		return; | ||||||
| 	    } | 	    } | ||||||
|  |  | ||||||
| 	    action.resume(); | 	    action.resume(); | ||||||
| @ -79,12 +89,10 @@ Ext.define('PBS.MainView', { | |||||||
| 		me.redirectTo(newpath); | 		me.redirectTo(newpath); | ||||||
| 	    }; | 	    }; | ||||||
|  |  | ||||||
| 	    let xtype = path; | 	    let [xtype, config] = me.parseRouterPath(path); | ||||||
| 	    var obj; | 	    var obj; | ||||||
| 	    let datastore; |  | ||||||
| 	    if (PBS.Utils.isDataStorePath(path)) { | 	    if (PBS.Utils.isDataStorePath(path)) { | ||||||
| 		datastore = PBS.Utils.getDataStoreFromPath(path); | 		if (lastpanel && lastpanel.xtype === xtype && !subpath) { | ||||||
| 		if (lastpanel && lastpanel.xtype === 'pbsDataStorePanel' && !subpath) { |  | ||||||
| 		    let activeTab = lastpanel.getActiveTab(); | 		    let activeTab = lastpanel.getActiveTab(); | ||||||
| 		    let newpath = path; | 		    let newpath = path; | ||||||
| 		    if (lastpanel.items.indexOf(activeTab) !== 0) { | 		    if (lastpanel.items.indexOf(activeTab) !== 0) { | ||||||
| @ -93,18 +101,16 @@ Ext.define('PBS.MainView', { | |||||||
| 		    } | 		    } | ||||||
| 		    me.redirectTo(newpath); | 		    me.redirectTo(newpath); | ||||||
| 		} | 		} | ||||||
| 		xtype = 'pbsDataStorePanel'; |  | ||||||
| 	    } | 	    } | ||||||
| 	    obj = contentpanel.add({ | 	    obj = contentpanel.add(Ext.apply(config, { | ||||||
| 		xtype, | 		xtype, | ||||||
| 		datastore, |  | ||||||
| 		nodename: 'localhost', | 		nodename: 'localhost', | ||||||
| 		border: false, | 		border: false, | ||||||
| 		activeTab: subpath || 0, | 		activeTab: subpath || 0, | ||||||
| 		listeners: { | 		listeners: { | ||||||
| 		    tabchange: tabChangeListener, | 		    tabchange: tabChangeListener, | ||||||
| 		}, | 		}, | ||||||
| 	    }); | 	    })); | ||||||
|  |  | ||||||
| 	    var treelist = me.lookupReference('navtree'); | 	    var treelist = me.lookupReference('navtree'); | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user