public void ConfigureAdmin(IAdminBuilder adminBuilder)
        {
            adminBuilder.Register <Core.Common.DomainTypes.Language, LanguageAdminService>(builder =>
            {
                var gridBuilder = builder.GridBuilder;
                var formBuilder = builder.FormBuilder;

                gridBuilder.Title = "Languages";
                formBuilder.Title = "Language";

                gridBuilder
                .AddKeyField(r => r.CultureCode)
                .AddField(r => r.EnglishName, option => option.DisplayName = "English Name")
                .AddField(r => r.NativeName, option => option.DisplayName  = "Native Name")
                .AddField(r => r.IsActive, option =>
                {
                    option.DisplayName = "Is Active";
                    option.IsTrue      = "Active";
                    option.IsFalse     = "In Active";
                });

                gridBuilder.DisplayFieldAs(c => c.IsActive, LabelType.Badge, c => c.IsActiveBadgeClass);


                formBuilder
                .AddField(l => l.EnglishName, option =>
                {
                    option.DisplayName = "English Name";
                    option.ShowIn      = FormMode.Update;
                    option.IsReadOnly  = true;
                })
                .AddField(l => l.NativeName, option =>
                {
                    option.DisplayName = "Native Name";
                    option.ShowIn      = FormMode.Update;
                    option.IsReadOnly  = true;
                })
                .AddField(l => l.CultureCode, option =>
                {
                    option.DisplayName = "Culture Code";
                    option.ShowIn      = FormMode.Update;
                    option.IsReadOnly  = true;
                })
                .AddSelectField(l => l.SelectedLanguage, null, option =>
                {
                    option.DisplayName = "Select Language";
                    option.ShowIn      = FormMode.Create;
                });

                formBuilder.AddField(l => l.IsActive);

                formBuilder.Property(l => l.IsActive).EnableOn(l => l.CultureCode != "en-US");

                formBuilder.Property(l => l.SelectedLanguage).HasLookup(
                    sp => sp.GetService <LanguageAdminService>().GetAllLanguages(),
                    language => language.CultureCode,
                    language => language.EnglishName);
            });
        }
Beispiel #2
0
        public void ConfigureAdmin(IAdminBuilder adminBuilder)
        {
            adminBuilder.Register <User>(modelBuilder =>
            {
                modelBuilder.FormBuilder
                .AddField(u => u.FirstName).AddInlineField(u => u.LastName);

                modelBuilder.FormBuilder
                .AddFieldSet("General", fieldBuilder =>
                             fieldBuilder.AddField(s => s.FirstName).AddInlineField(s => s.LastName)
                             );
            });
        }
