Ensure index pages are generated on paginated results (#4426)
* Ensure index pages are generated on paginated results * Changeset
This commit is contained in:
parent
8164fa6f1a
commit
f40065f510
6 changed files with 83 additions and 5 deletions
5
.changeset/odd-elephants-remember.md
Normal file
5
.changeset/odd-elephants-remember.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'astro': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Ensure index pages are generated on paginated results
|
|
@ -207,11 +207,6 @@ async function getPathsForRoute(
|
||||||
paths = result.staticPaths
|
paths = result.staticPaths
|
||||||
.map((staticPath) => staticPath.params && route.generate(staticPath.params))
|
.map((staticPath) => staticPath.params && route.generate(staticPath.params))
|
||||||
.filter((staticPath) => {
|
.filter((staticPath) => {
|
||||||
// Remove empty or undefined paths
|
|
||||||
if (!staticPath) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The path hasn't been built yet, include it
|
// The path hasn't been built yet, include it
|
||||||
if (!builtPaths.has(removeTrailingForwardSlash(staticPath))) {
|
if (!builtPaths.has(removeTrailingForwardSlash(staticPath))) {
|
||||||
return true;
|
return true;
|
||||||
|
|
8
packages/astro/test/fixtures/get-static-paths-pages/package.json
vendored
Normal file
8
packages/astro/test/fixtures/get-static-paths-pages/package.json
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"name": "@test/get-static-paths-pages",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"astro": "workspace:*"
|
||||||
|
}
|
||||||
|
}
|
37
packages/astro/test/fixtures/get-static-paths-pages/src/pages/[...page].astro
vendored
Normal file
37
packages/astro/test/fixtures/get-static-paths-pages/src/pages/[...page].astro
vendored
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
---
|
||||||
|
export async function getStaticPaths({ paginate }) {
|
||||||
|
const astronautPages = [{
|
||||||
|
astronaut: 'Neil Armstrong',
|
||||||
|
}, {
|
||||||
|
astronaut: 'Buzz Aldrin',
|
||||||
|
}, {
|
||||||
|
astronaut: 'Sally Ride',
|
||||||
|
}, {
|
||||||
|
astronaut: 'John Glenn',
|
||||||
|
}];
|
||||||
|
// Generate pages from our array of astronauts, with 2 to a page
|
||||||
|
return paginate(astronautPages, { pageSize: 2 });
|
||||||
|
}
|
||||||
|
|
||||||
|
// All paginated data is passed on the "page" prop
|
||||||
|
const { page } = Astro.props;
|
||||||
|
---
|
||||||
|
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<meta name="generator" content={Astro.generator} />
|
||||||
|
<title>Astro</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>Page {page.currentPage}</h1>
|
||||||
|
<ul>
|
||||||
|
<!--List the array of astronaut info-->
|
||||||
|
{page.data.map(({ astronaut }: { astronaut: string }) => <li>{astronaut}</li>)}
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
27
packages/astro/test/get-static-paths-pages.test.js
Normal file
27
packages/astro/test/get-static-paths-pages.test.js
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
import { expect } from 'chai';
|
||||||
|
import * as cheerio from 'cheerio';
|
||||||
|
import { loadFixture } from './test-utils.js';
|
||||||
|
|
||||||
|
describe('getStaticPaths with trailingSlash: ignore', () => {
|
||||||
|
let fixture;
|
||||||
|
|
||||||
|
before(async () => {
|
||||||
|
fixture = await loadFixture({
|
||||||
|
root: './fixtures/get-static-paths-pages/',
|
||||||
|
site: 'https://mysite.dev/',
|
||||||
|
});
|
||||||
|
await fixture.build();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('includes index page', async () => {
|
||||||
|
let html = await fixture.readFile('/index.html');
|
||||||
|
let $ = cheerio.load(html);
|
||||||
|
expect($('h1').text()).to.equal('Page 1');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('includes paginated page', async () => {
|
||||||
|
let html = await fixture.readFile('/2/index.html');
|
||||||
|
let $ = cheerio.load(html);
|
||||||
|
expect($('h1').text()).to.equal('Page 2');
|
||||||
|
});
|
||||||
|
});
|
|
@ -1534,6 +1534,12 @@ importers:
|
||||||
'@fontsource/montserrat': 4.5.11
|
'@fontsource/montserrat': 4.5.11
|
||||||
astro: link:../../..
|
astro: link:../../..
|
||||||
|
|
||||||
|
packages/astro/test/fixtures/get-static-paths-pages:
|
||||||
|
specifiers:
|
||||||
|
astro: workspace:*
|
||||||
|
dependencies:
|
||||||
|
astro: link:../../..
|
||||||
|
|
||||||
packages/astro/test/fixtures/glob-pages-css:
|
packages/astro/test/fixtures/glob-pages-css:
|
||||||
specifiers:
|
specifiers:
|
||||||
astro: workspace:*
|
astro: workspace:*
|
||||||
|
|
Loading…
Reference in a new issue