public function PersistedQueriesForm::form in GraphQL 8.4
Gets the actual form array to be built.
Overrides EntityForm::form
See also
\Drupal\Core\Entity\EntityForm::processForm()
\Drupal\Core\Entity\EntityForm::afterBuild()
File
- src/
Form/ PersistedQueriesForm.php, line 60
Class
- PersistedQueriesForm
- Admin form to set up persisted GraphQL queries.
Namespace
Drupal\graphql\FormCode
public function form(array $form, FormStateInterface $form_state) : array {
$form = parent::form($form, $form_state);
/** @var \Drupal\graphql\Plugin\PersistedQueryPluginInterface[] $plugins */
$plugins = $this->entity
->getPersistedQueryInstances();
$all_plugins = $this
->getAllPersistedQueryPlugins();
$form['#tree'] = TRUE;
$form['#attached']['library'][] = 'graphql/persisted_queries';
$form['enabled'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Enabled persisted query plugins'),
'#attributes' => [
'class' => [
'persisted-queries-enabled-wrapper',
],
],
];
foreach ($all_plugins as $id => $plugin) {
$clean_css_id = Html::cleanCssIdentifier($plugin
->getPluginId());
$form['enabled'][$plugin
->getPluginId()] = [
'#type' => 'checkbox',
'#title' => $plugin
->label(),
'#description' => $plugin
->getDescription(),
'#default_value' => !empty($plugins[$id]),
'#attributes' => [
'class' => [
'persisted-queries-enabled-' . $clean_css_id,
],
'data-id' => $clean_css_id,
],
];
}
// Set the weights of the persisted query plugins.
$form['weights'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Order'),
];
$form['weights']['order'] = [
'#type' => 'table',
];
$form['weights']['order']['#tabledrag'][] = [
'action' => 'order',
'relationship' => 'sibling',
'group' => 'persisted-query-plugin-weight',
];
$plugins_weight = [];
foreach ($all_plugins as $plugin_id => $plugin) {
$plugins_weight[$plugin_id] = !empty($plugins[$plugin_id]) ? $plugins[$plugin_id]
->getWeight() : $plugin
->getWeight();
}
asort($plugins_weight);
foreach ($plugins_weight as $id => $weight) {
$plugin = $all_plugins[$id];
$form['weights']['order'][$id]['#attributes']['class'][] = 'draggable';
$form['weights']['order'][$id]['#attributes']['class'][] = 'persisted-queries-weight--' . Html::cleanCssIdentifier($id);
$form['weights']['order'][$id]['#weight'] = $weight;
$form['weights']['order'][$id]['label']['#plain_text'] = $plugin
->label();
$form['weights']['order'][$id]['weight'] = [
'#type' => 'weight',
'#title' => $this
->t('Weight for persisted query plugin %title', [
'%title' => $plugin
->label(),
]),
'#title_display' => 'invisible',
'#delta' => 50,
'#default_value' => $weight,
'#attributes' => [
'class' => [
'persisted-query-plugin-weight',
],
],
];
}
// Add vertical tabs containing the settings for the plugins.
$form['plugin_settings'] = [
'#title' => $this
->t('Persisted queries settings'),
'#type' => 'vertical_tabs',
];
foreach ($plugins_weight as $plugin_id => $weight) {
$plugin = !empty($plugins[$plugin_id]) ? $plugins[$plugin_id] : $all_plugins[$plugin_id];
if ($plugin instanceof PluginFormInterface) {
$form['settings'][$plugin_id] = [
'#type' => 'details',
'#title' => $plugin
->label(),
'#group' => 'plugin_settings',
'#attributes' => [
'class' => [
'persisted-queries-settings--' . Html::cleanCssIdentifier($plugin_id),
],
],
];
$plugin_form_state = SubformState::createForSubform($form['settings'][$plugin_id], $form, $form_state);
$form['settings'][$plugin_id] += $plugin
->buildConfigurationForm($form['settings'][$plugin_id], $plugin_form_state);
}
else {
unset($form['settings'][$plugin_id]);
}
}
$form['actions'] = [
'#type' => 'actions',
];
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Submit'),
];
return $form;
}