<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<div class="base-retreat">
  <div class="sub-nav">
    <div *ngIf="healthStatus?.admin" class="admin-group">
      <button mat-raised-button class="butt ssn" (click)="showEndpointsDialog()">
        <i class="material-icons"></i>Endpoints
      </button>
      <!-- <button mat-raised-button class="butt ssn" (click)="openSsnMonitorDialog()">
        <i class="material-icons"></i>SSN Monitor
      </button> -->
      <button mat-raised-button class="butt env" (click)="openManageEnvironmentDialog()">
        <i class="material-icons"></i>Manage DLab quotas
      </button>
      <!-- <button mat-raised-button class="butt" (click)="showBackupDialog()" [disabled]="creatingBackup">
        <i class="material-icons">backup</i>Backup
      </button> -->
    </div>
    <button mat-raised-button class="butt" (click)="buildGrid()">
      <i class="material-icons">autorenew</i>Refresh
    </button>
  </div>
  <mat-divider></mat-divider>
  <management-grid [currentUser]="user.toLowerCase()" [isAdmin]="healthStatus?.admin"
    [environmentsHealthStatuses]="healthStatus?.list_resources" (refreshGrid)="buildGrid()"
    (actionToggle)="manageEnvironmentAction($event)">
  </management-grid>
</div>
