react_block-8.x-1.x-dev/src/Plugin/Block/ReactBlock.php

src/Plugin/Block/ReactBlock.php
<?php

namespace Drupal\react_block\Plugin\Block;

use Drupal\pdb\Plugin\Block\PdbBlock;

/**
 * Exposes a React component as a block.
 *
 * @Block(
 *   id = "react_block",
 *   admin_label = @Translation("React Block"),
 *   deriver = "\Drupal\react_block\Plugin\Derivative\ReactBlockDeriver"
 * )
 */
class ReactBlock extends PdbBlock {

  /**
   * {@inheritdoc}
   *
   * @TODO: find a better way to manage unique componentID for both the id of
   *   the element as well as the drupalSettings config storage.
   */
  public function build() {
    $info = $this->getComponentInfo();
    $machine_name = $info['machine_name'];

    $build = parent::build();
    $build['#allowed_tags'] = [$machine_name];
    $build['#allowed_tags'] = ['div'];
    $build['#markup'] = '<div class="' . $machine_name . '" id="' . $machine_name . '"></div>';

    return $build;
  }

  /**
   * {@inheritdoc}
   */
  public function attachSettings(array $component) {
    $machine_name = $component['machine_name'];

    $attached = [];
    $attached['drupalSettings']['react_block'][$machine_name] = [];

    return $attached;
  }

  /**
   * {@inheritdoc}
   */
  public function attachLibraries(array $component) {
    $parent_libraries = parent::attachLibraries($component);

    $framework_libraries = [
      'react_block/react',
      'react_block/react-dom',
      'react_block/redux',
      'react_block/react-redux',
    ];

    $libraries = [
      'library' => array_merge($parent_libraries, $framework_libraries),
    ];

    return $libraries;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc