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

<mat-list>
  <h3 mat-subheader translate *ngIf="scans && scans.length > 0" translate>Scans uploaded</h3>
  <mat-list-item *ngFor="let scan of scans">
    <mat-icon mat-list-icon>photo_camera</mat-icon>
    <h4 matLine>{{scan.description}}</h4>
    <button mat-button color="warn" (click)="deleteScan(scan)" *hasPermission="{ id: 'customer_identifications', accessLevel: 'DELETE' }" translate>
      Delete
    </button>
    <button mat-raised-button (click)="viewScan(scan.identifier)" translate>
      View
    </button>
  </mat-list-item>
</mat-list>