Beispiel #3
0
        public void ConfigureAdmin(IAdminBuilder adminBuilder)
        {
            adminBuilder.Register <Role, SecurityRoleAdminService>(modelBuilderAction: builder =>
            {
                var gridBuilder = builder.GridBuilder;
                var formBuilder = builder.FormBuilder;

                gridBuilder.Title = "Security Roles";
                formBuilder.Title = "Role";

                gridBuilder
                .AddKeyField(r => r.Id)
                .AddField(r => r.Name, option => option.DisplayName = "Role Name");


                formBuilder
                .AddField(l => l.Name, option =>
                {
                    option.DisplayName = "Role Name";
                });
            });
        }
        public void ConfigureAdmin(IAdminBuilder adminBuilder)
        {
            adminBuilder.Register <Employee, EmployeeAdminService>(modelBuilder =>
            {
                modelBuilder.GridBuilder.Title = "Employee";
                modelBuilder.FormBuilder.Title = "Employee Details";

                modelBuilder.GridBuilder
                .AddField(c => c.Name)
                .AddField(c => c.Designation)
                .AddField(c => c.Email)
                .AddField(c => c.Nationality)
                .AddField(c => c.IsActive, option =>
                {
                    option.DisplayName = "Is Active";
                    option.IsTrue      = "Active";
                    option.IsFalse     = "In Active";
                });

                modelBuilder.GridBuilder.DisplayFieldAs(c => c.IsActive, LabelType.Badge, c => c.IsActiveBadgeClass);

                modelBuilder.FormBuilder
                .AddKeyField(c => c.Id)
                .AddField(c => c.Name, option => { option.EnableIn = FormMode.Create; })
                .AddField(c => c.Designation)
                .AddField(c => c.Email, option => option.ValidationType = ValidationType.Email)
                .AddField(c => c.IsActive)
                .AddSelectField(c => c.Nationality);

                modelBuilder.FormBuilder.Property(c => c.Nationality).HasLookup(sp => sp.GetService <EmployeeAdminService>().GetCountries(),
                                                                                ke => ke.Code,
                                                                                de => de.Name);
            });

            adminBuilder.RegisterGrid <Customer, CustomerAdminGridService>(builder =>
            {
                builder.Title = "Customers";

                builder
                .AddKeyField(c => c.Id)
                .AddField(c => c.OrderId)
                .AddField(c => c.Name)
                .AddField(c => c.Email)
                .AddField(c => c.OrderDate)
                .AddField(c => c.OrderStatus)
                .AddField(c => c.ShipDate)
                .AddField(c => c.ShipCountry);

                builder.Property(c => c.ShipCountry).HasLookup(sp => sp.GetService <EmployeeAdminService>().GetCountries(),
                                                               ke => ke.Code,
                                                               de => de.Name);

                builder.Property(c => c.OrderStatus).HasLookup(sp => OrderStatus.OrderStatuses,
                                                               ke => ke.Id,
                                                               de => de.Name);

                builder.DisplayFieldAs(c => c.OrderStatus, LabelType.Badge, c => c.OrderStatusClass);

                builder.AddRowAction("MarkAsDelivered", "Mark As Delivered",
                                     (provider, item) => provider.GetService <CustomerAdminGridService>().MarkDelivered(item));

                builder.HideEditButton();
            });

            adminBuilder.RegisterForm <Guest, EventFormService>(builder =>
            {
                builder
                .AddFieldSet("General", fieldBuilder =>
                {
                    fieldBuilder
                    .AddKeyField(c => c.Id)
                    .AddField(p => p.Name)
                    .AddSelectField(p => p.Gender)
                    .AddField(p => p.Email, option => option.ValidationType = ValidationType.Email);
                })

                .AddFieldSet("Dietary requirements", fieldBuilder =>
                {
                    fieldBuilder
                    .AddField(p => p.IsTakePartInDinner)
                    .AddSelectField(p => p.FoodType);
                });

                builder.Property(f => f.FoodType)
                .ShowOn(f => f.IsTakePartInDinner)
                .ValidateOn(f => f.IsTakePartInDinner);

                builder.Property(f => f.Gender).HasLookup(
                    sp => Gender.Genders,
                    ke => ke.Id,
                    de => de.Name);

                builder.Property(f => f.FoodType).HasLookup(
                    sp => FoodType.FoodTypes,
                    ke => ke.Id,
                    de => de.Name);
            });

            adminBuilder.RegisterTreeAndForm <Folder, FolderAdminService>(builder =>
            {
                builder.TreeBuilder.Title = "File Manager";
                builder.FormBuilder.Title = "File Manager";
                builder.TreeBuilder.ConfigureTree(p => p.Id,
                                                  p => p.Name,
                                                  p => p.Parent,
                                                  p => p.SubFolders,
                                                  p => p.SortOrder);

                var formBuilder = builder.FormBuilder;
                var adminId     = Guid.Parse("5308b86c-a2fc-4220-8ba2-47e7bec1938d");
                var urlId       = Guid.Parse("bfefa535-7af1-4ddc-82c0-c906c948367a");
                var standardId  = Guid.Parse("4c06dcfd-214f-45af-8404-ff84b412ab01");

                formBuilder
                .AddFieldSet("General", fieldBuilder =>
                {
                    fieldBuilder
                    .AddField(p => p.Name);
                })

                .AddFieldSet("Permissions", fieldBuilder =>
                {
                    fieldBuilder.AddCheckBoxMatrix(p => p.PagePermissions,
                                                   p => p.RoleId,
                                                   p => p.PermissionId,
                                                   p => p.Id,
                                                   p => p.FolderId, typeof(Role), typeof(Permission),
                                                   option => option.IsRequired = false);
                });

                formBuilder.Property(f => f.PagePermissions).HasMatrixLookup <Role, Permission, Guid>(
                    sp => sp.GetService <IRoleRepository>().GetRoles(),
                    ke => ke.Id,
                    de => de.Name,
                    sp => sp.GetService <IPermissionRepository>().GetPagePermissions(),
                    ke => ke.Id,
                    de => de.Name);
            });
        }
        public void ConfigureAdmin(IAdminBuilder adminBuilder)
        {
            adminBuilder.Register <Module, ModuleAdminService>(modelBuilder =>
            {
                modelBuilder.GridBuilder.Title = "Modules";
                modelBuilder.FormBuilder.Title = "Module";

                modelBuilder.GridBuilder
                .AddField(c => c.Label)
                .AddField(c => c.Name)
                .AddField(c => c.Version)
                .AddField(c => c.IsActive, option =>
                {
                    option.DisplayName = "Is Active";
                    option.IsTrue      = "Active";
                    option.IsFalse     = "In Active";
                });

                modelBuilder.GridBuilder.DisplayFieldAs(c => c.IsActive, LabelType.Badge, c => c.IsActiveBadgeClass);

                modelBuilder.FormBuilder
                .AddKeyField(c => c.Id)
                .AddField(c => c.Label)
                .AddField(c => c.Name, option => { option.EnableIn = FormMode.Create; })
                .AddField(c => c.IsActive)
                .AddField(c => c.Description)
                .AddField(c => c.Version);

                modelBuilder.AddChildConfig(s => s.ModuleView, (childForm) =>
                {
                    childForm.GridBuilder
                    .AddField(c => c.DisplayName);

                    childForm.GridBuilder.DisplayFieldAs(c => c.DisplayName, LabelType.Icon, c => c.IconClass);

                    childForm.FormBuilder
                    .AddKeyField(c => c.Id)
                    .AddField(c => c.DisplayName, option => option.EnableIn = FormMode.Create)
                    .AddSelectField(c => c.ModuleViewType, de => de.ControlType)
                    .AddField(c => c.ControllerName)
                    .AddField(c => c.ControllerNamespace)
                    .AddField(c => c.ActionName)
                    .AddField(c => c.IconClass)
                    .AddField(c => c.IconImage)
                    .AddField(c => c.IsDefault)
                    .AddMultiselectField(c => c.Properties, c => $"{c.Label} ({c.Name})");

                    childForm.FormBuilder.Property(u => u.ModuleViewType).HasLookup(sp => sp.GetService <ModuleAdminService>().GetActionType(),
                                                                                    ke => ke.Id,
                                                                                    de => de.ControlType);

                    childForm.FormBuilder.Property(c => c.Properties).HasLookup(sp => sp.GetService <ModuleAdminService>().GetProperties(),
                                                                                ke => ke.Id,
                                                                                de => $"{de.Label} ({de.Name})");
                });

                modelBuilder.FormBuilder.SetCustomValidationFor(c => c.Name,
                                                                (sp, moduleName) =>
                                                                sp.GetService <ModuleAdminService>().ValidateModuleName(moduleName));
            });
        }
