public function search(
        CriteriaCollectionInterface $criteriaCollection
    ): ResultCollection {
        $previousCriteria = $criteriaCollection;
        $previousResults = null;
        $result = new ResultCollection();

        /** @var CellInterface $cell */
        foreach ($this->cellCollection as $name => $cell) {
            if ($cell->getTransformer()->skip($previousResults)) {
                continue;
            }

            $previousResults = $cell->getSearcher()->search($previousCriteria);
            $previousCriteria = $this->getNewCriteria(
                $cell,
                $previousCriteria,
                $previousResults
            );

            $result->addNamedItem((string) $name, $previousResults);
        }

        return $result;
    }