EditSimpleBlockInLayoutBuilderForm.php in Simple Block 8
File
modules/simple_block_layout_builder/src/Form/EditSimpleBlockInLayoutBuilderForm.php
View source
<?php
namespace Drupal\simple_block_layout_builder\Form;
use Drupal\Component\Utility\Html;
use Drupal\Component\Uuid\UuidInterface;
use Drupal\Core\Ajax\AjaxFormHelperTrait;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Form\FormStateInterface;
use Drupal\layout_builder\Controller\LayoutRebuildTrait;
use Drupal\layout_builder\LayoutBuilderHighlightTrait;
use Drupal\layout_builder\LayoutTempstoreRepositoryInterface;
use Drupal\layout_builder\SectionComponent;
use Drupal\layout_builder\SectionStorageInterface;
use Drupal\simple_block\SimpleBlockEditForm;
use Drupal\simple_block\SimpleBlockInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class EditSimpleBlockInLayoutBuilderForm extends SimpleBlockEditForm {
use AjaxFormHelperTrait;
use LayoutBuilderHighlightTrait;
use LayoutRebuildTrait;
protected $layoutTempstoreRepository;
protected $uuidGenerator;
protected $delta;
protected $region;
protected $uuid;
protected $sectionStorage;
public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, UuidInterface $uuid) {
$this->layoutTempstoreRepository = $layout_tempstore_repository;
$this->uuidGenerator = $uuid;
}
public static function create(ContainerInterface $container) : self {
return new static($container
->get('layout_builder.tempstore_repository'), $container
->get('uuid'));
}
public function buildForm(array $form, FormStateInterface $form_state, SectionStorageInterface $section_storage = NULL, ?string $delta = NULL, ?string $region = NULL, ?SimpleBlockInterface $simple_block = NULL, ?string $uuid = NULL) : array {
$form = parent::buildForm($form, $form_state);
if (!($component = $form_state
->get('layout_builder__component'))) {
$id = $simple_block ? $simple_block
->id() : NULL;
$section = $section_storage
->getSection($delta);
if ($id) {
$component = $section
->getComponent($uuid);
}
else {
$component = new SectionComponent($this->uuidGenerator
->generate(), $region, [
'id' => $id,
]);
$section
->appendComponent($component);
}
$form_state
->set('layout_builder__component', $component);
}
unset($form['actions']['delete']);
$form['#attributes']['data-layout-builder-target-highlight-id'] = $this
->blockAddHighlightId($delta, $region);
$this->sectionStorage = $section_storage;
$this->delta = $delta;
$this->uuid = $component
->getUuid();
if ($this
->isAjax()) {
$form['actions']['submit']['#ajax']['callback'] = '::ajaxSubmit';
$form['#id'] = Html::getId($form_state
->getBuildInfo()['form_id']);
}
$form['#attached']['drupalSettings']['path']['currentPathIsAdmin'] = TRUE;
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) : void {
parent::submitForm($form, $form_state);
$section = $this->sectionStorage
->getSection($this->delta);
$section
->getComponent($this->uuid)
->setConfiguration([
'id' => "simple_block:{$this->getEntity()->id()}",
]);
$this->layoutTempstoreRepository
->set($this->sectionStorage);
$form_state
->setRedirectUrl($this->sectionStorage
->getLayoutBuilderUrl());
}
protected function successfulAjaxSubmit(array $form, FormStateInterface $form_state) : AjaxResponse {
return $this
->rebuildAndClose($this->sectionStorage);
}
}