Browse Source

SONAR-21942 Fixing scroll issue inside issue details page

tags/10.5.0.89998
Revanshu Paliwal 1 month ago
parent
commit
914c61259b

+ 2
- 8
server/sonar-web/src/main/js/apps/issues/issues-subnavigation/SubnavigationIssue.tsx View File

@@ -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<HTMLLIElement>(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]);


+ 6
- 20
server/sonar-web/src/main/js/apps/issues/issues-subnavigation/__tests__/SubnavigationIssues-it.tsx View File

@@ -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 () => {

Loading…
Cancel
Save