Skip to content

Instantly share code, notes, and snippets.

@joostbroekhuizen
Last active January 17, 2020 15:49
Show Gist options
  • Save joostbroekhuizen/e2c8a00bccf85747e16917fd2ccd4ce5 to your computer and use it in GitHub Desktop.
Save joostbroekhuizen/e2c8a00bccf85747e16917fd2ccd4ce5 to your computer and use it in GitHub Desktop.
Custom Sitecore JSS GraphQL resolver
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json.Linq;
using Sitecore.JavaScriptServices.GraphQL.LayoutService;
using Sitecore.LayoutService.Configuration;
using Sitecore.LayoutService.ItemRendering.ContentsResolvers;
using Sitecore.Mvc.Presentation;
using System;
namespace Custom.Foundation.Content.JavascriptServices.RenderingContentsResolvers
{
/// <summary>
/// Add graphQL query data to the resolver data.
/// </summary>
/// <seealso cref="Sitecore.LayoutService.ItemRendering.ContentsResolvers.RenderingContentsResolver" />
public class BaseGraphQLRenderingContentsResolver : RenderingContentsResolver
{
private readonly IServiceProvider serviceProvider;
public BaseGraphQLRenderingContentsResolver(IServiceProvider serviceProvider)
{
this.serviceProvider = serviceProvider;
}
public override object ResolveContents(Rendering rendering, IRenderingConfiguration renderingConfig)
{
var contents = (JObject)base.ResolveContents(rendering, renderingConfig);
var query = rendering.RenderingItem.InnerItem[Sitecore.JavaScriptServices.Core.FieldIDs.JsonRendering.GraphQLQuery];
if (string.IsNullOrWhiteSpace(query))
{
return contents;
}
var graphqlResolver = ActivatorUtilities.GetServiceOrCreateInstance(serviceProvider, typeof(GraphQLAwareRenderingContentsResolver)) as IRenderingContentsResolver;
contents["additionalData"] = (JObject)graphqlResolver.ResolveContents(rendering, renderingConfig);
return contents;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment