configurableSelectionMetadata = $configurableSelectionMetadata; $this->configurableOptionsMetadata = $configurableOptionsMetadata; $this->selectionUidFormatter = $selectionUidFormatter; $this->variant = $variant; $this->variantFormatter = $variantFormatter; $this->configurableProductHelper = $configurableProductHelper; } /** * @inheritDoc */ public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null) { if (!isset($value['model'])) { throw new LocalizedException(__('"model" value should be specified')); } $product = $value['model']; $selectionUids = $args['configurableOptionValueUids'] ?? []; $selectedOptions = $this->selectionUidFormatter->extract($selectionUids); $variants = $this->variant->getSalableVariantsByParent($product); $options = $this->configurableProductHelper->getOptions($product, $variants); $configurableOptions = $this->configurableOptionsMetadata->getAvailableSelections( $product, $options, $selectedOptions ); $optionsAvailableForSelection = $this->configurableSelectionMetadata->getAvailableSelections( $product, $args['configurableOptionValueUids'] ?? [] ); return [ 'configurable_options' => $configurableOptions, 'variant' => $this->variantFormatter->format($options, $selectedOptions, $variants), 'model' => $product, 'options_available_for_selection' => $optionsAvailableForSelection['options_available_for_selection'], 'availableSelectionProducts' => $optionsAvailableForSelection['availableSelectionProducts'] ]; } }