/**
  * @param      $items
  * @param bool $priceIncludesTax
  * @param int $shippingTaxRate
  * @return array
  */
 public function makeFromIds($items, $priceIncludesTax, $shippingTaxRate = 0)
 {
     $products = $this->cartRepository->getProducts($items);
     $productFactory = new ProductFactory();
     $final = [];
     foreach ($this->getUniqueList($items) as $productVariationId => $quantity) {
         /** @noinspection PhpUndefinedFieldInspection */
         foreach ($products->result as $product) {
             $vrProduct = $productFactory->fromApi($product);
             if ($product->variations[0]->id == $productVariationId) {
                 $final[] = $this->make($vrProduct, $priceIncludesTax, $quantity, $shippingTaxRate);
             }
         }
     }
     return $final;
 }
 /**
  * @param $result
  * @return ProductSearchResult
  */
 public function fromApi($result)
 {
     $productFactory = new ProductFactory();
     $products = [];
     foreach ($result->result as $product) {
         $products[] = $productFactory->fromApi($product);
     }
     $colors = [];
     $types = [];
     $sizes = [];
     foreach ($result->colors as $color) {
         $colors[] = new Color($color->name, $color->hex);
     }
     foreach ($result->types as $type) {
         $types[] = new Type($type->name);
     }
     foreach ($result->sizes as $size) {
         $sizes[] = new Size($size->name);
     }
     return new ProductSearchResult(['products' => $products, 'totalRows' => $result->total_rows, 'limit' => $result->limit, 'offset' => $result->offset, 'searchParams' => $result->search_params, 'availableColors' => $colors, 'availableTypes' => $types, 'availableSizes' => $sizes, 'breadcrumbs' => $result->breadcrumbs]);
 }
 /**
  * @param $productVariationId
  * @return mixed
  */
 public function findByVariationId($productVariationId)
 {
     $searchParams['product_variation_id'] = $productVariationId;
     $productFactory = new ProductFactory();
     return $productFactory->fromApi(VendirunApi::makeRequest('product/product', $searchParams)->getData());
 }