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 }; }