BUGFIX: Restore, refactor getByLink plugin

This commit is contained in:
Aaron Carlino 2020-12-08 11:16:52 +13:00
parent 7b960c1537
commit e415d41856
2 changed files with 9 additions and 35 deletions

View File

@ -15,3 +15,7 @@ SilverStripe\GraphQL\Schema\Schema:
admin: admin:
src: src:
- 'silverstripe/cms: _graphql' - 'silverstripe/cms: _graphql'
SilverStripe\Core\Injector\Injector:
SilverStripe\GraphQL\Schema\Registry\PluginRegistry:
constructor:
getByLink: '%$SilverStripe\CMS\GraphQL\LinkablePlugin'

View File

@ -53,45 +53,15 @@ class LinkablePlugin implements ModelQueryPlugin
return; return;
} }
Schema::invariant( Schema::invariant(
$query->isList(), !$query->isList(),
'Plugin %s only applies to queries that return lists. Query "%s" does not', 'Plugin %s cannot be applied to queries that return lists. Query "%s" is a list',
static::getIdentifier(), static::getIdentifier(),
$query->getName() $query->getName()
); );
$filterPluginID = QueryFilter::singleton()->getIdentifier();
$fieldName = $this->config()->get('field_name'); $fieldName = $this->config()->get('field_name');
if ($query->hasPlugin($filterPluginID)) { $query->addArg($fieldName, 'String');
$args = $query->getArgs(); $query->addResolverAfterware([static::class, 'applyLinkFilter']);
$filterArg = null;
foreach ($args as $arg) {
if ($arg->getName() === QueryFilter::config()->get('field_name')) {
$filterArg = $arg;
break;
}
}
Schema::invariant(
$filterArg,
'Plugin "%s" was applied but the "%s" plugin has not run yet. Make sure it is set to after: %s',
$this->getIdentifier(),
$filterPluginID,
$filterPluginID
);
$inputTypeName = $filterArg->getType();
$inputType = $schema->getType($inputTypeName);
Schema::invariant(
$inputType,
'Input type "%s" is not in the schema but the %s plugin is applied',
$inputTypeName,
$filterPluginID
);
$inputType->addField($fieldName, 'String');
$query->addResolverAfterware([static::class, 'applyLinkFilter']);
} else {
$query->addArg($fieldName, 'String');
$query->addResolverAfterware([static::class, 'applyLinkFilter']);
}
} }
/** /**