Loading widget_instance.module +42 −0 Original line number Diff line number Diff line Loading @@ -5,8 +5,12 @@ * Provides a widget instance entity type. */ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\Render\Element; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\widget_instance\WidgetInstanceInterface; use Drupal\widget_type\WidgetTypeInterface; /** * Implements hook_theme(). Loading Loading @@ -69,3 +73,41 @@ function widget_instance_theme_suggestions_widget_instance(array $variables) { return $suggestions; } /** * Implements hook_options_list_alter(). */ function widget_instance_options_list_alter(array &$options, array $context) { $field_definition = $context['fieldDefinition'] ?? NULL; if (!$field_definition instanceof FieldStorageDefinitionInterface) { return; } if ($field_definition->getType() !== 'entity_reference') { return; } if ($field_definition->getSetting('target_type') !== 'widget_type') { return; } $widget_type_ids = array_keys($options); $widget_types = \Drupal::entityTypeManager() ->getStorage('widget_type') ->loadMultiple($widget_type_ids); $options = array_reduce( $widget_types, static function (array $carry, WidgetTypeInterface $widget_type): array { $registry_source = $widget_type->widget_registry_source->entity ?? NULL; $option_group = (string) new TranslatableMarkup('Other'); if ($registry_source instanceof EntityInterface) { $option_group = $registry_source->label(); } $carry[$option_group][$widget_type->id()] = $widget_type->label(); return $carry; }, [] ); // Sort option groups. ksort($options); // Sort options within groups. array_walk($options, static function (array &$option_group): void { sort($option_group); }); } Loading
widget_instance.module +42 −0 Original line number Diff line number Diff line Loading @@ -5,8 +5,12 @@ * Provides a widget instance entity type. */ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\Render\Element; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\widget_instance\WidgetInstanceInterface; use Drupal\widget_type\WidgetTypeInterface; /** * Implements hook_theme(). Loading Loading @@ -69,3 +73,41 @@ function widget_instance_theme_suggestions_widget_instance(array $variables) { return $suggestions; } /** * Implements hook_options_list_alter(). */ function widget_instance_options_list_alter(array &$options, array $context) { $field_definition = $context['fieldDefinition'] ?? NULL; if (!$field_definition instanceof FieldStorageDefinitionInterface) { return; } if ($field_definition->getType() !== 'entity_reference') { return; } if ($field_definition->getSetting('target_type') !== 'widget_type') { return; } $widget_type_ids = array_keys($options); $widget_types = \Drupal::entityTypeManager() ->getStorage('widget_type') ->loadMultiple($widget_type_ids); $options = array_reduce( $widget_types, static function (array $carry, WidgetTypeInterface $widget_type): array { $registry_source = $widget_type->widget_registry_source->entity ?? NULL; $option_group = (string) new TranslatableMarkup('Other'); if ($registry_source instanceof EntityInterface) { $option_group = $registry_source->label(); } $carry[$option_group][$widget_type->id()] = $widget_type->label(); return $carry; }, [] ); // Sort option groups. ksort($options); // Sort options within groups. array_walk($options, static function (array &$option_group): void { sort($option_group); }); }