<?php
namespace Drupal\materio_home\Plugin\Field\FieldType;

use Drupal\Core\Entity\FieldableEntityInterface;
use Drupal\Core\Field\EntityReferenceFieldItemList;
use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\TypedData\TypedDataInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\TypedData\ComputedItemListTrait;

// https://www.drupal.org/node/2112677
// https://www.cornel.co/article/entity-reference-computed-field-example-drupal
// https://www.caxy.com/blog/drupal-custom-form-and-computed-fields

class ComputedArticlesReferences extends EntityReferenceFieldItemList
{
  use ComputedItemListTrait;
  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * {@inheritdoc}
   */
  public function __construct(BaseFieldDefinition $definition, $name, TypedDataInterface $parent) {
    parent::__construct($definition, $name, $parent);
    $this->entityTypeManager = \Drupal::entityTypeManager();
  }

  /**
   * Compute the values.
   */
  protected function computeValue() {
    $query = \Drupal::entityQuery('node')
        ->condition('status', 1)
        ->sort('field_date', 'DESC')
        ->sort('created', 'DESC')
        ->exists('field_visuel')
        ->range(0,12)
        ->accessCheck()
        ->condition('type', 'article');
    $nids = $query->execute();
    $i = 0;
    foreach ($nids as $nid) {
      $this->list[$i] = $this->createItem($i, $nid);
      $i++;
    }
  }

}
