Асинхронный валидатор для таблицы

Я пишу сайт на Angular, там должно быть реализовано добавление товара в корзину из таблицы товаров, данные в которую поступают с backend'a. Мне нужно валидировать количество добавляемого товара так, чтобы оно не превышало имеющееся на "складе". Я написала валидатор, но он работает не совсем корректно. Валидатор срабатывает на значения из всех строк таблицы, а не одной конкретной

Прикрепляю имеющийся код таблицы на HTML: `

<h1>Оформление заказа</h1>

<button
  class="btn"
  [routerLink]="['/cart']"

  [fragment]="'fragment'"
>
  Перейти в корзину
</button>


<div class="find"> <h3>Выберите товар</h3> </div>
<div class="search"> <input type="text"  placeholder="Поиск препаратов" [(ngModel)]="toFilter">
  <button class="btn" (click)="filterData()">Поиск</button>
  <button class="btn" (click)="check()">проверка</button>
</div>


<button class="btn" (click) ="add()"> Выбрать товар </button>
<form [formGroup]="form">
<p-table [value]="products"  [(selection)]="productService.prodToMove" styleClass="p-datatable-sm" dataKey="id" [scrollable]="true" scrollHeight="960px">
  <ng-template pTemplate="header">
    <tr>
      <th style="max-width: 200px">

      </th>
      <th style="max-width: 200px">Id</th>
      <th style="max-width: 200px">Название</th>
      <th style="max-width: 200px">Поставщик</th>
      <th pSortableColumn="price" style="max-width: 200px">Цена <p-sortIcon field="price"></p-sortIcon> </th>
      <th style="max-width: 200px">Количество на складе</th>
      <th style="max-width: 200px">Заказать</th>

    </tr>
  </ng-template>

  <ng-template pTemplate="body" let-product >
    <tr>
      <td>
        <p-tableCheckbox  [value]="product"   dataKey="id"  ></p-tableCheckbox>
      </td>
      <td style="max-width: 200px">{{product.id}}</td>
      <td style="max-width: 200px">{{product.medicine.name}}</td>
      <td style="max-width: 200px">{{product.provider.name}}</td>
      <td style="max-width: 200px">{{product.price}}</td>
      <td style="max-width: 200px">{{product.quantityInStock}}</td>
      <td pEditableColumn >
        <p-cellEditor>


          <ng-template pTemplate="input">
            <input  type="number" formControlName="quantity" min="1" max="{{product.quantityInStock}}" [value]="0" [(ngModel)]="product.pickedQuantity">
                            <div *ngIf="form.get('quantity')?.errors?.['tooMany']">
                              <small>Максимальное количество = {{product.quantityInStock}}</small>

                            </div>
            <!--                <div *ngIf="form.get('quantity')?.errors?.['max']">-->
            <!--                  <small>Макс количество превышено</small>-->

            <!--                </div>-->
          </ng-template>
          <ng-template pTemplate="output">
            {{product.pickedQuantity }}
          </ng-template>

        </p-cellEditor>
      </td>
    </tr>
  </ng-template>
</p-table>
</form>`

Код валидатора:

import { AsyncValidatorFn} from "@angular/forms";
import {ProductService} from "./product.service";
import {map} from "rxjs";

export function checkProductsLeftValidator(product:ProductService): AsyncValidatorFn{
  return <AsyncValidatorFn>(control:any) => {

    return product.getProductsSma()
      .pipe(
        map(product=>{
          const prod = product.find(
            prod => prod.quantityInStock == control.value);
          return prod ? {tooMany:true} : null;
        })
      )
  }
}

Метод getProductsSma:

getProductsSma():Observable<Product[]> {
    return  this.http.get<Product[]>('/api/medicinProv')
  }

Кусок кода с typescript'a:

ngOnInit(): void {
    this.scrollableCols = [

    ];
    this.form=this.fb.group({
      quantity: ['', {
        validators: [
          Validators.required
        ],
        asyncValidators: [checkProductsLeftValidator(this.product)]
      }]
    })

[1]: https://i.stack.imgur.com/OqUJP.png работа валидатора


Ответы (0 шт):