You are here

public function VueForm::buildForm in Decoupled Blocks: Vue.js 8

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

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

Return value

array The form structure.

Overrides ConfigFormBase::buildForm

File

src/Form/VueForm.php, line 32

Class

VueForm
Class VueForm.

Namespace

Drupal\pdb_vue\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this
    ->config('pdb_vue.settings');
  $form['version'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Choose the version of Vue'),
    '#options' => [
      'vue3' => $this
        ->t('Vue 3'),
      'vue2' => $this
        ->t('Vue 2'),
    ],
    '#default_value' => $config
      ->get('version'),
  ];
  $form['development_mode'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Development Mode'),
    '#description' => $this
      ->t('Checking the box enables development mode'),
    '#default_value' => $config
      ->get('development_mode'),
  ];
  $form['use_spa'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Use Vue components in a Single Page App format.'),
    '#description' => $this
      ->t('Checking the box will initialize a Vue instance on a root element to overtake the entire page allowing each block to be a <a href="https://v3.vuejs.org/guide/component-basics.html#components-basics">Vue Components</a>.'),
    '#default_value' => $config
      ->get('use_spa'),
  ];
  $form['spa_element'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('App Element Selector'),
    '#description' => $this
      ->t('Set the element that the Vue instance will be attached to. By default it will use the Classy theme\'s wrapping element "#page-wrapper".'),
    '#default_value' => $config
      ->get('spa_element') ? $config
      ->get('spa_element') : '#page-wrapper',
    '#states' => [
      // Only show this field when the use_spa checkbox is checked.
      'visible' => [
        ':input[name="use_spa"]' => [
          'checked' => TRUE,
        ],
      ],
    ],
  ];
  return parent::buildForm($form, $form_state);
}