diff --git a/zero.Core/Constants.cs b/zero.Core/Constants.cs index 709cd8af..1382a6fb 100644 --- a/zero.Core/Constants.cs +++ b/zero.Core/Constants.cs @@ -4,6 +4,11 @@ { public const string ErrorFieldNone = "__zero_no_field"; + public static class Tabs + { + public const string General = "general"; + } + public static class Auth { public const string Scheme = "zeroCookies"; diff --git a/zero.Core/Renderer/AbstractRenderer.cs b/zero.Core/Renderer/AbstractRenderer.cs new file mode 100644 index 00000000..a98b9adf --- /dev/null +++ b/zero.Core/Renderer/AbstractRenderer.cs @@ -0,0 +1,35 @@ +using FluentValidation; +using System; +using System.Linq.Expressions; + +namespace zero.Core.Renderer +{ + public abstract class AbstractRenderer : IRenderer + { + protected string LabelTemplate = null; + + protected string DescriptionTemplate = null; + + 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; + } + + protected virtual IRenderer Tab(string name, Action builder) + { + return null; + } + + protected virtual IRenderer Box(string name, string description, Action builder) + { + return null; + } + } +} diff --git a/zero.Core/Renderer/ConstructorField.cs b/zero.Core/Renderer/ConstructorField.cs new file mode 100644 index 00000000..551df5fc --- /dev/null +++ b/zero.Core/Renderer/ConstructorField.cs @@ -0,0 +1,15 @@ +namespace zero.Core.Renderer +{ + public class ConstructorField + { + public string Name { get; set; } + + public string Alias { get; set; } + + public ConstructorField(string alias, string name) + { + Alias = alias; + Name = name; + } + } +} diff --git a/zero.Core/Renderer/ConstructorTab.cs b/zero.Core/Renderer/ConstructorTab.cs new file mode 100644 index 00000000..9dd70bbc --- /dev/null +++ b/zero.Core/Renderer/ConstructorTab.cs @@ -0,0 +1,15 @@ +namespace zero.Core.Renderer +{ + public class ConstructorTab + { + public string Name { get; set; } + + public string Alias { get; set; } + + public ConstructorTab(string alias, string name) + { + Alias = alias; + Name = name; + } + } +} diff --git a/zero.Core/Renderer/IRenderer.cs b/zero.Core/Renderer/IRenderer.cs new file mode 100644 index 00000000..a39aca92 --- /dev/null +++ b/zero.Core/Renderer/IRenderer.cs @@ -0,0 +1,7 @@ +namespace zero.Core.Renderer +{ + public interface IRenderer + { + + } +} diff --git a/zero.Core/Renderer/IRendererFieldBuilder.cs b/zero.Core/Renderer/IRendererFieldBuilder.cs new file mode 100644 index 00000000..a6ef2320 --- /dev/null +++ b/zero.Core/Renderer/IRendererFieldBuilder.cs @@ -0,0 +1,25 @@ +using System; + +namespace zero.Core.Renderer +{ + public interface IRendererFieldBuilder + { + IRendererFieldBuilder Required(); + + IRendererFieldBuilder Text(); + + IRendererFieldBuilder Textarea(); + + IRendererFieldBuilder Rte(); + + IRendererFieldBuilder IconPicker(); + + IRendererFieldBuilder Toggle(); + + IRendererFieldBuilder State(Action optionsBuilder = null); + + IRendererFieldBuilder Media(Action optionsBuilder = null); + + IRendererFieldBuilder Custom(string path, Func optionsBuilder = null); + } +} diff --git a/zero.Core/Renderer/IRendererOptions.cs b/zero.Core/Renderer/IRendererOptions.cs new file mode 100644 index 00000000..8b0545dd --- /dev/null +++ b/zero.Core/Renderer/IRendererOptions.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace zero.Core.Renderer +{ + public interface IRendererOptions + { + string ComponentPath { get; set; } + + IList Tabs { get; set; } + } +} diff --git a/zero.Core/Renderer/Options/MediaOptions.cs b/zero.Core/Renderer/Options/MediaOptions.cs new file mode 100644 index 00000000..993c0cff --- /dev/null +++ b/zero.Core/Renderer/Options/MediaOptions.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace zero.Core.Renderer +{ + public class MediaOptions + { + public MediaOptionsType Type { get; set; } + } +} diff --git a/zero.Core/Renderer/Options/MediaOptionsType.cs b/zero.Core/Renderer/Options/MediaOptionsType.cs new file mode 100644 index 00000000..702f40f4 --- /dev/null +++ b/zero.Core/Renderer/Options/MediaOptionsType.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace zero.Core.Renderer +{ + public enum MediaOptionsType + { + All, + Image, + Video + } +} diff --git a/zero.Core/Renderer/Options/StateOptions.cs b/zero.Core/Renderer/Options/StateOptions.cs new file mode 100644 index 00000000..7e6f7bef --- /dev/null +++ b/zero.Core/Renderer/Options/StateOptions.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace zero.Core.Renderer +{ + public class StateOptions + { + public void Add(string label, object value) { } + } +} diff --git a/zero.TestData/Lists/TeamMemberRenderer.cs b/zero.TestData/Lists/TeamMemberRenderer.cs new file mode 100644 index 00000000..4faca6a2 --- /dev/null +++ b/zero.TestData/Lists/TeamMemberRenderer.cs @@ -0,0 +1,53 @@ +using FluentValidation; +using zero.Core.Renderer; + +namespace zero.TestData.Lists +{ + public class TeamMemberRenderer : AbstractRenderer + { + public TeamMemberRenderer() + { + LabelTemplate = "@team.fields.{0}"; + DescriptionTemplate = "@team.fields.{0}_text"; + + Validator = new TeamMemberValidator(); + + Field(x => x.Name, required: true).Text(); + + Tab("@team.tab.extras", () => + { + 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(); + }); + + Tab("@team.tab.permissions", () => + { + 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"); + }); + }); + }); + } + } + + + public class TeamMemberValidator : AbstractValidator + { + public TeamMemberValidator() + { + + } + } +} diff --git a/zero.Web/App/pages/lists/lists.vue b/zero.Web/App/pages/lists/lists.vue index 9e116657..b99ace60 100644 --- a/zero.Web/App/pages/lists/lists.vue +++ b/zero.Web/App/pages/lists/lists.vue @@ -58,15 +58,6 @@ { this.lists = response; }); - //this.tableConfig = { - // labelPrefix: '@lists.fields.', - // allowOrder: false, - // search: null, - // columns: { - // name: 'text' - // }, - // items: ListsApi.getCollections - //}; },