private ComponentViewData CreateMainComponentViewData(RepositoryInfo repositoryInfo, IEasyCrudRepository dataRepository, string id)
        {
            var componentViewData = new ComponentViewData();

            var fieldsViewData = repositoryInfo.Columns.Select(CreateFieldViewData).ToList();

            var criteria = new Criteria
            {
                Columns = fieldsViewData.Select(f => f.Column).ToList()
            };

            componentViewData.Title  = repositoryInfo.Label;
            componentViewData.Fields = fieldsViewData;

            if (id == null)
            {
                var entities = dataRepository.List(criteria);
                componentViewData.Entities = entities.Select(e => new EntityViewData {
                    Id = e.Id, Data = e.Data
                }).ToList();
            }

            return(componentViewData);
        }
        private List <ComponentViewData> CreateChildrenComponentViewData(RepositoryInfo repositoryInfo, IEasyCrudRepository dataRepository, string id)
        {
            var viewDatas = new List <ComponentViewData>();

            var components = repositoryInfo.Type.GetProperties().Where(p => Attribute.IsDefined(p, typeof(BaseComponentAttribute), true));

            foreach (var component in components)
            {
                if (component.PropertyType.GetGenericTypeDefinition() != typeof(ICollection <>))
                {
                    throw new PropertyConfigurationException($"Property '{component.Name}', with ComponentAttribute, is not an ICollection<>");
                }

                var componentAttribute = component.GetCustomAttribute <BaseAttribute>(true);
                var componentType      = component.PropertyType.GenericTypeArguments.First();
                viewDatas.Add(CreateChildComponentViewData(componentType, componentAttribute.Label, componentAttribute.Order));
            }

            return(viewDatas);
        }