import IssueItemLocationsQuantity from './IssueItemLocationsQuantity';
import IssueLocationsNavigator from './IssueLocationsNavigator';
-const HALF_DIVIDER = 2;
-
export interface ConciseIssueProps {
issue: Issue;
onFlowSelect: (index?: number) => void;
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]);
}),
];
-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);
renderConciseIssues(issues, {
selected: 'issue2',
});
-
- expect(scrollTo).toHaveBeenCalledTimes(1);
});
it('should show locations and flows when selected', () => {
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 () => {