protected function DeveloperAppCreateForm::alterFormBeforeApiProductElement in Apigee Edge 8
Allows to alter the form before API products gets added.
Parameters
array $form: Form render array.
\Drupal\Core\Form\FormStateInterface $form_state: The form state object.
Overrides AppCreateForm::alterFormBeforeApiProductElement
File
- src/
Entity/ Form/ DeveloperAppCreateForm.php, line 89  
Class
- DeveloperAppCreateForm
 - General form handler for the developer app create.
 
Namespace
Drupal\apigee_edge\Entity\FormCode
protected function alterFormBeforeApiProductElement(array &$form, FormStateInterface $form_state) : void {
  // Do not reload a developer ids and users when AJAX refreshes the form.
  $developer_options = $form_state
    ->get('developer_options');
  if ($developer_options === NULL) {
    // It is faster to collect existing developer emails like this
    // from Apigee Edge.
    $developer_emails = $this->developerController
      ->getEntityIds();
    $developer_options = array_reduce($this->entityTypeManager
      ->getStorage('user')
      ->loadByProperties([
      'mail' => $developer_emails,
    ]), function ($carry, UserInterface $item) {
      $carry[$item
        ->getEmail()] = $item
        ->label();
      return $carry;
    }, []);
    reset($developer_options);
    $form_state
      ->set('developer_options', $developer_options);
  }
  // Override the owner field to be a select list with all developers from
  // Apigee Edge.
  $form['owner'] = [
    '#title' => $this
      ->t('Owner'),
    '#type' => 'select',
    '#weight' => $form['owner']['#weight'],
    '#default_value' => $form_state
      ->get('owner') ?? key($developer_options),
    '#options' => $developer_options,
    '#required' => TRUE,
    '#ajax' => [
      'callback' => '::updateApiProductList',
    ],
  ];
}