Skip to content
Snippets Groups Projects
Commit c93f5664 authored by Kostia Bohach's avatar Kostia Bohach
Browse files

Merge branch '3423393-develop-a-select' into '1.0.x'

Issue #3423393: Develop a select and Select2 field widget for boolean fields

See merge request !3
parents 7d549c6d b7ed3d9d
No related branches found
No related tags found
No related merge requests found
Pipeline #102413 passed with warnings
name: Field Addons Select2
type: module
description: 'Additional Field Features for Select2 module'
package: Fields
core_version_requirement: ^9.2 || ^10
dependencies:
- select2:select2
- field_addons:field_addons
<?php
namespace Drupal\field_addons_select2\Plugin\Field\FieldWidget;
use Drupal\field_addons\Plugin\Field\FieldWidget\BooleanFieldSelectWidgetBase;
/**
* Plugin implementation of the 'boolean_select2_list' widget.
*
* @FieldWidget(
* id = "field_addons_select2_bool",
* label = @Translation("Select2 list"),
* field_types = {
* "boolean"
* },
* multiple_values = FALSE
* )
*/
class BooleanFieldSelect2Widget extends BooleanFieldSelectWidgetBase {
/**
* {@inheritdoc}
*/
protected function getFieldType() {
return 'select2';
}
}
<?php
namespace Drupal\field_addons\Plugin\Field\FieldWidget;
/**
* Plugin implementation of the 'boolean_select_list' widget.
*
* @FieldWidget(
* id = "field_addons_select_bool",
* label = @Translation("Select list"),
* field_types = {
* "boolean"
* },
* multiple_values = FALSE
* )
*/
class BooleanFieldSelectWidget extends BooleanFieldSelectWidgetBase {
/**
* {@inheritdoc}
*/
protected function getFieldType() {
return 'select';
}
}
<?php
namespace Drupal\field_addons\Plugin\Field\FieldWidget;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsWidgetBase;
use Drupal\Core\Form\FormStateInterface;
/**
* Base class for the boolean select widgets.
*
* Field widget could be used for the boolean fields and display it as a
* select list.
*/
abstract class BooleanFieldSelectWidgetBase extends OptionsWidgetBase {
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
return [
'empty_option_label' => t('N/A'),
] + parent::defaultSettings();
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$element = [];
$element['empty_option_label'] = [
'#type' => 'textfield',
'#title' => $this->t('Empty option label'),
'#default_value' => $this->getSetting('empty_option_label'),
'#description' => $this->t("Label for the empty select option, which will be displayed if value doesn't selected yet."),
];
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$summary = [];
$summary[] = $this->t('Empty option label: @label', ['@label' => $this->getSetting('empty_option_label')]);
return $summary;
}
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
$options = $this->getOptions($items->getEntity());
$selected = $this->getSelectedOptions($items);
// If required and there is one single option, preselect it.
if ($this->required && count($options) == 1) {
reset($options);
$selected = [key($options)];
}
$element += [
'#type' => $this->getFieldType(),
'#default_value' => $selected,
'#options' => $options,
'#key_column' => $this->column,
'#empty_option' => $this->getSetting('empty_option_label'),
];
$element['#element_validate'][] = [static::class, 'validateElement'];
return $element;
}
/**
* {@inheritdoc}
*/
public static function validateElement(array $element, FormStateInterface $form_state) {
$form_state->setValueForElement($element, [$element['#key_column'] => $element['#value']]);
}
/**
* Field type to display boolean field.
*
* @return string
* Returns field type.
*/
protected function getFieldType() {}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment