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());
        }
Beispiel #2
0
        /// <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);
        }