navigation-item.component.html 6.58 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
<a
  *ngIf="isLink(item) && !isFunction(item.route)"
  [class.hover:bg-hover]="!(isActive$ | async)(item)"
  [ngClass]="{
    'bg-primary text-primary-contrast': (isActive$ | async)(item),
    'navigation-color': !(isActive$ | async)(item)
  }"
  [routerLink]="item.route"
  class="navigation-item"
  matRipple>
  {{ item.label }}
</a>

<div
  (click)="item.route()"
  *ngIf="isLink(item) && isFunction(item.route)"
  [class.hover:bg-hover]="!(isActive$ | async)(item)"
  class="navigation-item navigation-color"
  matRipple>
  {{ item.label }}
</div>

<ng-container
  *ngIf="(isSubheading(item) && item.children?.length > 0) || isDropdown(item)">
  <div
    [class.hover:bg-hover]="!(isActive$ | async)(item)"
    [matMenuTriggerFor]="menu"
    [ngClass]="{
      'bg-primary text-primary-contrast': (isActive$ | async)(item),
      'navigation-color': !(isActive$ | async)(item)
    }"
    class="navigation-item"
    matRipple>
    {{ item.label }}
  </div>

  <mat-menu #menu="matMenu" yPosition="below">
    <ng-container *ngFor="let child of item.children">
      <a
        *ngIf="isLink(child) && !isFunction(child.route)"
        [routerLink]="child.route"
        [ngClass]="{ 'text-primary': (isActive$ | async)(child) }"
        class="navigation-menu-item"
        mat-menu-item>
        <mat-icon [svgIcon]="child.icon" class="text-current"></mat-icon>
        <span>{{ child.label }}</span>
      </a>

      <div
        (click)="child.route()"
        *ngIf="isLink(child) && isFunction(child.route)"
        class="navigation-menu-item"
        mat-menu-item>
        <mat-icon [svgIcon]="child.icon" class="text-current"></mat-icon>
        <span>{{ child.label }}</span>
      </div>

      <ng-container *ngIf="isDropdown(child)">
        <button
          [matMenuTriggerFor]="level1"
          [ngClass]="{ 'text-primary': (isActive$ | async)(child) }"
          class="navigation-menu-item"
          mat-menu-item>
          <mat-icon [svgIcon]="child.icon" class="text-current"></mat-icon>
          <span>{{ child.label }}</span>
        </button>

        <mat-menu #level1="matMenu" yPosition="below">
          <ng-container *ngFor="let item of child.children">
            <ng-container
              [ngTemplateOutletContext]="{ item: item }"
              [ngTemplateOutlet]="linkTemplate"></ng-container>

            <ng-container *ngIf="isDropdown(item)">
              <button
                [matMenuTriggerFor]="level2"
                class="navigation-menu-item"
                [ngClass]="{ 'text-primary': (isActive$ | async)(item) }"
                mat-menu-item>
                {{ item.label }}
              </button>

              <mat-menu #level2="matMenu" yPosition="below">
                <ng-container *ngFor="let child of item.children">
                  <ng-container
                    [ngTemplateOutletContext]="{ item: child }"
                    [ngTemplateOutlet]="linkTemplate"></ng-container>

                  <ng-container *ngIf="isDropdown(child)">
                    <button
                      [matMenuTriggerFor]="level3"
                      class="navigation-menu-item"
                      [ngClass]="{ 'text-primary': (isActive$ | async)(child) }"
                      mat-menu-item>
                      {{ child.label }}
                    </button>

                    <mat-menu #level3="matMenu" yPosition="below">
                      <ng-container *ngFor="let item of child.children">
                        <ng-container
                          [ngTemplateOutletContext]="{ item: item }"
                          [ngTemplateOutlet]="linkTemplate"></ng-container>

                        <ng-container *ngIf="isDropdown(item)">
                          <button
                            [matMenuTriggerFor]="level4"
                            class="navigation-menu-item"
                            [ngClass]="{
                              'text-primary': (isActive$ | async)(item)
                            }"
                            mat-menu-item>
                            {{ item.label }}
                          </button>

                          <mat-menu #level4="matMenu" yPosition="below">
                            <ng-container *ngFor="let child of item.children">
                              <ng-container
                                [ngTemplateOutletContext]="{ item: child }"
                                [ngTemplateOutlet]="
                                  linkTemplate
                                "></ng-container>

                              <ng-container *ngIf="isDropdown(child)">
                                <button
                                  [matMenuTriggerFor]="level5"
                                  class="navigation-menu-item"
                                  [ngClass]="{
                                    'text-primary': (isActive$ | async)(child)
                                  }"
                                  mat-menu-item>
                                  {{ child.label }}
                                </button>

                                <mat-menu #level5="matMenu" yPosition="below">
                                  <ng-container
                                    *ngFor="let item of child.children">
                                    <ng-container
                                      [ngTemplateOutletContext]="{ item: item }"
                                      [ngTemplateOutlet]="
                                        linkTemplate
                                      "></ng-container>
                                  </ng-container>
                                </mat-menu>
                              </ng-container>
                            </ng-container>
                          </mat-menu>
                        </ng-container>
                      </ng-container>
                    </mat-menu>
                  </ng-container>
                </ng-container>
              </mat-menu>
            </ng-container>
          </ng-container>
        </mat-menu>
      </ng-container>
    </ng-container>
  </mat-menu>

  <ng-template #linkTemplate let-item="item">
    <a
      *ngIf="isLink(item) && !isFunction(item.route)"
      [routerLink]="item.route"
      class="navigation-menu-item"
      [ngClass]="{ 'text-primary': (isActive$ | async)(item) }"
      mat-menu-item
      >{{ item.label }}</a
    >

    <div
      (click)="item.route()"
      *ngIf="isLink(item) && isFunction(item.route)"
      class="navigation-menu-item"
      [ngClass]="{ 'text-primary': (isActive$ | async)(item) }"
      mat-menu-item>
      {{ item.label }}
    </div>
  </ng-template>
</ng-container>