mirror of
https://github.com/mastermindzh/rickvanlieshout.com
synced 2025-07-27 12:42:28 +02:00
refactor(starter): upgrade to new version of gatsby
This commit is contained in:
142
internal/gatsby/create-pages.ts
Normal file
142
internal/gatsby/create-pages.ts
Normal file
@@ -0,0 +1,142 @@
|
||||
import { GatsbyNode } from "gatsby";
|
||||
|
||||
import * as constants from "./constants";
|
||||
import * as queries from "./queries";
|
||||
import * as utils from "./utils";
|
||||
|
||||
type CreateWithPagination = (parameters: {
|
||||
group?: string;
|
||||
template: string;
|
||||
total: number;
|
||||
page: number;
|
||||
path: string;
|
||||
}) => void;
|
||||
|
||||
const getPaginationPath = (basePath: string, page: number): string =>
|
||||
[basePath, "page", page].join("/");
|
||||
|
||||
const createPages: GatsbyNode["createPages"] = async ({ graphql, actions }) => {
|
||||
const { createPage } = actions;
|
||||
|
||||
createPage({
|
||||
path: constants.routes.notFoundRoute,
|
||||
component: constants.templates.notFoundTemplate,
|
||||
context: {},
|
||||
});
|
||||
|
||||
createPage({
|
||||
path: constants.routes.tagsListRoute,
|
||||
component: constants.templates.tagsTemplate,
|
||||
context: {},
|
||||
});
|
||||
|
||||
createPage({
|
||||
path: constants.routes.categoriesListRoute,
|
||||
component: constants.templates.categoriesTemplate,
|
||||
context: {},
|
||||
});
|
||||
|
||||
const pages = await queries.pagesQuery(graphql);
|
||||
|
||||
pages.forEach(edge => {
|
||||
const { node } = edge;
|
||||
|
||||
if (node?.frontmatter?.template === "page" && node?.fields?.slug) {
|
||||
createPage({
|
||||
path: node.fields.slug,
|
||||
component: constants.templates.pageTemplate,
|
||||
context: { slug: node.fields.slug },
|
||||
});
|
||||
} else if (node?.frontmatter?.template === "post" && node?.fields?.slug) {
|
||||
createPage({
|
||||
path: node.fields.slug,
|
||||
component: constants.templates.postTemplate,
|
||||
context: { slug: node.fields.slug },
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const createWithPagination: CreateWithPagination = ({
|
||||
group,
|
||||
template,
|
||||
page,
|
||||
path,
|
||||
total,
|
||||
}) => {
|
||||
createPage({
|
||||
component: template,
|
||||
path: page === 0 ? path : getPaginationPath(path, page),
|
||||
context: {
|
||||
group,
|
||||
pagination: {
|
||||
currentPage: page,
|
||||
prevPagePath:
|
||||
page <= 1 ? path : getPaginationPath(path, utils.decrement(page)),
|
||||
nextPagePath: getPaginationPath(path, utils.increment(page)),
|
||||
hasNextPage: page !== utils.decrement(total),
|
||||
hasPrevPage: page !== 0,
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const categories = await queries.categoriesQuery(graphql);
|
||||
const metadata = await queries.metadataQuery(graphql);
|
||||
const postsLimit = metadata?.postsLimit ?? 1;
|
||||
|
||||
categories.forEach(category => {
|
||||
const total = Math.ceil(category.totalCount / postsLimit);
|
||||
const path = utils.concat(
|
||||
constants.routes.categoryRoute,
|
||||
"/",
|
||||
utils.toKebabCase(category.fieldValue),
|
||||
);
|
||||
|
||||
for (let page = 0; page < total; page += 1) {
|
||||
createWithPagination({
|
||||
group: category.fieldValue,
|
||||
template: constants.templates.categoriesTemplate,
|
||||
total,
|
||||
page,
|
||||
path,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const tags = await queries.tagsQuery(graphql);
|
||||
|
||||
tags.forEach(tag => {
|
||||
const path = utils.concat(
|
||||
constants.routes.tagRoute,
|
||||
"/",
|
||||
utils.toKebabCase(tag.fieldValue),
|
||||
);
|
||||
|
||||
const total = Math.ceil(tag.totalCount / postsLimit);
|
||||
|
||||
for (let page = 0; page < total; page += 1) {
|
||||
createWithPagination({
|
||||
group: tag.fieldValue,
|
||||
template: constants.templates.categoriesTemplate,
|
||||
total,
|
||||
page,
|
||||
path,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const path = constants.routes.indexRoute;
|
||||
const posts = await queries.postsQuery(graphql);
|
||||
const total = Math.ceil(posts?.edges?.length ?? 0 / postsLimit);
|
||||
|
||||
for (let page = 0; page < total; page += 1) {
|
||||
createWithPagination({
|
||||
template: constants.templates.indexTemplate,
|
||||
total,
|
||||
page,
|
||||
path,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export { createPages };
|
Reference in New Issue
Block a user