private static void ImportChildComponents(Form form, List <ComponentModelBase> components, Guid?oldParentId, FormComponent newParent) { var componentService = StaticContext.IocManager.Resolve <IRepository <FormComponent, Guid> >(); var componentsOnLevel = components.Where(c => c.ParentId == oldParentId).ToList(); var mapper = new MapperConfiguration(cfg => { cfg.CreateMap <ComponentModelBase, ComponentModelBase>(); }).CreateMapper(); foreach (var componentModel in componentsOnLevel) { var formComponent = new FormComponent(); mapper.Map(componentModel, formComponent); formComponent.Form = form; formComponent.Parent = newParent; formComponent.Id = Guid.NewGuid(); // save custom properties formComponent.CustomSettings = SerializeCustomProperties(componentModel); componentService.InsertOrUpdate(formComponent); if (componentModel.Type != SubFormComponent.Type) { ImportChildComponents(form, components, componentModel.Id, formComponent); } } }
public static void AutoGenerateForm(Form form, bool displayMode) { var modelType = !string.IsNullOrWhiteSpace(form.ModelType) ? Type.GetType(form.ModelType) : null; if (modelType == null) { return; } // inactivate all existing components var toDelete = form.GetComponents().ToList(); foreach (var component in toDelete) { ComponentService.Delete(component); } var propertyGridConfig = new PropertyGridConfig(null) { ModelType = modelType, DefaultCategoryName = "Misc", CategoriesVisibility = c => !c.Equals("Audit", StringComparison.InvariantCultureIgnoreCase) }; // skip lists propertyGridConfig.PropertiesVisibility = prop => !prop.PropertyType.IsSubtypeOfGeneric(typeof(IList <>)); var mapper = GetDefaultMapper(); var groups = PropertyGridDataProvider.GetPropertyGroups(propertyGridConfig, modelType, false); var panelIndex = 0; foreach (var group in groups) { var panelModel = new PanelModel() { Type = "panel", ApiKey = $"panel{panelIndex}", Label = group.Category, SortIndex = panelIndex }; var componentModels = group.Properties.Select(p => GetComponentByPropertyConfig(p, displayMode)).Where(c => c != null).ToList(); if (componentModels.Any()) { var panel = new FormComponent() { Form = form }; mapper.Map(panelModel, panel); ComponentService.InsertOrUpdate(panel); panelIndex++; var componentIndex = 0; foreach (var componentModel in componentModels) { componentModel.SortIndex = componentIndex++; var component = new FormComponent() { Form = form, Parent = panel }; mapper.Map(componentModel, component); component.CustomSettings = SerializeCustomProperties(componentModel); ComponentService.InsertOrUpdate(component); } } } }
public virtual void DoBindChildComponents(FormComponent component, T model) { }
public static IQueryable <FormComponent> GetChildComponents(this Form form, FormComponent component) { return(ComponentService.GetAll().Where(c => c.Form == form && c.Parent == component).OrderBy(c => c.SortIndex).ThenBy(c => c.CreationTime)); }
public void BindChildComponents(FormComponent component, ComponentModelBase model) { DoBindChildComponents(component, model as T); }