Skip to content
Snippets Groups Projects
Commit fc35820b authored by arousseau's avatar arousseau
Browse files

Added OptionsProviderInterface implementation #3474619

parent 1074c4e4
No related branches found
No related tags found
1 merge request!23Added OptionsProviderInterface implementation #3474619
Pipeline #284255 passed
......@@ -6,8 +6,11 @@ use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\TypedData\DataDefinition;
use Drupal\Core\TypedData\OptionsProviderInterface;
use Drupal\jsonapi_reference\JsonApiClientInterface;
/**
* Plugin implementation of the 'typed_resource_object' field type.
......@@ -21,7 +24,14 @@ use Drupal\Core\TypedData\DataDefinition;
* default_widget = "typed_resource_object_autocomplete"
* )
*/
class TypedResourceObjectItem extends FieldItemBase {
class TypedResourceObjectItem extends FieldItemBase implements OptionsProviderInterface {
/**
* The JSON:API client service.
*
* @var \Drupal\jsonapi_reference\JsonApiClientInterface
*/
protected $client;
/**
* {@inheritdoc}
......@@ -89,9 +99,7 @@ class TypedResourceObjectItem extends FieldItemBase {
public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data): array {
$elements = [];
/** @var \Drupal\jsonapi_reference\JsonApiClientInterface $client */
$client = \Drupal::service('jsonapi_reference.jsonapi_client');
$types = $client->listResourceObjectTypes();
$types = $this->client()->listResourceObjectTypes();
$elements['resource_object_type'] = [
'#type' => 'select',
......@@ -124,6 +132,19 @@ class TypedResourceObjectItem extends FieldItemBase {
return $value === NULL || $value === '';
}
/**
* Gets the JSON:API client service.
*
* @return \Drupal\jsonapi_reference\JsonApiClientInterface
*/
protected function client(): JsonApiClientInterface {
if (!isset($this->client)) {
$this->client = \Drupal::service('jsonapi_reference.jsonapi_client');
}
return $this->client;
}
/**
* Automatically cast field to a string.
*
......@@ -138,4 +159,43 @@ class TypedResourceObjectItem extends FieldItemBase {
return $this->get('value')->getValue();
}
/**
* {@inheritdoc}
*/
public function getPossibleValues(?AccountInterface $account = NULL): array {
return $this->getSettableValues($account);
}
/**
* {@inheritdoc}
*/
public function getPossibleOptions(?AccountInterface $account = NULL): array {
return $this->getSettableOptions($account);
}
/**
* {@inheritdoc}
*/
public function getSettableValues(?AccountInterface $account = NULL): array {
return array_keys($this->getSettableOptions($account));
}
/**
* {@inheritdoc}
*/
public function getSettableOptions(?AccountInterface $account = NULL): array {
$options = $this->client()->search(
$this->getSetting('resource_object_type'),
$this->getSetting('title_attribute'),
NULL
);
$return = [];
foreach ($options as $option) {
$return[$option[1]] = $option[0];
}
return $return;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment