You are here

function commerce_cart_blocks_ajax_callback in Commerce Cart Blocks 8

Ajax callback for variation product form.

Parameters

array $form: The form array.

\Drupal\Core\Form\FormStateInterface $form_state: The form state.

Return value

\Drupal\Core\Ajax\AjaxResponse The AJAX response.

1 string reference to 'commerce_cart_blocks_ajax_callback'
commerce_cart_blocks_form_commerce_order_item_add_to_cart_form_alter in ./commerce_cart_blocks.module
Implements hook_form_FORM_ID_alter().

File

./commerce_cart_blocks.module, line 265
Contains commerce_cart_blocks.module.

Code

function commerce_cart_blocks_ajax_callback(array $form, FormStateInterface $form_state) {
  $response = new AjaxResponse();
  $ajax_settings = $form_state
    ->getValue('commerce_cart_blocks_ajax', [
    'modal_enabled' => TRUE,
    'modal_title' => 'Cart',
    'append_block_id' => '',
  ]);

  // Update cart blocks after adding an item to cart.
  if (!$form_state
    ->getErrors()) {
    $types = [
      'commerce_cart_blocks_cart',
      'commerce_cart_blocks_button',
    ];
    foreach ($types as $block_type) {
      $query = \Drupal::entityQuery('block')
        ->condition('plugin', $block_type);
      foreach ((array) $query
        ->execute() as $block_id) {
        $response
          ->addCommand(commerce_cart_blocks_render_cart_block_command($block_id));
      }
    }

    // @todo Figure out why a page reload is sometimes required.
    $cartCount = commerce_cart_blocks_cart_count();
    $appendId = $ajax_settings['append_block_id'];
    if ($cartCount === 1 && !empty($appendId)) {
      $command = commerce_cart_blocks_render_cart_block_command_append('cart');
      $appendCommand = new AfterCommand($appendId, $command);
      $response
        ->addCommand($appendCommand);
    }
    if ($ajax_settings['modal_enabled']) {
      $response
        ->addCommand(commerce_cart_blocks_show_cart_dialog_command($ajax_settings, $cartCount));
    }
    else {
      $status_messages = [
        '#type' => 'status_messages',
      ];
      $messages = \Drupal::service('renderer')
        ->renderRoot($status_messages);
      if (!empty($messages)) {
        $response
          ->addCommand(new PrependCommand('.commerce-order-item-add-to-cart-form', $messages));
      }
    }
  }
  return $response;
}