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

<td-steps mode="'vertical'">
  <td-step #detailsStep label="{{'Assign product' | translate}}" [state]="detailForm.valid ? 'complete' : detailForm.pristine ? 'none' : 'required'">
    <form [formGroup]="detailForm" layout="column">
      <mat-form-field layout-margin *ngIf="!editMode">
        <mat-select formControlName="productIdentifier" placeholder="{{ 'Select product' | translate }}">
          <mat-option *ngFor="let definition of productDefinitions" [value]="definition.identifier">
            {{definition.name}}
          </mat-option>
        </mat-select>
      </mat-form-field>
      <div layout="row">
        <td-chips [items]="filteredCustomers | async"
                  [debounce]="500"
                  formControlName="beneficiaries"
                  placeholder="{{'Search beneficiary' | translate }}"
                  (inputChange)="filterAsync($event)"
                  requireMatch>
          <ng-template td-chip let-chip="chip">
            <div class="tc-grey-100 bgc-teal-700" td-chip-avatar>{{chip.substring(0, 1).toUpperCase()}}</div> {{chip}}
          </ng-template>
        </td-chips>
      </div>
    </form>
    <ng-template td-step-actions>
      <fims-form-final-action
        [resourceName]="'DEPOSIT ACCOUNT'"
        [editMode]="editMode"
        [disabled]="!isValid"
        (onCancel)="cancel()"
        (onSave)="save()">
      </fims-form-final-action>
    </ng-template>
  </td-step>
</td-steps>
