diff --git a/src/reducers/app.js b/src/reducers/app.js index 85ebf51451..a860d229ca 100644 --- a/src/reducers/app.js +++ b/src/reducers/app.js @@ -170,6 +170,8 @@ const lastVisibleThreadTabSlug: Reducer = ( return action.selectedTab; } return state; + case 'FOCUS_CALL_TREE': + return 'calltree'; default: return state; } diff --git a/src/reducers/url-state.js b/src/reducers/url-state.js index 0286949e8b..69944016f3 100644 --- a/src/reducers/url-state.js +++ b/src/reducers/url-state.js @@ -95,6 +95,8 @@ const selectedTab: Reducer = (state = 'calltree', action) => { case 'CHANGE_SELECTED_TAB': case 'SELECT_TRACK': return action.selectedTab; + case 'FOCUS_CALL_TREE': + return 'calltree'; default: return state; } diff --git a/src/test/components/TrackThread.test.js b/src/test/components/TrackThread.test.js index 156c449407..bf4e798923 100644 --- a/src/test/components/TrackThread.test.js +++ b/src/test/components/TrackThread.test.js @@ -16,9 +16,12 @@ import { changeInvertCallstack, changeSelectedCallNode, } from '../../actions/profile-view'; +import { changeSelectedTab } from '../../actions/app'; import { TimelineTrackThread } from '../../components/timeline/TrackThread'; import { getPreviewSelection } from '../../selectors/profile'; import { selectedThreadSelectors } from '../../selectors/per-thread'; +import { getSelectedTab } from '../../selectors/url-state'; +import { getLastVisibleThreadTabSlug } from '../../selectors/app'; import { ensureExists } from '../../utils/flow'; import { @@ -188,6 +191,19 @@ describe('timeline/TrackThread', function () { expect(getCallNodePath()).toEqual(['j', 'k', 'l']); }); + it('when clicking a stack, this selects the call tree panel', function () { + const { dispatch, getState, stackGraphCanvas, getFillRectCenterByIndex } = + setup(getSamplesProfile()); + + dispatch(changeSelectedTab('marker-chart')); + + const log = flushDrawLog(); + + fireFullClick(stackGraphCanvas(), getFillRectCenterByIndex(log, 0)); + expect(getSelectedTab(getState())).toBe('calltree'); + expect(getLastVisibleThreadTabSlug(getState())).toBe('calltree'); + }); + it('can click a stack in the stack graph in inverted call trees', function () { const { dispatch,