You are here

public function PaymentReferenceBase::ajaxPay in Payment 8.2

Implements form AJAX callback.

File

src/Element/PaymentReferenceBase.php, line 487

Class

PaymentReferenceBase
Provides a base for payment reference elements.

Namespace

Drupal\payment\Element

Code

public function ajaxPay(array &$form, FormStateInterface $form_state) {
  $triggering_element = $form_state
    ->getTriggeringElement();
  $root_element_parents = array_slice($triggering_element['#array_parents'], 0, -3);
  $root_element = NestedArray::getValue($form, $root_element_parents);
  $response = new AjaxResponse();
  $response
    ->addCommand(new ReplaceCommand('#' . $root_element['container']['#id'], $this->renderer
    ->render($root_element['container'])));

  /** @var \Drupal\payment\Plugin\Payment\Method\PaymentMethodInterface $selected_payment_method */
  $selected_payment_method = $this
    ->getPluginSelector($root_element, $form_state)
    ->getSelectedPlugin();
  if (!$selected_payment_method
    ->getPaymentExecutionResult()
    ->isCompleted()) {
    $link = $this
      ->buildCompletePaymentLink($root_element, $form_state);
    $response
      ->addCommand(new OpenModalDialogCommand($this
      ->t('Complete payment'), $this->renderer
      ->render($link)));
  }
  return $response;
}