From 1fdb9535d2992ae8d5852c1d2e7a896bf3db4b3d Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Wed, 29 Apr 2020 16:02:01 +0200 Subject: [PATCH] update api --- zero.Core/Renderer/AbstractRenderer.cs | 5 -- zero.Core/Renderer/IRendererFieldBuilder.cs | 9 +++- zero.Core/Renderer/IRendererOptions.cs | 2 - .../Renderer/Options/AbstractFieldOptions.cs | 9 ++++ zero.Core/Renderer/Options/MediaOptions.cs | 2 +- zero.Core/Renderer/Options/NestedOptions.cs | 13 +++++ zero.Core/Renderer/Options/StateOptions.cs | 2 +- zero.Core/Renderer/Options/TextOptions.cs | 9 ++++ zero.TestData/Lists/TeamMember.cs | 17 ++++++- zero.TestData/Lists/TeamMemberRenderer.cs | 48 +++++++++---------- 10 files changed, 80 insertions(+), 36 deletions(-) create mode 100644 zero.Core/Renderer/Options/AbstractFieldOptions.cs create mode 100644 zero.Core/Renderer/Options/NestedOptions.cs create mode 100644 zero.Core/Renderer/Options/TextOptions.cs diff --git a/zero.Core/Renderer/AbstractRenderer.cs b/zero.Core/Renderer/AbstractRenderer.cs index a98b9adf..34803086 100644 --- a/zero.Core/Renderer/AbstractRenderer.cs +++ b/zero.Core/Renderer/AbstractRenderer.cs @@ -12,11 +12,6 @@ namespace zero.Core.Renderer protected IValidator Validator = null; - protected virtual IRendererFieldBuilder Field(ConstructorField field) - { - return null; - } - protected virtual IRendererFieldBuilder Field(Expression> mapExpression, string label = null, string description = null, bool required = false) { return null; diff --git a/zero.Core/Renderer/IRendererFieldBuilder.cs b/zero.Core/Renderer/IRendererFieldBuilder.cs index a6ef2320..b1d357ed 100644 --- a/zero.Core/Renderer/IRendererFieldBuilder.cs +++ b/zero.Core/Renderer/IRendererFieldBuilder.cs @@ -6,9 +6,9 @@ namespace zero.Core.Renderer { IRendererFieldBuilder Required(); - IRendererFieldBuilder Text(); + IRendererFieldBuilder Text(Action optionsBuilder = null); - IRendererFieldBuilder Textarea(); + IRendererFieldBuilder Textarea(Action optionsBuilder = null); IRendererFieldBuilder Rte(); @@ -20,6 +20,11 @@ namespace zero.Core.Renderer IRendererFieldBuilder Media(Action optionsBuilder = null); + IRendererFieldBuilder Output(); + + IRendererFieldBuilder Nested(IRenderer renderer, Action optionsBuilder = null); + IRendererFieldBuilder Custom(string path, Func optionsBuilder = null); + } } diff --git a/zero.Core/Renderer/IRendererOptions.cs b/zero.Core/Renderer/IRendererOptions.cs index 8b0545dd..26839050 100644 --- a/zero.Core/Renderer/IRendererOptions.cs +++ b/zero.Core/Renderer/IRendererOptions.cs @@ -5,7 +5,5 @@ namespace zero.Core.Renderer public interface IRendererOptions { string ComponentPath { get; set; } - - IList Tabs { get; set; } } } diff --git a/zero.Core/Renderer/Options/AbstractFieldOptions.cs b/zero.Core/Renderer/Options/AbstractFieldOptions.cs new file mode 100644 index 00000000..2ce2383e --- /dev/null +++ b/zero.Core/Renderer/Options/AbstractFieldOptions.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace zero.Core.Renderer +{ + public abstract class AbstractFieldOptions + { + public List Classes { get; set; } = new List(); + } +} diff --git a/zero.Core/Renderer/Options/MediaOptions.cs b/zero.Core/Renderer/Options/MediaOptions.cs index 993c0cff..e3dc7f52 100644 --- a/zero.Core/Renderer/Options/MediaOptions.cs +++ b/zero.Core/Renderer/Options/MediaOptions.cs @@ -4,7 +4,7 @@ using System.Text; namespace zero.Core.Renderer { - public class MediaOptions + public class MediaOptions : AbstractFieldOptions { public MediaOptionsType Type { get; set; } } diff --git a/zero.Core/Renderer/Options/NestedOptions.cs b/zero.Core/Renderer/Options/NestedOptions.cs new file mode 100644 index 00000000..646449cb --- /dev/null +++ b/zero.Core/Renderer/Options/NestedOptions.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace zero.Core.Renderer +{ + public class NestedOptions : AbstractFieldOptions + { + public int Max { get; set; } + + public string AddLabel { get; set; } + } +} diff --git a/zero.Core/Renderer/Options/StateOptions.cs b/zero.Core/Renderer/Options/StateOptions.cs index 7e6f7bef..9d92bbfd 100644 --- a/zero.Core/Renderer/Options/StateOptions.cs +++ b/zero.Core/Renderer/Options/StateOptions.cs @@ -4,7 +4,7 @@ using System.Text; namespace zero.Core.Renderer { - public class StateOptions + public class StateOptions : AbstractFieldOptions { public void Add(string label, object value) { } } diff --git a/zero.Core/Renderer/Options/TextOptions.cs b/zero.Core/Renderer/Options/TextOptions.cs new file mode 100644 index 00000000..14e6e084 --- /dev/null +++ b/zero.Core/Renderer/Options/TextOptions.cs @@ -0,0 +1,9 @@ +namespace zero.Core.Renderer +{ + public class TextOptions : AbstractFieldOptions + { + public int MaxLength { get; set; } + + public string Placeholder { get; set; } + } +} diff --git a/zero.TestData/Lists/TeamMember.cs b/zero.TestData/Lists/TeamMember.cs index 7c23f3ea..24c8db8b 100644 --- a/zero.TestData/Lists/TeamMember.cs +++ b/zero.TestData/Lists/TeamMember.cs @@ -1,4 +1,5 @@ -using zero.Core.Entities; +using System.Collections.Generic; +using zero.Core.Entities; namespace zero.TestData { @@ -11,5 +12,19 @@ namespace zero.TestData public string Email { get; set; } public string VideoUri { get; set; } + + public List Addresses { get; set; } = new List(); + } + + + public class TeamMemberAddress + { + public string City { get; set; } + + public string Street { get; set; } + + public string No { get; set; } + + public string CountryId { get; set; } } } diff --git a/zero.TestData/Lists/TeamMemberRenderer.cs b/zero.TestData/Lists/TeamMemberRenderer.cs index 4faca6a2..28a9b1fd 100644 --- a/zero.TestData/Lists/TeamMemberRenderer.cs +++ b/zero.TestData/Lists/TeamMemberRenderer.cs @@ -12,32 +12,32 @@ namespace zero.TestData.Lists Validator = new TeamMemberValidator(); - Field(x => x.Name, required: true).Text(); - - Tab("@team.tab.extras", () => + Field(x => x.Name, required: true).Text(opts => opts.Placeholder = "Enter your name"); + Field(x => x.Position, required: true).Text(); + Field(x => x.Image).Media(opts => opts.Type = MediaOptionsType.Image); + Field(x => x.Email, required: true).Text(opts => opts.Classes.Add("email-field")); + Field(x => x.VideoUri).Text(); + Field(x => x.Addresses, required: true).Nested(new AddressRenderer(), opts => { - Field(x => x.Position, required: true).Text(); - Field(x => x.Image).Media(opts => - { - opts.Type = MediaOptionsType.Image; - }); - Field(x => x.Email, required: true).Text(); - Field(x => x.VideoUri).Text(); + opts.Max = 5; + opts.AddLabel = "Add address"; }); + } + } - Tab("@team.tab.permissions", () => + + public class AddressRenderer : AbstractRenderer + { + public AddressRenderer() + { + LabelTemplate = "@team.fields.address.{0}"; + + Field(x => x.City, required: true).Text(); + Field(x => x.Street).Text(); + Field(x => x.No).Text(opts => opts.Classes.Add("is-short")); + Field(x => x.CountryId).Custom("plugins/countryPicker/countrypicker", () => new { - Box("Acess to sections", null, () => - { - Field(x => x.Alias).Toggle(); - Field(x => x.AppId).Toggle(); - Field(x => x.CreatedDate).State(opts => - { - opts.Add("None", "none"); - opts.Add("View", "view"); - opts.Add("Edit", "edit"); - }); - }); + startId = 107 }); } } @@ -47,7 +47,7 @@ namespace zero.TestData.Lists { public TeamMemberValidator() { - + RuleFor(x => x.Name).NotEmpty().MaximumLength(120); } } -} +} \ No newline at end of file