/// <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 )); }
/// <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; }
/// <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()); }