outline-8.x-1.x-dev/modules/outline_graphql/src/Plugin/GraphQL/Schema/OutlineSchema.php
modules/outline_graphql/src/Plugin/GraphQL/Schema/OutlineSchema.php
<?php
namespace Drupal\outline_graphql\Plugin\GraphQL\Schema;
use Drupal\graphql\GraphQL\ResolverBuilder;
use Drupal\graphql\GraphQL\ResolverRegistry;
use Drupal\graphql\GraphQL\ResolverRegistryInterface;
use Drupal\graphql\Plugin\GraphQL\Schema\SdlSchemaPluginBase;
use Drupal\outline_graphql\Wrappers\QueryConnection;
/**
* @Schema(
* id = "outline",
* name = "Outline schema"
* )
*/
class OutlineSchema extends SdlSchemaPluginBase {
/**
* {@inheritdoc}
*/
public function getResolverRegistry() {
$builder = new ResolverBuilder();
$registry = new ResolverRegistry();
$this->addQueryFields($registry, $builder);
$this->addEntryFields($registry, $builder);
$this->addOutlineFields($registry, $builder);
$this->addConnectionFields('OutlineConnection', $registry, $builder);
// Set parent entry mutation.
$registry->addFieldResolver('Mutation', 'setParentEntry',
$builder->produce('set_parent_entry')
->map('eid', $builder->fromArgument('eid'))
->map('parentEid', $builder->fromArgument('parentEid'))
);
// Add entry mutation.
$registry->addFieldResolver('Mutation', 'addEntry',
$builder->produce('add_entry')
->map('parentEid', $builder->fromArgument('parentEid'))
);
// Delete entry mutation.
$registry->addFieldResolver('Mutation', 'deleteEntry',
$builder->produce('delete_entry')
->map('eid', $builder->fromArgument('eid'))
);
// Rename entry mutation.
$registry->addFieldResolver('Mutation', 'renameEntry',
$builder->produce('rename_entry')
->map('eid', $builder->fromArgument('eid'))
->map('newName', $builder->fromArgument('newName'))
);
// Expand entry mutation.
$registry->addFieldResolver('Mutation', 'expandEntry',
$builder->produce('expand_entry')
->map('eid', $builder->fromArgument('eid'))
->map('depth', $builder->fromArgument('depth'))
);
// Collapse entry mutation.
$registry->addFieldResolver('Mutation', 'collapseEntry',
$builder->produce('collapse_entry')
->map('eid', $builder->fromArgument('eid'))
->map('depth', $builder->fromArgument('depth'))
);
return $registry;
}
/**
* @param \Drupal\graphql\GraphQL\ResolverRegistry $registry
* @param \Drupal\graphql\GraphQL\ResolverBuilder $builder
*/
protected function addQueryFields(ResolverRegistry $registry, ResolverBuilder $builder) {
// entry
$registry->addFieldResolver('Query', 'entry',
$builder->produce('entity_load')
->map('type', $builder->fromValue('outline_entry'))
->map('id', $builder->fromArgument('eid'))
);
// outline
$registry->addFieldResolver('Query', 'outline',
$builder->produce('entity_load')
->map('type', $builder->fromValue('outline'))
->map('bundles', $builder->fromValue(['outline']))
->map('id', $builder->fromArgument('oid'))
);
// outlines
$registry->addFieldResolver('Query', 'outlines',
$builder->produce('query_outlines')
->map('offset', $builder->fromArgument('offset'))
->map('limit', $builder->fromArgument('limit'))
);
// serverUuid
$registry->addFieldResolver('Query', 'serverUuid',
$builder->produce('server_uuid')
);
}
/**
* @param \Drupal\graphql\GraphQL\ResolverRegistryInterface $registry
* @param \Drupal\graphql\GraphQL\ResolverBuilder $builder
*/
protected function addEntryFields(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
// eid
$registry->addFieldResolver('Entry', 'eid',
$builder->produce('entity_id')
->map('entity', $builder->fromParent())
);
// uuid
$registry->addFieldResolver('Entry', 'uuid',
$builder->produce('entity_uuid')
->map('entity', $builder->fromParent())
);
// parentEid
$registry->addFieldResolver('Entry', 'parentEid',
$builder->produce('entry_parent_eid')
->map('entity', $builder->fromParent())
);
// parentUuid
$registry->addFieldResolver('Entry', 'parentUuid',
$builder->produce('entry_parent_uuid')
->map('entity', $builder->fromParent())
);
// editFormUrl
$registry->addFieldResolver('Entry', 'editFormUrl',
$builder->produce('edit_form_url')
->map('entity', $builder->fromParent())
);
// referencedEntityType
$registry->addFieldResolver('Entry', 'referencedEntityType',
$builder->produce('referenced_entity_type')
->map('entity', $builder->fromParent())
);
// referencedEntityId
$registry->addFieldResolver('Entry', 'referencedEntityId',
$builder->produce('referenced_entity_id')
->map('entity', $builder->fromParent())
);
// referencedEntityMode
$registry->addFieldResolver('Entry', 'referencedEntityMode',
$builder->produce('referenced_entity_mode')
->map('entity', $builder->fromParent())
);
// referencedEntityDisplay
$registry->addFieldResolver('Entry', 'referencedEntityDisplay',
$builder->produce('referenced_entity_display')
->map('entity', $builder->fromParent())
);
// referencedEntityEditFormUrl
$registry->addFieldResolver('Entry', 'referencedEntityEditFormUrl',
$builder->produce('referenced_entity_edit_form_url')
->map('entity', $builder->fromParent())
);
// referencedEntityUuid
$registry->addFieldResolver('Entry', 'referencedEntityUuid',
$builder->produce('referenced_entity_uuid')
->map('entity', $builder->fromParent())
);
// name
$registry->addFieldResolver('Entry', 'name',
$builder->compose(
$builder->produce('entity_label')
->map('entity', $builder->fromParent())
)
);
// expanded
$registry->addFieldResolver('Entry', 'expanded',
$builder->produce('entry_expanded')
->map('entity', $builder->fromParent())
);
// content
$registry->addFieldResolver('Entry', 'content',
$builder->produce('entry_content')
->map('entity', $builder->fromParent())
);
// rendered
$registry->addFieldResolver('Entry', 'rendered',
$builder->compose(
// $builder->produce('entry_rendered')
// ->map('entity', $builder->fromParent()),
$builder->produce('entity_rendered')
->map('entity', $builder->fromParent())
)
);
// children
$registry->addFieldResolver('Entry', 'children',
$builder->produce('entry_children')
->map('entity', $builder->fromParent())
);
// childCount
$registry->addFieldResolver('Entry', 'childCount',
$builder->produce('entry_child_count')
->map('entity', $builder->fromParent())
);
}
/**
* @param \Drupal\graphql\GraphQL\ResolverRegistry $registry
* @param \Drupal\graphql\GraphQL\ResolverBuilder $builder
*/
protected function addOutlineFields(ResolverRegistry $registry, ResolverBuilder $builder) {
// oid
$registry->addFieldResolver('Outline', 'oid',
$builder->produce('entity_id')
->map('entity', $builder->fromParent())
);
// uuid
$registry->addFieldResolver('Outline', 'uuid',
$builder->produce('entity_uuid')
->map('entity', $builder->fromParent())
);
// name
$registry->addFieldResolver('Outline', 'name',
$builder->compose(
$builder->produce('entity_label')
->map('entity', $builder->fromParent())
)
);
// rootEntry
$registry->addFieldResolver('Outline', 'rootEntry',
$builder->compose(
$builder->produce('root_eid')
->map('entity', $builder->fromParent()),
$builder->produce('entity_load')
->map('type', $builder->fromValue('outline_entry'))
->map('id', $builder->fromParent())
));
// serverUuid
$registry->addFieldResolver('Outline', 'serverUuid',
$builder->compose(
$builder->produce('server_uuid')
->map('entity', $builder->fromParent())
));
}
/**
* @param string $type
* @param \Drupal\graphql\GraphQL\ResolverRegistry $registry
* @param \Drupal\graphql\GraphQL\ResolverBuilder $builder
*/
protected function addConnectionFields($type, ResolverRegistry $registry, ResolverBuilder $builder) {
// total
$registry->addFieldResolver($type, 'total',
$builder->callback(function (QueryConnection $connection) {
return $connection->total();
})
);
// outlines
$registry->addFieldResolver($type, 'outlines',
$builder->callback(function (QueryConnection $connection) {
return $connection->outlines();
})
);
}
public function validateSchema() {
// TODO: Implement validateSchema() method.
}
public function getServer() {
// TODO: Implement getServer() method.
}
}
