namespace Elsa.Common.Models;
///
/// Represents pagination arguments.
///
public record PageArgs
{
///
/// Creates pagination arguments from a page number and page size.
///
/// The zero-based page number.
/// The number of items per page.
public static PageArgs FromPage(int? page, int? pageSize) => new() { Offset = page * pageSize, Limit = pageSize };
///
/// Creates pagination arguments from an offset and limit.
///
/// The number of items to skip.
/// The number of items to take.
public static PageArgs FromRange(int? offset, int? limit) => new() { Offset = offset, Limit = limit };
///
/// Creates pagination arguments from page and page size or offset and limit.
///
/// The zero-based page number.
/// The number of items per page.
/// The number of items to skip.
/// The number of items to take.
/// Thrown when neither page and pageSize nor offset and limit are specified.
public static PageArgs From(int? page, int? pageSize, int? offset, int? limit)
{
if(page != null && pageSize != null)
return FromPage(page, pageSize);
if(offset != null && limit != null)
return FromRange(offset, limit);
return FromPage(0, 100);
}
///
/// Gets the offset of the page.
///
public int? Offset { get; set; }
///
/// Gets or sets the limit of the page.
///
public int? Limit { get; set; }
///
/// Gets the zero-based page number.
///
public int? Page => Offset.HasValue && Limit.HasValue ? Offset / Limit : null;
///
/// Gets the number of items per page.
///
public int? PageSize => Limit;
///
/// Returns pagination arguments for the next page.
///
/// The arguments for the next page.
public PageArgs Next() => this with { Offset = Page + 1 };
}