/**
  * Process js Layout of block
  *
  * @param array $jsLayout
  * @return array
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function process($jsLayout)
 {
     $elements = ['city' => ['visible' => $this->isCityActive(), 'formElement' => 'input', 'label' => __('City'), 'value' => null], 'country_id' => ['visible' => true, 'formElement' => 'select', 'label' => __('Country'), 'options' => $this->countryCollection->load()->toOptionArray(), 'value' => null], 'region_id' => ['visible' => true, 'formElement' => 'select', 'label' => __('State/Province'), 'options' => $this->regionCollection->load()->toOptionArray(), 'value' => null], 'postcode' => ['visible' => true, 'formElement' => 'input', 'label' => __('Zip/Postal Code'), 'value' => null]];
     if (isset($jsLayout['components']['block-summary']['children']['block-shipping']['children']['address-fieldsets']['children'])) {
         $fieldSetPointer =& $jsLayout['components']['block-summary']['children']['block-shipping']['children']['address-fieldsets']['children'];
         $fieldSetPointer = $this->merger->merge($elements, 'checkoutProvider', 'shippingAddress', $fieldSetPointer);
     }
     return $jsLayout;
 }
 /**
  * Inject billing address component into every payment component
  *
  * @param array $configuration list of payment components
  * @param array $elements attributes that must be displayed in address form
  * @return array
  */
 private function processPaymentConfiguration(array &$configuration, array $elements)
 {
     $output = [];
     foreach ($configuration as $paymentGroup => $groupConfig) {
         foreach ($groupConfig['methods'] as $paymentCode => $paymentComponent) {
             if (empty($paymentComponent['isBillingAddressRequired'])) {
                 continue;
             }
             $output[$paymentCode . '-form'] = ['component' => 'Magento_Checkout/js/view/billing-address', 'displayArea' => 'billing-address-form-' . $paymentCode, 'provider' => 'checkoutProvider', 'deps' => 'checkoutProvider', 'dataScopePrefix' => 'billingAddress' . $paymentCode, 'sortOrder' => 1, 'children' => ['form-fields' => ['component' => 'uiComponent', 'displayArea' => 'additional-fieldsets', 'children' => $this->merger->merge($elements, 'checkoutProvider', 'billingAddress' . $paymentCode, ['country_id' => ['sortOrder' => 115], 'region' => ['visible' => false], 'region_id' => ['component' => 'Magento_Ui/js/form/element/region', 'config' => ['template' => 'ui/form/field', 'elementTmpl' => 'ui/form/element/select', 'customEntry' => 'billingAddress' . $paymentCode . '.region'], 'validation' => ['required-entry' => true], 'filterBy' => ['target' => '${ $.provider }:${ $.parentScope }.country_id', 'field' => 'country_id']], 'postcode' => ['component' => 'Magento_Ui/js/form/element/post-code', 'validation' => ['required-entry' => true]], 'company' => ['validation' => ['min_text_length' => 0]], 'fax' => ['validation' => ['min_text_length' => 0]], 'telephone' => ['config' => ['tooltip' => ['description' => __('For delivery questions.')]]]])]]];
         }
         unset($configuration[$paymentGroup]['methods']);
     }
     return $output;
 }