Extending Member Data Structures in Nikcio.UHeadless
Nikcio.UHeadless provides flexibility to extend and replace member data structures to accommodate your specific needs. This documentation outlines three examples of how you can extend the member data structures.
Example 1: Simple Member Model
- Create your own member model by inheriting from
BasicMember
:
using Nikcio.UHeadless.Base.Basics.Models;using Nikcio.UHeadless.Base.Properties.Factories;using Nikcio.UHeadless.Members.Basics.Models;using Nikcio.UHeadless.Members.Commands;
public class MyMember : BasicMember{ public string MyCustomValue { get; set; }
public MyMember(CreateMember createMember, IPropertyFactory<BasicProperty> propertyFactory) : base(createMember, propertyFactory) { MyCustomValue = "Custom Value"; }}
- Extend the query where you want the model to be present. In this example, we extend the
MembersAll
query:
using Nikcio.UHeadless.Members.Queries;
public class MyMembersAllQuery : MembersAllQuery<MyMember>{}
- Register the query in Nikcio.UHeadless:
.AddUHeadless(new(){ UHeadlessGraphQLOptions = new() { GraphQLExtensions = (IRequestExecutorBuilder builder) => { builder.UseMemberQueries(); // Use this from v4.1.0+ (Only add one) builder.AddTypeExtension<MyMembersAllQuery>(); return builder; }, },})
- Open
/graphql
and observe your new model for theMembersAll
query.
Example 2: Extended Member Model with Custom Property
- Create your property model by inheriting from
BasicProperty
:
using Nikcio.UHeadless.Base.Basics.Models;using Nikcio.UHeadless.Base.Properties.Commands;using Nikcio.UHeadless.Base.Properties.Factories;
public class MyProperty : BasicProperty{ public string MyString { get; set; }
public MyProperty(CreateProperty createProperty, IPropertyValueFactory propertyValueFactory) : base(createProperty, propertyValueFactory) { MyString = "My string"; }}
- Create your member model by inheriting from
BasicMember<TProperty>
:
using Nikcio.UHeadless.Base.Properties.Factories;using Nikcio.UHeadless.Members.Basics.Models;using Nikcio.UHeadless.Members.Commands;
public class MyMemberWithMyProperty : BasicMember<MyProperty>{ public string MyCustomValue { get; set; }
public MyMemberWithMyProperty(CreateMember createMember, IPropertyFactory<MyProperty> propertyFactory) : base(createMember, propertyFactory) { MyCustomValue = "Custom Value"; }}
- Extend the query where you want the model to be present. In this example, we extend the
MembersAll
query:
using Nikcio.UHeadless.Members.Queries;
public class MyMembersAllQueryWithMyProperty : MembersAllQuery<MyMemberWithMyProperty>{}
- Register the query in Nikcio.UHeadless:
.AddUHeadless(new(){ UHeadlessGraphQLOptions = new() { GraphQLExtensions = (IRequestExecutorBuilder builder) => { builder.UseMemberQueries(); // Use this from v4.1.0+ (Only add one) builder.AddTypeExtension<MyMembersAllQueryWithMyProperty>(); return builder; }, },})
- Open
/graphql
and observe your new model for theMembersAll
query.
Example 3: Creating Member Model from Scratch
- Create your own member model by inheriting from
Member<TProperty>
:
using System.Collections.Generic;using HotChocolate.Data;using HotChocolate;using Nikcio.UHeadless.Base.Basics.Models;using Nikcio.UHeadless.Base.Properties.Factories;using Nikcio.UHeadless.Members.Commands;using Nikcio.UHeadless.Members.Models;
public class MyMemberFromScratch : Member<BasicProperty>{ public string MyCustomValue { get; set; }
/// <inheritdoc/> [GraphQLDescription("Gets the properties of the element.")] [UseFiltering] public virtual IEnumerable<BasicProperty?>? Properties => Content != null ? PropertyFactory.CreateProperties(Content, Culture, Segment, Fallback) : default;
public MyMemberFromScratch(CreateMember createMember, IPropertyFactory<BasicProperty> propertyFactory) : base(createMember, propertyFactory) { MyCustomValue = "Custom Value"; }}
- Extend the query where you want the model to be present. In this example, we extend the
MembersAll
query:
using Nikcio.UHeadless.Base.Basics.Models;using Nikcio.UHeadless.Members.Queries;
public class MyMembersAllQueryWithMyMemberFromScratch : MembersAllQuery<MyMemberFromScratch>{}
- Register the query in Nikcio.UHeadless:
.AddUHeadless(new(){ UHeadlessGraphQLOptions = new() { GraphQLExtensions = (IRequestExecutorBuilder builder) => { builder.UseMemberQueries(); // Use this from v4.1.0+ (Only add one) builder.AddTypeExtension<MyMembersAllQueryWithMyMemberFromScratch>(); return builder; }, },})
- Open
/graphql
and observe your new model for theMembersAll
query.
These examples demonstrate different ways to extend member data structures in Nikcio.UHeadless. Choose the method that best suits your requirements and customize the models and queries accordingly.
Note: Make sure to include the necessary namespaces and dependencies based on your project structure.