#4398 - Added validation to the grid editor, such that columns must be at least as large as the layouts.

This commit is contained in:
Bjarke Berg
2019-02-05 14:52:02 +01:00
parent ea95b4f454
commit 6f9be482be
3 changed files with 66 additions and 8 deletions

View File

@@ -1,4 +1,9 @@
using Umbraco.Core.PropertyEditors;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Newtonsoft.Json;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.PropertyEditors.Validators;
namespace Umbraco.Web.PropertyEditors
{
@@ -6,5 +11,45 @@ namespace Umbraco.Web.PropertyEditors
/// Represents the configuration for the grid value editor.
/// </summary>
public class GridConfigurationEditor : ConfigurationEditor<GridConfiguration>
{ }
{
public GridConfigurationEditor()
{
var items = Fields.First(x => x.Key == "items");
items.Validators.Add(new GridValidator());
}
}
public class GridValidator : IValueValidator
{
public IEnumerable<ValidationResult> Validate(object rawValue, string valueType, object dataTypeConfiguration)
{
if (rawValue == null)
yield break;
var model = JsonConvert.DeserializeObject<GridEditorModel>(rawValue.ToString());
if (model.Templates.Any(t => t.Sections.Sum(s => s.Grid) > model.Columns))
{
yield return new ValidationResult("Columns must be at least the same size as the largest layout", new[] { nameof(model.Columns) });
}
}
}
public class GridEditorModel
{
public GridEditorTemplateModel[] Templates { get; set; }
public int Columns { get; set; }
}
public class GridEditorTemplateModel
{
public GridEditorSectionModel[] Sections { get; set; }
}
public class GridEditorSectionModel
{
public int Grid { get; set; }
}
}