ui_icons-1.0.x-dev/modules/ui_icons_patterns/src/Plugin/UiPatterns/Source/FieldIconSource.php

modules/ui_icons_patterns/src/Plugin/UiPatterns/Source/FieldIconSource.php
<?php

declare(strict_types=1);

namespace Drupal\ui_icons_patterns\Plugin\UiPatterns\Source;

use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Theme\Icon\IconDefinition;
use Drupal\ui_icons_patterns\Plugin\Derivative\FieldIconSourceDeriver;
use Drupal\ui_patterns\Attribute\Source;
use Drupal\ui_patterns\Plugin\UiPatterns\Source\FieldValueSourceBase;

/**
 * Plugin implementation of the prop source.
 */
#[Source(
  id: 'field_icon',
  label: new TranslatableMarkup('Field Icon'),
  description: new TranslatableMarkup('Field icon source plugin for props.'),
  deriver: FieldIconSourceDeriver::class
)]
class FieldIconSource extends FieldValueSourceBase {

  /**
   * {@inheritdoc}
   */
  public function getPropValue(): mixed {
    // @todo get value from field to allow string
    $items = $this->getEntityFieldItemList();
    $delta = (isset($this->context['ui_patterns:field:index'])) ? $this->getContextValue('ui_patterns:field:index') : 0;
    $field_item_at_delta = $items->get($delta);

    $prop_type_plugin_id = $this->propDefinition['ui_patterns']['type_definition']->getPluginId();
    $is_prop_type_icon = ($prop_type_plugin_id === 'icon');

    if (!$field_item_at_delta) {
      return $is_prop_type_icon ? NULL : [];
    }

    $value = $field_item_at_delta->getValue();
    if (!$icon_data = IconDefinition::getIconDataFromId($value['target_id'] ?? $value['icon_id'] ?? '')) {
      return $is_prop_type_icon ? NULL : [];
    }

    $icon_settings = $value['settings'] ?? $value['icon_settings'] ?? [];
    $icon_data['settings'] = $icon_settings[$icon_data['pack_id']] ?? [];

    if ($prop_type_plugin_id === 'icon') {
      return $icon_data;
    }

    $full_icon_id = IconDefinition::createIconId($icon_data['pack_id'], $icon_data['icon_id']);
    return IconDefinition::getRenderable($full_icon_id, $icon_data['settings']);
  }

}

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

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