public AdaptiveBlockTransformContext CloneForChildren(bool isColumnContent = false)
        {
            var answer = new AdaptiveBlockTransformContext(Transformer)
            {
                // Skip IsColumContent since that gets reset
                //IsColumnContent = IsColumnContent
                IsColumnContent = isColumnContent
            };

            return(answer);
        }
        internal List <AdaptiveElement> TransformInputsToElements(IEnumerable <BaseAdaptiveBlockElement> inputs, AdaptiveBlockTransformContext context)
        {
            List <AdaptiveElement> elements = new List <AdaptiveElement>();

            foreach (var input in inputs)
            {
                elements.AddRange(TransformBlockElementToElements(input, context.CloneForChildren()));
            }

            return(elements);
        }
        internal List <AdaptiveElement> TransformBlocksToElements(IEnumerable <AdaptiveBlock> blocks, AdaptiveBlockTransformContext context)
        {
            List <AdaptiveElement> elements = new List <AdaptiveElement>();

            int count = blocks.Count();

            for (int i = 0; i < count; i++)
            {
                var b = blocks.ElementAt(i);

                if (b.Hints.Column && context.Transformer.Properties.AllowsColumns)
                {
                    var columnGroup  = blocks.Skip(i).TakeWhile(x => x.Hints.Column).ToList();
                    var innerContext = context.CloneForChildren(
                        isColumnContent: true);
                    elements.AddRange(TransformGroupAsColumnsToElements(columnGroup, innerContext));
                    i += columnGroup.Count - 1;
                }
                else if (b.Hints.FactSet && context.Transformer.Properties.AllowsFactSets)
                {
                    var factSetGroup = blocks.Skip(i).TakeWhile(x => x.Hints.FactSet).ToList();
                    var innerContext = context.CloneForChildren();
                    elements.AddRange(TransformGroupAsFactSetToElements(factSetGroup, innerContext));
                    i += factSetGroup.Count - 1;
                }
                else
                {
                    elements.AddRange(TransformBlockToElements(b, context.CloneForChildren()));
                }
            }

            return(elements);
        }
        internal List <AdaptiveElement> TransformBlockToElements(AdaptiveBlock block, AdaptiveBlockTransformContext context)
        {
            var content = block.View?.Content;

            if (content != null)
            {
                return(ElementTransformers[typeof(AdaptiveBlockContent)].Transform(content, context));
            }

            return(new List <AdaptiveElement>());
        }
 public List <AdaptiveElement> TransformBlockElementToElements(BaseAdaptiveBlockElement element, AdaptiveBlockTransformContext context)
 {
     if (element != null && ElementTransformers.TryGetValue(element.GetType(), out IBaseElemementTransformer elementRenderer))
     {
         return(elementRenderer.Transform(element, context));
     }
     else
     {
         return(new List <AdaptiveElement>()
         {
             new AdaptiveTextBlock()
             {
                 Text = "Unknown element"
             }
         });
     }
 }
        private List <AdaptiveElement> TransformGroupAsFactSetToElements(List <AdaptiveBlock> group, AdaptiveBlockTransformContext context)
        {
            AdaptiveFactSet factSet = new AdaptiveFactSet();

            foreach (var block in group)
            {
                AdaptiveFact fact = new AdaptiveFact()
                {
                    Title = block.View?.Content?.Title,
                    Value = block.View?.Content?.Subtitle
                };

                factSet.Facts.Add(fact);
            }

            return(new List <AdaptiveElement>()
            {
                factSet
            });
        }
        private List <AdaptiveElement> TransformGroupAsColumnsToElements(List <AdaptiveBlock> group, AdaptiveBlockTransformContext context)
        {
            AdaptiveColumnSet columnSet = new AdaptiveColumnSet();

            foreach (var block in group)
            {
                AdaptiveColumn column = new AdaptiveColumn();

                var innerContext = context.CloneForChildren(
                    isColumnContent: true);

                foreach (var el in context.Transformer.TransformBlockToElements(block, innerContext))
                {
                    column.Items.Add(el);
                }

                columnSet.Columns.Add(column);
            }

            return(new List <AdaptiveElement>()
            {
                columnSet
            });
        }