Beispiel #6
0
        public void ConfigureAdmin(IAdminBuilder adminBuilder)
        {
            adminBuilder.Register <ContentType, ContentTypeAdminService>(modelBuilder =>
            {
                modelBuilder.GridBuilder.Title = "Content Types";
                modelBuilder.FormBuilder.Title = "Content Type";

                modelBuilder.GridBuilder
                .AddField(c => c.Label)
                .AddField(c => c.Name)
                .AddField(c => c.IsActive, option =>
                {
                    option.DisplayName = "Is Active";
                    option.IsTrue      = "Active";
                    option.IsFalse     = "In Active";
                });

                modelBuilder.GridBuilder.DisplayFieldAs(c => c.Label, LabelType.Icon, c => c.IconClass);
                modelBuilder.GridBuilder.DisplayFieldAs(c => c.IsActive, LabelType.Badge, c => c.IsActiveBadgeClass);

                modelBuilder.FormBuilder
                .AddKeyField(c => c.Id)
                .AddField(c => c.Label)
                .AddField(c => c.Name, option =>
                {
                    option.EnableIn = FormMode.Create;
                })
                .AddField(c => c.IconClass, option => option.DisplayName = "Icon")
                .AddField(c => c.IsActive, option => option.DisplayName  = "Is Active")
                .AddField(c => c.IsList, option => option.DisplayName    = "Is List")
                .AddMultiselectField(c => c.Properties, c => $"{c.Label} ({c.Name})");

                modelBuilder.AddChildConfig(c => c.ContentTypeFields, (childForm) =>
                {
                    childForm.GridBuilder
                    .AddField(c => c.FieldName, option => option.DisplayName            = "Field Name")
                    .AddField(c => c.FieldLabel, option => option.DisplayName           = "Field Label")
                    .AddField(c => c.ContentFieldTypeName, option => option.DisplayName = "Field Type")
                    .AddField(c => c.IsShownOnList, option => option.DisplayName        = "Is Shown On List")
                    .AddField(c => c.IsShownOnPreview, option => option.DisplayName     = "Is Shown On Preview")
                    .EnableSortingBy(c => c.SortOrder,
                                     (provider, pageNo, pageSize, contentTypes) => provider.GetService <ContentTypeAdminService>().SortContentType(pageNo, pageSize, contentTypes));

                    childForm.FormBuilder
                    .AddKeyField(c => c.Id)
                    .AddSelectField(c => c.ContentFieldType, c => c.Label)
                    .AddField(c => c.FieldName, option => option.DisplayName        = "Field Name")
                    .AddField(c => c.FieldLabel, option => option.DisplayName       = "Field Label")
                    .AddField(c => c.FieldDescription, option => option.DisplayName = "Field Description")
                    .AddField(c => c.IsShownOnList, option => option.DisplayName    = "Is Shown On List")
                    .AddField(c => c.IsShownOnPreview, option => option.DisplayName = "Is Shown On Preview");

                    childForm.FormBuilder
                    .Property(u => u.ContentFieldType)
                    .HasLookup(sp => sp.GetService <IContentTypeRepository>().GetContentFieldTypes(),
                               ke => ke.Id,
                               de => de.Label);
                });


                modelBuilder.FormBuilder.Property(c => c.Properties).HasLookup(sp => sp.GetService <ContentTypeAdminService>().GetProperties(),
                                                                               ke => ke.Id,
                                                                               de => $"{de.Label} ({de.Name})");

                modelBuilder.FormBuilder.SetCustomValidationFor(c => c.Name,
                                                                (sp, contentTypeName) =>
                                                                sp.GetService <ContentTypeAdminService>().ValidateContentTypeName(contentTypeName));
            });

            adminBuilder.Register <LayoutType, LayoutTypeAdminService>(modelBuilder =>
            {
                modelBuilder.AdminTitle = "Layout Type";

                modelBuilder.GridBuilder
                .AddField(l => l.Label)
                .AddField(l => l.Name)
                .AddField(l => l.IsActive, option =>
                {
                    option.DisplayName = "Is Active";
                    option.IsTrue      = "Active";
                    option.IsFalse     = "In Active";
                });

                modelBuilder.GridBuilder.DisplayFieldAs(l => l.Label, LabelType.Icon, l => l.IconClass);
                modelBuilder.GridBuilder.DisplayFieldAs(l => l.IsActive, LabelType.Badge, l => l.IsActiveBadgeClass);

                modelBuilder.FormBuilder
                .AddKeyField(l => l.Id)
                .AddField(l => l.Label)
                .AddField(l => l.Name, option =>
                {
                    option.EnableIn = FormMode.Create;
                })
                .AddField(l => l.IconClass)
                .AddField(l => l.IsActive)
                .AddMultiselectField(l => l.AllowedLayoutTypes)
                .AddMultiselectField(l => l.Properties, c => $"{c.Label} ({c.Name})");


                modelBuilder.FormBuilder.Property(l => l.AllowedLayoutTypes).HasLookup(sp => sp.GetService <LayoutTypeAdminService>().GetLayoutTypes(),
                                                                                       ke => ke.Id,
                                                                                       de => $"{de.Label} ({de.Name})");

                modelBuilder.FormBuilder.Property(l => l.Properties).HasLookup(sp => sp.GetService <LayoutTypeAdminService>().GetProperties(),
                                                                               ke => ke.Id,
                                                                               de => $"{de.Label} ({de.Name})");

                modelBuilder.FormBuilder.SetCustomValidationFor(l => l.Name,
                                                                (sp, layoutTypeName) =>
                                                                sp.GetService <LayoutTypeAdminService>().ValidateLayoutTypeName(layoutTypeName));
            });

            adminBuilder.Register <Property, PropertyAdminService>(modelBuilder =>
            {
                modelBuilder.AdminTitle = "Properties";

                modelBuilder.GridBuilder
                .AddField(p => p.Label)
                .AddField(p => p.Name)
                .AddField(p => p.IsActive, option =>
                {
                    option.DisplayName = "Is Active";
                    option.IsTrue      = "Active";
                    option.IsFalse     = "In Active";
                });

                modelBuilder.GridBuilder.DisplayFieldAs(c => c.IsActive, LabelType.Badge, c => c.IsActiveBadgeClass);

                modelBuilder.FormBuilder
                .AddKeyField(p => p.Id)
                .AddField(p => p.Label)
                .AddField(p => p.Name, option => { option.EnableIn = FormMode.Create; })
                .AddField(p => p.Description, option => { option.FieldType = FieldType.TextArea; })
                .AddField(p => p.IsActive)

                .AddField(p => p.IsMoreOption)
                .AddField(p => p.DefaultValue, option => { option.IsRequired = false; })
                .AddSelectField(p => p.OptionList, p => p.Label, option => { option.IsRequired = false; })
                .AddSelectField(p => p.DefaultValuePropertyOption, p => p.Label, option => { option.IsRequired = false; });

                modelBuilder.FormBuilder.Property(p => p.DefaultValue)
                .ShowOn(p => !p.IsMoreOption)
                .ValidateOn(p => !p.IsMoreOption);

                modelBuilder.FormBuilder.Property(p => p.OptionList)
                .ShowOn(p => p.IsMoreOption)
                .ValidateOn(p => p.IsMoreOption);

                modelBuilder.FormBuilder.Property(p => p.DefaultValuePropertyOption)
                .ShowOn(p => p.IsMoreOption)
                .ValidateOn(p => p.IsMoreOption);

                modelBuilder.FormBuilder.Property(p => p.OptionList).HasLookup(sp => sp.GetService <PropertyAdminService>().GetOptionList(),
                                                                               ke => ke.Id,
                                                                               de => $"{de.Label}");

                modelBuilder.FormBuilder.Property(p => p.DefaultValuePropertyOption).HasLookup((sp, filterParam) => sp.GetService <PropertyAdminService>().GetPropertyOption(filterParam),
                                                                                               ke => ke.Id,
                                                                                               de => $"{de.Label} ({de.Name})",
                                                                                               property => property.OptionList);

                modelBuilder.FormBuilder.SetCustomValidationFor(p => p.Name,
                                                                (sp, propertyName) =>
                                                                sp.GetService <PropertyAdminService>().ValidatePropertyName(propertyName));
            });

            adminBuilder.Register <OptionList, OptionListAdminService>(modelBuilder =>
            {
                modelBuilder.AdminTitle = "Option List";

                modelBuilder.GridBuilder
                .AddField(p => p.Label)
                .AddField(p => p.Name)
                .AddField(p => p.IsActive, option =>
                {
                    option.DisplayName = "Is Active";
                    option.IsTrue      = "Active";
                    option.IsFalse     = "In Active";
                });

                modelBuilder.GridBuilder.DisplayFieldAs(c => c.IsActive, LabelType.Badge, c => c.IsActiveBadgeClass);

                modelBuilder.FormBuilder
                .AddKeyField(p => p.Id)
                .AddField(p => p.Label)
                .AddField(p => p.Name, option => { option.EnableIn = FormMode.Create; })
                .AddField(p => p.IsActive);

                modelBuilder.AddChildConfig(s => s.List, (childForm) =>
                {
                    childForm.GridBuilder
                    .AddField(c => c.Name)
                    .AddField(c => c.Label);

                    childForm.FormBuilder
                    .AddKeyField(c => c.Id)
                    .AddField(c => c.Name)
                    .AddField(c => c.Label);
                });

                modelBuilder.FormBuilder.SetCustomValidationFor(p => p.Name,
                                                                (sp, propertyName) =>
                                                                sp.GetService <OptionListAdminService>().ValidatePropertyName(propertyName));
            });
        }
        public void ConfigureAdmin(IAdminBuilder adminBuilder)
        {
            adminBuilder.Register <User, UserAdminService>(modelBuilder =>
            {
                modelBuilder.GridBuilder.Title = "Users";
                modelBuilder.FormBuilder.Title = "User";

                modelBuilder.GridBuilder
                .AddField(u => u.FirstName)
                .AddField(u => u.LastName)
                .AddField(u => u.Email);

                modelBuilder.FormBuilder
                .AddKeyField(u => u.Id)
                //.AddField(u => u.UserName, option => option.ValidationType = ValidationType.UserExist)
                .AddField(u => u.FirstName)
                .AddField(u => u.LastName)
                .AddField(u => u.Password, option =>
                {
                    option.FieldType      = FieldType.Password;
                    option.ShowIn         = FormMode.Create;
                    option.ValidationType = ValidationType.Password;
                })
                //.AddField(u => u.PasswordConfirm, option => option.AddIn = AddInMode.Add)
                .AddField(u => u.Email, option =>
                {
                    option.ShowIn         = FormMode.Create;
                    option.ValidationType = ValidationType.UserExistByEmail;
                })
                .AddMultiselectField(u => u.Roles);

                modelBuilder.FormBuilder.AddFormAction("UnlockUser", "Unlock User",
                                                       (sp, user) => sp.GetService <UserAdminService>().UnlockUserAccount(user));

                modelBuilder.FormBuilder.AddFormAction("LockUser", "Lock User",
                                                       (sp, user) => sp.GetService <UserAdminService>().LockUserAccount(user));

                modelBuilder.FormBuilder.Property(u => u.Roles).HasLookup(sp => sp.GetService <IRoleRepository>().GetRoles(),
                                                                          ke => ke.Id,
                                                                          de => de.Name);

                modelBuilder.AddCustomForm <PasswordReset>("PasswordReset", formBuilder =>
                {
                    formBuilder.Title = "Password Reset";
                    formBuilder
                    .AddKeyField(f => f.Id)
                    .AddField(f => f.CurrentPassword, option =>
                    {
                        option.FieldType   = FieldType.Password;
                        option.DisplayName = "Current Password";
                    })
                    .AddField(f => f.NewPassword, option =>
                    {
                        option.FieldType      = FieldType.Password;
                        option.DisplayName    = "New Password";
                        option.ValidationType = ValidationType.Password;
                    });

                    formBuilder.SetFormOption(formOption =>
                    {
                        formOption.SaveButtonText = "Reset Password";
                    });

                    formBuilder.OnSubmit((sp, form) => sp.GetService <UserAdminService>().ResetPassword(form));
                });
            });
        }
