public function GatsbyInstantPreview::buildRelationshipJson in Gatsby Live Preview & Incremental Builds 2.0.x
Same name and namespace in other branches
- 8 modules/gatsby_instantpreview/src/GatsbyInstantPreview.php \Drupal\gatsby_instantpreview\GatsbyInstantPreview::buildRelationshipJson()
Builds an array of entity JSON data based on entity relationships.
1 call to GatsbyInstantPreview::buildRelationshipJson()
- GatsbyInstantPreview::gatsbyPrepareData in modules/
gatsby_instantpreview/ src/ GatsbyInstantPreview.php - Prepares Gatsby Data to send to the preview and build servers.
File
- modules/
gatsby_instantpreview/ src/ GatsbyInstantPreview.php, line 198
Class
- GatsbyInstantPreview
- Defines a class to extend the default preview system with an instant preview.
Namespace
Drupal\gatsby_instantpreviewCode
public function buildRelationshipJson($relationships, &$entity_data, $included_types = []) {
foreach ($relationships as $data) {
if (empty($data['data'])) {
continue;
}
$related_items = $data['data'];
// Check if this is a single value field.
if (!empty($data['data']['type'])) {
$related_items = [
$data['data'],
];
}
foreach ($related_items as $related_data) {
// Add JSON if the entity type is one that should be sent to Gatsby.
$entityType = !empty($related_data['type']) ? explode('--', $related_data['type']) : "";
if (!empty($entityType) && (!$included_types || in_array($entityType[0], $included_types, TRUE))) {
// Skip this entity if it's already been added to the data array.
if (!empty($entity_data[$related_data['id']])) {
continue;
}
$related_entity = $this->entityRepository
->loadEntityByUuid($entityType[0], $related_data['id']);
// Make sure the related entity is a valid entity.
if (empty($related_entity) || !$related_entity instanceof ContentEntityInterface) {
continue;
}
$related_json = $this
->getJson($related_entity);
if (!$related_json) {
continue;
}
$entity_data[$related_data['id']] = $related_json['data'];
// We need to traverse all related entities to get all relevant JSON.
if (!empty($related_json['data']['relationships'])) {
$this
->buildRelationshipJson($related_json['data']['relationships'], $entity_data, $included_types);
}
}
}
}
}