Custom Editor UI
var dataType = new DataTypeEntity
{
Name = "MyCustomField",
Nullable = true,
ValidationExpression = "",
BuiltIn = false,
DefinitionName = "CustomCriterionField01",
};/// <summary>
/// Class containing setup of a new Custom Criterion Definition
/// with custom UI components.
/// </summary>
public static class CustomCriterionCustomUiComponents
{
private const string CUSTOM_EDITOR01 = "CustomCriterionField01";
private const string CUSTOM_EDITOR02 = "CustomCriterionField02";
// The id of the definition type to map to in your database
private const int DEFINITION_TYPE_ID = 5434834;
/// <summary>
/// Method for registering a new criterion definition with custom UI components.
/// </summary>
public static IUcommerceBuilder AddCustomEditor(this IUcommerceBuilder builder)
{
builder.Services
.AddHostedService<SetupCustomCriterionUsingCustomUiComponents>();
builder.AddCustomComponentWithPath(
CUSTOM_EDITOR01,
$"{CUSTOM_EDITOR01} Header",
"result-component",
"webComponentSample.js");
builder.AddCustomComponentWithPath(
CUSTOM_EDITOR02,
$"{CUSTOM_EDITOR02} Header",
"result-component",
"webComponentSample.js");
builder.AddCustomComponentWithPath(
CUSTOM_EDITOR02,
$"{CUSTOM_EDITOR02} second Header",
"result-component",
"webComponentSample.js");
return builder;
}
public class SetupCustomCriterionUsingCustomUiComponents : BackgroundService
{
private readonly IServiceProvider _serviceProvider;
public SetupCustomCriterionUsingCustomUiComponents(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
await using var asyncScope = _serviceProvider.CreateAsyncScope();
var dbContext = asyncScope.ServiceProvider
.GetRequiredService<UcommerceDbContext>();
// Guard to ensure code is only run once
if (dbContext.Set<DefinitionEntity>()
.FirstOrDefault(x => x.Name == "Custom Criterion Definition") is not null)
{
return;
}
// Set up data using dbContext
var firstDataType = new DataTypeEntity
{
Name = "First Custom Editor Type",
Nullable = true,
ValidationExpression = "",
BuiltIn = false,
DefinitionName = CUSTOM_EDITOR01,
};
// Set up data using dbContext
var secondDataType = new DataTypeEntity
{
Name = "Second Custom Editor Type",
Nullable = true,
ValidationExpression = "",
BuiltIn = false,
DefinitionName = CUSTOM_EDITOR02
};
dbContext.Add(firstDataType);
dbContext.Add(secondDataType);
var defFields = new List<DefinitionFieldEntity>();
defFields.Add(new DefinitionFieldEntity
{
Name = "First Custom Field",
DefaultValue = "",
DataType = firstDataType,
DisplayOnSite = true,
RenderInEditor = true
});
defFields.Add(new DefinitionFieldEntity
{
Name = "Second Custom Field",
DefaultValue = "",
DataType = secondDataType,
DisplayOnSite = true,
RenderInEditor = true
});
dbContext.Set<DefinitionEntity>()
.Add(new DefinitionEntity
{
BuiltIn = false,
Description = "Custom Criterion Definition Description",
Name = "Custom Criterion Definition",
DefinitionTypeId = DEFINITION_TYPE_ID,
DefinitionFields = defFields
});
await dbContext.SaveChangesAsync(stoppingToken);
}
}
}Last updated