public void RowConfig(bool rowsConfigured, bool pagingConfiguredBefore, bool pagingConfiguredAfter) { List <RowBuilder <TableEntity> > builders = new List <RowBuilder <TableEntity> >(); List <RowBuilder <TableEntity> > actionBuilders = new List <RowBuilder <TableEntity> >(); List <RowConfig <TableEntity> > configs = new List <RowConfig <TableEntity> >(); List <TableEntity> entities = new List <TableEntity>(); List <TableEntity> configEntities = new List <TableEntity>(); _builderFactory.RowBuilder(Arg.Do <TableEntity>(e => entities.Add(e))).Returns(_ => { RowBuilder <TableEntity> builder = new RowBuilder <TableEntity>(null, null); builders.Add(builder); return(builder); }); IEnumerable <TableEntity> tableEntities = new [] { new TableEntity(), new TableEntity(), new TableEntity(), new TableEntity(), }; TableModel <TableEntity> model = new TableModel <TableEntity>(tableEntities); _builder = new TableBuilder <TableEntity>(model, _renderer, _builderFactory, _tableConfig); _tableConfig.Rows.Returns(configs); _tableConfig.Paging.Returns(new PagingConfig { PageSize = pagingConfiguredBefore ? 2 : 0 }); _tableConfig.Update.Returns(new UpdateConfig { Url = "_" }); if (rowsConfigured) { _builder.Rows((b, e) => { actionBuilders.Add(b); configEntities.Add(e); }); } if (pagingConfiguredAfter) { _tableConfig.Paging.Returns(new PagingConfig { PageSize = 2 }); } this.RenderAndVerify(tableEntities.Count()); if (rowsConfigured) { _builderFactory.Received(pagingConfiguredBefore ? 2 : tableEntities.Count()) .RowBuilder(Arg.Any <TableEntity>()); actionBuilders.ShouldAllBeEquivalentTo(builders); configEntities.ShouldAllBeEquivalentTo(entities); } configs.Should().HaveCount(pagingConfiguredBefore || pagingConfiguredAfter ? 2 : tableEntities.Count()); }
/// <summary> /// Configures the rows of the table. /// </summary> /// <param name="configAction">Configuration action</param> /// <returns>The table builder instance.</returns> /// <remarks> /// If using paging, configure it before doing row configuration. /// </remarks> public TableBuilder <T> Rows(Action <RowBuilder <T>, T> configAction) { IEnumerable <T> entities = _config.Paging.PageSize > 0 ? _model.Entities.Take(_config.Paging.PageSize) : _model.Entities; foreach (T entity in entities) { RowBuilder <T> builder = _builderFactory.RowBuilder(entity); configAction(builder, entity); _config.Rows.Add(builder.Config); } return(this); }
/// <summary> /// Configures the rows of the table. /// </summary> /// <param name="configAction">Configuration action</param> /// <returns>The table builder instance.</returns> /// <remarks> /// If using paging or initial filtering, configure it before doing row configuration. /// </remarks> public MvcCoreBootstrapTableBuilder <T> Rows(Action <MvcCoreBootstrapTableRowBuilder <T>, T> configAction) { IQueryable <T> entities = _model.ProcessedEntities; if (!_model.Processed) { KeyValuePair <string, ColumnConfig> initialFilterColumn = _config.Columns .FirstOrDefault(c => c.Value.Filtering.Initial != null); KeyValuePair <string, ColumnConfig> initialSortColumn = _config.Columns .FirstOrDefault(c => c.Value.SortState.HasValue); // Initial rendering of the table, apply initial filteringm sorting and paging. if (initialFilterColumn.Key != null) { Expression <Func <T, bool> > whereExpr = ExpressionHelper.EqualsExpr <T>(initialFilterColumn.Key, initialFilterColumn.Value.Filtering.Initial); entities = entities.Where(whereExpr); } entities = _config.Paging.PageSize > 0 ? entities.Take(_config.Paging.PageSize) : entities; if (initialSortColumn.Key != null) { var sortExpr = ExpressionHelper.PropertyExpr <T>(initialSortColumn.Key); entities = initialSortColumn.Value.SortState == SortState.Ascending ? entities.OrderBy(sortExpr) : entities.OrderByDescending(sortExpr); } } foreach (T entity in entities) { MvcCoreBootstrapTableRowBuilder <T> builder = _builderFactory.RowBuilder(entity); configAction(builder, entity); _config.Rows.Add(builder.Config); } return(this); }