示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
                    }
                }
            }
        }
示例#3
0
 public virtual void DoBindChildComponents(FormComponent component, T model)
 {
 }
示例#4
0
 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));
 }
示例#5
0
 public void BindChildComponents(FormComponent component, ComponentModelBase model)
 {
     DoBindChildComponents(component, model as T);
 }