/**
  * {@inheritDoc}
  */
 public function visitResult(DatagridConfiguration $config, ResultsObject $result)
 {
     $rows = $result->offsetGetByPath('[data]');
     $rows = is_array($rows) ? $rows : [];
     $rows = array_map(function (ResultRecordInterface $record) {
         if ($rootEntity = $record->getRootEntity()) {
             return $rootEntity;
         }
         $entityName = $record->getValue('entityName');
         $recordId = $record->getValue('recordId');
         if ($entityName && $recordId) {
             return new ResultItem($this->em, $entityName, $recordId, null, null, null, $this->mapper->getEntityConfig($entityName));
         }
         return null;
     }, $rows);
     $entities = $this->resultFormatter->getResultEntities($rows);
     $resultRows = [];
     /** @var ResultItem $item */
     foreach ($rows as $item) {
         $entityName = $item->getEntityName();
         $entityId = $item->getRecordId();
         if (!isset($entities[$entityName][$entityId])) {
             continue;
         }
         $entity = $entities[$entityName][$entityId];
         $this->dispatcher->dispatch(PrepareResultItemEvent::EVENT_NAME, new PrepareResultItemEvent($item, $entity));
         $resultRows[] = new ResultRecord(['entity' => $entity, 'indexer_item' => $item]);
     }
     // set results
     $result->offsetSet('data', $resultRows);
 }
 /**
  * {@inheritdoc}
  */
 public function visitResult(DatagridConfiguration $config, ResultsObject $result)
 {
     $rows = $result->offsetGetByPath('[data]');
     if (!is_array($rows)) {
         throw new UnexpectedTypeException($rows, 'array');
     }
     $mappingConfig = $this->mapper->getMappingConfig();
     $rows = array_map(function (ResultRecordInterface $record) use($mappingConfig) {
         $entityClass = $record->getValue('entityName');
         $entityId = $record->getValue('recordId');
         $entityConfig = array_key_exists($entityClass, $mappingConfig) ? $entityConfig = $this->mapper->getEntityConfig($entityClass) : [];
         return new ResultItem($this->em, $entityClass, $entityId, null, null, $entityConfig);
     }, $rows);
     $entities = $this->resultFormatter->getResultEntities($rows);
     $resultRows = [];
     /** @var ResultItem $item */
     foreach ($rows as $item) {
         $entityClass = $item->getEntityName();
         $entityId = $item->getRecordId();
         $entity = $entities[$entityClass][$entityId];
         $this->dispatcher->dispatch(PrepareResultItemEvent::EVENT_NAME, new PrepareResultItemEvent($item, $entity));
         $resultRows[] = new ResultRecord(['entity' => $entity, 'indexer_item' => $item]);
     }
     $result->offsetSet('data', $resultRows);
 }
 public function testGetOrderedResultEntities()
 {
     $this->prepareEntityManager();
     $this->prepareStubEntities();
     /** @var $indexer Indexer */
     $indexer = $this->getMock('Oro\\Bundle\\SearchBundle\\Engine\\Indexer', array(), array(), '', false);
     $indexerRows = $this->getIndexerRows();
     $resultFormatter = new ResultFormatter($this->entityManager, $indexer);
     $actualResult = $resultFormatter->getOrderedResultEntities($indexerRows);
     $expectedResult = $this->getOrderedEntities();
     $this->assertEquals($expectedResult, $actualResult);
 }