From: Pascal Mugnier Date: Fri, 4 May 2018 08:23:18 +0000 (+0200) Subject: SONAR-10036 Autoscroll branch dropdown to selected item X-Git-Tag: 7.5~1259 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=cfab69910851579f365aefa3e4b048c54c92a0ff;p=sonarqube.git SONAR-10036 Autoscroll branch dropdown to selected item --- diff --git a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranchesMenu.tsx b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranchesMenu.tsx index 10f4b1ba885..5772988c123 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranchesMenu.tsx +++ b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranchesMenu.tsx @@ -31,6 +31,7 @@ import { isPullRequest, isBranch } from '../../../../helpers/branches'; +import { scrollToElement } from '../../../../helpers/scrolling'; import { translate } from '../../../../helpers/l10n'; import { getBranchLikeUrl } from '../../../../helpers/urls'; import SearchBox from '../../../../components/controls/SearchBox'; @@ -51,6 +52,8 @@ interface State { export default class ComponentNavBranchesMenu extends React.PureComponent { private node?: HTMLElement | null; + private listNode?: HTMLUListElement | null; + private selectedBranchNode?: HTMLLIElement | null; static contextTypes = { router: PropTypes.object @@ -63,12 +66,26 @@ export default class ComponentNavBranchesMenu extends React.PureComponent { const query = this.state.query.toLowerCase(); return sortBranchesAsTree(this.props.branchLikes).filter(branchLike => { @@ -190,7 +207,7 @@ export default class ComponentNavBranchesMenu extends React.PureComponent {showDivider &&
  • } @@ -218,15 +235,22 @@ export default class ComponentNavBranchesMenu extends React.PureComponent + (this.selectedBranchNode = isSelected ? node : this.selectedBranchNode) + } key={getBranchLikeKey(branchLike)} onSelect={this.handleSelect} - selected={isSameBranchLike(branchLike, selected)} + selected={isSelected} /> ); }); - return
      {items}
    ; + return ( +
      (this.listNode = node)}> + {items} +
    + ); }; render() { diff --git a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranchesMenuItem.tsx b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranchesMenuItem.tsx index 316ee5f06b1..8788fe657c1 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranchesMenuItem.tsx +++ b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranchesMenuItem.tsx @@ -39,6 +39,7 @@ export interface Props { component: Component; onSelect: (branchLike: BranchLike) => void; selected: boolean; + innerRef?: (node: HTMLLIElement) => void; } export default function ComponentNavBranchesMenuItem({ branchLike, ...props }: Props) { @@ -51,7 +52,7 @@ export default function ComponentNavBranchesMenuItem({ branchLike, ...props }: P (isShortLivingBranch(branchLike) && !branchLike.isOrphan) || isPullRequest(branchLike); return ( -
  • +