ui_icons-1.0.x-dev/modules/ui_icons_patterns/src/Plugin/UiPatterns/SettingType/IconSettingType.php

modules/ui_icons_patterns/src/Plugin/UiPatterns/SettingType/IconSettingType.php
<?php

namespace Drupal\ui_icons_patterns\Plugin\UIPatterns\SettingType;

use Drupal\Core\Theme\Icon\IconDefinition;
use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;

/**
 * Icon setting type.
 *
 * @UiPatternsSettingType(
 *   id = "icon",
 *   label = @Translation("Icon")
 * )
 */
class IconSettingType extends PatternSettingTypeBase {

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
    $value = $this->getValue($value);
    $form[$def->getName()] = [
      '#type' => 'icon_autocomplete',
      '#title' => $def->getLabel(),
      '#default_value' => $value['target_id'] ?? '',
      '#default_settings' => $value['settings'] ?? [],
      '#show_settings' => TRUE,
      '#return_id' => TRUE,
    ];
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function preprocess($value, array $context) {
    if (!is_array($value)) {
      return [
        'pack_id' => '',
        'icon_id' => '',
        'settings' => [],
      ];
    }
    // Value not coming from ::settingsForm(), like component definition's
    // preview, has an already resolved flat structure with primitive only.
    if (isset($value['icon_id']) && is_string($value['icon_id']) && isset($value['pack_id'])) {
      return $value;
    }
    // Data coming from ::settingsForm() have an IconDefinition objects.
    if (!$icon_data = IconDefinition::getIconDataFromId($value['target_id'])) {
      return [
        'pack_id' => '',
        'icon_id' => '',
        'settings' => [],
      ];
    }

    return [
      'pack_id' => $icon_data['pack_id'],
      'icon_id' => $icon_data['icon_id'],
      'settings' => $value['settings'][$icon_data['pack_id']] ?? [],
    ];
  }

}

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

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