Exemplo n.º 1
0
        /// <summary>
        /// Asynchronously generates a single repeater item for a query row
        /// </summary>
        /// <param name="definition">The repeater definition</param>
        /// <param name="sectionType">The section type</param>
        /// <param name="filter">The report filter</param>
        /// <param name="row">The query row</param>
        /// <returns>The repeater item generated</returns>
        private async Task <RepeaterItem> GenerateItemAsync
        (
            RepeaterDefinition definition,
            ReportSectionType sectionType,
            ReportFilter filter,
            QueryRow row
        )
        {
            var value  = definition.Binding.Resolve(row);
            var action = default(ReportAction);

            if (definition.Action != null)
            {
                action = definition.Action.Resolve(row);
            }

            var nestedComponents = await GenerateNestedComponentsAsync
                                   (
                definition,
                sectionType,
                filter,
                row
                                   );

            return(new RepeaterItem
                   (
                       value,
                       action,
                       nestedComponents
                   ));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Constructs the repeater with the details
        /// </summary>
        /// <param name="definition">The repeater definition</param>
        /// <param name="items">The repeater items</param>
        public Repeater
        (
            RepeaterDefinition definition,
            params RepeaterItem[] items
        )
            : base(definition)
        {
            Validate.IsNotNull(items);

            this.RepeaterType = definition.RepeaterType;
            this.Items        = items;
        }
Exemplo n.º 3
0
        /// <summary>
        /// Asynchronously generates a nested components for a query row
        /// </summary>
        /// <param name="repeaterDefinition">The repeater definition</param>
        /// <param name="sectionType">The section type</param>
        /// <param name="parentFilter">The parent report filter</param>
        /// <param name="row">The query row</param>
        /// <returns>The nested components generated</returns>
        private async Task <IReportComponent[]> GenerateNestedComponentsAsync
        (
            RepeaterDefinition repeaterDefinition,
            ReportSectionType sectionType,
            ReportFilter parentFilter,
            QueryRow row
        )
        {
            var generationTasks = new List <Task <IReportComponent> >();
            var componentList   = new List <IReportComponent>();

            foreach (var nestedComponent in repeaterDefinition.NestedComponents)
            {
                var componentDefinition = nestedComponent.Definition;
                var componentName       = componentDefinition.Name;

                var isExcluded = parentFilter.IsExcluded
                                 (
                    componentName
                                 );

                if (false == isExcluded)
                {
                    var componentType      = componentDefinition.ComponentType;
                    var componentGenerator = componentType.GetGenerator();

                    var nestedFilter = nestedComponent.GenerateNestedFilter
                                       (
                        parentFilter,
                        row
                                       );

                    var task = componentGenerator.GenerateAsync
                               (
                        componentDefinition,
                        sectionType,
                        nestedFilter
                               );

                    generationTasks.Add(task);
                }
            }

            await Task.WhenAll
            (
                generationTasks.ToArray()
            )
            .ConfigureAwait
            (
                false
            );

            foreach (var task in generationTasks)
            {
                componentList.Add
                (
                    await task.ConfigureAwait(false)
                );
            }

            return(componentList.ToArray());
        }