From: Revanshu Paliwal Date: Thu, 28 Mar 2024 14:58:16 +0000 (+0100) Subject: SONAR-21942 Fixing scroll issue inside issue details page X-Git-Tag: 10.5.0.89998~59 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=914c61259b8074eecad1b397c64864277976fd6b;p=sonarqube.git SONAR-21942 Fixing scroll issue inside issue details page --- diff --git a/server/sonar-web/src/main/js/apps/issues/issues-subnavigation/SubnavigationIssue.tsx b/server/sonar-web/src/main/js/apps/issues/issues-subnavigation/SubnavigationIssue.tsx index a5687638193..d66a2c2960e 100644 --- a/server/sonar-web/src/main/js/apps/issues/issues-subnavigation/SubnavigationIssue.tsx +++ b/server/sonar-web/src/main/js/apps/issues/issues-subnavigation/SubnavigationIssue.tsx @@ -31,8 +31,6 @@ import { Issue } from '../../../types/types'; import IssueItemLocationsQuantity from './IssueItemLocationsQuantity'; import IssueLocationsNavigator from './IssueLocationsNavigator'; -const HALF_DIVIDER = 2; - export interface ConciseIssueProps { issue: Issue; onFlowSelect: (index?: number) => void; @@ -48,12 +46,8 @@ export default function SubnavigationIssue(props: ConciseIssueProps) { const element = React.useRef(null); React.useEffect(() => { - if (selected && element.current) { - const parent = document.querySelector('nav.issues-nav-bar') as HTMLMenuElement; - const rect = parent.getBoundingClientRect(); - const offset = - element.current.offsetTop - rect.height / HALF_DIVIDER + rect.top / HALF_DIVIDER; - parent.scrollTo({ top: offset, behavior: 'smooth' }); + if (selected) { + element.current?.scrollIntoView({ block: 'nearest' }); } }, [selected]); diff --git a/server/sonar-web/src/main/js/apps/issues/issues-subnavigation/__tests__/SubnavigationIssues-it.tsx b/server/sonar-web/src/main/js/apps/issues/issues-subnavigation/__tests__/SubnavigationIssues-it.tsx index 60cd0a4dfb5..39374606908 100644 --- a/server/sonar-web/src/main/js/apps/issues/issues-subnavigation/__tests__/SubnavigationIssues-it.tsx +++ b/server/sonar-web/src/main/js/apps/issues/issues-subnavigation/__tests__/SubnavigationIssues-it.tsx @@ -63,22 +63,6 @@ const issues = [ }), ]; -const scrollTo = jest.fn(); - -beforeAll(() => { - // eslint-disable-next-line testing-library/no-node-access - document.querySelector = jest.fn(() => ({ - scrollTo, - getBoundingClientRect: () => ({ - height: 10, - }), - })); -}); - -beforeEach(() => { - scrollTo.mockClear(); -}); - describe('rendering', () => { it('should render concise issues without duplicating component', () => { renderConciseIssues(issues); @@ -91,8 +75,6 @@ describe('rendering', () => { renderConciseIssues(issues, { selected: 'issue2', }); - - expect(scrollTo).toHaveBeenCalledTimes(1); }); it('should show locations and flows when selected', () => { @@ -138,16 +120,20 @@ describe('rendering', () => { describe('interacting', () => { it('should scroll selected issue into view', () => { + const scrollIntoView = jest.fn(); + const globalScrollView = window.HTMLElement.prototype.scrollIntoView; + window.HTMLElement.prototype.scrollIntoView = scrollIntoView; const { override } = renderConciseIssues(issues, { selected: 'issue2', }); - expect(scrollTo).toHaveBeenCalledTimes(1); + expect(scrollIntoView).toHaveBeenCalledTimes(1); override(issues, { selected: 'issue4', }); - expect(scrollTo).toHaveBeenCalledTimes(2); + expect(scrollIntoView).toHaveBeenCalledTimes(2); + window.HTMLElement.prototype.scrollIntoView = globalScrollView; }); it('expand button should work correctly', async () => {