const path = require('path') const ncp = require('ncp').ncp; const filesSource = "./src/files" const imagesSource = "./src/images" const webpack = require('webpack') exports.onPreBootstrap = () => { ncp(filesSource, "./static/files", function (err) { if (err) { return console.error(err); } console.log('Files copied'); }); ncp(imagesSource, "./static/images", function (err) { if (err) { return console.error(err); } console.log('Images copied'); }); } exports.createPages = async ({actions, graphql}) => { const {createPage} = actions; // language=GraphQL const result = await graphql(` { news: allMarkdownRemark( filter: {frontmatter: {content_type: {eq: "post"}, published: {ne: false}}}, sort: {fields: [frontmatter___date], order: DESC} ) { edges{ node{ frontmatter{ title slug date(formatString: "DD.MM.YYYY") } html } } } coursePages: allMarkdownRemark( filter: {frontmatter: {content_type: {eq: "course"}, published: {ne: false}}} ){ edges{ node{ html frontmatter{ path slug } } } } } `) if (result.errors) { throw result.errors; } // Render courses const courseTemplate = path.resolve(`./src/components/templates/courseTemplate.js`); const courses = result.data.coursePages.edges; courses.forEach(({node}) => { createPage({ path: node.frontmatter.path, component: courseTemplate, }) }); // Render news page const newsTemplate = path.resolve(`./src/components/templates/news.js`); const posts = result.data.news.edges; const postsPerPage = 5; const numberOfNewsItems = posts.length; const numberOfNewsPages = Math.ceil(numberOfNewsItems / postsPerPage); for (let pageIndex = 0; pageIndex < numberOfNewsPages; pageIndex++) { const pageNumber = pageIndex + 1; const path = pageIndex === 0 ? '/news' : `/news/${pageNumber}`; const skip = pageIndex * postsPerPage; function getPreviousPageLink() { if (!pageIndex) return null if (pageIndex === 1) return '/news' return `/news/${pageIndex}` } function getNextPageLink() { if (pageNumber < numberOfNewsPages) return `news/${pageNumber + 1}` return null } createPage({ path, component: newsTemplate, context: { limit: postsPerPage, skip, next: getNextPageLink(), prev: getPreviousPageLink(), }, }) } }