address_suggestion-1.0.3/src/Plugin/Field/FieldWidget/AddressSuggestionWidgetField.php

src/Plugin/Field/FieldWidget/AddressSuggestionWidgetField.php
<?php

namespace Drupal\address_suggestion\Plugin\Field\FieldWidget;

use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;

/**
 * Defines the 'address_suggestion_widget' field widget.
 *
 * @FieldWidget(
 *   id = "address_suggestion_widget",
 *   label = @Translation("Address suggestion"),
 *   field_types = {
 *     "text",
 *     "string"
 *   },
 * )
 */
final class AddressSuggestionWidgetField extends AddressSuggestionWidget implements ContainerFactoryPluginInterface {

  /**
   * {@inheritdoc}
   */
  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state): array {
    $element['value'] = $element + [
      '#type' => 'textfield',
      '#default_value' => $items[$delta]->value ?? NULL,
    ];
    $country = $this->configFactory->get('system.date')->get('country.default');
    $fieldDefinition = $this->fieldDefinition;
    $parameters = [
      'entity_type' => $fieldDefinition->getTargetEntityTypeId(),
      'bundle' => $fieldDefinition->getTargetBundle(),
      'field_name' => $items->getName(),
    ];
    $element["value"]['#attributes']['class'][] = 'address-suggestion-widget';
    $element["value"]['#autocomplete_route_name'] = 'address_suggestion.addresses';
    $element["value"]['#autocomplete_query_parameters'] = ['country' => $country ?: FALSE];
    $element["value"]['#autocomplete_route_parameters'] = $parameters;
    $settings = $this->getSettings();
    $field_name = $this->getSetting('location_field');
    if (!empty($field_name)) {
      $fieldDefinitions = $this->entityFieldManager->getFieldDefinitions($parameters['entity_type'], $parameters['bundle']);
      $settings['type_field'] = $fieldDefinitions[$field_name]?->getType();
      if (!empty($form['#parents'])) {
        $settings['location_field'] .= ']';
      }
    }
    $form['#attached']['drupalSettings']['address_suggestion'] = $settings;
    $form["#attached"]["library"][] = 'address_suggestion/address_suggestion_widget';

    return $element;
  }

}

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

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