diff --git a/common/changes/@uifabric/experiments/HideAdminConsoleGroup_2018-06-05-00-26.json b/common/changes/@uifabric/experiments/HideAdminConsoleGroup_2018-06-05-00-26.json new file mode 100644 index 0000000000000..e14745f8155bd --- /dev/null +++ b/common/changes/@uifabric/experiments/HideAdminConsoleGroup_2018-06-05-00-26.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@uifabric/experiments", + "comment": "Experiment/Nav component: hide nav group header if the links under it are hidden", + "type": "minor" + } + ], + "packageName": "@uifabric/experiments", + "email": "sikrishn@microsoft.com" +} \ No newline at end of file diff --git a/packages/experiments/src/components/Nav/Nav.tsx b/packages/experiments/src/components/Nav/Nav.tsx index 39ab9b337a0f2..fc3ae6f726da3 100644 --- a/packages/experiments/src/components/Nav/Nav.tsx +++ b/packages/experiments/src/components/Nav/Nav.tsx @@ -38,9 +38,9 @@ class NavComponent extends NavBase { return ( ); } @@ -108,21 +108,21 @@ class NavComponent extends NavBase { return ( ); } @@ -142,16 +142,16 @@ class NavComponent extends NavBase { link.disableAutoExpand = false; return ( -
  • - {this._renderCompositeLink(link, linkIndex, nestingLevel)} +
  • + { this._renderCompositeLink(link, linkIndex, nestingLevel) } {// show child links - // 1. only for the first level and - // 2. if the link is expanded - nestingLevel == 0 && link.isExpanded ? ( -
    - {this._renderLinks(link.links as INavLink[], ++nestingLevel)} -
    - ) : null} + // 1. only for the first level and + // 2. if the link is expanded + nestingLevel == 0 && link.isExpanded ? ( +
    + { this._renderLinks(link.links as INavLink[], ++nestingLevel) } +
    + ) : null }
  • ); } @@ -165,7 +165,7 @@ class NavComponent extends NavBase { return ( ); } @@ -197,16 +197,23 @@ class NavComponent extends NavBase { const classNames = getClassNames(styles!, {}); + let isGroupHeaderVisible = false; + + // first group header is hidden by default, display group header for other groups only if there are visible links + if (groupIndex > 0) { + isGroupHeaderVisible = this.hasAtleastOneVisibleLink(group.links); + } + return ( -
    - {groupIndex > 0 ? ( -
    -
    - {group.name ? {group.name} : null} +
    + { isGroupHeaderVisible ? ( +
    +
    + { group.name ? { group.name } : null }
    - ) : null} - {this._renderLinks(group.links, 0 /* nestingLevel */)} + ) : null } + { this._renderLinks(group.links, 0 /* nestingLevel */) }
    ); } diff --git a/packages/experiments/src/components/Nav/NavBase.tsx b/packages/experiments/src/components/Nav/NavBase.tsx index 6f8027b7c6ff6..375bf45317226 100644 --- a/packages/experiments/src/components/Nav/NavBase.tsx +++ b/packages/experiments/src/components/Nav/NavBase.tsx @@ -65,4 +65,14 @@ export class NavBase extends React.Component implements IN return link.name; } + + protected hasAtleastOneVisibleLink(links: INavLink[]): boolean { + if (!links || links.length === 0) { + return false; + } + + return links.some((link: INavLink): boolean => { + return !link.isHidden; + }); + } } diff --git a/packages/experiments/src/components/Nav/SlimNav.tsx b/packages/experiments/src/components/Nav/SlimNav.tsx index 76011e797d0ca..741dfe175e988 100644 --- a/packages/experiments/src/components/Nav/SlimNav.tsx +++ b/packages/experiments/src/components/Nav/SlimNav.tsx @@ -44,9 +44,9 @@ class SlimNavComponent extends NavBase { return ( ); } @@ -162,19 +162,19 @@ class SlimNavComponent extends NavBase { return ( ); } @@ -187,11 +187,11 @@ class SlimNavComponent extends NavBase { const linkText = this.getLinkText(link, this.props.showMore); return ( -
  • - {this._renderCompositeLink(link, linkIndex, nestingLevel)} +
  • + { this._renderCompositeLink(link, linkIndex, nestingLevel) } {// show child links - // 1. only for the first level - nestingLevel == 0 ?
    {this._renderFloatingLinks(link.links as INavLink[], ++nestingLevel)}
    : null} + // 1. only for the first level + nestingLevel == 0 ?
    { this._renderFloatingLinks(link.links as INavLink[], ++nestingLevel) }
    : null }
  • ); } @@ -203,9 +203,9 @@ class SlimNavComponent extends NavBase { return (
      - {links.map((link: INavLink, linkIndex: number) => { + { links.map((link: INavLink, linkIndex: number) => { return this._renderFloatingLink(link, linkIndex, nestingLevel); - })} + }) }
    ); } @@ -220,8 +220,8 @@ class SlimNavComponent extends NavBase { const classNames = getClassNames(styles!, { hasChildren, scrollTop: link.scrollTop }); return ( -
    - {this._renderFloatingLinks([link], 0 /* nestingLevel */)} +
    + { this._renderFloatingLinks([link], 0 /* nestingLevel */) }
    ); } @@ -242,27 +242,27 @@ class SlimNavComponent extends NavBase { return (
  • - {this._renderFloatingNav(link, linkIndex)} + { this._renderFloatingNav(link, linkIndex) }
  • ); } @@ -276,7 +276,7 @@ class SlimNavComponent extends NavBase { return (
      - {links.map((link: INavLink, linkIndex: number) => { + { links.map((link: INavLink, linkIndex: number) => { if (enableCustomization && link.isHidden && !showMore) { // atleast one link is hidden this._hasAtleastOneHiddenLink = true; @@ -289,7 +289,7 @@ class SlimNavComponent extends NavBase { } else { return this._renderLink(link, linkIndex, nestingLevel); } - })} + }) }
    ); } @@ -308,15 +308,23 @@ class SlimNavComponent extends NavBase { const classNames = getClassNames(styles!, {}); + + let isGroupHeaderVisible = false; + + // first group header is hidden by default, display group header for other groups only if there are visible links + if (groupIndex > 0) { + isGroupHeaderVisible = this.hasAtleastOneVisibleLink(group.links); + } + return ( -
    +
    {// do not render group header for the first group - groupIndex > 0 ? ( -
    -
    -
    - ) : null} - {this._renderLinks(group.links, 0 /* nestingLevel */)} + isGroupHeaderVisible ? ( +
    +
    +
    + ) : null } + { this._renderLinks(group.links, 0 /* nestingLevel */) }
    ); }