mirror of https://github.com/grafana/grafana
Panels: Fixes default tab for visualizations without Queries Tab (#19803)
Fixes #19762pull/19734/head
parent
428ca600c0
commit
24b475e414
@ -0,0 +1,88 @@ |
||||
import { getActiveTabAndTabs } from './selectors'; |
||||
import { LocationState } from '../../../../types'; |
||||
import { getPanelEditorTab, PanelEditorState, PanelEditorTab, PanelEditorTabIds } from './reducers'; |
||||
|
||||
describe('getActiveTabAndTabs', () => { |
||||
describe('when called and location state contains tab', () => { |
||||
it('then it should return location state', () => { |
||||
const activeTabId = 1337; |
||||
const location: LocationState = { |
||||
path: 'a path', |
||||
lastUpdated: 1, |
||||
replace: false, |
||||
routeParams: {}, |
||||
query: { |
||||
tab: activeTabId, |
||||
}, |
||||
url: 'an url', |
||||
}; |
||||
const panelEditor: PanelEditorState = { |
||||
activeTab: PanelEditorTabIds.Queries, |
||||
tabs: [], |
||||
}; |
||||
|
||||
const result = getActiveTabAndTabs(location, panelEditor); |
||||
|
||||
expect(result).toEqual({ |
||||
activeTab: activeTabId, |
||||
tabs: [], |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('when called without location state and PanelEditor state contains tabs', () => { |
||||
it('then it should return the id for the first tab in PanelEditor state', () => { |
||||
const activeTabId = PanelEditorTabIds.Visualization; |
||||
const tabs = [getPanelEditorTab(PanelEditorTabIds.Visualization), getPanelEditorTab(PanelEditorTabIds.Advanced)]; |
||||
const location: LocationState = { |
||||
path: 'a path', |
||||
lastUpdated: 1, |
||||
replace: false, |
||||
routeParams: {}, |
||||
query: { |
||||
tab: undefined, |
||||
}, |
||||
url: 'an url', |
||||
}; |
||||
const panelEditor: PanelEditorState = { |
||||
activeTab: PanelEditorTabIds.Advanced, |
||||
tabs, |
||||
}; |
||||
|
||||
const result = getActiveTabAndTabs(location, panelEditor); |
||||
|
||||
expect(result).toEqual({ |
||||
activeTab: activeTabId, |
||||
tabs, |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('when called without location state and PanelEditor state does not contain tabs', () => { |
||||
it('then it should return PanelEditorTabIds.Queries', () => { |
||||
const activeTabId = PanelEditorTabIds.Queries; |
||||
const tabs: PanelEditorTab[] = []; |
||||
const location: LocationState = { |
||||
path: 'a path', |
||||
lastUpdated: 1, |
||||
replace: false, |
||||
routeParams: {}, |
||||
query: { |
||||
tab: undefined, |
||||
}, |
||||
url: 'an url', |
||||
}; |
||||
const panelEditor: PanelEditorState = { |
||||
activeTab: PanelEditorTabIds.Advanced, |
||||
tabs, |
||||
}; |
||||
|
||||
const result = getActiveTabAndTabs(location, panelEditor); |
||||
|
||||
expect(result).toEqual({ |
||||
activeTab: activeTabId, |
||||
tabs, |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
@ -0,0 +1,11 @@ |
||||
import memoizeOne from 'memoize-one'; |
||||
import { LocationState } from '../../../../types'; |
||||
import { PanelEditorState, PanelEditorTabIds } from './reducers'; |
||||
|
||||
export const getActiveTabAndTabs = memoizeOne((location: LocationState, panelEditor: PanelEditorState) => { |
||||
const panelEditorTab = panelEditor.tabs.length > 0 ? panelEditor.tabs[0].id : PanelEditorTabIds.Queries; |
||||
return { |
||||
activeTab: location.query.tab || panelEditorTab, |
||||
tabs: panelEditor.tabs, |
||||
}; |
||||
}); |
Loading…
Reference in new issue