Beispiel #8
0
        public void ConfigureAdmin(IAdminBuilder adminBuilder)
        {
            adminBuilder.MapperConfiguration = BlogMapper.MapperConfiguration;

            adminBuilder.Register <DTO.Blog, IBlogService>(modelBuilder =>
            {
                modelBuilder.GridBuilder
                .AddField(p => p.Name);

                modelBuilder.FormBuilder
                .AddKeyField(p => p.Id)
                .AddField(p => p.Name);
            });

            adminBuilder.Register <DTO.Post, IPostService>(modelBuilder =>
            {
                modelBuilder.GridBuilder.Title = "Posts";
                modelBuilder.FormBuilder.Title = "Post";

                modelBuilder.GridBuilder
                .AddField(p => p.Blog)
                .AddField(p => p.Title)
                .AddField(p => p.Category)
                .AddField(p => p.Tags)
                .AddField(p => p.CreatedOn, option => option.Format      = "dd.MM.yyyy")
                .AddField(p => p.CreatedBy, option => option.DisplayName = "Author");

                modelBuilder.FormBuilder
                .AddKeyField(p => p.Id)
                .AddSelectField(p => p.Blog)
                .AddField(p => p.Title)
                .AddField(p => p.Slug)
                .AddField(s => s.Summary)
                .AddField(s => s.Thumbnail)
                .AddField(s => s.Content)
                .AddSelectField(s => s.Category, expr => expr.Name)
                .AddInlineMultiSelectField <DTO.Tag>(s => s.Tags, expr => expr.Name)
                .AddField(p => p.CreatedOn, option => option.Format = "dd.MM.yyyy");


                modelBuilder.FormBuilder.SetCustomValidationFor(c => c.Slug,
                                                                (sp, slug) =>
                                                                sp.GetService <IPostService>().ValidateSlug(slug));

                modelBuilder.FormBuilder.Property(c => c.Slug).AutoFillBasedOn(p => p.Title,
                                                                               (sp, title) =>
                                                                               sp.GetService <IPostService>().GetSlugFor(title));

                modelBuilder.FormBuilder
                .Property(p => p.Tags)
                .AddItemBy(t => t.Name);

                modelBuilder.FormBuilder.Property(u => u.Blog).HasLookup(sp => sp.GetService <IBlogService>().GetBlogs(),
                                                                         ke => ke.Id,
                                                                         de => de.Name);

                modelBuilder.FormBuilder.Property(u => u.Category).HasLookup(sp => sp.GetService <ICategoryService>().GetCategories(),
                                                                             ke => ke.Id,
                                                                             de => de.Name);

                modelBuilder.FormBuilder.Property(u => u.Tags).HasLookup(sp => sp.GetService <ITagService>().GetTags(),
                                                                         ke => ke.Id,
                                                                         de => de.Name);

                modelBuilder.FormBuilder.AddFormAction("Publish", "Publish",
                                                       (sp, post) => sp.GetService <IPostService>().PublishPost(post));


                modelBuilder.AddChildConfig(s => s.Comments, (childForm) =>
                {
                    childForm.FormBuilder
                    .AddKeyField(c => c.Id)
                    .AddField(c => c.UserName)
                    .AddField(c => c.Comment)
                    .AddField(c => c.CreatedOn)
                    .AddField(c => c.IsApproved);
                });
            });

            adminBuilder.Register <DTO.Category, ICategoryService>(modelBuilder =>
            {
                modelBuilder.GridBuilder
                .AddField(p => p.Name);

                modelBuilder.FormBuilder
                .AddKeyField(p => p.Id)
                .AddField(p => p.Name);
            });

            adminBuilder.Register <DTO.Tag, ITagService>(modelBuilder =>
            {
                modelBuilder.GridBuilder
                .AddField(p => p.Name);

                modelBuilder.FormBuilder
                .AddKeyField(p => p.Id)
                .AddField(p => p.Name);
            });
        }
        public void ConfigureAdmin(IAdminBuilder adminBuilder)
        {
            adminBuilder.MapperConfiguration = BlogMapper.MapperConfiguration;

            adminBuilder.Register <DTO.Post>(modelBuilder =>
            {
                modelBuilder.GridBuilder.Title = "Posts";
                modelBuilder.FormBuilder.Title = "Post";

                modelBuilder.GridBuilder
                .AddField(p => p.Title)
                .AddField(p => p.Category)
                .AddField(p => p.Tags)
                .AddField(p => p.CreatedOn, option => option.Format      = "dd.MM.yyyy")
                .AddField(p => p.CreatedBy, option => option.DisplayName = "Author");

                modelBuilder.FormBuilder
                .AddKeyField(p => p.Id)
                .AddField(p => p.Title)
                .AddField(s => s.Summary)
                .AddField(s => s.Thumbnail)
                .AddField(s => s.Content)
                .AddSelectField(s => s.Category, expr => expr.Name)
                .AddInlineMultiSelectField <DTO.Tag>(s => s.Tags, expr => expr.Name)
                .AddField(p => p.CreatedOn, option => option.Format = "dd.MM.yyyy");

                modelBuilder.FormBuilder
                .Property(p => p.Tags)
                .AddItemBy(t => t.Name);

                modelBuilder.AddChildConfig(s => s.Comments, (childForm) =>
                {
                    childForm.FormBuilder
                    .AddKeyField(c => c.Id)
                    .AddField(c => c.UserName)
                    .AddField(c => c.Comment)
                    .AddField(c => c.CreatedOn)
                    .AddField(c => c.IsApproved);
                });
            });

            adminBuilder.Register <DTO.Category>(modelBuilder =>
            {
                modelBuilder.GridBuilder
                .AddField(p => p.Name);

                modelBuilder.FormBuilder
                .AddKeyField(p => p.Id)
                .AddField(p => p.Name);
            });

            adminBuilder.Register <DTO.Tag>(modelBuilder =>
            {
                modelBuilder.GridBuilder
                .AddField(p => p.Name);

                modelBuilder.FormBuilder
                .AddKeyField(p => p.Id)
                .AddField(p => p.Name);
            });
        }