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

<form [formGroup]="form">
  <div layout-gt-xs="column" layout-margin formArrayName="factors">
    <mat-card *ngFor="let factor of factorControls; let i=index" [formGroupName]="i">
      <mat-card-content>
        <div layout="row">
          <fims-text-input [form]="factor" controlName="description" placeholder="{{'Description' | translate}}"></fims-text-input>
          <fims-text-input type="number" [form]="factor" controlName="amount" placeholder="{{'Amount' | translate}}"></fims-text-input>
          <button mat-button (click)="removeFactor(i)">{{'REMOVE ' + factorName | translate}}</button>
        </div>
      </mat-card-content>
    </mat-card>
    <div layout="row">
      <button flex mat-button mat-raised-button (click)="addFactor()">{{'ADD ' + factorName | translate}}</button>
    </div>
  </div>
</form>
