| File: GridItemsProviderRequest.cs | Web Access |
| Project: src\aspnetcore\src\Components\QuickGrid\Microsoft.AspNetCore.Components.QuickGrid\src\Microsoft.AspNetCore.Components.QuickGrid.csproj (Microsoft.AspNetCore.Components.QuickGrid) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Linq; namespace Microsoft.AspNetCore.Components.QuickGrid; /// <summary> /// Parameters for data to be supplied by a <see cref="QuickGrid{TGridItem}"/>'s <see cref="QuickGrid{TGridItem}.ItemsProvider"/>. /// </summary> /// <typeparam name="TGridItem">The type of data represented by each row in the grid.</typeparam> public readonly struct GridItemsProviderRequest<TGridItem> { /// <summary> /// The zero-based index of the first item to be supplied. /// </summary> public int StartIndex { get; init; } /// <summary> /// If set, the maximum number of items to be supplied. If not set, the maximum number is unlimited. /// </summary> public int? Count { get; init; } /// <summary> /// Specifies which column represents the sort order. /// /// Rather than inferring the sort rules manually, you should normally call either <see cref="ApplySorting(IQueryable{TGridItem})"/> /// or <see cref="GetSortByProperties"/>, since they also account for <see cref="SortByColumn" /> and <see cref="SortByAscending" /> automatically. /// </summary> public ColumnBase<TGridItem>? SortByColumn { get; init; } /// <summary> /// Specifies the current sort direction. /// /// Rather than inferring the sort rules manually, you should normally call either <see cref="ApplySorting(IQueryable{TGridItem})"/> /// or <see cref="GetSortByProperties"/>, since they also account for <see cref="SortByColumn" /> and <see cref="SortByAscending" /> automatically. /// </summary> public bool SortByAscending { get; init; } /// <summary> /// A token that indicates if the request should be cancelled. /// </summary> public CancellationToken CancellationToken { get; init; } internal GridItemsProviderRequest( int startIndex, int? count, ColumnBase<TGridItem>? sortByColumn, bool sortByAscending, CancellationToken cancellationToken) { StartIndex = startIndex; Count = count; SortByColumn = sortByColumn; SortByAscending = sortByAscending; CancellationToken = cancellationToken; } /// <summary> /// Applies the request's sorting rules to the supplied <see cref="IQueryable{TGridItem}"/>. /// </summary> /// <param name="source">An <see cref="IQueryable{TGridItem}"/>.</param> /// <returns>A new <see cref="IQueryable{TGridItem}"/> representing the <paramref name="source"/> with sorting rules applied.</returns> public IQueryable<TGridItem> ApplySorting(IQueryable<TGridItem> source) => SortByColumn?.SortBy?.Apply(source, SortByAscending) ?? source; /// <summary> /// Produces a collection of (property name, direction) pairs representing the sorting rules. /// </summary> /// <returns>A collection of (property name, direction) pairs representing the sorting rules</returns> public IReadOnlyCollection<SortedProperty> GetSortByProperties() => SortByColumn?.SortBy?.ToPropertyList(SortByAscending) ?? Array.Empty<SortedProperty>(); }