graphql_compose-1.0.0-beta20/modules/graphql_compose_layout_builder/graphql_compose_layout_builder.module
modules/graphql_compose_layout_builder/graphql_compose_layout_builder.module
<?php
/**
* @file
* GraphQL Composer Layout Builder module file.
*/
declare(strict_types=1);
use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\layout_builder\LayoutBuilderEnabledInterface;
/**
* Implements hook_graphql_compose_entity_type_form_alter().
*/
function graphql_compose_layout_builder_graphql_compose_entity_type_form_alter(array &$form, FormStateInterface $form_state, EntityTypeInterface $entity_type, string $bundle_id, array $settings): void {
$view_modes = \Drupal::service('entity_display.repository')->getViewModes($entity_type->id());
$view_modes = array_keys($view_modes);
$view_modes[] = 'default';
// Map the view modes to display ids.
$display_ids = array_map(
fn($view_mode) => $entity_type->id() . '.' . $bundle_id . '.' . $view_mode,
$view_modes
);
// Load all the displays for the entity type.
$view_displays = \Drupal::entityTypeManager()
->getStorage('entity_view_display')
->loadMultiple($display_ids);
// Filter out any displays that don't have a layout builder enabled.
$layout_displays = array_filter(
$view_displays,
fn($view_display) => $view_display instanceof LayoutBuilderEnabledInterface && $view_display->isLayoutBuilderEnabled()
);
if ($layout_displays) {
$form['layout_builder_enabled'] = [
'#type' => 'checkbox',
'#title' => t('Enable layout builder'),
'#default_value' => $settings['layout_builder_enabled'] ?? FALSE,
'#element_validate' => ['::validateNullable'],
'#description' => t('Expose layout information via the sections field.'),
];
}
}
/**
* Implements hook_config_schema_info_alter().
*/
function graphql_compose_layout_builder_config_schema_info_alter(&$definitions) {
$definitions['graphql_compose.entity.*.*']['mapping']['layout_builder_enabled'] = [
'type' => 'boolean',
'label' => t('Enable layout builder'),
];
}
/**
* Implements hook_graphql_compose_field_type_form_alter().
*
* Hide layout_builder__layout field from form.
* This could lead to confusion having them in the UI.
*/
function graphql_compose_layout_builder_graphql_compose_field_type_form_alter(array &$form, FormStateInterface $form_state, FieldDefinitionInterface $field, array $settings) {
if ($field->getName() === 'layout_builder__layout') {
$form = [
'#type' => 'markup',
'#access' => FALSE,
];
}
}
/**
* Implements hook_graphql_compose_blocks_union_alter().
*/
function graphql_compose_layout_builder_graphql_compose_blocks_union_alter($value, ?string &$type): void {
if ($value instanceof BlockPluginInterface) {
$type = match ($value->getBaseId()) {
'field_block' => 'BlockField',
'inline_block' => 'BlockContent',
default => $type,
};
}
}
