ui_icons-1.0.x-dev/modules/ui_icons_field/src/Plugin/Field/FieldWidget/IconLinkWidget.php
modules/ui_icons_field/src/Plugin/Field/FieldWidget/IconLinkWidget.php
<?php
declare(strict_types=1);
namespace Drupal\ui_icons_field\Plugin\Field\FieldWidget;
use Drupal\Core\Field\Attribute\FieldWidget;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Theme\Icon\Plugin\IconPackManagerInterface;
use Drupal\link\Plugin\Field\FieldWidget\LinkWidget;
use Drupal\ui_icons_field\IconFieldTrait;
use Drupal\ui_icons_field\IconLinkWidgetTrait;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Plugin implementation of the 'link field' widget with ui icons support.
*/
#[FieldWidget(
id: 'icon_link_widget',
label: new TranslatableMarkup('Link icon'),
field_types: ['link'],
)]
class IconLinkWidget extends LinkWidget implements ContainerFactoryPluginInterface {
use IconFieldTrait, IconLinkWidgetTrait {
defaultSettings as protected traitDefaultSettings;
settingsForm as protected traitSettingsForm;
settingsSummary as protected traitSettingsSummary;
formElement as protected traitFormElement;
}
/**
* The icon pack manager.
*
* @var \Drupal\Core\Theme\Icon\Plugin\IconPackManagerInterface
*/
protected IconPackManagerInterface $pluginManagerIconPack;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition): static {
$instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
$instance->pluginManagerIconPack = $container->get('plugin.manager.icon_pack');
return $instance;
}
/**
* {@inheritdoc}
*/
public static function defaultSettings(): array {
$settings = parent::defaultSettings();
$settings += self::traitDefaultSettings();
return $settings;
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state): array {
$elements = parent::settingsForm($form, $form_state);
$elements += $this->traitSettingsForm($form, $form_state);
return $elements;
}
/**
* {@inheritdoc}
*/
public function settingsSummary(): array {
$summary = parent::settingsSummary();
$summary += $this->traitSettingsSummary();
return $summary;
}
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state): array {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
$element = $this->traitFormElement($items, $delta, $element, $form, $form_state);
return $element;
}
}
