Home / Function/ generatePaginateFunction() — astro Function Reference

generatePaginateFunction() — astro Function Reference

Architecture documentation for the generatePaginateFunction() function in paginate.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  0d54d570_dd0a_6e46_45ab_7452db08790f["generatePaginateFunction()"]
  f9b241f0_1a09_8ec8_0d08_713d9b433a71["paginate.ts"]
  0d54d570_dd0a_6e46_45ab_7452db08790f -->|defined in| f9b241f0_1a09_8ec8_0d08_713d9b433a71
  73cddf52_8aeb_3fa6_3361_83a4fd875695["addRouteBase()"]
  0d54d570_dd0a_6e46_45ab_7452db08790f -->|calls| 73cddf52_8aeb_3fa6_3361_83a4fd875695
  style 0d54d570_dd0a_6e46_45ab_7452db08790f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/astro/src/core/render/paginate.ts lines 14–99

export function generatePaginateFunction(
	routeMatch: RouteData,
	base: AstroConfig['base'],
	trailingSlash: AstroConfig['trailingSlash'],
): (...args: Parameters<PaginateFunction>) => ReturnType<PaginateFunction> {
	return function paginateUtility(
		data: readonly any[],
		args: PaginateOptions<Props, Params> = {},
	): ReturnType<PaginateFunction> {
		const generate = getRouteGenerator(routeMatch.segments, trailingSlash);
		let { pageSize: _pageSize, params: _params, props: _props } = args;
		const pageSize = _pageSize || 10;
		const paramName = 'page';
		const additionalParams = _params || {};
		const additionalProps = _props || {};
		let includesFirstPageNumber: boolean;
		if (routeMatch.params.includes(`...${paramName}`)) {
			includesFirstPageNumber = false;
		} else if (routeMatch.params.includes(`${paramName}`)) {
			includesFirstPageNumber = true;
		} else {
			throw new AstroError({
				...AstroErrorData.PageNumberParamNotFound,
				message: AstroErrorData.PageNumberParamNotFound.message(paramName),
			});
		}
		const lastPage = Math.max(1, Math.ceil(data.length / pageSize));

		const result = [...Array(lastPage).keys()].map((num) => {
			const pageNum = num + 1;
			const start = pageSize === Infinity ? 0 : (pageNum - 1) * pageSize; // currentPage is 1-indexed
			const end = Math.min(start + pageSize, data.length);
			const params = {
				...additionalParams,
				[paramName]: includesFirstPageNumber || pageNum > 1 ? String(pageNum) : undefined,
			};
			const current = addRouteBase(generate({ ...params }), base);
			const next =
				pageNum === lastPage
					? undefined
					: addRouteBase(generate({ ...params, page: String(pageNum + 1) }), base);
			const prev =
				pageNum === 1
					? undefined
					: addRouteBase(
							generate({
								...params,
								page:
									!includesFirstPageNumber && pageNum - 1 === 1 ? undefined : String(pageNum - 1),
							}),
							base,
						);
			const first =
				pageNum === 1
					? undefined
					: addRouteBase(
							generate({
								...params,
								page: includesFirstPageNumber ? '1' : undefined,
							}),
							base,
						);
			const last =
				pageNum === lastPage
					? undefined
					: addRouteBase(generate({ ...params, page: String(lastPage) }), base);
			return {
				params,
				props: {
					...additionalProps,
					page: {
						data: data.slice(start, end),
						start,
						end: end - 1,
						size: pageSize,
						total: data.length,
						currentPage: pageNum,
						lastPage: lastPage,
						url: { current, next, prev, first, last },
					} as Page,
				},

Domain

Subdomains

Frequently Asked Questions

What does generatePaginateFunction() do?
generatePaginateFunction() is a function in the astro codebase, defined in packages/astro/src/core/render/paginate.ts.
Where is generatePaginateFunction() defined?
generatePaginateFunction() is defined in packages/astro/src/core/render/paginate.ts at line 14.
What does generatePaginateFunction() call?
generatePaginateFunction() calls 1 function(s): addRouteBase.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free