Smile\ElasticsuiteSwatches\Helper\Swatches::loadVariationByFallback PHP Method

loadVariationByFallback() public method

public loadVariationByFallback ( Magento\Catalog\Api\Data\ProductInterface $parentProduct, array $attributes )
$parentProduct Magento\Catalog\Api\Data\ProductInterface
$attributes array
    public function loadVariationByFallback(Product $parentProduct, array $attributes)
    {
        $variation = false;
        if ($this->isProductHasSwatch($parentProduct) && $parentProduct->getDocumentSource() !== null) {
            $documentSource = $parentProduct->getDocumentSource();
            $childrenIds = isset($documentSource['children_ids']) ? $documentSource['children_ids'] : [];
            if (!empty($childrenIds)) {
                $childrenIds = array_map('intval', $childrenIds);
                $productCollection = $this->productCollectionFactory->create();
                $productCollection->addIdFilter($childrenIds);
                $configurableAttributes = $this->getAttributesFromConfigurable($parentProduct);
                $allAttributesArray = [];
                foreach ($configurableAttributes as $attribute) {
                    foreach ($attribute->getOptions() as $option) {
                        $allAttributesArray[$attribute['attribute_code']][] = (int) $option->getValue();
                    }
                }
                $resultAttributesToFilter = array_merge($attributes, array_diff_key($allAttributesArray, $attributes));
                $this->addFilterByAttributes($productCollection, $resultAttributesToFilter);
                $variationProduct = $productCollection->getFirstItem();
                if ($variationProduct && $variationProduct->getId()) {
                    $variation = $this->productRepository->getById($variationProduct->getId());
                }
            }
        } else {
            $variation = parent::loadVariationByFallback($parentProduct, $attributes);
        }
        return $variation;
    }