Example #1
0
        public DynamicPropertyEditorViewModel BuildDynamicPropertyEditorViewModelForEdit(DynamicPropertyMetadata dynamicPropertyMetadata)
        {
            var dynamicPropertyViewModel = new DynamicPropertyEditorViewModel(dynamicPropertyMetadata);

            dynamicPropertyViewModel.ViewModelPropertyName = "Item." + dynamicPropertyMetadata.PropertyName();

            //assign editor
            if (!string.IsNullOrWhiteSpace(dynamicPropertyMetadata.UIHint()))
            {
                dynamicPropertyViewModel.DynamicEditorName = dynamicPropertyMetadata.UIHint();
            }
            else if (dynamicPropertyMetadata.DataType() == DataType.MultilineText)
            {
                dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorMultiLine";
            }
            else if (dynamicPropertyMetadata.DataType() == DataType.Password)
            {
                dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorPassword";
            }
            else if (dynamicPropertyMetadata is DynamicForiegnKeyPropertyMetadata)
            {
                var dynamicForiegnKeyPropertyMetadata = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata);
                var dropdownType = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.EntityTypeFunction()();
                if (_dynamicRepository.GetItemsCount(dropdownType) > _dynamicMvcManager.Options.DynamicDropDownRecordLimit)
                {
                    dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorAutoComplete";
                }
                else
                {
                    dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorDropDown";
                }
            }
            else if (dynamicPropertyMetadata.SimpleTypeEnum() == SimpleTypeEnum.DateTime)
            {
                dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorDateTime";
            }
            else if (dynamicPropertyMetadata.SimpleTypeEnum() == SimpleTypeEnum.DateTimeNullable)
            {
                dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorDateTime";
            }
            else if (dynamicPropertyMetadata.SimpleTypeEnum() == SimpleTypeEnum.Bool)
            {
                dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorBool";
            }
            else if (dynamicPropertyMetadata.SimpleTypeEnum() == SimpleTypeEnum.BoolNullable)
            {
                dynamicPropertyViewModel.DynamicEditorName = "DynamicEditorBoolNullable";
            }
            else
            {
                dynamicPropertyViewModel.DynamicEditorName = "DynamicEditor";
            }

            return(dynamicPropertyViewModel);
        }
        public IEnumerable <DynamicFilterViewModel> GetFilterPropertyViewModels(DynamicEntityMetadata dynamicEntityMetadata, RouteValueDictionaryWrapper routeValueDictionaryWrapper)
        {
            var dynamicFilterViewModels = new List <DynamicFilterViewModel>();

            //add default filters
            foreach (var dynamicPropertyMetadata in dynamicEntityMetadata.DynamicPropertyMetadatas.Where(x => !x.IsDynamicCollection))
            {
                if (dynamicPropertyMetadata.HasDynamicFilterUIAttribute)
                {
                    continue; //explicit filters will be added later
                }
                if (dynamicPropertyMetadata is DynamicForiegnKeyPropertyMetadata && !dynamicPropertyMetadata.ListFilterIndexHide)
                {
                    var dynamicPropertyViewModel          = new DynamicFilterViewModel(dynamicPropertyMetadata);
                    var dynamicForiegnKeyPropertyMetadata = ((DynamicForiegnKeyPropertyMetadata)dynamicPropertyMetadata);
                    var dropdownType = dynamicForiegnKeyPropertyMetadata.ComplexDynamicEntityMetadata.EntityType;
                    if (_dynamicRepository.GetItemsCount(dropdownType) > _dynamicMvcManager.Options.DynamicDropDownRecordLimit)
                    {
                        dynamicPropertyViewModel.DynamicFilterViewName = "DynamicFilterAutoComplete";
                    }
                    else
                    {
                        dynamicPropertyViewModel.DynamicFilterViewName = "DynamicFilterDropDown";
                    }

                    dynamicFilterViewModels.Add(dynamicPropertyViewModel);
                }
            }
            //add explicit filters
            foreach (var dynamicPropertyMetadata in dynamicEntityMetadata.DynamicPropertyMetadatas.Where(x => x.HasDynamicFilterUIAttribute))
            {
                var dynamicFilterViewModel       = new DynamicFilterViewModel(dynamicPropertyMetadata);
                var dynamicFilterUIHintAttribute = dynamicPropertyMetadata.GetDynamicFilterUIHintAttribute();
                dynamicFilterViewModel.DynamicFilterViewName = dynamicFilterUIHintAttribute.DynamicFilterViewName;
                dynamicFilterViewModels.Add(dynamicFilterViewModel);
            }
            //add models for any filters
            foreach (var dynamicFilterViewModel in dynamicFilterViewModels)
            {
                var dynamicPropertyMetadata = dynamicEntityMetadata.DynamicPropertyMetadatas.Single(x => x.PropertyName == dynamicFilterViewModel.PropertyName);
                var dynamicFilter           = _dynamicFilterFactory.GetDynamicFilter(dynamicFilterViewModel.DynamicFilterViewName, dynamicPropertyMetadata, routeValueDictionaryWrapper);
                dynamicFilterViewModel.FilterModel = dynamicFilter;
                if (dynamicPropertyMetadata.HasDynamicFilterUIAttribute)
                {
                    dynamicFilterViewModel.FilterModel.Order = dynamicPropertyMetadata.GetDynamicFilterUIHintAttribute().Order;
                }
            }

            dynamicFilterViewModels = dynamicFilterViewModels.OrderBy(x => ((DynamicFilterBaseViewModel)x.FilterModel).Order).ToList();
            return(dynamicFilterViewModels);
        }