<!--
  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.
-->

<section>
  <h2 class="mat-display-1 text-upper text-center push-bottom">Search member </h2>
  <div layout-gt-xs="row" layout-align="center center">
    <div layout-gt-xs="row" flex-gt-xs="90" layout-margin>
      <div flex-gt-xs="25"></div>
      <div flex-gt-xs="50">
        <mat-card>
          <mat-card-title>
            <td-search-input placeholder="Search here" [showUnderline]="false" [debounce]="500" (searchDebounce)="search($event)" (clear)="clearSearch()">
            </td-search-input>
          </mat-card-title>
          <mat-card-subtitle>Search results</mat-card-subtitle>
          <mat-divider></mat-divider>
          <mat-list>
            <ng-template let-item let-last="last" ngFor [ngForOf]="customer$ | async">
              <mat-list-item>
                <mat-icon mat-list-icon class="fill-grey-700">face</mat-icon>
                <h4 matLine>{{item.surname}}, {{item.givenName}}</h4>
                <button mat-raised-button color="accent" title="{{'SHOW' | translate}}" (click)="showCustomer(item.identifier)">{{'SHOW' | translate}}</button>
              </mat-list-item>
              <mat-divider mat-inset *ngIf="!last"></mat-divider>
            </ng-template>
          </mat-list>
          <mat-divider></mat-divider>
        </mat-card>
      </div>
      <div flex-gt-xs="25"></div>
    </div>
  </div>
</section>
<router-outlet></router-outlet>
<a mat-fab color="accent" class="mat-fab-position-bottom-right" (click)="logout()" title="{{'Pause' | translate}}">
  <mat-icon>pause</mat-icon>
</a>
