protected async override Task BuildViews(List <IModule> activeModules, int pageIndex, int pageSize, FolderModel folder, PathIdentifier identifier, string userTimeZone) { this.page.Views = new List <Models.Responses.IViewModel>(); /*var instructions = new DataViewModel * { * DataModel = null, * DataSchema = new ManagerFieldObject() * { * IsCollapsed = false, * Properties = new Dictionary<string, ManagerFieldBaseSchema>() { * { "Instructions", new ManagerFieldNull() { * Description = @"<p> * Some stuff here maybe? * </p>", * IsReadOnly = true, * Order = 0, * Title = "Log Reader Info" * } * }, * } * }, * AllowedOperations = null * }; * * this.page.Views.Add(instructions);*/ var logs = await LogReaderService.ReadLog(identifier); var grid = new GridViewModel { Rows = new List <IItemQueryResponse>(), PageIndex = pageIndex, PageSize = pageSize, Title = "Audit Log", GridColumns = new List <GridColumnSpecification>() { new GridColumnSpecification() { IsSortable = true, KeyName = "generated", Label = "Generated" }, new GridColumnSpecification() { IsSortable = true, KeyName = "action", Label = "Action" }, new GridColumnSpecification() { IsSortable = true, KeyName = "initiator", Label = "User" }, new GridColumnSpecification() { IsSortable = true, KeyName = "description", Label = "Description" }, }, }; grid.TotalRows = logs.Rows.Count(); grid.RowsInPage = Math.Min(grid.TotalRows, grid.PageSize); grid.PageCount = (grid.TotalRows / grid.PageSize) + ( (grid.TotalRows % grid.PageSize == 0) ? 0 : 1 ); grid.IsLastPage = (grid.PageIndex == grid.PageCount - 1); // Here we're calculating paging, and sending that back on the grid view. grid.Rows = logs.Rows .OrderByDescending(f => f.Generated) .Skip(grid.PageSize * grid.PageIndex) .Take(grid.PageSize) .Select(l => new LogEntryModel { Name = "Name", Key = "Key", Action = l.ActionType, Generated = l.Generated.ConvertToLocal(userTimeZone), Initiator = l.InitiatorUserIdentifier?.UserKey, Description = l.Description }); this.page.Views.Add(grid); }